From e95693e012b41db0b69d666d360eac7702623b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Schr=C3=B6der?= Date: Fri, 18 Aug 2023 17:53:44 +0200 Subject: [PATCH] update gitignore --- .gitignore | 4 +- docgen.js | 224 ++++++++++++++---------- routes.json | 1 + static/content-delivery.methods.v1.json | 2 +- static/content-delivery.methods.v2.json | 2 +- static/management.methods.v1.json | 2 +- 6 files changed, 136 insertions(+), 99 deletions(-) create mode 100644 routes.json diff --git a/.gitignore b/.gitignore index 1a999723..7a73f7fc 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,6 @@ sw.* # content /static/*.ordered.* /static/*.menu.* -routes.json +#routes.json .DS_Store -/deploy/views +/deploy/views \ No newline at end of file diff --git a/docgen.js b/docgen.js index 366ffadd..24d5548d 100644 --- a/docgen.js +++ b/docgen.js @@ -1,36 +1,44 @@ -const watch = require('node-watch') -const frontmatter = require('front-matter') -const path = require('path') -const fs = require('fs-extra') -const glob = require('glob') -const config = require('./dg-config') -const marked = require('marked') -const prism = require('prismjs') -const loadTechnologies = require('prismjs/components/') +const watch = require("node-watch"); +const frontmatter = require("front-matter"); +const path = require("path"); +const fs = require("fs-extra"); +const glob = require("glob"); +const config = require("./dg-config"); +const marked = require("marked"); +const prism = require("prismjs"); +const loadTechnologies = require("prismjs/components/"); marked.setOptions({ highlight(code, lang) { - loadTechnologies([lang]) - return prism.highlight(code, prism.languages[lang], lang) - } -}) + loadTechnologies([lang]); + return prism.highlight(code, prism.languages[lang], lang); + }, +}); const args = process.argv - .slice(2) - .map(arg => arg.split('=')) - .reduce((args, [value, key]) => { - args[value] = key - return args - }, {}) + .slice(2) + .map((arg) => arg.split("=")) + .reduce((args, [value, key]) => { + args[value] = key; + return args; + }, {}); const Docgen = { sections: {}, init: () => { - Docgen.generateRoutes() - Docgen.coldstart() + Docgen.generateRoutes(); + Docgen.coldstart(); if (!!args.watch) { - watch(config.contentInputFolder, { filter: /\.md$/, recursive: true }, Docgen.handleFileEvent) - watch(config.contentInputFolder, { filter: /\.json$/, recursive: false }, Docgen.handleMenuEvent) + watch( + config.contentInputFolder, + { filter: /\.md$/, recursive: true }, + Docgen.handleFileEvent + ); + watch( + config.contentInputFolder, + { filter: /\.json$/, recursive: false }, + Docgen.handleMenuEvent + ); } }, @@ -41,27 +49,29 @@ const Docgen = { */ handleFileEvent: (event, contentFilePath) => { switch (event) { - case 'remove': + case "remove": // contentFilePath = /my_absolute_file/content/content-delivery/en/topics/introduction.md // contentPath = content-delivery/en/topics/introduction - const contentPath = contentFilePath.replace(config.contentInputFolder, '').replace(path.parse(contentFilePath).ext, '') + const contentPath = contentFilePath + .replace(config.contentInputFolder, "") + .replace(path.parse(contentFilePath).ext, ""); // [ content-delivery, en, topics, introduction ] - const contentPathParts = contentPath.replace(/\\/g, '/').split('/') + const contentPathParts = contentPath.replace(/\\/g, "/").split("/"); // content-delivery - const origin = contentPathParts.shift() + const origin = contentPathParts.shift(); // en - const lang = contentPathParts.shift() + const lang = contentPathParts.shift(); // topics/introduction - const relativePath = contentPathParts.join('/') + const relativePath = contentPathParts.join("/"); - delete Docgen.sections[origin][lang][relativePath] + delete Docgen.sections[origin][lang][relativePath]; - Docgen.generate(origin, lang) - break + Docgen.generate(origin, lang); + break; default: - const section = Docgen.load(contentFilePath) - Docgen.generate(section.origin, section.lang) - break + const section = Docgen.load(contentFilePath); + Docgen.generate(section.origin, section.lang); + break; } }, @@ -72,22 +82,24 @@ const Docgen = { */ handleMenuEvent: (event, contentFilePath) => { switch (event) { - case 'remove': + case "remove": // ignore - return - break + return; + break; default: // [ content-delivery, en, json ] - const contentPathParts = contentFilePath.replace(config.contentInputFolder, '').split('.') + const contentPathParts = contentFilePath + .replace(config.contentInputFolder, "") + .split("."); // content-delivery - const origin = contentPathParts.shift() + const origin = contentPathParts.shift(); // en - const lang = contentPathParts.shift() + const lang = contentPathParts.shift(); - Docgen.exportMenu(origin, lang) - break + Docgen.exportMenu(origin, lang); + break; } }, @@ -97,14 +109,14 @@ const Docgen = { */ coldstart: () => { glob(`${config.contentInputFolder}**/*.md`, (err, files) => { - if (err) throw err + if (err) throw err; files.forEach((contentFilePath) => { - Docgen.load(contentFilePath) - }) + Docgen.load(contentFilePath); + }); - Docgen.generateAll() - }) + Docgen.generateAll(); + }); }, /** @@ -115,11 +127,13 @@ const Docgen = { // content-delivery, ... Docgen.listFoldersInFolder(config.contentInputFolder).forEach((origin) => { // en, ... - Docgen.listFoldersInFolder(config.contentInputFolder + origin).forEach((lang) => { - // generate sections json from one language and origin - Docgen.generate(origin, lang) - }) - }) + Docgen.listFoldersInFolder(config.contentInputFolder + origin).forEach( + (lang) => { + // generate sections json from one language and origin + Docgen.generate(origin, lang); + } + ); + }); }, /** @@ -129,10 +143,10 @@ const Docgen = { */ generate: (origin, lang) => { // order sections for one language and origin - Docgen.exportSections(Docgen.sections[origin][lang], origin, lang) + Docgen.exportSections(Docgen.sections[origin][lang], origin, lang); // copies menu to static - Docgen.exportMenu(origin, lang) + Docgen.exportMenu(origin, lang); }, /** @@ -141,10 +155,12 @@ const Docgen = { * @param {string} lang - second level of content folder, eg.: en, de, es, it, ... */ exportMenu: (origin, lang) => { - fs.copySync(config.menuInputFile.replace('{origin}', origin).replace('{lang}', lang), config.menuOutputFile.replace('{origin}', origin).replace('{lang}', lang)) + fs.copySync( + config.menuInputFile.replace("{origin}", origin).replace("{lang}", lang), + config.menuOutputFile.replace("{origin}", origin).replace("{lang}", lang) + ); }, - /** * Exports the sections as JSON depending on origin and language * @param {Array} sections - Array of section objects @@ -152,7 +168,12 @@ const Docgen = { * @param {string} lang - second level of content folder, eg.: en, de, es, it, ... */ exportSections: (sections, origin, lang) => { - return fs.writeFileSync(config.sectionsOutputFile.replace('{origin}', origin).replace('{lang}', lang), JSON.stringify(sections)) + return fs.writeFileSync( + config.sectionsOutputFile + .replace("{origin}", origin) + .replace("{lang}", lang), + JSON.stringify(sections) + ); }, /** @@ -161,30 +182,34 @@ const Docgen = { * @returns {Object} section - Object containing parsed markdown and additional information */ load: (contentFilePath) => { - const content = fs.readFileSync(contentFilePath, { encoding: 'utf8' }) + const content = fs.readFileSync(contentFilePath, { encoding: "utf8" }); - const frontmatterContent = frontmatter(content) - const title = marked(frontmatterContent.attributes.title || '').replace('

', '').replace('

\n', '') - const areas = frontmatterContent.body.split(config.splitString) - const methodContent = Docgen.prepareTemplate(marked(areas[0] || '')) - const methodExample = Docgen.prepareTemplate(marked(areas[1] || '')) + const frontmatterContent = frontmatter(content); + const title = marked(frontmatterContent.attributes.title || "") + .replace("

", "") + .replace("

\n", ""); + const areas = frontmatterContent.body.split(config.splitString); + const methodContent = Docgen.prepareTemplate(marked(areas[0] || "")); + const methodExample = Docgen.prepareTemplate(marked(areas[1] || "")); // contentFilePath = /my_absolute_file/content/content-delivery/en/topics/introduction.md // contentPath = content-delivery/en/topics/introduction - const contentPath = contentFilePath.replace(config.contentInputFolder, '').replace(path.parse(contentFilePath).ext, '') + const contentPath = contentFilePath + .replace(config.contentInputFolder, "") + .replace(path.parse(contentFilePath).ext, ""); // [ content-delivery, en, topics, introduction ] - const contentPathParts = contentPath.replace(/\\/g, '/').split('/') + const contentPathParts = contentPath.replace(/\\/g, "/").split("/"); // content-delivery - const origin = contentPathParts.shift() + const origin = contentPathParts.shift(); // en - const lang = contentPathParts.shift() + const lang = contentPathParts.shift(); // topics/introduction - const relativePath = contentPathParts.join('/') + const relativePath = contentPathParts.join("/"); // prepare data for json let section = { @@ -195,40 +220,42 @@ const Docgen = { title: title, // title from frontmatter attributes: frontmatterContent.attributes, // all attributes from frontmatter content: methodContent, // Markdown Content for left part of method section already as HTML - example: methodExample // Markdown Content for right part of method section already as HTML - } + example: methodExample, // Markdown Content for right part of method section already as HTML + }; // check if origin already exists in sections object - if (typeof Docgen.sections[origin] === 'undefined') { - Docgen.sections[origin] = {} + if (typeof Docgen.sections[origin] === "undefined") { + Docgen.sections[origin] = {}; } // check if language already exists in section origin - if (typeof Docgen.sections[origin][lang] === 'undefined') { - Docgen.sections[origin][lang] = {} + if (typeof Docgen.sections[origin][lang] === "undefined") { + Docgen.sections[origin][lang] = {}; } // assign data to origin, lang and relativePath combination - Docgen.sections[origin][lang][relativePath] = section + Docgen.sections[origin][lang][relativePath] = section; - return section + return section; }, /** * Generate and export a routes.json which will be used by Nuxt during "nuxt generate" */ generateRoutes: () => { - const routes = [] + const routes = []; Docgen.listFoldersInFolder(config.contentInputFolder).forEach((origin) => { - routes.push(`/docs/api/${origin}/`) - Docgen.listFoldersInFolder(config.contentInputFolder + origin).forEach((lang) => { - routes.push(`/docs/api/${origin}/${lang}/`) - }) - }) + routes.push(`/docs/api/${origin}/`); + Docgen.listFoldersInFolder(config.contentInputFolder + origin).forEach( + (lang) => { + routes.push(`/docs/api/${origin}/${lang}/`); + } + ); + }); fs.writeFile(config.availableRoutesFile, JSON.stringify(routes), (err) => { - if (err) throw err - }) + if (err) throw err; + }); }, /** @@ -240,11 +267,20 @@ const Docgen = { * @returns {string} html */ prepareTemplate(html) { - html = html.replace(new RegExp('

', 'g'), '') - html = html.replace(new RegExp('', 'g'), '
') - html = html.replace(new RegExp('
', 'g'), '') - return html + html = html.replace( + new RegExp("

", "g"), + "" + ); + html = html.replace( + new RegExp("", "g"), + '
' + ); + html = html.replace(new RegExp("
", "g"), ""); + return html; }, /** @@ -254,9 +290,9 @@ const Docgen = { */ listFoldersInFolder: (folder) => { return fs.readdirSync(folder).filter((file) => { - return fs.statSync(path.join(folder, file)).isDirectory() - }) + return fs.statSync(path.join(folder, file)).isDirectory(); + }); }, -} +}; -Docgen.init() +Docgen.init(); diff --git a/routes.json b/routes.json new file mode 100644 index 00000000..87d9bc79 --- /dev/null +++ b/routes.json @@ -0,0 +1 @@ +["/docs/api/content-delivery/","/docs/api/content-delivery/v1/","/docs/api/content-delivery/v2/","/docs/api/management/","/docs/api/management/v1/"] \ No newline at end of file diff --git a/static/content-delivery.methods.v1.json b/static/content-delivery.methods.v1.json index f6b48eb2..1db7c438 100644 --- a/static/content-delivery.methods.v1.json +++ b/static/content-delivery.methods.v1.json @@ -1 +1 @@ -{"core-resources/datasource-entries/datasource-entries":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v1","origin":"content-delivery","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

A data source is simply a collection of key-value pairs. One specific datasource-entry is a set of two linked attributes: a key, which is a unique identifier for the item and the value.

\n

Key-value pairs can be used for a single-choice, multiple-choice options and as well directly through our API to use them for multi-language labels, categories, or any use-case you might need key-value pairs.

\n","example":"

Endpoint

\n
GET /v1/cdn/datasource_entries/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Datasource Entries","attributes":{"title":"Retrieve Multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects for the datasource and dimension defined, if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
datasourceDatasource group id/slug
dimensionDimension that you defined for your datasource (eg. dimension=en)
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v1/cdn/datasource_entries?datasource=:slug\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasource_entries\": [\n    {\n      \"id\": 22237,\n      \"name\": \"cancel\",\n      \"value\": \"Abbrechen\",\n      \"dimension_value\": null\n    },\n    {\n      \"id\": 22238,\n      \"name\": \"read_more\",\n      \"value\": \"Mehr erfahren\",\n      \"dimension_value\": null\n    }\n  ]\n}\n
\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v1","origin":"content-delivery","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"

You can use the dimension=your_defined_dimension (eg. dimension=en) to receive the dimensions value besides the default value in one datasource entry.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
valueGiven value in default dimension
dimension_valueGiven value in the requested dimension
\n","example":"

Example Object: No specific dimension requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": null\n}\n
\n

Example Object: Specific dimension (en) requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": \"Cancel\"\n}\n
\n"},"core-resources/datasources/datasources":{"contentPath":"content-delivery/v1/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v1","origin":"content-delivery","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A data source is contains the information (slug) to receive a collection of datasource entries. You can use this endpoint to receive all datasources and then call the datasource entries endpoint using the slug of the datasource.

\n","example":"

Endpoint

\n
GET /v1/cdn/datasources/\n
\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"content-delivery/v1/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Datasources","attributes":{"title":"Retrieve Multiple Datasources"},"content":"

Returns an array of datasource objects.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
\n","example":"

Endpoint

\n
GET /v1/cdn/datasources\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasources\": [\n    {\n      \"id\": 1433,\n      \"name\": \"Label\",\n      \"slug\": \"labels\",\n      \"dimensions\": [\n        {\n          \"id\": 126,\n          \"entry_value\": \"en\",\n          \"name\": \"English\"\n        }\n      ]\n    }\n  ]\n}\n
\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"content-delivery/v1/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v1","origin":"content-delivery","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
slugGiven slug
dimensionsArray of dimension objects
\n","example":"

Example Object

\n
{\n  \"id\": 1433,\n  \"name\": \"Label\",\n  \"slug\": \"labels\",\n  \"dimensions\": [\n    {\n      \"id\": 126,\n      \"entry_value\": \"en\",\n      \"name\": \"English\"\n    }\n  ]\n}\n
\n"},"core-resources/links/links":{"contentPath":"content-delivery/v1/core-resources/links/links","path":"core-resources/links/links","lang":"v1","origin":"content-delivery","title":"Links","attributes":{"title":"Links"},"content":"

Links are another representation of your content entries, eg. Stories. With the Links format you can resolve uuids of stories. The links object returned consists of multiple keys, where each key is the uuid of one Story. In the link object you will have access to basic information to identify, load or already display a link to that resource.

\n","example":"

Endpoint

\n
GET /v1/cdn/links/\n
\n"},"core-resources/links/retrieve-multiple-links":{"contentPath":"content-delivery/v1/core-resources/links/retrieve-multiple-links","path":"core-resources/links/retrieve-multiple-links","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Links","attributes":{"title":"Retrieve Multiple Links"},"content":"

Returns the links object containing all links of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all links form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
paginatedSet this to 1 if you want to retrieve the paginated results. With the parameters per_page and page you can define the page size and page number
cvRead more about cache version at Cache invalidation
\n

Attention: This API endpoint is not paged by default. Activate it using paginated=1.

\n","example":"

Endpoint

\n
GET /v1/cdn/links/?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"posts/my-third-post\",\n      \"name\": \"My third post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false\n    },\n    \"a91440ee-fd57-4ee3-83cf-d49d217ae919\": {\n      \"id\": 107349,\n      \"slug\": \"posts/my-second-post\",\n      \"name\": \"My second post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -10,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"is_startpage\": false\n    },\n    \"bfea4895-8a19-4e82-ae1c-1c591dce3094\": {\n      \"id\": 107351,\n      \"slug\": \"posts/my-first-post\",\n      \"name\": \"My first Post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": 0,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"is_startpage\": false\n    }\n  }\n}\n
\n"},"core-resources/links/the-link-object":{"contentPath":"content-delivery/v1/core-resources/links/the-link-object","path":"core-resources/links/the-link-object","lang":"v1","origin":"content-delivery","title":"The Link Object","attributes":{"title":"The Link Object"},"content":"

You can access a draft or published version of your links by providing the version parameter and the correct token type (eg. preview for draft, public for published).

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id of the referenced content entry
slugThe full_slug of the content entry
nameGiven name of the content entry
is_folderIs this content entry a folder (true/false)
parent_idParent folder numeric id
publishedIs this story published (true/false)
positionNumeric position value of the content entry
uuidThe uuid of the content entry
is_startpageIS this story a startpage (true/false)
\n","example":"

Example Object

\n
  ...\n  {\n    \"id\": 107350,\n    \"slug\": \"posts/my-third-post\",\n    \"name\": \"My third post\",\n    \"is_folder\": false,\n    \"parent_id\": 107348,\n    \"published\": true,\n    \"position\": -20,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"is_startpage\": false\n  }\n  ...\n
\n"},"core-resources/links/the-links-object":{"contentPath":"content-delivery/v1/core-resources/links/the-links-object","path":"core-resources/links/the-links-object","lang":"v1","origin":"content-delivery","title":"The Links Object","attributes":{"title":"The Links Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
Multiple uuidOne key per Story, where the key is the uuid of the story
\n","example":"

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"home\",\n      \"name\": \"My Startpage\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false,\n      \"real_path\": \"/\"\n    },\n    ...\n  }\n}\n
\n"},"core-resources/spaces/retrieve-current-space":{"contentPath":"content-delivery/v1/core-resources/spaces/retrieve-current-space","path":"core-resources/spaces/retrieve-current-space","lang":"v1","origin":"content-delivery","title":"Retrieve Current Space","attributes":{"title":"Retrieve Current Space"},"content":"

Returns the current space object, if you're authenticated with a token.

\n
\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
\n","example":"

Endpoint

\n
GET /v1/cdn/spaces/me/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/spaces/spaces":{"contentPath":"content-delivery/v1/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v1","origin":"content-delivery","title":"Spaces","attributes":{"title":"Spaces"},"content":"

This endpoint is mostly useful for client side apps. The response contains space.version which developers can use to call the story API and get the most recent published version.

\n

As Storyblok uses a CDN in front of the API to deliver the response in the fastest way possible, you should append the cv parameter to the story api.

\n

Read more about Cache invalidation

\n","example":"

Endpoint

\n
GET /v1/cdn/spaces/me/\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"content-delivery/v1/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v1","origin":"content-delivery","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

In the content delivery API a space object is mostly used to receive the latest version timestamp to invalidate the cache.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
domainGiven domain
versionCache version
language_codesArray of language codes
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"content-delivery/v1/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Stories","attributes":{"title":"Retrieve Multiple Stories"},"content":"

Returns a list of stories that are in your Storyblok space. The stories are returned in sorted order, depending on the order in your space. You can use the query parameter sort_by with any story object property and first level of your content type to order the response to your needs.

\n

If no entries are found with your filters applied, you will receive an empty array. You will not receive a 404 error message, to check if you have results go for the array length.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all entries form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: starts_with=[default]/de/home).
by_uuidsGet stories by comma separated uuid. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
by_slugsGet stories by comma separated full_slug. You can also specify wildcards with *. Examples: by_slugs=authors/john,authors/max, by_slugs=authors/*,articles/*
excluding_slugsExclude stories specifying comma separated values of full_slug. You can also specify wildcards with *. Examples: excluding_slugs=authors/john,authors/max, excluding_slugs=authors/*
fallback_langDefine a custom fallback language. By default the fallback language is the one defined in the space settings
by_uuids_orderedGet stories by comma separated uuid ordered by the sequence provided in the parameter value. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids_ordered=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
excluding_idsExclude stories by comma separated numeric ids. Example: excluding_ids=101231,9101231
excluding_fieldsExclude specific fields of your content type by comma seperated names. Example: excluding_fields=title,content
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. The limit of resolved relationships per item is 100 Stories. Example: resolve_relations=page.author,page.categories
from_releaseAccess version of specific release by release id
in_workflow_stagesComma separated list of ids. You can get the ids of the workflow stages using the Management API Example: in_workflow_stages=812,186
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. Possible values are all attributes of the entry and all fields of your content type inside content with the dot as seperator. Example: position:desc, content.your_custom_field:asc, content.field_type_xy.field_xy:asc, created_at:desc. If you want to use the sorting provided by the user in the Storyblok admin interface you need to use position:desc. By default all custom fields are sorted as strings. To sort custom fields with numeric values you need to provide the type information (float or int) like following: content.YOUR_FIELD:asc:float or content.YOUR_FIELD:asc:int
search_termSearch content items by full text.
first_published_at_gtAfter a specific first published date (Format: 2018-03-03 10:00)
first_published_at_ltBefore a specific first published date (Format: 2018-03-03 10:00)
published_at_gtAfter a specific published date (Format: 2018-03-03 10:00)
published_at_ltBefore a specific published date (Format: 2018-03-03 10:00)
filter_queryFilter by specific attribute(s) of your content type - it will not work for default Story properties. The filter query parameter needs to contain the query operation key. Separate the values by a comma , to filter by multiple values.

filter_query[ATTRIBUTE][OPERATION]=VALUE,...

Following filter operations OPERATION are available:
is - Checks for empty or not empty values and booleans. For strings the value can be empty or not_empty. For arrays use empty_array or not_empty_array. For booleans use true or false.
in - Exact match of one of the provided values
not_in - Does not contain the given value
like - Does contain the given value with a wildcard * search
not_like - Does not contain the given value with a wildcard * search
all_in_array - Contains all of the values of an array value
in_array - Contains any of the values of an array value
gt_date - Greater than date (Format: 2018-03-03 10:00)
lt_date - Less than date
gt_int - Greater than integer value
lt_int - Less than integer value.
gt_float - Greater than float value
lt_float - Less than float value.

Checkout the filter_query Examples we put together for you with most common use-cases.
is_startpageFilter by folder startpage. Use is_startpage=1 to only return startpages and is_startpage=0 to exclude startpages from the result.
with_tagFilter by specific tag(s). Use comma to filter by multiple tags. Examples: with_tag=featured,home
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 100. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v1/cdn/stories?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"stories\": [\n    {\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"name\": \"My third post\",\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-07T01:31:36.134Z\",\n      \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n      \"content\": {\n        \"component\": \"post\",\n        // fields you define yourself are here\n        // those below we defined for the examples\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"description\": \"Description of the third\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ]\n      },\n      \"position\": -20,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    {\n      \"id\": 107349,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"name\": \"My second post\",\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      \"created_at\": \"2018-04-24T11:57:29.283Z\",\n      \"published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"first_published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"content\": {\n        \"component\": \"post\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"c47be9f0-47c3-4315-a95a-550f0c560eb5\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do...\",\n        \"categories\": [\n          \"5db2e929-6d3d-4564-982e-fa8513b0e5de\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"sort_by_date\": null,\n      \"position\": -10,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"854c3d1f-5d7f-4785-92ee-620a7c6ca7ee\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    ...\n  ]\n}\n
\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"content-delivery/v1/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v1","origin":"content-delivery","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a story object for the full_slug, id or uuid if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Path ParameterDescription
:full_slugUse the full_slug of your content entry to retrieve it. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: api.storyblok.com/v1/cdn/stories/[default]/de/home).
:idUse the numeric id of your content entry to retrieve it
:uuidYou can use the uuid property to query for your content entry. To tell our API to use the uuid instead of the id append the query param find_by=uuid
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
find_byAdded if you want to query by uuid instead of using the numeric id
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. The limit of resolved relationships is 100 Stories. You can't use this filter to resolve relations of resolved entries (eg. nested relationship resolving). Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
from_releaseAccess version of specific release by release id
cvRead more about cache version at Cache invalidation
languageAdd the language i18n code as query parameter to receive a localized version when using a numeric id or uuid as path parameter
fallback_langDefine a custom fallback language (i18n code). By default the fallback language is the one defined in the space settings
\n","example":"

Endpoint

\n
GET /v1/cdn/stories/(:full_slug|:id|:uuid)\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-07T01:31:36.134Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n    \"content\": {\n      \"component\": \"post\",\n      // fields you define yourself are here\n      // those below we defined for the examples\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    },\n    \"position\": -20,\n    \"tag_list\": [ ],\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n    \"alternates\": [ ],\n    \"translated_slugs\": [ ],\n    \"release_id\": null,\n    \"lang\": \"default\"\n  }\n}\n
\n"},"core-resources/stories/stories":{"contentPath":"content-delivery/v1/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v1","origin":"content-delivery","title":"Stories","attributes":{"title":"Stories"},"content":"

Storyblok’s most used content delivery endpoint is trimmed for low latency and optimum availability.

\n

To achieve low latencies all over the world, Storyblok uses a CDN in front of the API. The official Storyblok SDKs already take care of cache invalidation, so you don’t have to. But if you are doing the API calls on your own, you will need to append the cv (cache version) parameter to the story API in order to get the latest version of the content. Have a look at Cache Invalidations for workflow descriptions.

\n","example":"

Endpoint

\n
GET /v1/cdn/stories/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. With the query parameter version you can switch between draft and published. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/stories/the-story-object":{"contentPath":"content-delivery/v1/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v1","origin":"content-delivery","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. To learn how to build a basic blog you can checkout our content building tutorial.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugGthe slug / path you give this story
full_slugCombined parent folder and current slug
default_full_slugContains the full slug of the default language if the app Translatable Slugs is installed
created_atCreation date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
release_idId of your content stage (default: null)
langDefined language (default: "default")
contentYour defined custom content body object
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
parent_idParent folder id
group_idAlternates group id (uuid string)
alternatesArray of alternate objects
translated_slugsArray of translated slugs. Only gets included if the translatable slug app is installed
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"default_full_slug\": null,\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"release_id\": null,\n    \"lang\": \"default\",\n    \"content\": {\n      \"component\": \"your_content_type\",\n      // and fields you define yourself are in here\n    },\n    \"position\": -20,\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"4add5c88-8d9c-4480-bfcf-63016c4c463e\",\n    \"translated_slugs\": [\n      {\n        \"path\": \"mein-beitrag\",\n        \"name\": \"Mein Beitrag\",\n        \"lang\": \"de\"\n      }\n      // only gets included if the translatable slug app is installed\n    ],\n    \"alternates\": [\n      {\n        \"id\": 107381,\n        \"name\": \"Mein dritter Beitrag\",\n        \"slug\": \"my-post-in-another-folder\",\n        \"full_slug\": \"de/my-post-in-another-folder\",\n        \"is_folder\": false,\n        \"parent_id\": 107356\n      }\n    ]\n  }\n}\n
\n"},"core-resources/tags/retrieve-all-tags":{"contentPath":"content-delivery/v1/core-resources/tags/retrieve-all-tags","path":"core-resources/tags/retrieve-all-tags","lang":"v1","origin":"content-delivery","title":"Retrieve All Tags","attributes":{"title":"Retrieve All Tags"},"content":"

Returns an array of tag objects of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all tags form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
\n","example":"

Endpoint

\n
GET /v1/cdn/tags/?starts_with=posts/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"tags\": [\n    {\n      \"name\": \"red\",\n      \"taggings_count\": 14\n    },\n    {\n      \"name\": \"spicy\",\n      \"taggings_count\": 3\n    }\n  ]\n}\n
\n"},"core-resources/tags/tags":{"contentPath":"content-delivery/v1/core-resources/tags/tags","path":"core-resources/tags/tags","lang":"v1","origin":"content-delivery","title":"Tags","attributes":{"title":"Tags"},"content":"

Each tag is a string value that can be reused accross Stories to create features like word clouds, basic taggings for custom workflows, or similar usecases.

\n","example":"

Endpoint

\n
GET /v1/cdn/tags/\n
\n"},"core-resources/tags/the-tag-object":{"contentPath":"content-delivery/v1/core-resources/tags/the-tag-object","path":"core-resources/tags/the-tag-object","lang":"v1","origin":"content-delivery","title":"The Tag Object","attributes":{"title":"The Tag Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
namethe actual tag (value)
taggings_countCount of how many times this tag is currenlty in use accross all stories
\n","example":"

Example Object

\n
{\n  \"name\": \"red\",\n  \"taggings_count\": 1\n}\n
\n"},"examples/filtering/entries-between-two-numbers":{"contentPath":"content-delivery/v1/examples/filtering/entries-between-two-numbers","path":"examples/filtering/entries-between-two-numbers","lang":"v1","origin":"content-delivery","title":"Entries between two numbers","attributes":{"title":"Entries between two numbers"},"content":"

A common filter needed for a shop content structure implementation would be a simple price range products filter. In the examples above you already saw how to write one filter_query to receive all products that are greater or lower a specific price tag; In this example we will combine the gt-float and lt-float filters to get all products between a price range.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filter-entries-by-boolean-value":{"contentPath":"content-delivery/v1/examples/filtering/filter-entries-by-boolean-value","path":"examples/filtering/filter-entries-by-boolean-value","lang":"v1","origin":"content-delivery","title":"Filter entries by boolean value","attributes":{"title":"Filter entries by boolean value"},"content":"

Imagine you want to allow your editors to have featured products with a boolean flag in your content schema. To filter all products to only receive the featured once you can utilize the filter_query operation in to check for an exact value.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filters":{"contentPath":"content-delivery/v1/examples/filtering/filters","path":"examples/filtering/filters","lang":"v1","origin":"content-delivery","title":"Filter Examples","attributes":{"title":"Filter Examples"},"content":"

We've provided some common request example that combine multiple and different filter_querys with sorting that you might need during your implementation.

\n","example":""},"examples/ordering/order":{"contentPath":"content-delivery/v1/examples/ordering/order","path":"examples/ordering/order","lang":"v1","origin":"content-delivery","title":"Ordering / Sorting","attributes":{"title":"Ordering / Sorting"},"content":"

We've provided some common request examples that make use of the sort_by query parameter.

\n","example":""},"examples/ordering/sort-by-admin-interface":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-admin-interface","path":"examples/ordering/sort-by-admin-interface","lang":"v1","origin":"content-delivery","title":"Sort by admin interface","attributes":{"title":"Sort by admin interface"},"content":"

Some of you might like to define the order of your entries in Storyblok, utilizing the move functionality. To receive the order just like in Storyblok you can make use of the position property.

\n

Attention: The position property is only sorted within one folder

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // sorted by this property\n      \"position\": -10,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-content-attribute":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-content-attribute","path":"examples/ordering/sort-by-content-attribute","lang":"v1","origin":"content-delivery","title":"Sort by content attribute","attributes":{"title":"Sort by content attribute"},"content":"

To sort by a field that you have defined in your content schema of your content type, you're able to use the sort_by parameter as shown below.

\n
\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=content.name:ascSort by the content type attribute name
\n

As you can see it works just like with the default properties of a story object but prepending the context content. before the field.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        // sorted by this property\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-story-property":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-story-property","path":"examples/ordering/sort-by-story-property","lang":"v1","origin":"content-delivery","title":"Sort by story object property","attributes":{"title":"Sort by story object property"},"content":"

You can sort your content entries by custom and predefined property using the sort_by parameter and field:asc or field:desc as value.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=name:ascSort by the Story object property name
sort_by=position:descSort by the Story object property position (same as in the admin interface)
sort_by=first_published_at:descSort by the Story object property first_published_at
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      // sorted by this property\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/starts-with/draft-entries-in-folder":{"contentPath":"content-delivery/v1/examples/starts-with/draft-entries-in-folder","path":"examples/starts-with/draft-entries-in-folder","lang":"v1","origin":"content-delivery","title":"Draft version of entries in folder xx","attributes":{"title":"Draft version of entries in folder xx"},"content":"

You can use the version param combined with the starts_with param to load entries that are in a specific folder.

\n
\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?version=draft&starts_with=products/all entries in folder products
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-in-folder":{"contentPath":"content-delivery/v1/examples/starts-with/entries-in-folder","path":"examples/starts-with/entries-in-folder","lang":"v1","origin":"content-delivery","title":"Entries in folder xx","attributes":{"title":"Entries in folder xx"},"content":"

You can use the starts_with parameter to load entries that are in a specific folder. This is useful if you create your articles in an articles/ folder, products/ in a products folder.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all entries in folder products
?starts_with=de/products/all entries with de values in translatable fields in folder products
?starts_with=articles/all entries in folder articles
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-of-language-xx":{"contentPath":"content-delivery/v1/examples/starts-with/entries-of-language-xx","path":"examples/starts-with/entries-of-language-xx","lang":"v1","origin":"content-delivery","title":"Entries of language xx","attributes":{"title":"Entries of language xx"},"content":"

The field type translation will map the available language keys with the folder paths. So for example if you have a folder Products with multiple products and those products do have translatable fields you are able to load those translated version with prepending the language key infront of the slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all products of default language
?starts_with=de/products/all products with de/ values in translatable fields
?starts_with=de/*all entries with de/ values in translatable fields without particular folder
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/starts-with":{"contentPath":"content-delivery/v1/examples/starts-with/starts-with","path":"examples/starts-with/starts-with","lang":"v1","origin":"content-delivery","title":"Starts With Examples","attributes":{"title":"Starts With Examples"},"content":"

We've provided some common request example that make use of the starts_with query parameter.

\n","example":""},"examples/useful/load-draft-version":{"contentPath":"content-delivery/v1/examples/useful/load-draft-version","path":"examples/useful/load-draft-version","lang":"v1","origin":"content-delivery","title":"Load draft version","attributes":{"title":"Load draft version"},"content":"

Appending the query paramter version with the value draft (eg. version=draft) and using the preview token as token will allow you to access the draft versions of content entries. You can perform all kind of queries, sorting and filterings with either published or draft versions.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/load-latest-cache-version-timestamp":{"contentPath":"content-delivery/v1/examples/useful/load-latest-cache-version-timestamp","path":"examples/useful/load-latest-cache-version-timestamp","lang":"v1","origin":"content-delivery","title":"Load latest CV timestamp","attributes":{"title":"Load latest CV timestamp"},"content":"

With the cache invalidation provided by Storyblok utilizing the cv (cache version) query paramter you're able to always hit the latest version of your content. This can either be a server side generated timestmap that receives an update if our webhook triggers a publish event or you fetch it every time you boot up your application.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Blog\",\n    \"domain\": \"https://www.storyblok.com/\",\n    // version timestamp to use for further requests\n    \"version\": 1544466448\n  }\n}\n
\n"},"examples/useful/load-without-startpage":{"contentPath":"content-delivery/v1/examples/useful/load-without-startpage","path":"examples/useful/load-without-startpage","lang":"v1","origin":"content-delivery","title":"Load without startpage","attributes":{"title":"Load without startpage"},"content":"

Appending the query paramter is_startpage with the value false (eg. is_startpage=false) to retrieve only entries of a folder and skipping the startpage you've defined in that folder.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // all stories will have the is_startpage flag set to false\n      \"is_startpage\": false,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/localized-by-uuid":{"contentPath":"content-delivery/v1/examples/useful/localized-by-uuid","path":"examples/useful/localized-by-uuid","lang":"v1","origin":"content-delivery","title":"Load story localized by uuid","attributes":{"title":"Load story localized by uuid"},"content":"

Appending the query parameter language in combination with find_by=uuid allows you to load localized versions of your entries without knowing its slug. If you know the slug of your content entry you can simply prepend the language code, eg. /posts/my-first-post would be /de/posts/my-first-post. As you only have a UUID by hand, and you do know the slug you can use the language parameter instead.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"story\": {\n    \"name\": \"My third post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-10T13:39:31.999Z\",\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"lang\": \"de\",\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"Mein zweiter Titel\",\n      \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"component\": \"post\",\n      // resolved relationship by including the story \n      // object of the reference entry\n      \"categories\": [\n        ...\n      ],\n      \"description\": \"Beschreibung vom zweiten Beitrag\"\n    },\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    ...\n  }\n}\n
\n"},"examples/useful/resolve-relationships":{"contentPath":"content-delivery/v1/examples/useful/resolve-relationships","path":"examples/useful/resolve-relationships","lang":"v1","origin":"content-delivery","title":"Load with resolved relationships","attributes":{"title":"Load with resolved relationships"},"content":"

Resolve relationships to other Stories (in the first level of nesting) of a multi-option or single-option field-type. Provide the field key(s) as comma separated string to resolve specific fields.

\n

Example: resolve_relations=categories.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // resolved relationship by including the story \n        // object of the reference entry\n        \"categories\": [\n          {\n            \"name\": \"Design\",\n            \"created_at\": \"2018-04-24T11:59:26.578Z\",\n            \"published_at\": \"2018-04-24T12:07:46.278Z\",\n            \"id\": 107357,\n            \"uuid\": \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n            \"content\": {\n              \"_uid\": \"6fc4a8e1-52a1-46b3-85b2-a1a93452c97a\",\n              \"name\": \"Design\",\n              \"image\": \"//a.storyblok.com/f/44203/1177x841/8c69867d6e/undraw_lighthouse2_1ebd.png\",\n              \"component\": \"category\"\n            },\n            \"slug\": \"design\",\n            \"full_slug\": \"categories/design\",\n            ...\n          }\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    { ... }\n  ]\n}\n
\n"},"examples/useful/useful":{"contentPath":"content-delivery/v1/examples/useful/useful","path":"examples/useful/useful","lang":"v1","origin":"content-delivery","title":"Useful","attributes":{"title":"Useful"},"content":"

Other request examples that might be useful, without specific category like ordering/sorting, starts with or filtering.

\n","example":""},"filter-queries/operation-all-in-array":{"contentPath":"content-delivery/v1/filter-queries/operation-all-in-array","path":"filter-queries/operation-all-in-array","lang":"v1","origin":"content-delivery","title":"Operation: all_in_array","attributes":{"title":"Operation: `all_in_array`","sidebarTitle":"all_in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains all of the values provided. As soon as all of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: all_in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][all_in_array]=sportsid,esportsidall entries of category sportsid and esportsid in field categories
filter_query[tags][all_in_array]=food,healthall entries of category food and health
filter_query[related_products][all_in_array]=product-one-id,product-two-idall entries with product-one and product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because all_in_array matches if ALL ids are present.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-date":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-date","path":"filter-queries/operation-gt-date","lang":"v1","origin":"content-delivery","title":"Operation: gt_date","attributes":{"title":"Operation: `gt_date`","sidebarTitle":"gt_date"},"content":"

Think of it at AFTER a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are greater (eg. later) than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_date

\n

You can create custom dates that allow you to schedule posts, launch products and with this query see all entries that are scheduled after a specific date, schedule christmas teaser. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query those specific entries.

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][gt_date]=2019-12-24 09:00all entries with date field schedule after "2019-12-24 09:00"
\n","example":"

Example Request (All posts scheduled AFTER now)

\n\n

Example Response (All posts scheduled AFTER now)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 107351,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt_date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2019-12-24 10:00\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-gt-float":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-float","path":"filter-queries/operation-gt-float","lang":"v1","origin":"content-delivery","title":"Operation: gt_float","attributes":{"title":"Operation: `gt_float`","sidebarTitle":"gt_float"},"content":"

Allows you to filter fields of type float, string (float value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_float]=100.50all entries with price field greater than 100.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"17000000.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"27.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-int":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-int","path":"filter-queries/operation-gt-int","lang":"v1","origin":"content-delivery","title":"Operation: gt_int","attributes":{"title":"Operation: `gt_int`","sidebarTitle":"gt_int"},"content":"

Allows you to filter fields of type number, string (number value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_int]=100all entries with price field greater than 100
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"1700000000\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in-array":{"contentPath":"content-delivery/v1/filter-queries/operation-in-array","path":"filter-queries/operation-in-array","lang":"v1","origin":"content-delivery","title":"Operation: in_array","attributes":{"title":"Operation: `in_array`","sidebarTitle":"in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains one of the values provided. As soon as one of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][in_array]=sportsid,esportsidall entries of category sportsid or esportsid in field categories
filter_query[tags][in_array]=food,healthall entries of category food or health
filter_query[related_products][in_array]=product-one-id,product-two-idall entries with product-one or product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },{\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\\nquis nostrud exercitation.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in":{"contentPath":"content-delivery/v1/filter-queries/operation-in","path":"filter-queries/operation-in","lang":"v1","origin":"content-delivery","title":"Operation: in","attributes":{"title":"Operation: `in`","sidebarTitle":"in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is equal to one of the values provided.

\n

Use-cases: in

\n

Get all content entries that is refered to another in a 1:N relationship or if you want to get all entries with a specific value in one of it's fields.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][in]=authorId&starts_with=posts/all Posts by one Author
filter_query[customer][in]=customerId&starts_with=orders/&all Orders by one Customer
filter_query[post][in]=postId&starts_with=comments/all Comments by one Post
filter_query[seo.title][in]=Titleall entries with field seo and a nested field title and the value Title
filter_query[component][in]=postall entries of one Content Type
filter_query[component][in]=post,newsall entries of Content Type "post" or "news"
filter_query[featured][in]=trueall entries where the field featured is true
\n","example":"

Example Request (all Posts by one Author)

\n\n

Example Response (all Posts by one Author)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-is":{"contentPath":"content-delivery/v1/filter-queries/operation-is","path":"filter-queries/operation-is","lang":"v1","origin":"content-delivery","title":"Operation: is","attributes":{"title":"Operation: `is`","sidebarTitle":"is"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) is of a specific type.

\n

Use-cases: is

\n

Get all content entries that have a specific type of value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[authors][is]=empty_arrayall posts that have no authors
filter_query[orders][is]=not_empty_array&starts_with=customers/&all customers by that have orders
filter_query[message][is]=empty&starts_with=comments/all comments with an empty message
filter_query[my_plugin.show_in][is]=trueall entries with field my_plugin and a nested field show_in that have the value true
filter_query[enabled][is]=falseall entries where enabled is false
filter_query[image][is]=nullall entries where the image attribute is null
filter_query[featured][is]=not_nullall entries where the featured attribute is null
\n","example":"

Example Request (all posts with a schedule date)

\n\n

Example Response (all posts with a schedule date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-like":{"contentPath":"content-delivery/v1/filter-queries/operation-like","path":"filter-queries/operation-like","lang":"v1","origin":"content-delivery","title":"Operation: like","attributes":{"title":"Operation: `like`","sidebarTitle":"like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "like" the value provided.

\n

Use-cases: like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][like]=john*all entries starting with the name "John"
filter_query[name][like]=*john*all entries containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"John Mustermann\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"John Mustermann\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"john-mustermann\",\n      \"full_slug\": \"authors/john-mustermann\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-date":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-date","path":"filter-queries/operation-lt-date","lang":"v1","origin":"content-delivery","title":"Operation: lt_date","attributes":{"title":"Operation: `lt_date`","sidebarTitle":"lt_date"},"content":"

Think of it at BEFORE a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are lower than (eg. before) the provided date.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_date

\n

You can create custom dates that allow you to schedule posts, launch products, schedule christmas teaser and more. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query all entries before a specific date (eg. today)

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][lt_date]=2018-12-24 09:00all entries with date field schedule before "2018-12-24 09:00"
\n","example":"

Example Request (All posts scheduled BEFORE date)

\n\n

Example Response (All posts scheduled BEFORE date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My second Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 123122,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my second post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt-date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2018-04-22 14:32\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-lt-float":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-float","path":"filter-queries/operation-lt-float","lang":"v1","origin":"content-delivery","title":"Operation: lt_float","attributes":{"title":"Operation: `lt_float`","sidebarTitle":"lt_float"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_float]=100.50all entries with price field lower than 100.50
filter_query[price][lt_float]=99.50all entries with price field lower than 99.50
filter_query[price][lt_float]=1999.50all entries with price field lower than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"74.99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-int":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-int","path":"filter-queries/operation-lt-int","lang":"v1","origin":"content-delivery","title":"Operation: lt_int","attributes":{"title":"Operation: `lt_int`","sidebarTitle":"lt_int"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_int]=100all entries with price field lower than 100
filter_query[price][lt_int]=99all entries with price field lower than 99
filter_query[price][lt_int]=1999all entries with price field lower than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"24\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-in":{"contentPath":"content-delivery/v1/filter-queries/operation-not-in","path":"filter-queries/operation-not-in","lang":"v1","origin":"content-delivery","title":"Operation: not_in","attributes":{"title":"Operation: `not_in`","sidebarTitle":"not_in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) does not have a value that is equal to one of the values provided.

\n

Use-cases: not_in

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][not_in]=authorId&starts_with=posts/all Posts except one Author
filter_query[seo.title][not_in]=Titleall entries with field seo and a nested field title and not the value Title
filter_query[component][not_in]=postall entries without one Content Type
filter_query[component][not_in]=post,newsall entries that are not of Content Type "post" or "news"
filter_query[featured][not_in]=trueall entries where the field featured is not true
\n","example":"

Example Request (all Posts without specific Author)

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first post\",\n      \"id\": 107349,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"33f4fb1b-5243-4bf2-246e-7d5753607421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-like":{"contentPath":"content-delivery/v1/filter-queries/operation-not-like","path":"filter-queries/operation-not-like","lang":"v1","origin":"content-delivery","title":"Operation: not_like","attributes":{"title":"Operation: `not_like`","sidebarTitle":"not_like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "not_like" the value provided.

\n

Use-cases: not_like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][not_like]=john*all entries not starting with the name "John"
filter_query[name][not_like]=*john*all entries not containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Mister Master\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"Mister Master\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"mister-master\",\n      \"full_slug\": \"authors/mister-master\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/overview":{"contentPath":"content-delivery/v1/filter-queries/overview","path":"filter-queries/overview","lang":"v1","origin":"content-delivery","title":"Filter Queries","attributes":{"title":"Filter Queries","sidebarTitle":"Operations","showChildren":true},"content":"

With the filter_query you're able to filter by specific attribute(s) of your stories. The filter_query parameter accepts an attribute and an operation key.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationDescription
inMatches exactly one value
not_inMatches all without the given value
likeMatches exactly one value with a wildcard search using * (Example: "john*")
not_likeMatches all without the given value
in_arrayMatches any value of given array
all_in_arrayMust match all values of given array
gt_dateGreater than date (Format: YYYY-mm-dd HH:MM)
lt_dateLess than date (Format: 2018-03-03 10:00)
gt_intGreater than integer value
lt_intLess than integer value
gt_floatGreater than float value
lt_floatLess than float value
\n

You can find one example for each filter query in the description page for each operation, and examples that combine multiple filters in the filter examples section.

\n","example":"

Endpoint

\n
GET /v1/cdn/stories/?filter_query[ATTRIBUTE][OPERATION]=VALUE,...\n
\n

Example Story Object

\n

We will demonstrate use-cases and example on a simple blog content structure as shown below. You're not limited by the fields in this example. Every field in the content field can be used as the ATTRIBUTE key in your filter_query.

\n
{\n  \"story\": {\n    // default story object fields\n    \"content\": {\n      \"component\": \"post\",\n        // attributes you define yoruself are located here\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    }\n  }\n}\n
\n"},"topics/authentication":{"contentPath":"content-delivery/v1/topics/authentication","path":"topics/authentication","lang":"v1","origin":"content-delivery","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your access token in API requests. You can manage your API tokens in the Dashboard of each space. In your Space Dashboard at app.storyblok.com you will be able to generate two types of tokens

\n\n

Public and Preview tokens are read only and do not allow you or others to write or delete entries in your space. The public token can be published. All tokens can be revoked at any point of time, you are able to create multiple tokens of the same type to grant access for specific use-cases. For CRUD operations you can have a look at the Management API documentation.

\n

If you're using the Content Staging (eg. Release and Schedule) feature you can also create Public and Preview tokens for each staging environment.

\n","example":"

Example Request

\n
\n\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// init with access token\nconst Storyblok = new StoryblokClient({\n  accessToken: 'wANpEQEsMYGOwLxwXQ76Ggtt',\n  cache: {\n    clear: 'auto',\n    type: 'memory'\n  }\n})\n
\n

or use directly as parameter

\n
\n\n\n

To perform a GET request with your token append the query parameter token with your preview or public token as shown in the example above.

\n"},"topics/cache-invalidation":{"contentPath":"content-delivery/v1/topics/cache-invalidation","path":"topics/cache-invalidation","lang":"v1","origin":"content-delivery","title":"Cache Invalidation","attributes":{"title":"Cache Invalidation"},"content":"

Storyblok uses a CDN in front of the API to deliver your content in the fastest way possible. If you're using the Storyblok Content Delivery API directly in your client application it is recommended to use a backend version number or the versions parameter provided by the /v1/cdn/spaces/me?token=access_token call.

\n

Recommended: Client Side

\n
    \n
  1. Request the resource /v1/cdn/spaces/me to get the space.version property
  2. \n
  3. Append the space.version to all your subsequent calls of the endpoint /v1/cdn/stories
  4. \n
\n

Recommended: SSG / Server Side

\n
    \n
  1. Generate a timestamp (once on a server, not on every request/client load)
  2. \n
  3. Append your timestamp to all your subsequent calls of the endpoint /v1/cdn/stories
  4. \n
\n

Also server side applications application can use the space.version option. Storing the version string to a file and reusing this timestamp will guarantee you the latest version with optimal speed. You can either use the Storyblok Webhooks or Storyblok JavaScript Events to update your version file.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Space A\",\n    \"domain\": \"http://example.storyblok.com\",\n    \"version\": 1541863983\n  }\n}\n
\n

Use the timestamp as cv:

\n\n"},"topics/errors":{"contentPath":"content-delivery/v1/topics/errors","path":"topics/errors","lang":"v1","origin":"content-delivery","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"content-delivery/v1/topics/introduction","path":"topics/introduction","lang":"v1","origin":"content-delivery","title":"Content Delivery API Reference","attributes":{"title":"Content Delivery API Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Content Delivery API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code, tokens found on the dashboard however are read only and therefore fine to use in a client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

To make the API as explorable as possible, accounts have draft versions and published version of API tokens. To access the draft version of your content you can use the preview token, and for receiving published content you can use the public token. The preview token is able to also load the published content. To switch between those versions you can append the query parameter version=draft/published and using the appropriate token to perform a draft or published version call.

\n

The requests in the right sidebar are designed to work as is. The sample requests are performed using a preview API token of a test space with demo content.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Content Delivery API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL

\n
https://api.storyblok.com\n
\n"},"topics/pagination":{"contentPath":"content-delivery/v1/topics/pagination","path":"topics/pagination","lang":"v1","origin":"content-delivery","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"content-delivery/v1/topics/rate-limit","path":"topics/rate-limit","lang":"v1","origin":"content-delivery","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The content delivery api has a rate limit of 50 requests per second for uncached request. The limit decreases if you use a higher page size than 25.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Type of requestRate Limit
Cached requests from the CDN> 1000 per second
Single content item, datasources, ...50 per second
Listings with page size below and with 2550 per second
Listings with page size between 25 and 5015 per second
Listings with page size between 50 and 7510 per second
Listings with page size between 75 and 1005 per second
\n"}} \ No newline at end of file +{"core-resources/datasource-entries/datasource-entries":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v1","origin":"content-delivery","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

A data source is simply a collection of key-value pairs. One specific datasource-entry is a set of two linked attributes: a key, which is a unique identifier for the item and the value.

\n

Key-value pairs can be used for a single-choice, multiple-choice options and as well directly through our API to use them for multi-language labels, categories, or any use-case you might need key-value pairs.

\n","example":"

Endpoint

\n
GET /v1/cdn/datasource_entries/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Datasource Entries","attributes":{"title":"Retrieve Multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects for the datasource and dimension defined, if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
datasourceDatasource group id/slug
dimensionDimension that you defined for your datasource (eg. dimension=en)
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v1/cdn/datasource_entries?datasource=:slug\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasource_entries\": [\n    {\n      \"id\": 22237,\n      \"name\": \"cancel\",\n      \"value\": \"Abbrechen\",\n      \"dimension_value\": null\n    },\n    {\n      \"id\": 22238,\n      \"name\": \"read_more\",\n      \"value\": \"Mehr erfahren\",\n      \"dimension_value\": null\n    }\n  ]\n}\n
\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"content-delivery/v1/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v1","origin":"content-delivery","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"

You can use the dimension=your_defined_dimension (eg. dimension=en) to receive the dimensions value besides the default value in one datasource entry.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
valueGiven value in default dimension
dimension_valueGiven value in the requested dimension
\n","example":"

Example Object: No specific dimension requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": null\n}\n
\n

Example Object: Specific dimension (en) requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": \"Cancel\"\n}\n
\n"},"core-resources/datasources/datasources":{"contentPath":"content-delivery/v1/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v1","origin":"content-delivery","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A data source contains the information (slug) to receive a collection of datasource entries. You can use this endpoint to receive all datasources and then call the datasource entries endpoint using the slug of the datasource.

\n","example":"

Endpoint

\n
GET /v1/cdn/datasources/\n
\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"content-delivery/v1/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Datasources","attributes":{"title":"Retrieve Multiple Datasources"},"content":"

Returns an array of datasource objects.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
\n","example":"

Endpoint

\n
GET /v1/cdn/datasources\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasources\": [\n    {\n      \"id\": 1433,\n      \"name\": \"Label\",\n      \"slug\": \"labels\",\n      \"dimensions\": [\n        {\n          \"id\": 126,\n          \"entry_value\": \"en\",\n          \"name\": \"English\"\n        }\n      ]\n    }\n  ]\n}\n
\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"content-delivery/v1/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v1","origin":"content-delivery","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
slugGiven slug
dimensionsArray of dimension objects
\n","example":"

Example Object

\n
{\n  \"id\": 1433,\n  \"name\": \"Label\",\n  \"slug\": \"labels\",\n  \"dimensions\": [\n    {\n      \"id\": 126,\n      \"entry_value\": \"en\",\n      \"name\": \"English\"\n    }\n  ]\n}\n
\n"},"core-resources/links/links":{"contentPath":"content-delivery/v1/core-resources/links/links","path":"core-resources/links/links","lang":"v1","origin":"content-delivery","title":"Links","attributes":{"title":"Links"},"content":"

Links are another representation of your content entries, eg. Stories. With the Links format you can resolve uuids of stories. The links object returned consists of multiple keys, where each key is the uuid of one Story. In the link object you will have access to basic information to identify, load or already display a link to that resource.

\n","example":"

Endpoint

\n
GET /v1/cdn/links/\n
\n"},"core-resources/links/retrieve-multiple-links":{"contentPath":"content-delivery/v1/core-resources/links/retrieve-multiple-links","path":"core-resources/links/retrieve-multiple-links","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Links","attributes":{"title":"Retrieve Multiple Links"},"content":"

Returns the links object containing all links of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all links form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
paginatedSet this to 1 if you want to retrieve the paginated results. With the parameters per_page and page you can define the page size and page number
cvRead more about cache version at Cache invalidation
\n

Attention: This API endpoint is not paged by default. Activate it using paginated=1.

\n","example":"

Endpoint

\n
GET /v1/cdn/links/?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"posts/my-third-post\",\n      \"name\": \"My third post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false\n    },\n    \"a91440ee-fd57-4ee3-83cf-d49d217ae919\": {\n      \"id\": 107349,\n      \"slug\": \"posts/my-second-post\",\n      \"name\": \"My second post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -10,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"is_startpage\": false\n    },\n    \"bfea4895-8a19-4e82-ae1c-1c591dce3094\": {\n      \"id\": 107351,\n      \"slug\": \"posts/my-first-post\",\n      \"name\": \"My first Post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": 0,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"is_startpage\": false\n    }\n  }\n}\n
\n"},"core-resources/links/the-link-object":{"contentPath":"content-delivery/v1/core-resources/links/the-link-object","path":"core-resources/links/the-link-object","lang":"v1","origin":"content-delivery","title":"The Link Object","attributes":{"title":"The Link Object"},"content":"

You can access a draft or published version of your links by providing the version parameter and the correct token type (eg. preview for draft, public for published).

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id of the referenced content entry
slugThe full_slug of the content entry
nameGiven name of the content entry
is_folderIs this content entry a folder (true/false)
parent_idParent folder numeric id
publishedIs this story published (true/false)
positionNumeric position value of the content entry
uuidThe uuid of the content entry
is_startpageIS this story a startpage (true/false)
\n","example":"

Example Object

\n
  ...\n  {\n    \"id\": 107350,\n    \"slug\": \"posts/my-third-post\",\n    \"name\": \"My third post\",\n    \"is_folder\": false,\n    \"parent_id\": 107348,\n    \"published\": true,\n    \"position\": -20,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"is_startpage\": false\n  }\n  ...\n
\n"},"core-resources/links/the-links-object":{"contentPath":"content-delivery/v1/core-resources/links/the-links-object","path":"core-resources/links/the-links-object","lang":"v1","origin":"content-delivery","title":"The Links Object","attributes":{"title":"The Links Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
Multiple uuidOne key per Story, where the key is the uuid of the story
\n","example":"

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"home\",\n      \"name\": \"My Startpage\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false,\n      \"real_path\": \"/\"\n    },\n    ...\n  }\n}\n
\n"},"core-resources/spaces/retrieve-current-space":{"contentPath":"content-delivery/v1/core-resources/spaces/retrieve-current-space","path":"core-resources/spaces/retrieve-current-space","lang":"v1","origin":"content-delivery","title":"Retrieve Current Space","attributes":{"title":"Retrieve Current Space"},"content":"

Returns the current space object, if you're authenticated with a token.

\n
\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
\n","example":"

Endpoint

\n
GET /v1/cdn/spaces/me/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/spaces/spaces":{"contentPath":"content-delivery/v1/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v1","origin":"content-delivery","title":"Spaces","attributes":{"title":"Spaces"},"content":"

This endpoint is mostly useful for client side apps. The response contains space.version which developers can use to call the story API and get the most recent published version.

\n

As Storyblok uses a CDN in front of the API to deliver the response in the fastest way possible, you should append the cv parameter to the story api.

\n

Read more about Cache invalidation

\n","example":"

Endpoint

\n
GET /v1/cdn/spaces/me/\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"content-delivery/v1/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v1","origin":"content-delivery","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

In the content delivery API a space object is mostly used to receive the latest version timestamp to invalidate the cache.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
domainGiven domain
versionCache version
language_codesArray of language codes
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"content-delivery/v1/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v1","origin":"content-delivery","title":"Retrieve Multiple Stories","attributes":{"title":"Retrieve Multiple Stories"},"content":"

Returns a list of stories that are in your Storyblok space. The stories are returned in sorted order, depending on the order in your space. You can use the query parameter sort_by with any story object property and first level of your content type to order the response to your needs.

\n

If no entries are found with your filters applied, you will receive an empty array. You will not receive a 404 error message, to check if you have results go for the array length.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all entries form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: starts_with=[default]/de/home).
by_uuidsGet stories by comma separated uuid. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
by_slugsGet stories by comma separated full_slug. You can also specify wildcards with *. Examples: by_slugs=authors/john,authors/max, by_slugs=authors/*,articles/*
excluding_slugsExclude stories specifying comma separated values of full_slug. You can also specify wildcards with *. Examples: excluding_slugs=authors/john,authors/max, excluding_slugs=authors/*
fallback_langDefine a custom fallback language. By default the fallback language is the one defined in the space settings
by_uuids_orderedGet stories by comma separated uuid ordered by the sequence provided in the parameter value. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids_ordered=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
excluding_idsExclude stories by comma separated numeric ids. Example: excluding_ids=101231,9101231
excluding_fieldsExclude specific fields of your content type by comma seperated names. Example: excluding_fields=title,content
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. The limit of resolved relationships per item is 100 Stories. Example: resolve_relations=page.author,page.categories
from_releaseAccess version of specific release by release id
in_workflow_stagesComma separated list of ids. You can get the ids of the workflow stages using the Management API Example: in_workflow_stages=812,186
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. Possible values are all attributes of the entry and all fields of your content type inside content with the dot as seperator. Examples: position:desc, content.your_custom_field:asc, content.field_type_xy.field_xy:asc, created_at:desc. If you want to use the sorting provided by the user in the Storyblok admin interface you need to use position:desc. By default all custom fields are sorted as strings. To sort custom fields with numeric values you need to provide the type information (float or int) like following: content.YOUR_FIELD:asc:float or content.YOUR_FIELD:asc:int. To sort by multiple fields list each in a comma delimited list ensuring there is no space between each field. Example: content.YOUR_FIELD_1:desc,content.YOUR_FIELD_2:asc.
search_termSearch content items by full text.
first_published_at_gtAfter a specific first published date (Format: 2018-03-03 10:00)
first_published_at_ltBefore a specific first published date (Format: 2018-03-03 10:00)
published_at_gtAfter a specific published date (Format: 2018-03-03 10:00)
published_at_ltBefore a specific published date (Format: 2018-03-03 10:00)
filter_queryFilter by specific attribute(s) of your content type - it will not work for default Story properties. The filter query parameter needs to contain the query operation key. Separate the values by a comma , to filter by multiple values.

filter_query[ATTRIBUTE][OPERATION]=VALUE,...

Following filter operations OPERATION are available:
is - Checks for empty or not empty values and booleans. For strings the value can be empty or not_empty. For arrays use empty_array or not_empty_array. For booleans use true or false.
in - Exact match of one of the provided values
not_in - Does not contain the given value
like - Does contain the given value with a wildcard * search
not_like - Does not contain the given value with a wildcard * search
all_in_array - Contains all of the values of an array value
in_array - Contains any of the values of an array value
gt_date - Greater than date (Format: 2018-03-03 10:00)
lt_date - Less than date
gt_int - Greater than integer value
lt_int - Less than integer value.
gt_float - Greater than float value
lt_float - Less than float value.

Checkout the filter_query Examples we put together for you with most common use-cases.
is_startpageFilter by folder startpage. Use is_startpage=1 to only return startpages and is_startpage=0 to exclude startpages from the result.
with_tagFilter by specific tag(s). Use comma to filter by multiple tags. Examples: with_tag=featured,home
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 100. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v1/cdn/stories?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"stories\": [\n    {\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"name\": \"My third post\",\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-07T01:31:36.134Z\",\n      \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n      \"content\": {\n        \"component\": \"post\",\n        // fields you define yourself are here\n        // those below we defined for the examples\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"description\": \"Description of the third\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ]\n      },\n      \"position\": -20,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    {\n      \"id\": 107349,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"name\": \"My second post\",\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      \"created_at\": \"2018-04-24T11:57:29.283Z\",\n      \"published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"first_published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"content\": {\n        \"component\": \"post\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"c47be9f0-47c3-4315-a95a-550f0c560eb5\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do...\",\n        \"categories\": [\n          \"5db2e929-6d3d-4564-982e-fa8513b0e5de\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"sort_by_date\": null,\n      \"position\": -10,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"854c3d1f-5d7f-4785-92ee-620a7c6ca7ee\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    ...\n  ]\n}\n
\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"content-delivery/v1/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v1","origin":"content-delivery","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a story object for the full_slug, id or uuid if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Path ParameterDescription
:full_slugUse the full_slug of your content entry to retrieve it. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: api.storyblok.com/v1/cdn/stories/[default]/de/home).
:idUse the numeric id of your content entry to retrieve it
:uuidYou can use the uuid property to query for your content entry. To tell our API to use the uuid instead of the id append the query param find_by=uuid
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
find_byAdded if you want to query by uuid instead of using the numeric id
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. The limit of resolved relationships is 100 Stories. You can't use this filter to resolve relations of resolved entries (eg. nested relationship resolving). Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
from_releaseAccess version of specific release by release id
cvRead more about cache version at Cache invalidation
languageAdd the language i18n code as query parameter to receive a localized version when using a numeric id or uuid as path parameter
fallback_langDefine a custom fallback language (i18n code). By default the fallback language is the one defined in the space settings
\n","example":"

Endpoint

\n
GET /v1/cdn/stories/(:full_slug|:id|:uuid)\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-07T01:31:36.134Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n    \"content\": {\n      \"component\": \"post\",\n      // fields you define yourself are here\n      // those below we defined for the examples\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    },\n    \"position\": -20,\n    \"tag_list\": [ ],\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n    \"alternates\": [ ],\n    \"translated_slugs\": [ ],\n    \"release_id\": null,\n    \"lang\": \"default\"\n  }\n}\n
\n"},"core-resources/stories/stories":{"contentPath":"content-delivery/v1/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v1","origin":"content-delivery","title":"Stories","attributes":{"title":"Stories"},"content":"

Storyblok’s most used content delivery endpoint is trimmed for low latency and optimum availability.

\n

To achieve low latencies all over the world, Storyblok uses a CDN in front of the API. The official Storyblok SDKs already take care of cache invalidation, so you don’t have to. But if you are doing the API calls on your own, you will need to append the cv (cache version) parameter to the story API in order to get the latest version of the content. Have a look at Cache Invalidations for workflow descriptions.

\n","example":"

Endpoint

\n
GET /v1/cdn/stories/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. With the query parameter version you can switch between draft and published. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/stories/the-story-object":{"contentPath":"content-delivery/v1/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v1","origin":"content-delivery","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. To learn how to build a basic blog you can checkout our content building tutorial.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugThe slug / path you give this story
full_slugCombined parent folder and current slug
default_full_slugContains the full slug of the default language if the app Translatable Slugs is installed
created_atCreation date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
release_idId of your content stage (default: null)
langDefined language (default: "default")
contentYour defined custom content body object
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
parent_idParent folder id
group_idAlternates group id (uuid string)
alternatesArray of alternate objects
translated_slugsArray of translated slugs. Only gets included if the translatable slug app is installed
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"default_full_slug\": null,\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"release_id\": null,\n    \"lang\": \"default\",\n    \"content\": {\n      \"component\": \"your_content_type\",\n      // and fields you define yourself are in here\n    },\n    \"position\": -20,\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"4add5c88-8d9c-4480-bfcf-63016c4c463e\",\n    \"translated_slugs\": [\n      {\n        \"path\": \"mein-beitrag\",\n        \"name\": \"Mein Beitrag\",\n        \"lang\": \"de\"\n      }\n      // only gets included if the translatable slug app is installed\n    ],\n    \"alternates\": [\n      {\n        \"id\": 107381,\n        \"name\": \"Mein dritter Beitrag\",\n        \"slug\": \"my-post-in-another-folder\",\n        \"full_slug\": \"de/my-post-in-another-folder\",\n        \"is_folder\": false,\n        \"parent_id\": 107356\n      }\n    ]\n  }\n}\n
\n"},"core-resources/tags/retrieve-all-tags":{"contentPath":"content-delivery/v1/core-resources/tags/retrieve-all-tags","path":"core-resources/tags/retrieve-all-tags","lang":"v1","origin":"content-delivery","title":"Retrieve All Tags","attributes":{"title":"Retrieve All Tags"},"content":"

Returns an array of tag objects of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all tags form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
\n","example":"

Endpoint

\n
GET /v1/cdn/tags/?starts_with=posts/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"tags\": [\n    {\n      \"name\": \"red\",\n      \"taggings_count\": 14\n    },\n    {\n      \"name\": \"spicy\",\n      \"taggings_count\": 3\n    }\n  ]\n}\n
\n"},"core-resources/tags/tags":{"contentPath":"content-delivery/v1/core-resources/tags/tags","path":"core-resources/tags/tags","lang":"v1","origin":"content-delivery","title":"Tags","attributes":{"title":"Tags"},"content":"

Each tag is a string value that can be reused across Stories to create features like word clouds, basic taggings for custom workflows, or similar use-cases.

\n","example":"

Endpoint

\n
GET /v1/cdn/tags/\n
\n"},"core-resources/tags/the-tag-object":{"contentPath":"content-delivery/v1/core-resources/tags/the-tag-object","path":"core-resources/tags/the-tag-object","lang":"v1","origin":"content-delivery","title":"The Tag Object","attributes":{"title":"The Tag Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
namethe actual tag (value)
taggings_countCount of how many times this tag is currenlty in use accross all stories
\n","example":"

Example Object

\n
{\n  \"name\": \"red\",\n  \"taggings_count\": 1\n}\n
\n"},"examples/filtering/entries-between-two-numbers":{"contentPath":"content-delivery/v1/examples/filtering/entries-between-two-numbers","path":"examples/filtering/entries-between-two-numbers","lang":"v1","origin":"content-delivery","title":"Entries between two numbers","attributes":{"title":"Entries between two numbers"},"content":"

A common filter needed for a shop content structure implementation would be a simple price range products filter. In the examples above you already saw how to write one filter_query to receive all products that are greater or lower a specific price tag; In this example we will combine the gt-float and lt-float filters to get all products between a price range.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filter-entries-by-boolean-value":{"contentPath":"content-delivery/v1/examples/filtering/filter-entries-by-boolean-value","path":"examples/filtering/filter-entries-by-boolean-value","lang":"v1","origin":"content-delivery","title":"Filter entries by boolean value","attributes":{"title":"Filter entries by boolean value"},"content":"

Imagine you want to allow your editors to have featured products with a boolean flag in your content schema. To filter all products to only receive the featured once you can utilize the filter_query operation in to check for an exact value.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        \"price\": \"270\",\n        // filtered if featured is TRUE\n        \"featured\": true\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filters":{"contentPath":"content-delivery/v1/examples/filtering/filters","path":"examples/filtering/filters","lang":"v1","origin":"content-delivery","title":"Filter Examples","attributes":{"title":"Filter Examples"},"content":"

We've provided some common request example that combine multiple and different filter_querys with sorting that you might need during your implementation.

\n","example":""},"examples/ordering/order":{"contentPath":"content-delivery/v1/examples/ordering/order","path":"examples/ordering/order","lang":"v1","origin":"content-delivery","title":"Ordering / Sorting","attributes":{"title":"Ordering / Sorting"},"content":"

We've provided some common request examples that make use of the sort_by query parameter.

\n","example":""},"examples/ordering/sort-by-admin-interface":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-admin-interface","path":"examples/ordering/sort-by-admin-interface","lang":"v1","origin":"content-delivery","title":"Sort by admin interface","attributes":{"title":"Sort by admin interface"},"content":"

Some of you might like to define the order of your entries in Storyblok, utilizing the move functionality. To receive the order just like in Storyblok you can make use of the position property.

\n

Attention: The position property is only sorted within one folder

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // sorted by this property\n      \"position\": -10,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-content-attribute":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-content-attribute","path":"examples/ordering/sort-by-content-attribute","lang":"v1","origin":"content-delivery","title":"Sort by content attribute","attributes":{"title":"Sort by content attribute"},"content":"

To sort by a field that you have defined in your content schema of your content type, you're able to use the sort_by parameter as shown below.

\n
\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=content.name:ascSort by the content type attribute name
\n

As you can see it works just like with the default properties of a story object but prepending the context content. before the field.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        // sorted by this property\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-story-property":{"contentPath":"content-delivery/v1/examples/ordering/sort-by-story-property","path":"examples/ordering/sort-by-story-property","lang":"v1","origin":"content-delivery","title":"Sort by story object property","attributes":{"title":"Sort by story object property"},"content":"

You can sort your content entries by custom and predefined property using the sort_by parameter and field:asc or field:desc as value.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=name:ascSort by the Story object property name
sort_by=position:descSort by the Story object property position (same as in the admin interface)
sort_by=first_published_at:descSort by the Story object property first_published_at
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      // sorted by this property\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/starts-with/draft-entries-in-folder":{"contentPath":"content-delivery/v1/examples/starts-with/draft-entries-in-folder","path":"examples/starts-with/draft-entries-in-folder","lang":"v1","origin":"content-delivery","title":"Draft version of entries in folder xx","attributes":{"title":"Draft version of entries in folder xx"},"content":"

You can use the version param combined with the starts_with param to load entries that are in a specific folder.

\n
\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?version=draft&starts_with=products/all entries in folder products
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-in-folder":{"contentPath":"content-delivery/v1/examples/starts-with/entries-in-folder","path":"examples/starts-with/entries-in-folder","lang":"v1","origin":"content-delivery","title":"Entries in folder xx","attributes":{"title":"Entries in folder xx"},"content":"

You can use the starts_with parameter to load entries that are in a specific folder. This is useful if you create your articles in an articles/ folder, products/ in a products folder.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all entries in folder products
?starts_with=de/products/all entries with de values in translatable fields in folder products
?starts_with=articles/all entries in folder articles
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-of-language-xx":{"contentPath":"content-delivery/v1/examples/starts-with/entries-of-language-xx","path":"examples/starts-with/entries-of-language-xx","lang":"v1","origin":"content-delivery","title":"Entries of language xx","attributes":{"title":"Entries of language xx"},"content":"

The field type translation will map the available language keys with the folder paths. So for example if you have a folder Products with multiple products and those products do have translatable fields you are able to load those translated version with prepending the language key infront of the slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all products of default language
?starts_with=de/products/all products with de/ values in translatable fields
?starts_with=de/*all entries with de/ values in translatable fields without particular folder
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/starts-with":{"contentPath":"content-delivery/v1/examples/starts-with/starts-with","path":"examples/starts-with/starts-with","lang":"v1","origin":"content-delivery","title":"Starts With Examples","attributes":{"title":"Starts With Examples"},"content":"

We've provided some common request example that make use of the starts_with query parameter.

\n","example":""},"examples/useful/load-draft-version":{"contentPath":"content-delivery/v1/examples/useful/load-draft-version","path":"examples/useful/load-draft-version","lang":"v1","origin":"content-delivery","title":"Load draft version","attributes":{"title":"Load draft version"},"content":"

Appending the query paramter version with the value draft (eg. version=draft) and using the preview token as token will allow you to access the draft versions of content entries. You can perform all kind of queries, sorting and filterings with either published or draft versions.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/load-latest-cache-version-timestamp":{"contentPath":"content-delivery/v1/examples/useful/load-latest-cache-version-timestamp","path":"examples/useful/load-latest-cache-version-timestamp","lang":"v1","origin":"content-delivery","title":"Load latest CV timestamp","attributes":{"title":"Load latest CV timestamp"},"content":"

With the cache invalidation provided by Storyblok utilizing the cv (cache version) query paramter you're able to always hit the latest version of your content. This can either be a server side generated timestmap that receives an update if our webhook triggers a publish event or you fetch it every time you boot up your application.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Blog\",\n    \"domain\": \"https://www.storyblok.com/\",\n    // version timestamp to use for further requests\n    \"version\": 1544466448\n  }\n}\n
\n"},"examples/useful/load-without-startpage":{"contentPath":"content-delivery/v1/examples/useful/load-without-startpage","path":"examples/useful/load-without-startpage","lang":"v1","origin":"content-delivery","title":"Load without startpage","attributes":{"title":"Load without startpage"},"content":"

Appending the query paramter is_startpage with the value false (eg. is_startpage=false) to retrieve only entries of a folder and skipping the startpage you've defined in that folder.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // all stories will have the is_startpage flag set to false\n      \"is_startpage\": false,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/localized-by-uuid":{"contentPath":"content-delivery/v1/examples/useful/localized-by-uuid","path":"examples/useful/localized-by-uuid","lang":"v1","origin":"content-delivery","title":"Load story localized by uuid","attributes":{"title":"Load story localized by uuid"},"content":"

Appending the query parameter language in combination with find_by=uuid allows you to load localized versions of your entries without knowing its slug. If you know the slug of your content entry you can simply prepend the language code, eg. /posts/my-first-post would be /de/posts/my-first-post. As you only have a UUID by hand, and you do know the slug you can use the language parameter instead.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"story\": {\n    \"name\": \"My third post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-10T13:39:31.999Z\",\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"lang\": \"de\",\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"Mein zweiter Titel\",\n      \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"component\": \"post\",\n      // resolved relationship by including the story \n      // object of the reference entry\n      \"categories\": [\n        ...\n      ],\n      \"description\": \"Beschreibung vom zweiten Beitrag\"\n    },\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    ...\n  }\n}\n
\n"},"examples/useful/resolve-relationships":{"contentPath":"content-delivery/v1/examples/useful/resolve-relationships","path":"examples/useful/resolve-relationships","lang":"v1","origin":"content-delivery","title":"Load with resolved relationships","attributes":{"title":"Load with resolved relationships"},"content":"

Resolve relationships to other Stories (in the first level of nesting) of a multi-option or single-option field-type. Provide the field key(s) as comma separated string to resolve specific fields.

\n

Example: resolve_relations=categories.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // resolved relationship by including the story \n        // object of the reference entry\n        \"categories\": [\n          {\n            \"name\": \"Design\",\n            \"created_at\": \"2018-04-24T11:59:26.578Z\",\n            \"published_at\": \"2018-04-24T12:07:46.278Z\",\n            \"id\": 107357,\n            \"uuid\": \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n            \"content\": {\n              \"_uid\": \"6fc4a8e1-52a1-46b3-85b2-a1a93452c97a\",\n              \"name\": \"Design\",\n              \"image\": \"//a.storyblok.com/f/44203/1177x841/8c69867d6e/undraw_lighthouse2_1ebd.png\",\n              \"component\": \"category\"\n            },\n            \"slug\": \"design\",\n            \"full_slug\": \"categories/design\",\n            ...\n          }\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    { ... }\n  ]\n}\n
\n"},"examples/useful/useful":{"contentPath":"content-delivery/v1/examples/useful/useful","path":"examples/useful/useful","lang":"v1","origin":"content-delivery","title":"Useful","attributes":{"title":"Useful"},"content":"

Other request examples that might be useful, without specific category like ordering/sorting, starts with or filtering.

\n","example":""},"filter-queries/operation-all-in-array":{"contentPath":"content-delivery/v1/filter-queries/operation-all-in-array","path":"filter-queries/operation-all-in-array","lang":"v1","origin":"content-delivery","title":"Operation: all_in_array","attributes":{"title":"Operation: `all_in_array`","sidebarTitle":"all_in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains all of the values provided. As soon as all of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: all_in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][all_in_array]=sportsid,esportsidall entries of category sportsid and esportsid in field categories
filter_query[tags][all_in_array]=food,healthall entries of category food and health
filter_query[related_products][all_in_array]=product-one-id,product-two-idall entries with product-one and product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because all_in_array matches if ALL ids are present.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-date":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-date","path":"filter-queries/operation-gt-date","lang":"v1","origin":"content-delivery","title":"Operation: gt_date","attributes":{"title":"Operation: `gt_date`","sidebarTitle":"gt_date"},"content":"

Think of it at AFTER a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are greater (eg. later) than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_date

\n

You can create custom dates that allow you to schedule posts, launch products and with this query see all entries that are scheduled after a specific date, schedule christmas teaser. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query those specific entries.

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][gt_date]=2019-12-24 09:00all entries with date field schedule after "2019-12-24 09:00"
\n","example":"

Example Request (All posts scheduled AFTER now)

\n\n

Example Response (All posts scheduled AFTER now)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 107351,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt_date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2019-12-24 10:00\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-gt-float":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-float","path":"filter-queries/operation-gt-float","lang":"v1","origin":"content-delivery","title":"Operation: gt_float","attributes":{"title":"Operation: `gt_float`","sidebarTitle":"gt_float"},"content":"

Allows you to filter fields of type float, string (float value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_float]=100.50all entries with price field greater than 100.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"17000000.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"27.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-int":{"contentPath":"content-delivery/v1/filter-queries/operation-gt-int","path":"filter-queries/operation-gt-int","lang":"v1","origin":"content-delivery","title":"Operation: gt_int","attributes":{"title":"Operation: `gt_int`","sidebarTitle":"gt_int"},"content":"

Allows you to filter fields of type number, string (number value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_int]=100all entries with price field greater than 100
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"1700000000\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in-array":{"contentPath":"content-delivery/v1/filter-queries/operation-in-array","path":"filter-queries/operation-in-array","lang":"v1","origin":"content-delivery","title":"Operation: in_array","attributes":{"title":"Operation: `in_array`","sidebarTitle":"in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains one of the values provided. As soon as one of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][in_array]=sportsid,esportsidall entries of category sportsid or esportsid in field categories
filter_query[tags][in_array]=food,healthall entries of category food or health
filter_query[related_products][in_array]=product-one-id,product-two-idall entries with product-one or product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },{\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\\nquis nostrud exercitation.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in":{"contentPath":"content-delivery/v1/filter-queries/operation-in","path":"filter-queries/operation-in","lang":"v1","origin":"content-delivery","title":"Operation: in","attributes":{"title":"Operation: `in`","sidebarTitle":"in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is equal to one of the values provided.

\n

Use-cases: in

\n

Get all content entries that is refered to another in a 1:N relationship or if you want to get all entries with a specific value in one of it's fields.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][in]=authorId&starts_with=posts/all Posts by one Author
filter_query[customer][in]=customerId&starts_with=orders/&all Orders by one Customer
filter_query[post][in]=postId&starts_with=comments/all Comments by one Post
filter_query[seo.title][in]=Titleall entries with field seo and a nested field title and the value Title
filter_query[component][in]=postall entries of one Content Type
filter_query[component][in]=post,newsall entries of Content Type "post" or "news"
filter_query[featured][in]=trueall entries where the field featured is true
\n","example":"

Example Request (all Posts by one Author)

\n\n

Example Response (all Posts by one Author)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-is":{"contentPath":"content-delivery/v1/filter-queries/operation-is","path":"filter-queries/operation-is","lang":"v1","origin":"content-delivery","title":"Operation: is","attributes":{"title":"Operation: `is`","sidebarTitle":"is"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) is of a specific type.

\n

Use-cases: is

\n

Get all content entries that have a specific type of value.

\n

You can combine this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[authors][is]=empty_arrayall posts that have no authors
filter_query[orders][is]=not_empty_array&starts_with=customers/&all customers that have orders
filter_query[message][is]=empty&starts_with=comments/all comments with an empty message
filter_query[my_plugin.show_in][is]=trueall entries with field my_plugin and a nested field show_in that have the value true
filter_query[enabled][is]=falseall entries where enabled is false
filter_query[image][is]=nullall entries where the image attribute is null or is missing
filter_query[featured][is]=not_nullall entries where the featured attribute is not null or is not missing
\n","example":"

Example Request (all posts with a schedule date)

\n\n

Example Response (all posts with a schedule date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-like":{"contentPath":"content-delivery/v1/filter-queries/operation-like","path":"filter-queries/operation-like","lang":"v1","origin":"content-delivery","title":"Operation: like","attributes":{"title":"Operation: `like`","sidebarTitle":"like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "like" the value provided.

\n

Use-cases: like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][like]=john*all entries starting with the name "John"
filter_query[name][like]=*john*all entries containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"John Mustermann\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"John Mustermann\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"john-mustermann\",\n      \"full_slug\": \"authors/john-mustermann\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-date":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-date","path":"filter-queries/operation-lt-date","lang":"v1","origin":"content-delivery","title":"Operation: lt_date","attributes":{"title":"Operation: `lt_date`","sidebarTitle":"lt_date"},"content":"

Think of it at BEFORE a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are lower than (eg. before) the provided date.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_date

\n

You can create custom dates that allow you to schedule posts, launch products, schedule christmas teaser and more. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query all entries before a specific date (eg. today)

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][lt_date]=2018-12-24 09:00all entries with date field schedule before "2018-12-24 09:00"
\n","example":"

Example Request (All posts scheduled BEFORE date)

\n\n

Example Response (All posts scheduled BEFORE date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My second Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 123122,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my second post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt-date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2018-04-22 14:32\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-lt-float":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-float","path":"filter-queries/operation-lt-float","lang":"v1","origin":"content-delivery","title":"Operation: lt_float","attributes":{"title":"Operation: `lt_float`","sidebarTitle":"lt_float"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_float]=100.50all entries with price field lower than 100.50
filter_query[price][lt_float]=99.50all entries with price field lower than 99.50
filter_query[price][lt_float]=1999.50all entries with price field lower than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"74.99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-int":{"contentPath":"content-delivery/v1/filter-queries/operation-lt-int","path":"filter-queries/operation-lt-int","lang":"v1","origin":"content-delivery","title":"Operation: lt_int","attributes":{"title":"Operation: `lt_int`","sidebarTitle":"lt_int"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_int]=100all entries with price field lower than 100
filter_query[price][lt_int]=99all entries with price field lower than 99
filter_query[price][lt_int]=1999all entries with price field lower than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"24\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-in":{"contentPath":"content-delivery/v1/filter-queries/operation-not-in","path":"filter-queries/operation-not-in","lang":"v1","origin":"content-delivery","title":"Operation: not_in","attributes":{"title":"Operation: `not_in`","sidebarTitle":"not_in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) does not have a value that is equal to one of the values provided.

\n

Use-cases: not_in

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][not_in]=authorId&starts_with=posts/all Posts except one Author
filter_query[seo.title][not_in]=Titleall entries with field seo and a nested field title and not the value Title
filter_query[component][not_in]=postall entries without one Content Type
filter_query[component][not_in]=post,newsall entries that are not of Content Type "post" or "news"
filter_query[featured][not_in]=trueall entries where the field featured is not true
\n","example":"

Example Request (all Posts without specific Author)

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first post\",\n      \"id\": 107349,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"33f4fb1b-5243-4bf2-246e-7d5753607421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-like":{"contentPath":"content-delivery/v1/filter-queries/operation-not-like","path":"filter-queries/operation-not-like","lang":"v1","origin":"content-delivery","title":"Operation: not_like","attributes":{"title":"Operation: `not_like`","sidebarTitle":"not_like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "not_like" the value provided.

\n

Use-cases: not_like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][not_like]=john*all entries not starting with the name "John"
filter_query[name][not_like]=*john*all entries not containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Mister Master\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"Mister Master\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"mister-master\",\n      \"full_slug\": \"authors/mister-master\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/overview":{"contentPath":"content-delivery/v1/filter-queries/overview","path":"filter-queries/overview","lang":"v1","origin":"content-delivery","title":"Filter Queries","attributes":{"title":"Filter Queries","sidebarTitle":"Operations","showChildren":true},"content":"

With the filter_query you're able to filter by specific attribute(s) of your stories. The filter_query parameter accepts an attribute and an operation key.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationDescription
inMatches exactly one value
not_inMatches all without the given value
likeMatches exactly one value with a wildcard search using * (Example: "john*")
not_likeMatches all without the given value
in_arrayMatches any value of given array
all_in_arrayMust match all values of given array
gt_dateGreater than date (Format: YYYY-mm-dd HH:MM)
lt_dateLess than date (Format: 2018-03-03 10:00)
gt_intGreater than integer value
lt_intLess than integer value
gt_floatGreater than float value
lt_floatLess than float value
\n

You can find one example for each filter query in the description page for each operation, and examples that combine multiple filters in the filter examples section.

\n","example":"

Endpoint

\n
GET /v1/cdn/stories/?filter_query[ATTRIBUTE][OPERATION]=VALUE,...\n
\n

Example Story Object

\n

We will demonstrate use-cases and example on a simple blog content structure as shown below. You're not limited by the fields in this example. Every field in the content field can be used as the ATTRIBUTE key in your filter_query.

\n
{\n  \"story\": {\n    // default story object fields\n    \"content\": {\n      \"component\": \"post\",\n        // attributes you define yoruself are located here\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    }\n  }\n}\n
\n"},"topics/authentication":{"contentPath":"content-delivery/v1/topics/authentication","path":"topics/authentication","lang":"v1","origin":"content-delivery","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your access token in API requests. You can manage your API tokens in the Dashboard of each space. In your Space Dashboard at app.storyblok.com you will be able to generate two types of tokens

\n\n

Public and Preview tokens are read only and do not allow you or others to write or delete entries in your space. The public token can be published. All tokens can be revoked at any point of time, you are able to create multiple tokens of the same type to grant access for specific use-cases. For CRUD operations you can have a look at the Management API documentation.

\n

If you're using the Content Staging (eg. Release and Schedule) feature you can also create Public and Preview tokens for each staging environment.

\n","example":"

Example Request

\n
\n\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// init with access token\nconst Storyblok = new StoryblokClient({\n  accessToken: 'wANpEQEsMYGOwLxwXQ76Ggtt',\n  cache: {\n    clear: 'auto',\n    type: 'memory'\n  }\n})\n
\n

or use directly as parameter

\n
\n\n\n

To perform a GET request with your token append the query parameter token with your preview or public token as shown in the example above.

\n"},"topics/cache-invalidation":{"contentPath":"content-delivery/v1/topics/cache-invalidation","path":"topics/cache-invalidation","lang":"v1","origin":"content-delivery","title":"Cache Invalidation","attributes":{"title":"Cache Invalidation"},"content":"

Storyblok uses a CDN in front of the API to deliver your content in the fastest way possible. If you're using the Storyblok Content Delivery API directly in your client application it is recommended to use a backend version number or the versions parameter provided by the /v1/cdn/spaces/me?token=access_token call.

\n

Recommended: Client Side

\n
    \n
  1. Request the resource /v1/cdn/spaces/me to get the space.version property
  2. \n
  3. Append the space.version to all your subsequent calls of the endpoint /v1/cdn/stories
  4. \n
\n

Recommended: SSG / Server Side

\n
    \n
  1. Generate a timestamp (once on a server, not on every request/client load)
  2. \n
  3. Append your timestamp to all your subsequent calls of the endpoint /v1/cdn/stories
  4. \n
\n

Also server side applications application can use the space.version option. Storing the version string to a file and reusing this timestamp will guarantee you the latest version with optimal speed. You can either use the Storyblok Webhooks or Storyblok JavaScript Events to update your version file.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Space A\",\n    \"domain\": \"http://example.storyblok.com\",\n    \"version\": 1541863983\n  }\n}\n
\n

Use the timestamp as cv:

\n\n"},"topics/errors":{"contentPath":"content-delivery/v1/topics/errors","path":"topics/errors","lang":"v1","origin":"content-delivery","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"content-delivery/v1/topics/introduction","path":"topics/introduction","lang":"v1","origin":"content-delivery","title":"Content Delivery API V1 Reference","attributes":{"title":"Content Delivery API V1 Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Content Delivery API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code, tokens found on the dashboard however are read only and therefore fine to use in a client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

To make the API as explorable as possible, accounts have draft versions and published version of API tokens. To access the draft version of your content you can use the preview token, and for receiving published content you can use the public token. The preview token is able to also load the published content. To switch between those versions you can append the query parameter version=draft/published and using the appropriate token to perform a draft or published version call.

\n

The requests in the right sidebar are designed to work as is. The sample requests are performed using a preview API token of a test space with demo content.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Content Delivery API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL

\n
https://api.storyblok.com\n
\n"},"topics/pagination":{"contentPath":"content-delivery/v1/topics/pagination","path":"topics/pagination","lang":"v1","origin":"content-delivery","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"content-delivery/v1/topics/rate-limit","path":"topics/rate-limit","lang":"v1","origin":"content-delivery","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The content delivery api has a rate limit of 50 requests per second for uncached request. The limit decreases if you use a higher page size than 25.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Type of requestRate Limit
Cached requests from the CDN> 1000 per second
Single content item, datasources, ...50 per second
Listings with page size below and with 2550 per second
Listings with page size between 25 and 5015 per second
Listings with page size between 50 and 7510 per second
Listings with page size between 75 and 1005 per second
\n"}} \ No newline at end of file diff --git a/static/content-delivery.methods.v2.json b/static/content-delivery.methods.v2.json index 5e8b9d4c..454cb927 100644 --- a/static/content-delivery.methods.v2.json +++ b/static/content-delivery.methods.v2.json @@ -1 +1 @@ -{"core-resources/datasource-entries/datasource-entries":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v2","origin":"content-delivery","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

A data source is simply a collection of key-value pairs. One specific datasource-entry is a set of two linked attributes: a key, which is a unique identifier for the item and the value.

\n

Key-value pairs can be used for a single-choice, multiple-choice options and as well directly through our API to use them for multi-language labels, categories, or any use-case you might need key-value pairs.

\n","example":"

Endpoint

\n
GET /v2/cdn/datasource_entries/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Datasource Entries","attributes":{"title":"Retrieve Multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects for the datasource and dimension defined, if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
datasourceDatasource group id/slug
dimensionDimension that you defined for your datasource (eg. dimension=en)
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v2/cdn/datasource_entries?datasource=:slug\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasource_entries\": [\n    {\n      \"id\": 22237,\n      \"name\": \"cancel\",\n      \"value\": \"Abbrechen\",\n      \"dimension_value\": null\n    },\n    {\n      \"id\": 22238,\n      \"name\": \"read_more\",\n      \"value\": \"Mehr erfahren\",\n      \"dimension_value\": null\n    }\n  ]\n}\n
\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v2","origin":"content-delivery","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"

You can use the dimension=your_defined_dimension (eg. dimension=en) to receive the dimensions value besides the default value in one datasource entry.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
valueGiven value in default dimension
dimension_valueGiven value in the requested dimension
\n","example":"

Example Object: No specific dimension requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": null\n}\n
\n

Example Object: Specific dimension (en) requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": \"Cancel\"\n}\n
\n"},"core-resources/datasources/datasources":{"contentPath":"content-delivery/v2/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v2","origin":"content-delivery","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A data source is contains the information (slug) to receive a collection of datasource entries. You can use this endpoint to receive all datasources and then call the datasource entries endpoint using the slug of the datasource.

\n","example":"

Endpoint

\n
GET /v2/cdn/datasources/\n
\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"content-delivery/v2/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Datasources","attributes":{"title":"Retrieve Multiple Datasources"},"content":"

Returns an array of datasource objects.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
\n","example":"

Endpoint

\n
GET /v2/cdn/datasources\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasources\": [\n    {\n      \"id\": 1433,\n      \"name\": \"Label\",\n      \"slug\": \"labels\",\n      \"dimensions\": [\n        {\n          \"id\": 126,\n          \"entry_value\": \"en\",\n          \"name\": \"English\"\n        }\n      ]\n    }\n  ]\n}\n
\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"content-delivery/v2/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v2","origin":"content-delivery","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
slugGiven slug
dimensionsArray of dimension objects
\n","example":"

Example Object

\n
{\n  \"id\": 1433,\n  \"name\": \"Label\",\n  \"slug\": \"labels\",\n  \"dimensions\": [\n    {\n      \"id\": 126,\n      \"entry_value\": \"en\",\n      \"name\": \"English\"\n    }\n  ]\n}\n
\n"},"core-resources/links/links":{"contentPath":"content-delivery/v2/core-resources/links/links","path":"core-resources/links/links","lang":"v2","origin":"content-delivery","title":"Links","attributes":{"title":"Links"},"content":"

Links are another representation of your content entries, eg. Stories. With the Links format you can resolve uuids of stories. The links object returned consists of multiple keys, where each key is the uuid of one Story. In the link object you will have access to basic information to identify, load or already display a link to that resource.

\n","example":"

Endpoint

\n
GET /v2/cdn/links/\n
\n"},"core-resources/links/retrieve-multiple-links":{"contentPath":"content-delivery/v2/core-resources/links/retrieve-multiple-links","path":"core-resources/links/retrieve-multiple-links","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Links","attributes":{"title":"Retrieve Multiple Links"},"content":"

Returns the links object containing all links of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all links form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
paginatedSet this to 1 if you want to retrieve the paginated results. With the parameters per_page and page you can define the page size and page number
cvRead more about cache version at Cache invalidation
\n

Attention: This API endpoint is not paged by default. Activate it using paginated=1.

\n","example":"

Endpoint

\n
GET /v2/cdn/links/?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"posts/my-third-post\",\n      \"name\": \"My third post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false\n    },\n    \"a91440ee-fd57-4ee3-83cf-d49d217ae919\": {\n      \"id\": 107349,\n      \"slug\": \"posts/my-second-post\",\n      \"name\": \"My second post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -10,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"is_startpage\": false\n    },\n    \"bfea4895-8a19-4e82-ae1c-1c591dce3094\": {\n      \"id\": 107351,\n      \"slug\": \"posts/my-first-post\",\n      \"name\": \"My first Post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": 0,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"is_startpage\": false\n    }\n  }\n}\n
\n"},"core-resources/links/the-link-object":{"contentPath":"content-delivery/v2/core-resources/links/the-link-object","path":"core-resources/links/the-link-object","lang":"v2","origin":"content-delivery","title":"The Link Object","attributes":{"title":"The Link Object"},"content":"

You can access a draft or published version of your links by providing the version parameter and the correct token type (eg. preview for draft, public for published).

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id of the referenced content entry
slugThe full_slug of the content entry
nameGiven name of the content entry
is_folderIs this content entry a folder (true/false)
parent_idParent folder numeric id
publishedIs this story published (true/false)
positionNumeric position value of the content entry
uuidThe uuid of the content entry
is_startpageIS this story a startpage (true/false)
\n","example":"

Example Object

\n
  ...\n  {\n    \"id\": 107350,\n    \"slug\": \"posts/my-third-post\",\n    \"name\": \"My third post\",\n    \"is_folder\": false,\n    \"parent_id\": 107348,\n    \"published\": true,\n    \"position\": -20,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"is_startpage\": false\n  }\n  ...\n
\n"},"core-resources/links/the-links-object":{"contentPath":"content-delivery/v2/core-resources/links/the-links-object","path":"core-resources/links/the-links-object","lang":"v2","origin":"content-delivery","title":"The Links Object","attributes":{"title":"The Links Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
Multiple uuidOne key per Story, where the key is the uuid of the story
\n","example":"

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"home\",\n      \"name\": \"My Startpage\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false,\n      \"real_path\": \"/\"\n    },\n    ...\n  }\n}\n
\n"},"core-resources/spaces/retrieve-current-space":{"contentPath":"content-delivery/v2/core-resources/spaces/retrieve-current-space","path":"core-resources/spaces/retrieve-current-space","lang":"v2","origin":"content-delivery","title":"Retrieve Current Space","attributes":{"title":"Retrieve Current Space"},"content":"

Returns the current space object, if you're authenticated with a token.

\n
\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
\n","example":"

Endpoint

\n
GET /v2/cdn/spaces/me/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/spaces/spaces":{"contentPath":"content-delivery/v2/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v2","origin":"content-delivery","title":"Spaces","attributes":{"title":"Spaces"},"content":"

This endpoint is mostly useful for client side apps. The response contains space.version which developers can use to call the story API and get the most recent published version.

\n

As Storyblok uses a CDN in front of the API to deliver the response in the fastest way possible, you should append the cv parameter to the story api.

\n

Read more about Cache invalidation

\n","example":"

Endpoint

\n
GET /v2/cdn/spaces/me/\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"content-delivery/v2/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v2","origin":"content-delivery","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

In the content delivery API a space object is mostly used to receive the latest version timestamp to invalidate the cache.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
domainGiven domain
versionCache version
language_codesArray of language codes
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"content-delivery/v2/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Stories","attributes":{"title":"Retrieve Multiple Stories"},"content":"

Returns a list of stories that are in your Storyblok space. The stories are returned in sorted order, depending on the order in your space. You can use the query parameter sort_by with any story object property and first level of your content type to order the response to your needs.

\n

If no entries are found with your filters applied, you will receive an empty array. You will not receive a 404 error message, to check if you have results go for the array length.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
cvRead more about cache version at Cache invalidation
starts_withFilter by full_slug. Can be used to retrieve all entries form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: starts_with=[default]/de/home).
versionDefault: published. Possible values: draft, published
search_termSearch content items by full text.
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. Possible values are all attributes of the entry and all fields of your content type inside content with the dot as seperator. Example: position:desc, content.your_custom_field:asc, content.field_type_xy.field_xy:asc, created_at:desc. If you want to use the sorting provided by the user in the Storyblok admin interface you need to use position:desc. By default all custom fields are sorted as strings. To sort custom fields with numeric values you need to provide the type information (float or int) like following: content.YOUR_FIELD:asc:float or content.YOUR_FIELD:asc:int
per_pageNumeric. default: 25, max: 100. Read more at Pagination
pageNumeric. default: 1. Read more at Pagination
by_slugsGet stories by comma separated full_slug. You can also specify wildcards with *. Examples: by_slugs=authors/john,authors/max, by_slugs=authors/*,articles/*
excluding_slugsExclude stories specifying comma separated values of full_slug. You can also specify wildcards with *. Examples: excluding_slugs=authors/john,authors/max, excluding_slugs=authors/*
published_at_gtAfter a specific published date (Format: 2018-03-03 10:00)
published_at_ltBefore a specific published date (Format: 2018-03-03 10:00)
in_workflow_stagesComma separated list of ids. You can get the ids of the workflow stages using the Management API Example: in_workflow_stages=812,186
content_typeFilter by specific content type. Example: content_type=author
first_published_at_gtAfter a specific first published date (Format: 2018-03-03 10:00)
first_published_at_ltBefore a specific first published date (Format: 2018-03-03 10:00)
levelFilter by specific folder level. Useful for getting items for navigations. Example: level=2
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. Resolved relations can be found in root of response under the property rels. The limit of resolved relationships is 100 Stories. You can't use this filter to resolve relations of resolved entries (eg. nested relationship resolving). Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
excluding_idsExclude stories by comma separated numeric ids. Example: excluding_ids=101231,9101231
by_uuidsGet stories by comma separated uuid. To get a specific language you need to combine it with the parameter language=en (replace en with your langauge) Example: by_uuids=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
by_uuids_orderedGet stories by comma separated uuid ordered by the sequence provided in the parameter value. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids_ordered=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
with_tagFilter by specific tag(s). Use comma to filter by multiple tags. Examples: with_tag=featured,home
is_startpageFilter by folder startpage. Use is_startpage=1 to only return startpages and is_startpage=0 to exclude startpages from the result.
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. Resolved links can be found in root of response under the property links. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
from_releaseAccess version of specific release by release id
fallback_langDefine a custom fallback language. By default the fallback language is the one defined in the space settings
languageChoose the language of the content. Example language=de
filter_queryFilter by specific attribute(s) of your content type - it will not work for default Story properties. The filter query parameter needs to contain the query operation key. Separate the values by a comma , to filter by multiple values.

filter_query[ATTRIBUTE][OPERATION]=VALUE,...

Following filter operations OPERATION are available:
is - Checks for empty or not empty values and booleans. For strings the value can be empty or not_empty. For arrays use empty_array or not_empty_array. For booleans use true or false. Additionally you can check for null values with null and not_null
in - Exact match of one of the provided values
not_in - Does not contain the given value
like - Does contain the given value with a wildcard * search
not_like - Does not contain the given value with a wildcard * search
all_in_array - Contains all of the values of an array value
in_array - Contains any of the values of an array value
gt_date - Greater than date (Format: 2018-03-03 10:00)
lt_date - Less than date
gt_int - Greater than integer value
lt_int - Less than integer value.
gt_float - Greater than float value
lt_float - Less than float value.

Checkout the filter_query Examples we put together for you with most common use-cases.
excluding_fieldsExclude specific fields of your content type by comma seperated names. Example: excluding_fields=title,content
resolve_assetsIf the value is 1 it will resolve assets in the content and include the meta information (only available with premium plans)
\n

Response

\n

The response will contain following attributes:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storiesAn array of story objects
cvThe cache version
relsArray of related story objects when using the resolve_relations parameter
linksArray of link or story objects when using the resolve_links parameter
\n","example":"

Endpoint

\n
GET /v2/cdn/stories?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"stories\": [\n    {\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"name\": \"My third post\",\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-07T01:31:36.134Z\",\n      \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n      \"content\": {\n        \"component\": \"post\",\n        // fields you define yourself are here\n        // those below we defined for the examples\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"description\": \"Description of the third\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ]\n      },\n      \"position\": -20,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    {\n      \"id\": 107349,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"name\": \"My second post\",\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      \"created_at\": \"2018-04-24T11:57:29.283Z\",\n      \"published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"first_published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"content\": {\n        \"component\": \"post\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"c47be9f0-47c3-4315-a95a-550f0c560eb5\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do...\",\n        \"categories\": [\n          \"5db2e929-6d3d-4564-982e-fa8513b0e5de\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"sort_by_date\": null,\n      \"position\": -10,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"854c3d1f-5d7f-4785-92ee-620a7c6ca7ee\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    ...\n  ],\n  \"cv\": 1560257296,\n  \"rels\": [],\n  \"links\": []\n}\n
\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"content-delivery/v2/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v2","origin":"content-delivery","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a story object for the full_slug, id or uuid if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Path ParameterDescription
:full_slugUse the full_slug of your content entry to retrieve it.
:idUse the numeric id of your content entry to retrieve it
:uuidYou can use the uuid property to query for your content entry. To tell our API to use the uuid instead of the id append the query param find_by=uuid
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
find_byAdded if you want to query by uuid instead of using the numeric id
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. Resolved links can be found in root of response under the property links. If the value is story the whole story object will be included. If the value is url only uuid, id, name, path, slug and url (url is a computed property which returns the "Real path" if defined to use it for navigation links) will be included. The limit of resolved links per Story is 50 when resolving with story and 100 when resolving with url.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. Resolved relations can be found in root of response under the property rels. The limit of resolved relationships is 100 Stories. You can't use this filter to resolve relations of resolved entries (eg. nested relationship resolving). Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
from_releaseAccess version of specific release by release id
cvRead more about cache version at Cache invalidation
languageAdd the language i18n code as query parameter to receive a localized version
fallback_langDefine a custom fallback language (i18n code). By default the fallback language is the one defined in the space settings
\n

Response

\n

The response will contain following attributes:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyA single story object
cvThe cache version
relsArray of related story objects when using the resolve_relations parameter
linksArray of link or story objects when using the resolve_links parameter
\n","example":"

Endpoint

\n
GET /v2/cdn/stories/(:full_slug|:id|:uuid)\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-07T01:31:36.134Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n    \"content\": {\n      \"component\": \"post\",\n      // fields you define yourself are here\n      // those below we defined for the examples\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    },\n    \"position\": -20,\n    \"tag_list\": [ ],\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n    \"alternates\": [ ],\n    \"translated_slugs\": [ ],\n    \"release_id\": null,\n    \"lang\": \"default\"\n  },\n  \"cv\": 1560257296,\n  \"rels\": [],\n  \"links\": []\n}\n
\n"},"core-resources/stories/stories":{"contentPath":"content-delivery/v2/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v2","origin":"content-delivery","title":"Stories","attributes":{"title":"Stories"},"content":"

Storyblok’s most used content delivery endpoint is trimmed for low latency and optimum availability.

\n

To achieve low latencies all over the world, Storyblok uses a CDN in front of the API. The official Storyblok SDKs already take care of cache invalidation, so you don’t have to. But if you are doing the API calls on your own, you will need to append the cv (cache version) parameter to the story API in order to get the latest version of the content. Have a look at Cache Invalidations for workflow descriptions.

\n","example":"

Endpoint

\n
GET /v2/cdn/stories/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. With the query parameter version you can switch between draft and published. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/stories/the-story-object":{"contentPath":"content-delivery/v2/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v2","origin":"content-delivery","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. To learn how to build a basic blog you can checkout our content building tutorial.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugGthe slug / path you give this story
full_slugCombined parent folder and current slug
default_full_slugContains the full slug of the default language if the app Translatable Slugs is installed
created_atCreation date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
release_idId of your content stage (default: null)
langDefined language (default: "default")
contentYour defined custom content body object
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
parent_idParent folder id
group_idAlternates group id (uuid string)
alternatesArray of alternate objects
translated_slugsArray of translated slugs. Only gets included if the translatable slug app is installed
linksArray of all resolved links if the resolve_links parameter is in use
relsArray of all resolved stories if the resolve_relations parameter is in use
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"default_full_slug\": null,\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"release_id\": null,\n    \"lang\": \"default\",\n    \"content\": {\n      \"component\": \"your_content_type\",\n      // and fields you define yourself are in here\n    },\n    \"position\": -20,\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"4add5c88-8d9c-4480-bfcf-63016c4c463e\",\n    \"translated_slugs\": [\n      {\n        \"path\": \"mein-beitrag\",\n        \"name\": \"Mein Beitrag\",\n        \"lang\": \"de\"\n      }\n      // only gets included if the translatable slug app is installed\n    ],\n    \"alternates\": [\n      {\n        \"id\": 107381,\n        \"name\": \"Mein dritter Beitrag\",\n        \"slug\": \"my-post-in-another-folder\",\n        \"full_slug\": \"de/my-post-in-another-folder\",\n        \"is_folder\": false,\n        \"parent_id\": 107356\n      }\n    ]\n  }\n}\n
\n"},"core-resources/tags/retrieve-all-tags":{"contentPath":"content-delivery/v2/core-resources/tags/retrieve-all-tags","path":"core-resources/tags/retrieve-all-tags","lang":"v2","origin":"content-delivery","title":"Retrieve All Tags","attributes":{"title":"Retrieve All Tags"},"content":"

Returns an array of tag objects of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all tags form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
\n","example":"

Endpoint

\n
GET /v2/cdn/tags/?starts_with=posts/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"tags\": [\n    {\n      \"name\": \"red\",\n      \"taggings_count\": 14\n    },\n    {\n      \"name\": \"spicy\",\n      \"taggings_count\": 3\n    }\n  ]\n}\n
\n"},"core-resources/tags/tags":{"contentPath":"content-delivery/v2/core-resources/tags/tags","path":"core-resources/tags/tags","lang":"v2","origin":"content-delivery","title":"Tags","attributes":{"title":"Tags"},"content":"

Each tag is a string value that can be reused accross Stories to create features like word clouds, basic taggings for custom workflows, or similar usecases.

\n","example":"

Endpoint

\n
GET /v2/cdn/tags/\n
\n"},"core-resources/tags/the-tag-object":{"contentPath":"content-delivery/v2/core-resources/tags/the-tag-object","path":"core-resources/tags/the-tag-object","lang":"v2","origin":"content-delivery","title":"The Tag Object","attributes":{"title":"The Tag Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
namethe actual tag (value)
taggings_countCount of how many times this tag is currenlty in use accross all stories
\n","example":"

Example Object

\n
{\n  \"name\": \"red\",\n  \"taggings_count\": 1\n}\n
\n"},"examples/filtering/entries-between-two-numbers":{"contentPath":"content-delivery/v2/examples/filtering/entries-between-two-numbers","path":"examples/filtering/entries-between-two-numbers","lang":"v2","origin":"content-delivery","title":"Entries between two numbers","attributes":{"title":"Entries between two numbers"},"content":"

A common filter needed for a shop content structure implementation would be a simple price range products filter. In the examples above you already saw how to write one filter_query to receive all products that are greater or lower a specific price tag; In this example we will combine the gt-float and lt-float filters to get all products between a price range.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filter-entries-by-boolean-value":{"contentPath":"content-delivery/v2/examples/filtering/filter-entries-by-boolean-value","path":"examples/filtering/filter-entries-by-boolean-value","lang":"v2","origin":"content-delivery","title":"Filter entries by boolean value","attributes":{"title":"Filter entries by boolean value"},"content":"

Imagine you want to allow your editors to have featured products with a boolean flag in your content schema. To filter all products to only receive the featured once you can utilize the filter_query operation in to check for an exact value.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filters":{"contentPath":"content-delivery/v2/examples/filtering/filters","path":"examples/filtering/filters","lang":"v2","origin":"content-delivery","title":"Filter Examples","attributes":{"title":"Filter Examples"},"content":"

We've provided some common request example that combine multiple and different filter_querys with sorting that you might need during your implementation.

\n","example":""},"examples/ordering/order":{"contentPath":"content-delivery/v2/examples/ordering/order","path":"examples/ordering/order","lang":"v2","origin":"content-delivery","title":"Ordering / Sorting","attributes":{"title":"Ordering / Sorting"},"content":"

We've provided some common request examples that make use of the sort_by query parameter.

\n","example":""},"examples/ordering/sort-by-admin-interface":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-admin-interface","path":"examples/ordering/sort-by-admin-interface","lang":"v2","origin":"content-delivery","title":"Sort by admin interface","attributes":{"title":"Sort by admin interface"},"content":"

Some of you might like to define the order of your entries in Storyblok, utilizing the move functionality. To receive the order just like in Storyblok you can make use of the position property.

\n

Attention: The position property is only sorted within one folder

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // sorted by this property\n      \"position\": -10,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-content-attribute":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-content-attribute","path":"examples/ordering/sort-by-content-attribute","lang":"v2","origin":"content-delivery","title":"Sort by content attribute","attributes":{"title":"Sort by content attribute"},"content":"

To sort by a field that you have defined in your content schema of your content type, you're able to use the sort_by parameter as shown below.

\n
\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=content.name:ascSort by the content type attribute name
\n

As you can see it works just like with the default properties of a story object but prepending the context content. before the field.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        // sorted by this property\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-story-property":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-story-property","path":"examples/ordering/sort-by-story-property","lang":"v2","origin":"content-delivery","title":"Sort by story object property","attributes":{"title":"Sort by story object property"},"content":"

You can sort your content entries by custom and predefined property using the sort_by parameter and field:asc or field:desc as value.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=name:ascSort by the Story object property name
sort_by=position:descSort by the Story object property position (same as in the admin interface)
sort_by=first_published_at:descSort by the Story object property first_published_at
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      // sorted by this property\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/starts-with/draft-entries-in-folder":{"contentPath":"content-delivery/v2/examples/starts-with/draft-entries-in-folder","path":"examples/starts-with/draft-entries-in-folder","lang":"v2","origin":"content-delivery","title":"Draft version of entries in folder xx","attributes":{"title":"Draft version of entries in folder xx"},"content":"

You can use the version param combined with the starts_with param to load entries that are in a specific folder.

\n
\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?version=draft&starts_with=products/all entries in folder products
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-in-folder":{"contentPath":"content-delivery/v2/examples/starts-with/entries-in-folder","path":"examples/starts-with/entries-in-folder","lang":"v2","origin":"content-delivery","title":"Entries in folder xx","attributes":{"title":"Entries in folder xx"},"content":"

You can use the starts_with parameter to load entries that are in a specific folder. This is useful if you create your articles in an articles/ folder, products/ in a products folder.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all entries in folder products
?starts_with=de/products/all entries with de values in translatable fields in folder products
?starts_with=articles/all entries in folder articles
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-of-language-xx":{"contentPath":"content-delivery/v2/examples/starts-with/entries-of-language-xx","path":"examples/starts-with/entries-of-language-xx","lang":"v2","origin":"content-delivery","title":"Entries of language xx","attributes":{"title":"Entries of language xx"},"content":"

The field type translation will map the available language keys with the folder paths. So for example if you have a folder Products with multiple products and those products do have translatable fields you are able to load those translated version with prepending the language key infront of the slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all products of default language
?starts_with=de/products/all products with de/ values in translatable fields
?starts_with=de/*all entries with de/ values in translatable fields without particular folder
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/starts-with":{"contentPath":"content-delivery/v2/examples/starts-with/starts-with","path":"examples/starts-with/starts-with","lang":"v2","origin":"content-delivery","title":"Starts With Examples","attributes":{"title":"Starts With Examples"},"content":"

We've provided some common request example that make use of the starts_with query parameter.

\n","example":""},"examples/useful/load-draft-version":{"contentPath":"content-delivery/v2/examples/useful/load-draft-version","path":"examples/useful/load-draft-version","lang":"v2","origin":"content-delivery","title":"Load draft version","attributes":{"title":"Load draft version"},"content":"

Appending the query paramter version with the value draft (eg. version=draft) and using the preview token as token will allow you to access the draft versions of content entries. You can perform all kind of queries, sorting and filterings with either published or draft versions.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/load-latest-cache-version-timestamp":{"contentPath":"content-delivery/v2/examples/useful/load-latest-cache-version-timestamp","path":"examples/useful/load-latest-cache-version-timestamp","lang":"v2","origin":"content-delivery","title":"Load latest CV timestamp","attributes":{"title":"Load latest CV timestamp"},"content":"

With the cache invalidation provided by Storyblok utilizing the cv (cache version) query paramter you're able to always hit the latest version of your content. This can either be a server side generated timestmap that receives an update if our webhook triggers a publish event or you fetch it every time you boot up your application.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Blog\",\n    \"domain\": \"https://www.storyblok.com/\",\n    // version timestamp to use for further requests\n    \"version\": 1544466448\n  }\n}\n
\n"},"examples/useful/load-without-startpage":{"contentPath":"content-delivery/v2/examples/useful/load-without-startpage","path":"examples/useful/load-without-startpage","lang":"v2","origin":"content-delivery","title":"Load without startpage","attributes":{"title":"Load without startpage"},"content":"

Appending the query paramter is_startpage with the value false (eg. is_startpage=false) to retrieve only entries of a folder and skipping the startpage you've defined in that folder.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // all stories will have the is_startpage flag set to false\n      \"is_startpage\": false,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/localized-by-uuid":{"contentPath":"content-delivery/v2/examples/useful/localized-by-uuid","path":"examples/useful/localized-by-uuid","lang":"v2","origin":"content-delivery","title":"Load story localized by uuid","attributes":{"title":"Load story localized by uuid"},"content":"

Appending the query parameter language in combination with find_by=uuid allows you to load localized versions of your entries without knowing its slug. If you know the slug of your content entry you can simply prepend the language code, eg. /posts/my-first-post would be /de/posts/my-first-post. As you only have a UUID by hand, and you do know the slug you can use the language parameter instead.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"story\": {\n    \"name\": \"My third post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-10T13:39:31.999Z\",\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"lang\": \"de\",\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"Mein zweiter Titel\",\n      \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"component\": \"post\",\n      // resolved relationship by including the story \n      // object of the reference entry\n      \"categories\": [\n        ...\n      ],\n      \"description\": \"Beschreibung vom zweiten Beitrag\"\n    },\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    ...\n  }\n}\n
\n"},"examples/useful/resolve-relationships":{"contentPath":"content-delivery/v2/examples/useful/resolve-relationships","path":"examples/useful/resolve-relationships","lang":"v2","origin":"content-delivery","title":"Load with resolved relationships","attributes":{"title":"Load with resolved relationships"},"content":"

Resolve relationships to other Stories (in the first level of nesting) of a multi-option or single-option field-type. Provide the field key(s) as comma separated string to resolve specific fields.

\n

Example: resolve_relations=categories.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // resolved relationship by including the story \n        // object of the reference entry\n        \"categories\": [\n          {\n            \"name\": \"Design\",\n            \"created_at\": \"2018-04-24T11:59:26.578Z\",\n            \"published_at\": \"2018-04-24T12:07:46.278Z\",\n            \"id\": 107357,\n            \"uuid\": \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n            \"content\": {\n              \"_uid\": \"6fc4a8e1-52a1-46b3-85b2-a1a93452c97a\",\n              \"name\": \"Design\",\n              \"image\": \"//a.storyblok.com/f/44203/1177x841/8c69867d6e/undraw_lighthouse2_1ebd.png\",\n              \"component\": \"category\"\n            },\n            \"slug\": \"design\",\n            \"full_slug\": \"categories/design\",\n            ...\n          }\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    { ... }\n  ]\n}\n
\n"},"examples/useful/useful":{"contentPath":"content-delivery/v2/examples/useful/useful","path":"examples/useful/useful","lang":"v2","origin":"content-delivery","title":"Useful","attributes":{"title":"Useful"},"content":"

Other request examples that might be useful, without specific category like ordering/sorting, starts with or filtering.

\n","example":""},"filter-queries/operation-all-in-array":{"contentPath":"content-delivery/v2/filter-queries/operation-all-in-array","path":"filter-queries/operation-all-in-array","lang":"v2","origin":"content-delivery","title":"Operation: all_in_array","attributes":{"title":"Operation: `all_in_array`","sidebarTitle":"all_in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains all of the values provided. As soon as all of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: all_in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][all_in_array]=sportsid,esportsidall entries of category sportsid and esportsid in field categories
filter_query[tags][all_in_array]=food,healthall entries of category food and health
filter_query[related_products][all_in_array]=product-one-id,product-two-idall entries with product-one and product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because all_in_array matches if ALL ids are present.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-date":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-date","path":"filter-queries/operation-gt-date","lang":"v2","origin":"content-delivery","title":"Operation: gt_date","attributes":{"title":"Operation: `gt_date`","sidebarTitle":"gt_date"},"content":"

Think of it at AFTER a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are greater (eg. later) than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_date

\n

You can create custom dates that allow you to schedule posts, launch products and with this query see all entries that are scheduled after a specific date, schedule christmas teaser. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query those specific entries.

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][gt_date]=2019-12-24 09:00all entries with date field schedule after "2019-12-24 09:00"
\n","example":"

Example Request (All posts scheduled AFTER now)

\n\n

Example Response (All posts scheduled AFTER now)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 107351,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt_date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2019-12-24 10:00\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-gt-float":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-float","path":"filter-queries/operation-gt-float","lang":"v2","origin":"content-delivery","title":"Operation: gt_float","attributes":{"title":"Operation: `gt_float`","sidebarTitle":"gt_float"},"content":"

Allows you to filter fields of type float, string (float value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_float]=100.50all entries with price field greater than 100.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"17000000.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"27.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-int":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-int","path":"filter-queries/operation-gt-int","lang":"v2","origin":"content-delivery","title":"Operation: gt_int","attributes":{"title":"Operation: `gt_int`","sidebarTitle":"gt_int"},"content":"

Allows you to filter fields of type number, string (number value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_int]=100all entries with price field greater than 100
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"1700000000\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in-array":{"contentPath":"content-delivery/v2/filter-queries/operation-in-array","path":"filter-queries/operation-in-array","lang":"v2","origin":"content-delivery","title":"Operation: in_array","attributes":{"title":"Operation: `in_array`","sidebarTitle":"in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains one of the values provided. As soon as one of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][in_array]=sportsid,esportsidall entries of category sportsid or esportsid in field categories
filter_query[tags][in_array]=food,healthall entries of category food or health
filter_query[related_products][in_array]=product-one-id,product-two-idall entries with product-one or product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },{\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\\nquis nostrud exercitation.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in":{"contentPath":"content-delivery/v2/filter-queries/operation-in","path":"filter-queries/operation-in","lang":"v2","origin":"content-delivery","title":"Operation: in","attributes":{"title":"Operation: `in`","sidebarTitle":"in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is equal to one of the values provided.

\n

Use-cases: in

\n

Get all content entries that is refered to another in a 1:N relationship or if you want to get all entries with a specific value in one of it's fields.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][in]=authorId&starts_with=posts/all Posts by one Author
filter_query[customer][in]=customerId&starts_with=orders/&all Orders by one Customer
filter_query[post][in]=postId&starts_with=comments/all Comments by one Post
filter_query[seo.title][in]=Titleall entries with field seo and a nested field title and the value Title
filter_query[component][in]=postall entries of one Content Type
filter_query[component][in]=post,newsall entries of Content Type "post" or "news"
filter_query[featured][in]=trueall entries where the field featured is true
\n","example":"

Example Request (all Posts by one Author)

\n\n

Example Response (all Posts by one Author)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-is":{"contentPath":"content-delivery/v2/filter-queries/operation-is","path":"filter-queries/operation-is","lang":"v2","origin":"content-delivery","title":"Operation: is","attributes":{"title":"Operation: `is`","sidebarTitle":"is"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) is of a specific type.

\n

Use-cases: is

\n

Get all content entries that have a specific type of value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[authors][is]=empty_arrayall posts that have no authors
filter_query[orders][is]=not_empty_array&starts_with=customers/&all customers by that have orders
filter_query[message][is]=empty&starts_with=comments/all comments with an empty message
filter_query[my_plugin.show_in][is]=trueall entries with field my_plugin and a nested field show_in that have the value true
filter_query[enabled][is]=falseall entries where enabled is false
filter_query[image][is]=nullall entries where the image attribute is null
filter_query[featured][is]=not_nullall entries where the featured attribute is null
\n","example":"

Example Request (all posts with a schedule date)

\n\n

Example Response (all posts with a schedule date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-like":{"contentPath":"content-delivery/v2/filter-queries/operation-like","path":"filter-queries/operation-like","lang":"v2","origin":"content-delivery","title":"Operation: like","attributes":{"title":"Operation: `like`","sidebarTitle":"like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "like" the value provided.

\n

Use-cases: like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][like]=john*all entries starting with the name "John"
filter_query[name][like]=*john*all entries containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"John Mustermann\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"John Mustermann\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"john-mustermann\",\n      \"full_slug\": \"authors/john-mustermann\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-date":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-date","path":"filter-queries/operation-lt-date","lang":"v2","origin":"content-delivery","title":"Operation: lt_date","attributes":{"title":"Operation: `lt_date`","sidebarTitle":"lt_date"},"content":"

Think of it at BEFORE a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are lower than (eg. before) the provided date.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_date

\n

You can create custom dates that allow you to schedule posts, launch products, schedule christmas teaser and more. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query all entries before a specific date (eg. today)

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][lt_date]=2018-12-24 09:00all entries with date field schedule before "2018-12-24 09:00"
\n","example":"

Example Request (All posts scheduled BEFORE date)

\n\n

Example Response (All posts scheduled BEFORE date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My second Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 123122,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my second post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt-date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2018-04-22 14:32\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-lt-float":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-float","path":"filter-queries/operation-lt-float","lang":"v2","origin":"content-delivery","title":"Operation: lt_float","attributes":{"title":"Operation: `lt_float`","sidebarTitle":"lt_float"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_float]=100.50all entries with price field lower than 100.50
filter_query[price][lt_float]=99.50all entries with price field lower than 99.50
filter_query[price][lt_float]=1999.50all entries with price field lower than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"74.99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-int":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-int","path":"filter-queries/operation-lt-int","lang":"v2","origin":"content-delivery","title":"Operation: lt_int","attributes":{"title":"Operation: `lt_int`","sidebarTitle":"lt_int"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_int]=100all entries with price field lower than 100
filter_query[price][lt_int]=99all entries with price field lower than 99
filter_query[price][lt_int]=1999all entries with price field lower than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"24\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-in":{"contentPath":"content-delivery/v2/filter-queries/operation-not-in","path":"filter-queries/operation-not-in","lang":"v2","origin":"content-delivery","title":"Operation: not_in","attributes":{"title":"Operation: `not_in`","sidebarTitle":"not_in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) does not have a value that is equal to one of the values provided.

\n

Use-cases: not_in

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][not_in]=authorId&starts_with=posts/all Posts except one Author
filter_query[seo.title][not_in]=Titleall entries with field seo and a nested field title and not the value Title
filter_query[component][not_in]=postall entries without one Content Type
filter_query[component][not_in]=post,newsall entries that are not of Content Type "post" or "news"
filter_query[featured][not_in]=trueall entries where the field featured is not true
\n","example":"

Example Request (all Posts without specific Author)

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first post\",\n      \"id\": 107349,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"33f4fb1b-5243-4bf2-246e-7d5753607421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-like":{"contentPath":"content-delivery/v2/filter-queries/operation-not-like","path":"filter-queries/operation-not-like","lang":"v2","origin":"content-delivery","title":"Operation: not_like","attributes":{"title":"Operation: `not_like`","sidebarTitle":"not_like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "not_like" the value provided.

\n

Use-cases: not_like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][not_like]=john*all entries not starting with the name "John"
filter_query[name][not_like]=*john*all entries not containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Mister Master\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"Mister Master\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"mister-master\",\n      \"full_slug\": \"authors/mister-master\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/overview":{"contentPath":"content-delivery/v2/filter-queries/overview","path":"filter-queries/overview","lang":"v2","origin":"content-delivery","title":"Filter Queries","attributes":{"title":"Filter Queries","sidebarTitle":"Operations","showChildren":true},"content":"

With the filter_query you're able to filter by specific attribute(s) of your stories. The filter_query parameter accepts an attribute and an operation key.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationDescription
isMatches a value type
inMatches exactly one value
not_inMatches all without the given value
likeMatches exactly one value with a wildcard search using * (Example: "john*")
not_likeMatches all without the given value
in_arrayMatches any value of given array
all_in_arrayMust match all values of given array
gt_dateGreater than date (Format: YYYY-mm-dd HH:MM)
lt_dateLess than date (Format: 2018-03-03 10:00)
gt_intGreater than integer value
lt_intLess than integer value
gt_floatGreater than float value
lt_floatLess than float value
\n

You can find one example for each filter query in the description page for each operation, and examples that combine multiple filters in the filter examples section.

\n

By default the applied filters are connected by the AND operator but it is also possible to apply filters by the OR operator using the keyword __or. Following an example using the Javascript SDK:

\n
StoryblokClient.get('cdn/stories', {\n  filter_query: {\n    __or: [\n      { color: { in: 'red' } },\n      { background: { in: 'blue' } }\n    ],\n    component: { in: 'article' }\n  }\n})\n
\n","example":"

Endpoint

\n
GET /v2/cdn/stories/?filter_query[ATTRIBUTE][OPERATION]=VALUE,...\n
\n

Example Story Object

\n

We will demonstrate use-cases and example on a simple blog content structure as shown below. You're not limited by the fields in this example. Every field in the content field can be used as the ATTRIBUTE key in your filter_query.

\n
{\n  \"story\": {\n    // default story object fields\n    \"content\": {\n      \"component\": \"post\",\n        // attributes you define yoruself are located here\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    }\n  }\n}\n
\n"},"topics/authentication":{"contentPath":"content-delivery/v2/topics/authentication","path":"topics/authentication","lang":"v2","origin":"content-delivery","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your access token in API requests. You can manage your API tokens in the Dashboard of each space. In your Space Dashboard at app.storyblok.com you will be able to generate two types of tokens

\n\n

Public and Preview tokens are read only and do not allow you or others to write or delete entries in your space. The public token can be published. All tokens can be revoked at any point of time, you are able to create multiple tokens of the same type to grant access for specific use-cases. For CRUD operations you can have a look at the Management API documentation.

\n

If you're using the Content Staging (eg. Release and Schedule) feature you can also create Public and Preview tokens for each staging environment.

\n","example":"

Example Request

\n
\n\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// init with access token\nconst Storyblok = new StoryblokClient({\n  accessToken: 'wANpEQEsMYGOwLxwXQ76Ggtt',\n  cache: {\n    clear: 'auto',\n    type: 'memory'\n  }\n})\n
\n

or use directly as parameter

\n
\n\n\n

To perform a GET request with your token append the query parameter token with your preview or public token as shown in the example above.

\n"},"topics/cache-invalidation":{"contentPath":"content-delivery/v2/topics/cache-invalidation","path":"topics/cache-invalidation","lang":"v2","origin":"content-delivery","title":"Cache Invalidation","attributes":{"title":"Cache Invalidation"},"content":"

Storyblok uses a CDN in front of the API to deliver your content in the fastest way possible. To have a high cache hit rate for published content the Storyblok appends a parameter called cv which stands for "cache version".

\n

The "cache version" always updates if you publish any new content in Storyblok and you can retrieve it by doing an api call to a cdn resource without providing the cv parameter /v2/cdn/stories?token=wANpEQEsMYGOwLxwXQ76Ggtt&version=published.

\n

If you don't use our oficial javascript SDK which handles the cv parameter automatically you need to make sure to pass the cv parameter in your requests like following:

\n
    \n
  1. Do a request to the stories endpoint /v2/cdn/stories without appending the cv parameter
  2. \n
  3. Check the response body for the cv attribute
  4. \n
  5. Safe the cv attribute in memory and use it for the subsequent requests
  6. \n
  7. When publishing new content clear the attribute from the memory and save a new one by starting at step 1.
  8. \n
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"name\": \"Example\",\n    \"slug\": \"example\",\n    ...\n  },\n  \"cv\": 1541863983\n}\n
\n

Use the cv attribute value as cv parameter for the subsequent requests:

\n\n"},"topics/errors":{"contentPath":"content-delivery/v2/topics/errors","path":"topics/errors","lang":"v2","origin":"content-delivery","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"content-delivery/v2/topics/introduction","path":"topics/introduction","lang":"v2","origin":"content-delivery","title":"Content Delivery API V2 Reference","attributes":{"title":"Content Delivery API V2 Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Content Delivery API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code, tokens found on the dashboard however are read only and therefore fine to use in a client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

To make the API as explorable as possible, accounts have draft versions and published version of API tokens. To access the draft version of your content you can use the preview token, and for receiving published content you can use the public token. The preview token is able to also load the published content. To switch between those versions you can append the query parameter version=draft/published and using the appropriate token to perform a draft or published version call.

\n

The requests in the right sidebar are designed to work as is. The sample requests are performed using a preview API token of a test space with demo content.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Content Delivery API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL

\n
https://api.storyblok.com/v2\n
\n"},"topics/pagination":{"contentPath":"content-delivery/v2/topics/pagination","path":"topics/pagination","lang":"v2","origin":"content-delivery","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"content-delivery/v2/topics/rate-limit","path":"topics/rate-limit","lang":"v2","origin":"content-delivery","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The content delivery api has a rate limit of 50 requests per second for uncached request. The limit decreases if you use a higher page size than 25.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Type of requestRate Limit
Cached requests from the CDN> 1000 per second
Single content item, datasources, ...50 per second
Listings with page size below and with 2550 per second
Listings with page size between 25 and 5015 per second
Listings with page size between 50 and 7510 per second
Listings with page size between 75 and 1005 per second
\n"}} \ No newline at end of file +{"core-resources/datasource-entries/datasource-entries":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v2","origin":"content-delivery","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

A data source is simply a collection of key-value pairs. One specific datasource-entry is a set of two linked attributes: a key, which is a unique identifier for the item and the value.

\n

Key-value pairs can be used for a single-choice, multiple-choice options and as well directly through our API to use them for multi-language labels, categories, or any use-case you might need key-value pairs.

\n","example":"

Endpoint

\n
GET /v2/cdn/datasource_entries/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Datasource Entries","attributes":{"title":"Retrieve Multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects for the datasource and dimension defined, if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
datasourceDatasource group id/slug
dimensionDimension that you defined for your datasource (eg. dimension=en)
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
cvRead more about cache version at Cache invalidation
\n","example":"

Endpoint

\n
GET /v2/cdn/datasource_entries?datasource=:slug\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasource_entries\": [\n    {\n      \"id\": 22237,\n      \"name\": \"cancel\",\n      \"value\": \"Abbrechen\",\n      \"dimension_value\": null\n    },\n    {\n      \"id\": 22238,\n      \"name\": \"read_more\",\n      \"value\": \"Mehr erfahren\",\n      \"dimension_value\": null\n    }\n  ]\n}\n
\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"content-delivery/v2/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v2","origin":"content-delivery","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"

You can use the dimension=your_defined_dimension (eg. dimension=en) to receive the dimensions value besides the default value in one datasource entry.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
valueGiven value in default dimension
dimension_valueGiven value in the requested dimension
\n","example":"

Example Object: No specific dimension requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": null\n}\n
\n

Example Object: Specific dimension (en) requested

\n
{\n  \"id\": 22237,\n  \"name\": \"cancel\",\n  \"value\": \"Abbrechen\",\n  \"dimension_value\": \"Cancel\"\n}\n
\n"},"core-resources/datasources/datasources":{"contentPath":"content-delivery/v2/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v2","origin":"content-delivery","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A data source is contains the information (slug) to receive a collection of datasource entries. You can use this endpoint to receive all datasources and then call the datasource entries endpoint using the slug of the datasource.

\n","example":"

Endpoint

\n
GET /v2/cdn/datasources/\n
\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"content-delivery/v2/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Datasources","attributes":{"title":"Retrieve Multiple Datasources"},"content":"

Returns an array of datasource objects.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
pageNumeric. default: 1. Read more at Pagination
per_pageNumeric. default: 25, max: 1000. Read more at Pagination
\n","example":"

Endpoint

\n
GET /v2/cdn/datasources\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"datasources\": [\n    {\n      \"id\": 1433,\n      \"name\": \"Label\",\n      \"slug\": \"labels\",\n      \"dimensions\": [\n        {\n          \"id\": 126,\n          \"entry_value\": \"en\",\n          \"name\": \"English\"\n        }\n      ]\n    }\n  ]\n}\n
\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"content-delivery/v2/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v2","origin":"content-delivery","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
slugGiven slug
dimensionsArray of dimension objects
\n","example":"

Example Object

\n
{\n  \"id\": 1433,\n  \"name\": \"Label\",\n  \"slug\": \"labels\",\n  \"dimensions\": [\n    {\n      \"id\": 126,\n      \"entry_value\": \"en\",\n      \"name\": \"English\"\n    }\n  ]\n}\n
\n"},"core-resources/links/links":{"contentPath":"content-delivery/v2/core-resources/links/links","path":"core-resources/links/links","lang":"v2","origin":"content-delivery","title":"Links","attributes":{"title":"Links"},"content":"

Links are another representation of your content entries, eg. Stories. With the Links format you can resolve uuids of stories. The links object returned consists of multiple keys, where each key is the uuid of one Story. In the link object you will have access to basic information to identify, load or already display a link to that resource. \nIt's important to note that in order to return more than 25 entries, you have to use pagination.

\n","example":"

Endpoint

\n
GET /v2/cdn/links/\n
\n"},"core-resources/links/retrieve-multiple-links":{"contentPath":"content-delivery/v2/core-resources/links/retrieve-multiple-links","path":"core-resources/links/retrieve-multiple-links","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Links","attributes":{"title":"Retrieve Multiple Links"},"content":"

Returns the links object containing all links of one space including the draft and published links. To get only published links, use the version=published.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all links form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionPossible values: draft, published
paginatedSet this to 1 if you want to retrieve the paginated results. With the parameters per_page and page you can define the page size and page number
cvRead more about cache version at Cache invalidation
\n

Attention: This API endpoint is not paged by default. Activate it using paginated=1.

\n","example":"

Endpoint

\n
GET /v2/cdn/links/?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"posts/my-third-post\",\n      \"name\": \"My third post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false\n    },\n    \"a91440ee-fd57-4ee3-83cf-d49d217ae919\": {\n      \"id\": 107349,\n      \"slug\": \"posts/my-second-post\",\n      \"name\": \"My second post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -10,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"is_startpage\": false\n    },\n    \"bfea4895-8a19-4e82-ae1c-1c591dce3094\": {\n      \"id\": 107351,\n      \"slug\": \"posts/my-first-post\",\n      \"name\": \"My first Post\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": 0,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"is_startpage\": false\n    }\n  }\n}\n
\n"},"core-resources/links/the-link-object":{"contentPath":"content-delivery/v2/core-resources/links/the-link-object","path":"core-resources/links/the-link-object","lang":"v2","origin":"content-delivery","title":"The Link Object","attributes":{"title":"The Link Object"},"content":"

You can access a draft or published version of your links by providing the version parameter and the correct token type (eg. preview for draft, public for published).

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id of the referenced content entry
slugThe full_slug of the content entry
nameGiven name of the content entry
is_folderIs this content entry a folder (true/false)
parent_idParent folder numeric id
publishedIs this story published (true/false)
positionNumeric position value of the content entry
uuidThe uuid of the content entry
is_startpageIS this story a startpage (true/false)
\n","example":"

Example Object

\n
  ...\n  {\n    \"id\": 107350,\n    \"slug\": \"posts/my-third-post\",\n    \"name\": \"My third post\",\n    \"is_folder\": false,\n    \"parent_id\": 107348,\n    \"published\": true,\n    \"position\": -20,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"is_startpage\": false\n  }\n  ...\n
\n"},"core-resources/links/the-links-object":{"contentPath":"content-delivery/v2/core-resources/links/the-links-object","path":"core-resources/links/the-links-object","lang":"v2","origin":"content-delivery","title":"The Links Object","attributes":{"title":"The Links Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
Multiple uuidOne key per Story, where the key is the uuid of the story
\n","example":"

Example Object

\n
{\n  \"links\": {\n    \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\": {\n      \"id\": 107350,\n      \"slug\": \"home\",\n      \"name\": \"My Startpage\",\n      \"is_folder\": false,\n      \"parent_id\": 107348,\n      \"published\": true,\n      \"position\": -20,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"is_startpage\": false,\n      \"real_path\": \"/\"\n    },\n    ...\n  }\n}\n
\n"},"core-resources/spaces/retrieve-current-space":{"contentPath":"content-delivery/v2/core-resources/spaces/retrieve-current-space","path":"core-resources/spaces/retrieve-current-space","lang":"v2","origin":"content-delivery","title":"Retrieve Current Space","attributes":{"title":"Retrieve Current Space"},"content":"

Returns the current space object, if you're authenticated with a token.

\n
\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
\n","example":"

Endpoint

\n
GET /v2/cdn/spaces/me/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/spaces/spaces":{"contentPath":"content-delivery/v2/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v2","origin":"content-delivery","title":"Spaces","attributes":{"title":"Spaces"},"content":"

This endpoint is mostly useful for client side apps. The response contains space.version which developers can use to call the story API and get the most recent published version.

\n

As Storyblok uses a CDN in front of the API to deliver the response in the fastest way possible, you should append the cv parameter to the story api.

\n

Read more about Cache invalidation

\n","example":"

Endpoint

\n
GET /v2/cdn/spaces/me/\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"content-delivery/v2/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v2","origin":"content-delivery","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

In the content delivery API a space object is mostly used to receive the latest version timestamp to invalidate the cache.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
nameGiven name
domainGiven domain
versionCache version
language_codesArray of language codes
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"id\": 123,\n    \"name\": \"Storyblok.com\",\n    \"domain\": \"https://www.storyblok.com/\",\n    \"version\": 1544117388,\n    \"language_codes\": [\"de\"]\n  }\n}\n
\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"content-delivery/v2/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v2","origin":"content-delivery","title":"Retrieve Multiple Stories","attributes":{"title":"Retrieve Multiple Stories"},"content":"

Returns a list of stories that are in your Storyblok space. The stories are returned in sorted order, depending on the order in your space. You can use the query parameter sort_by with any story object property and first level of your content type to order the response to your needs.

\n

If no entries are found with your filters applied, you will receive an empty array. You will not receive a 404 error message, to check if you have results go for the array length.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
cvRead more about cache version at Cache invalidation
starts_withFilter by full_slug. Can be used to retrieve all entries form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts. Attention: If you use field level translations and a root folder with the same name of a language code you need to prepend [default] to the path to retrieve the default language (Example: starts_with=[default]/de/home).
versionDefault: published. Possible values: draft, published
search_termSearch content items by full text.
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. Possible values are all attributes of the entry and all fields of your content type inside content with the dot as seperator. Example: position:desc, content.your_custom_field:asc, content.field_type_xy.field_xy:asc, created_at:desc. If you want to use the sorting provided by the user in the Storyblok admin interface you need to use position:desc. By default all custom fields are sorted as strings. To sort custom fields with numeric values you need to provide the type information (float or int) like following: content.YOUR_FIELD:asc:float or content.YOUR_FIELD:asc:int
per_pageNumeric. default: 25, max: 100. Read more at Pagination
pageNumeric. default: 1. Read more at Pagination
by_slugsGet stories by comma separated full_slug. You can also specify wildcards with *. Examples: by_slugs=authors/john,authors/max, by_slugs=authors/*,articles/*
excluding_slugsExclude stories specifying comma separated values of full_slug. You can also specify wildcards with *. Examples: excluding_slugs=authors/john,authors/max, excluding_slugs=authors/*
published_at_gtAfter a specific published date (Format: 2018-03-03 10:00)
published_at_ltBefore a specific published date (Format: 2018-03-03 10:00)
in_workflow_stagesComma separated list of ids. You can get the ids of the workflow stages using the Management API Example: in_workflow_stages=812,186
content_typeFilter by specific content type. Example: content_type=author
first_published_at_gtAfter a specific first published date (Format: 2018-03-03 10:00)
first_published_at_ltBefore a specific first published date (Format: 2018-03-03 10:00)
levelFilter by specific folder level. Useful for getting items for navigations. Example: level=2
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. Resolved relations can be found in root of response under the property rels. The limit of resolved relationships is 100 Stories. You can't use this filter to resolve relations of resolved entries (eg. nested relationship resolving). Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
excluding_idsExclude stories by comma separated numeric ids. Example: excluding_ids=101231,9101231
by_uuidsGet stories by comma separated uuid. To get a specific language you need to combine it with the parameter language=en (replace en with your langauge) Example: by_uuids=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
by_uuids_orderedGet stories by comma separated uuid ordered by the sequence provided in the parameter value. To get a specific language you need to combine this filter with starts_with=en/* (replace en with your langauge) Example: by_uuids_ordered=9aa72a2f-04ae-48df-b71f-25f53044dc97,84550816-245d-4fe6-8ae8-b633d4a328f4
with_tagFilter by specific tag(s). Use comma to filter by multiple tags. Examples: with_tag=featured,home
is_startpageFilter by folder startpage. Use is_startpage=1 to only return startpages and is_startpage=0 to exclude startpages from the result.
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. Resolved links can be found in the links property of the response. Possible values are story, url, and link. Learn more in this developer guide. You can resolve entries going one level deep.
from_releaseAccess version of specific release by release id
fallback_langDefine a custom fallback language. By default the fallback language is the one defined in the space settings
languageChoose the language of the content. Example language=de
filter_queryFilter by specific attribute(s) of your content type - it will not work for default Story properties. The filter query parameter needs to contain the query operation key. Separate the values by a comma , to filter by multiple values.

filter_query[ATTRIBUTE][OPERATION]=VALUE,...

Following filter operations OPERATION are available:
is - Checks for empty or not empty values and booleans. For strings the value can be empty or not_empty. For arrays use empty_array or not_empty_array. For booleans use true or false. Additionally you can check for null values with null and not_null
in - Exact match of one of the provided values
not_in - Does not contain the given value
like - Does contain the given value with a wildcard * search
not_like - Does not contain the given value with a wildcard * search
all_in_array - Contains all of the values of an array value
any_in_array - Contains any of the values of an array value
gt_date - Greater than date (Format: 2018-03-03 10:00)
lt_date - Less than date
gt_int - Greater than integer value
lt_int - Less than integer value.
gt_float - Greater than float value
lt_float - Less than float value.

Checkout the filter_query Examples we put together for you with most common use-cases.
excluding_fieldsExclude specific fields of your content type by comma seperated names. Example: excluding_fields=title,content (Only the first (root) level fields are excluded, not the nested attributes)
resolve_assetsIf the value is 1 it will resolve assets in the content and include the meta information (only available in the Teams plan and above)
\n

Response

\n

The response will contain following attributes:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storiesAn array of story objects
cvThe cache version
relsArray of related story objects when using the resolve_relations parameter
linksArray of link or story objects when using the resolve_links parameter
rel_uuidsArray of the uuids of all the related story objects if the resolve_relations parameter is in use and if the limit of resolvable relations is hit
link_uuidsArray of the uuids of all the links if the resolve_links parameter is in use and if the limit of resolvable links is hit
\n","example":"

Endpoint

\n
GET /v2/cdn/stories?starts_with=posts/\n
\n

Example Request

\n\n

Example Object

\n
{\n  \"stories\": [\n    {\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"name\": \"My third post\",\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-07T01:31:36.134Z\",\n      \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n      \"content\": {\n        \"component\": \"post\",\n        // fields you define yourself are here\n        // those below we defined for the examples\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"description\": \"Description of the third\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ]\n      },\n      \"position\": -20,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    {\n      \"id\": 107349,\n      \"uuid\": \"a91440ee-fd57-4ee3-83cf-d49d217ae919\",\n      \"name\": \"My second post\",\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      \"created_at\": \"2018-04-24T11:57:29.283Z\",\n      \"published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"first_published_at\": \"2018-07-26T12:38:17.025Z\",\n      \"content\": {\n        \"component\": \"post\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"c47be9f0-47c3-4315-a95a-550f0c560eb5\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do...\",\n        \"categories\": [\n          \"5db2e929-6d3d-4564-982e-fa8513b0e5de\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"sort_by_date\": null,\n      \"position\": -10,\n      \"tag_list\": [ ],\n      \"is_startpage\": false,\n      \"parent_id\": 107348,\n      \"group_id\": \"854c3d1f-5d7f-4785-92ee-620a7c6ca7ee\",\n      \"alternates\": [ ],\n      \"translated_slugs\": [ ],\n      \"release_id\": null,\n      \"lang\": \"default\"\n    },\n    ...\n  ],\n  \"cv\": 1560257296,\n  \"rels\": [],\n  \"links\": []\n}\n
\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"content-delivery/v2/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v2","origin":"content-delivery","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a story object for the full_slug, id or uuid if authenticated using a preview or public token.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Path ParameterDescription
:full_slugUse the full_slug of your content entry to retrieve it.
:idUse the numeric id of your content entry to retrieve it
:uuidYou can use the uuid property to query for your content entry. To tell our API to use the uuid instead of the id append the query param find_by=uuid
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
find_byAdded if you want to query by uuid instead of using the numeric id
versionDefault: published. Possible values: draft, published
resolve_linksThe parameter resolve_links will automatically resolve internal links of the multilink field type. Resolved links can be found in the links property of the response. Possible values are story, url, and link. Learn more in this developer guide. You can resolve entries going one level deep.
resolve_relationsResolve relationships to other Stories of a multi-option or single-option field-type. Provide the component name and the field key as comma separated string. Resolved relations can be found in root of response under the property rels. The limit of resolved relationships is 100 Stories. With resolve_relations, you can resolve entries going 2 levels deep. Example: resolve_relations=page.author,page.categories; Read more about it in our tutorial.
from_releaseAccess version of specific release by release id
cvRead more about cache version at Cache invalidation
languageAdd the language i18n code as query parameter to receive a localized version
fallback_langDefine a custom fallback language (i18n code). By default the fallback language is the one defined in the space settings
resolve_assetsIf the value is 1 it will resolve assets in the content and include the meta information (only available with premium plans)
\n

Response

\n

The response will contain following attributes:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyA single story object
cvThe cache version
relsArray of related story objects when using the resolve_relations parameter
linksArray of link or story objects when using the resolve_links parameter
rel_uuidsArray of the uuids of all the related story objects if the resolve_relations parameter is in use and if the limit of resolvable relations is hit
link_uuidsArray of the uuids of all the links if the resolve_links parameter is in use and if the limit of resolvable links is hit
\n","example":"

Endpoint

\n
GET /v2/cdn/stories/(:full_slug|:id|:uuid)\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-07T01:31:36.134Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.000Z\",\n    \"content\": {\n      \"component\": \"post\",\n      // fields you define yourself are here\n      // those below we defined for the examples\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    },\n    \"position\": -20,\n    \"tag_list\": [ ],\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"d5ea8520-1296-40b7-8360-894461fdc5b6\",\n    \"alternates\": [ ],\n    \"translated_slugs\": [ ],\n    \"release_id\": null,\n    \"lang\": \"default\"\n  },\n  \"cv\": 1560257296,\n  \"rels\": [],\n  \"links\": []\n}\n
\n"},"core-resources/stories/stories":{"contentPath":"content-delivery/v2/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v2","origin":"content-delivery","title":"Stories","attributes":{"title":"Stories"},"content":"

Storyblok’s most used content delivery endpoint is trimmed for low latency and optimum availability.

\n

To achieve low latencies all over the world, Storyblok uses a CDN in front of the API. The official Storyblok SDKs already take care of cache invalidation, so you don’t have to. But if you are doing the API calls on your own, you will need to append the cv (cache version) parameter to the story API in order to get the latest version of the content. Have a look at Cache Invalidations for workflow descriptions.

\n","example":"

Endpoint

\n
GET /v2/cdn/stories/\n
\n

Additional Information

\n

You can load content entries from different spaces by using different access tokens for your requests. Your access tokens decide which space you want to access. With the query parameter version you can switch between draft and published. Checkout Cache Invalidations if you want to know more about how you are able to invalidate the cache of your published content.

\n"},"core-resources/stories/the-story-object":{"contentPath":"content-delivery/v2/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v2","origin":"content-delivery","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. To learn how to build a basic blog you can checkout our content building tutorial.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugThe slug / path you give this story
full_slugCombined parent folder and current slug
default_full_slugContains the full slug of the default language if the app Translatable Slugs is installed
created_atCreation date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
release_idId of your content stage (default: null)
langDefined language (default: "default")
contentYour defined custom content body object
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
parent_idParent folder id
group_idAlternates group id (uuid string)
alternatesArray of alternate objects
translated_slugsArray of translated slugs. Only gets included if the translatable slug app is installed
linksArray of all resolved links if the resolve_links parameter is in use
relsArray of all resolved stories if the resolve_relations parameter is in use
sort_by_dateThe date defined in the field "Sort by date" (Format: YYYY-mm-dd HH:MM)
tag_listArray of tag objects
meta_dataA JSON object to store data that are not editable and only are managed by the management api
pathThe path is the value of the field "Real path" which overwrites the full_slug with a custom path (usually this value is only used by the visual preview in the editing interface)
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    \"default_full_slug\": null,\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"sort_by_date\": \"2018-08-07T09:40:13.802Z\",\n    \"release_id\": null,\n    \"lang\": \"default\",\n    \"content\": {\n      \"component\": \"your_content_type\",\n      // and fields you define yourself are in here\n    },\n    \"position\": -20,\n    \"is_startpage\": false,\n    \"parent_id\": 107348,\n    \"group_id\": \"4add5c88-8d9c-4480-bfcf-63016c4c463e\",\n    \"translated_slugs\": [\n      {\n        \"path\": \"mein-beitrag\",\n        \"name\": \"Mein Beitrag\",\n        \"lang\": \"de\"\n      }\n      // only gets included if the translatable slug app is installed\n    ],\n    \"tag_list\": [\n      \"Red\"\n    ],\n    \"meta_data\": {\n      \"value_managed_by_mapi\": \"done\"\n    },\n    \"path\": \"/\",\n    \"alternates\": [\n      {\n        \"id\": 107381,\n        \"name\": \"Mein dritter Beitrag\",\n        \"slug\": \"my-post-in-another-folder\",\n        \"full_slug\": \"de/my-post-in-another-folder\",\n        \"is_folder\": false,\n        \"parent_id\": 107356\n      }\n    ]\n  }\n}\n
\n"},"core-resources/tags/retrieve-all-tags":{"contentPath":"content-delivery/v2/core-resources/tags/retrieve-all-tags","path":"core-resources/tags/retrieve-all-tags","lang":"v2","origin":"content-delivery","title":"Retrieve All Tags","attributes":{"title":"Retrieve All Tags"},"content":"

Returns an array of tag objects of one space. Use the version parameter and the correct token types to receive either draft and published or only published links.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
token (required)Your public or preview token
starts_withFilter by full_slug. Can be used to retrieve all tags form a specific folder. Examples: starts_with=de/beitraege, starts_with=en/posts
versionDefault: published. Possible values: draft, published
\n","example":"

Endpoint

\n
GET /v2/cdn/tags/?starts_with=posts/\n
\n

Example Request

\n\n

Example Response

\n
{\n  \"tags\": [\n    {\n      \"name\": \"red\",\n      \"taggings_count\": 14\n    },\n    {\n      \"name\": \"spicy\",\n      \"taggings_count\": 3\n    }\n  ]\n}\n
\n"},"core-resources/tags/tags":{"contentPath":"content-delivery/v2/core-resources/tags/tags","path":"core-resources/tags/tags","lang":"v2","origin":"content-delivery","title":"Tags","attributes":{"title":"Tags"},"content":"

Each tag is a string value that can be reused accross Stories to create features like word clouds, basic taggings for custom workflows, or similar usecases.

\n","example":"

Endpoint

\n
GET /v2/cdn/tags/\n
\n"},"core-resources/tags/the-tag-object":{"contentPath":"content-delivery/v2/core-resources/tags/the-tag-object","path":"core-resources/tags/the-tag-object","lang":"v2","origin":"content-delivery","title":"The Tag Object","attributes":{"title":"The Tag Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
namethe actual tag (value)
taggings_countCount of how many times this tag is currenlty in use accross all stories
\n","example":"

Example Object

\n
{\n  \"name\": \"red\",\n  \"taggings_count\": 1\n}\n
\n"},"examples/filtering/entries-between-two-numbers":{"contentPath":"content-delivery/v2/examples/filtering/entries-between-two-numbers","path":"examples/filtering/entries-between-two-numbers","lang":"v2","origin":"content-delivery","title":"Entries between two numbers","attributes":{"title":"Entries between two numbers"},"content":"

A common filter needed for a shop content structure implementation would be a simple price range products filter. In the examples above you already saw how to write one filter_query to receive all products that are greater or lower a specific price tag; In this example we will combine the gt-float and lt-float filters to get all products between a price range.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filter-entries-by-boolean-value":{"contentPath":"content-delivery/v2/examples/filtering/filter-entries-by-boolean-value","path":"examples/filtering/filter-entries-by-boolean-value","lang":"v2","origin":"content-delivery","title":"Filter entries by boolean value","attributes":{"title":"Filter entries by boolean value"},"content":"

Imagine you want to allow your editors to have featured products with a boolean flag in your content schema. To filter all products to only receive the featured once you can utilize the filter_query operation in to check for an exact value.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Coat\",\n      \"created_at\": \"2018-12-10T17:50:34.547Z\",\n      \"published_at\": \"2018-12-10T17:50:47.977Z\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on GREATER than 100 and LOWER than 300\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      \"lang\": \"default\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/filtering/filters":{"contentPath":"content-delivery/v2/examples/filtering/filters","path":"examples/filtering/filters","lang":"v2","origin":"content-delivery","title":"Filter Examples","attributes":{"title":"Filter Examples"},"content":"

We've provided some common request example that combine multiple and different filter_querys with sorting that you might need during your implementation.

\n","example":""},"examples/ordering/order":{"contentPath":"content-delivery/v2/examples/ordering/order","path":"examples/ordering/order","lang":"v2","origin":"content-delivery","title":"Ordering / Sorting","attributes":{"title":"Ordering / Sorting"},"content":"

We've provided some common request examples that make use of the sort_by query parameter.

\n","example":""},"examples/ordering/sort-by-admin-interface":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-admin-interface","path":"examples/ordering/sort-by-admin-interface","lang":"v2","origin":"content-delivery","title":"Sort by admin interface","attributes":{"title":"Sort by admin interface"},"content":"

Some of you might like to define the order of your entries in Storyblok, utilizing the move functionality. To receive the order just like in Storyblok you can make use of the position property.

\n

Attention: The position property is only sorted within one folder

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // sorted by this property\n      \"position\": -10,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-content-attribute":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-content-attribute","path":"examples/ordering/sort-by-content-attribute","lang":"v2","origin":"content-delivery","title":"Sort by content attribute","attributes":{"title":"Sort by content attribute"},"content":"

To sort by a field that you have defined in your content schema of your content type, you're able to use the sort_by parameter as shown below.

\n
\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=content.name:ascSort by the content type attribute name
\n

As you can see it works just like with the default properties of a story object but prepending the context content. before the field.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        // sorted by this property\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/ordering/sort-by-story-property":{"contentPath":"content-delivery/v2/examples/ordering/sort-by-story-property","path":"examples/ordering/sort-by-story-property","lang":"v2","origin":"content-delivery","title":"Sort by story object property","attributes":{"title":"Sort by story object property"},"content":"

You can sort your content entries by custom and predefined property using the sort_by parameter and field:asc or field:desc as value.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
QueryDescription
sort_by=name:ascSort by the Story object property name
sort_by=position:descSort by the Story object property position (same as in the admin interface)
sort_by=first_published_at:descSort by the Story object property first_published_at
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      // sorted by this property\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/starts-with/draft-entries-in-folder":{"contentPath":"content-delivery/v2/examples/starts-with/draft-entries-in-folder","path":"examples/starts-with/draft-entries-in-folder","lang":"v2","origin":"content-delivery","title":"Draft version of entries in folder xx","attributes":{"title":"Draft version of entries in folder xx"},"content":"

You can use the version param combined with the starts_with param to load entries that are in a specific folder.

\n
\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?version=draft&starts_with=products/all entries in folder products
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-in-folder":{"contentPath":"content-delivery/v2/examples/starts-with/entries-in-folder","path":"examples/starts-with/entries-in-folder","lang":"v2","origin":"content-delivery","title":"Entries in folder xx","attributes":{"title":"Entries in folder xx"},"content":"

You can use the starts_with parameter to load entries that are in a specific folder. This is useful if you create your articles in an articles/ folder, products/ in a products folder.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all entries in folder products
?starts_with=de/products/all entries with de values in translatable fields in folder products
?starts_with=articles/all entries in folder articles
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/entries-of-language-xx":{"contentPath":"content-delivery/v2/examples/starts-with/entries-of-language-xx","path":"examples/starts-with/entries-of-language-xx","lang":"v2","origin":"content-delivery","title":"Entries of language xx","attributes":{"title":"Entries of language xx"},"content":"

The field type translation will map the available language keys with the folder paths. So for example if you have a folder Products with multiple products and those products do have translatable fields you are able to load those translated version with prepending the language key infront of the slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SlugDescription
?starts_with=products/all products of default language
?starts_with=de/products/all products with de/ values in translatable fields
?starts_with=de/*all entries with de/ values in translatable fields without particular folder
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T18:27:28.137Z\",\n      \"id\": 461935,\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        // translatable field\n        \"name\": \"Raumschiff\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        \"price\": \"1700000000\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"de/products/spaceship\"\n      ...\n    },\n    ...\n    {\n      \"name\": \"Shoe\",\n      \"lang\": \"de\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T18:27:01.870Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        // translatable field\n        \"name\": \"Schuh\",\n        // translatable field\n        \"description\": \"Deutsches Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet.\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"10\",\n        \"component\": \"product\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"de/products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"examples/starts-with/starts-with":{"contentPath":"content-delivery/v2/examples/starts-with/starts-with","path":"examples/starts-with/starts-with","lang":"v2","origin":"content-delivery","title":"Starts With Examples","attributes":{"title":"Starts With Examples"},"content":"

We've provided some common request example that make use of the starts_with query parameter.

\n","example":""},"examples/useful/load-draft-version":{"contentPath":"content-delivery/v2/examples/useful/load-draft-version","path":"examples/useful/load-draft-version","lang":"v2","origin":"content-delivery","title":"Load draft version","attributes":{"title":"Load draft version"},"content":"

Appending the query paramter version with the value draft (eg. version=draft) and using the preview token as token will allow you to access the draft versions of content entries. You can perform all kind of queries, sorting and filterings with either published or draft versions.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/load-latest-cache-version-timestamp":{"contentPath":"content-delivery/v2/examples/useful/load-latest-cache-version-timestamp","path":"examples/useful/load-latest-cache-version-timestamp","lang":"v2","origin":"content-delivery","title":"Load latest CV timestamp","attributes":{"title":"Load latest CV timestamp"},"content":"

With the cache invalidation provided by Storyblok utilizing the cv (cache version) query paramter you're able to always hit the latest version of your content. This can either be a server side generated timestmap that receives an update if our webhook triggers a publish event or you fetch it every time you boot up your application.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"space\": {\n    \"name\": \"Blog\",\n    \"domain\": \"https://www.storyblok.com/\",\n    // version timestamp to use for further requests\n    \"version\": 1544466448\n  }\n}\n
\n"},"examples/useful/load-without-startpage":{"contentPath":"content-delivery/v2/examples/useful/load-without-startpage","path":"examples/useful/load-without-startpage","lang":"v2","origin":"content-delivery","title":"Load without startpage","attributes":{"title":"Load without startpage"},"content":"

Appending the query paramter is_startpage with the value false (eg. is_startpage=false) to retrieve only entries of a folder and skipping the startpage you've defined in that folder.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      // all stories will have the is_startpage flag set to false\n      \"is_startpage\": false,\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\"\n    },\n    { ... },\n    { ... },\n    ...\n  ]\n}\n
\n"},"examples/useful/localized-by-uuid":{"contentPath":"content-delivery/v2/examples/useful/localized-by-uuid","path":"examples/useful/localized-by-uuid","lang":"v2","origin":"content-delivery","title":"Load story localized by uuid","attributes":{"title":"Load story localized by uuid"},"content":"

Appending the query parameter language in combination with find_by=uuid allows you to load localized versions of your entries without knowing its slug. If you know the slug of your content entry you can simply prepend the language code, eg. /posts/my-first-post would be /de/posts/my-first-post. As you only have a UUID by hand, and you do know the slug you can use the language parameter instead.

\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"story\": {\n    \"name\": \"My third post\",\n    \"created_at\": \"2018-04-24T11:57:29.302Z\",\n    \"published_at\": \"2018-12-10T13:39:31.999Z\",\n    \"id\": 107350,\n    \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n    \"lang\": \"de\",\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"Mein zweiter Titel\",\n      \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"component\": \"post\",\n      // resolved relationship by including the story \n      // object of the reference entry\n      \"categories\": [\n        ...\n      ],\n      \"description\": \"Beschreibung vom zweiten Beitrag\"\n    },\n    \"slug\": \"my-third-post\",\n    \"full_slug\": \"posts/my-third-post\",\n    ...\n  }\n}\n
\n"},"examples/useful/resolve-relationships":{"contentPath":"content-delivery/v2/examples/useful/resolve-relationships","path":"examples/useful/resolve-relationships","lang":"v2","origin":"content-delivery","title":"Load with resolved relationships","attributes":{"title":"Load with resolved relationships"},"content":"

Resolve relationships to other Stories (in the first level of nesting) of a multi-option or single-option field-type. Provide the field key(s) as comma separated string to resolve specific fields.

\n

Example: resolve_relations=categories.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": \"n4a2123-e323-43ca-ae59-5cd7d38683cb\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // resolved relationship by including the story \n        // object of the reference entry\n        \"categories\": [\n          {\n            \"name\": \"Design\",\n            \"created_at\": \"2018-04-24T11:59:26.578Z\",\n            \"published_at\": \"2018-04-24T12:07:46.278Z\",\n            \"id\": 107357,\n            \"uuid\": \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n            \"content\": {\n              \"_uid\": \"6fc4a8e1-52a1-46b3-85b2-a1a93452c97a\",\n              \"name\": \"Design\",\n              \"image\": \"//a.storyblok.com/f/44203/1177x841/8c69867d6e/undraw_lighthouse2_1ebd.png\",\n              \"component\": \"category\"\n            },\n            \"slug\": \"design\",\n            \"full_slug\": \"categories/design\",\n            ...\n          }\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    { ... }\n  ]\n}\n
\n"},"examples/useful/useful":{"contentPath":"content-delivery/v2/examples/useful/useful","path":"examples/useful/useful","lang":"v2","origin":"content-delivery","title":"Useful","attributes":{"title":"Useful"},"content":"

Other request examples that might be useful, without specific category like ordering/sorting, starts with or filtering.

\n","example":""},"filter-queries/operation-all-in-array":{"contentPath":"content-delivery/v2/filter-queries/operation-all-in-array","path":"filter-queries/operation-all-in-array","lang":"v2","origin":"content-delivery","title":"Operation: all_in_array","attributes":{"title":"Operation: `all_in_array`","sidebarTitle":"all_in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains all of the values provided. As soon as all of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: all_in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][all_in_array]=sportsid,esportsidall entries of category sportsid and esportsid in field categories
filter_query[tags][all_in_array]=food,healthall entries of category food and health
filter_query[related_products][all_in_array]=product-one-id,product-two-idall entries with product-one and product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because all_in_array matches if ALL ids are present.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-any-in-array":{"contentPath":"content-delivery/v2/filter-queries/operation-any-in-array","path":"filter-queries/operation-any-in-array","lang":"v2","origin":"content-delivery","title":"Operation: any_in_array","attributes":{"title":"Operation: `any_in_array`","sidebarTitle":"any_in_array"},"content":"

Filter your entries by checking if your custom array attribute (any field inside the content field) contains one of the values provided. As soon as one of the provided values separated with , are in the array field, the story object will be in the response.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: any_in_array

\n

Get all content entries that is refered to others in a N:N relationship or if you want to get all entries with a specific value in one of it's array fields. You can combined this query with the starts_with, pagination, and other query options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[categories][any_in_array]=sportsid,esportsidall entries of category sportsid or esportsid in field categories
filter_query[tags][any_in_array]=food,healthall entries of category food or health
filter_query[related_products][any_in_array]=product-one-id,product-two-idall entries with product-one or product-two in the field related_products
\n","example":"

Example Request (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n\n

Example Response (all entries of category 9aa72a2f-04ae-48df-b71f-25f53044dc97 and 84550816-245d-4fe6-8ae8-b633d4a328f4 in field categories)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"id\": 107351,\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T13:39:18.061Z\",\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor...\",\n        \"schedule\": \"\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because any_in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },{\n      \"name\": \"My third post\",\n      \"created_at\": \"2018-04-24T11:57:29.302Z\",\n      \"published_at\": \"2018-12-10T13:39:31.999Z\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\\nquis nostrud exercitation.\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        // filtered on this categories attribute;\n        // In response because any_in_array matches if ONE id does.\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-date":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-date","path":"filter-queries/operation-gt-date","lang":"v2","origin":"content-delivery","title":"Operation: gt_date","attributes":{"title":"Operation: `gt_date`","sidebarTitle":"gt_date"},"content":"

Think of it at AFTER a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are greater (eg. later) than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_date

\n

You can create custom dates that allow you to schedule posts, launch products and with this query see all entries that are scheduled after a specific date, schedule christmas teaser. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query those specific entries.

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][gt_date]=2019-12-24 09:00all entries with date field schedule after "2019-12-24 09:00"
\n","example":"

Example Request (All posts scheduled AFTER now)

\n\n

Example Response (All posts scheduled AFTER now)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 107351,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my first post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt_date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2019-12-24 10:00\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-gt-float":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-float","path":"filter-queries/operation-gt-float","lang":"v2","origin":"content-delivery","title":"Operation: gt_float","attributes":{"title":"Operation: `gt_float`","sidebarTitle":"gt_float"},"content":"

Allows you to filter fields of type float, string (float value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_float]=100.50all entries with price field greater than 100.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=99.50all entries with price field greater than 99.50
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
filter_query[price][gt_float]=1999.50all entries with price field greater than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"17000000.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"27.50\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-gt-int":{"contentPath":"content-delivery/v2/filter-queries/operation-gt-int","path":"filter-queries/operation-gt-int","lang":"v2","origin":"content-delivery","title":"Operation: gt_int","attributes":{"title":"Operation: `gt_int`","sidebarTitle":"gt_int"},"content":"

Allows you to filter fields of type number, string (number value), or custom field type with numbers in the schema. Returns all entries that are GREATER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: gt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for greater than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][gt_int]=100all entries with price field greater than 100
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=99all entries with price field greater than 99
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
filter_query[price][gt_int]=1999all entries with price field greater than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Spaceship\",\n      \"id\": 461935,\n      \"created_at\": \"2018-12-10T17:51:25.161Z\",\n      \"published_at\": \"2018-12-10T17:52:14.888Z\",\n      \"uuid\": \"14d950c6-0a8f-4088-98e3-73efced9ff6d\",\n      \"content\": {\n        \"_uid\": \"00b45e23-5dc5-4398-9b34-e87ae4ed42e6\",\n        \"name\": \"Spaceship\",\n        \"image\": \"//a.storyblok.com/f/44203/6016x4016/995fde1190/spaceship.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"1700000000\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"spaceship\",\n      \"full_slug\": \"products/spaceship\",\n      ...\n    },\n    {\n      \"name\": \"Coat\",\n      \"id\": 461933,\n      \"uuid\": \"0186a027-4f04-4750-b743-8855ad4e71d4\",\n      \"content\": {\n        \"_uid\": \"baa8057c-a928-4fda-b322-9499a081a9c9\",\n        \"name\": \"Coat\",\n        \"image\": \"//a.storyblok.com/f/44203/5616x3744/8cff02e5d6/coat.jpg\",\n        // filtered on this price attribute;\n        // value of field price needs to be greater than 100\n        \"price\": \"270\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"coat\",\n      \"full_slug\": \"products/coat\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-in":{"contentPath":"content-delivery/v2/filter-queries/operation-in","path":"filter-queries/operation-in","lang":"v2","origin":"content-delivery","title":"Operation: in","attributes":{"title":"Operation: `in`","sidebarTitle":"in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is equal to one of the values provided.

\n

Use-cases: in

\n

Get all content entries that is refered to another in a 1:N relationship or if you want to get all entries with a specific value in one of it's fields.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][in]=authorId&starts_with=posts/all Posts by one Author
filter_query[customer][in]=customerId&starts_with=orders/&all Orders by one Customer
filter_query[post][in]=postId&starts_with=comments/all Comments by one Post
filter_query[seo.title][in]=Titleall entries with field seo and a nested field title and the value Title
filter_query[component][in]=postall entries of one Content Type
filter_query[component][in]=post,newsall entries of Content Type "post" or "news"
filter_query[featured][in]=trueall entries where the field featured is true
\n","example":"

Example Request (all Posts by one Author)

\n\n

Example Response (all Posts by one Author)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-is":{"contentPath":"content-delivery/v2/filter-queries/operation-is","path":"filter-queries/operation-is","lang":"v2","origin":"content-delivery","title":"Operation: is","attributes":{"title":"Operation: `is`","sidebarTitle":"is"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) is of a specific type.

\n

Use-cases: is

\n

Get all content entries that have a specific type of value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[authors][is]=empty_arrayall posts that have no authors
filter_query[orders][is]=not_empty_array&starts_with=customers/&all customers by that have orders
filter_query[message][is]=empty&starts_with=comments/all comments with an empty message
filter_query[message][is]=emptyall the entries with a blank/empty message field, and also the entries without the message field. The value empty in the filter is used to identify entries with a blank field and/or entries without a specific field. If you need to select only the entries that have the field message and the value of the message field is blank, you should use the like operator with no value in the filter_query parameter. For example filter_query[message][like]=.
filter_query[my_plugin.show_in][is]=trueall entries with field my_plugin and a nested field show_in that have the value true
filter_query[enabled][is]=falseall entries where enabled is false
filter_query[image][is]=nullall entries where the image attribute is null
filter_query[featured][is]=not_nullall entries where the featured attribute is null
\n","example":"

Example Request (all posts with a schedule date)

\n\n

Example Response (all posts with a schedule date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My third post\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the third\"\n      },\n      \"slug\": \"my-third-post\",\n      \"full_slug\": \"posts/my-third-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-like":{"contentPath":"content-delivery/v2/filter-queries/operation-like","path":"filter-queries/operation-like","lang":"v2","origin":"content-delivery","title":"Operation: like","attributes":{"title":"Operation: `like`","sidebarTitle":"like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "like" the value provided.

\n

Use-cases: like

\n

Get all content entries that are containing a specific value.

\n

You can combine this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][like]=john*all entries starting with the name "John"
filter_query[name][like]=*john*all entries containing the name "John"
filter_query[name][like]=all entries with the field name with empty value. The entries without the name field will not be included
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"John Mustermann\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"John Mustermann\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"john-mustermann\",\n      \"full_slug\": \"authors/john-mustermann\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-date":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-date","path":"filter-queries/operation-lt-date","lang":"v2","origin":"content-delivery","title":"Operation: lt_date","attributes":{"title":"Operation: `lt_date`","sidebarTitle":"lt_date"},"content":"

Think of it at BEFORE a specific date. Allows you to filter fields of type date/datetime (Format: YYYY-mm-dd HH:MM). Returns all entries that are lower than (eg. before) the provided date.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_date

\n

You can create custom dates that allow you to schedule posts, launch products, schedule christmas teaser and more. Creating a field with the type date does not effect the published state of one content entry, but allows your frontend / server side implementation to query all entries before a specific date (eg. today)

\n
\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[schedule][lt_date]=2018-12-24 09:00all entries with date field schedule before "2018-12-24 09:00"
\n","example":"

Example Request (All posts scheduled BEFORE date)

\n\n

Example Response (All posts scheduled BEFORE date)

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My second Post\",\n      \"created_at\": \"2018-04-24T11:57:29.321Z\",\n      \"published_at\": \"2018-12-10T14:10:18.964Z\",\n      \"id\": 123122,\n      \"uuid\": \"bfea4895-8a19-4e82-ae1c-1c591dce3094\",\n      \"content\": {\n        \"_uid\": \"2caef8f8-9c37-46b4-af19-8744ec5e1053\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"This is my second post title\",\n        \"author\": 107354,\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\\ntempor incididunt...\",\n        // filtered on this schedule attribute;\n        // In response because gt-date matches if \n        // date in entry is GREATER than provided value\n        \"schedule\": \"2018-04-22 14:32\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\",\n          \"84550816-245d-4fe6-8ae8-b633d4a328f4\"\n        ],\n        \"description\": \"Description of the second\"\n      },\n      \"slug\": \"my-second-post\",\n      \"full_slug\": \"posts/my-second-post\",\n      ...\n    },\n    ...\n  ]\n}\n
\n"},"filter-queries/operation-lt-float":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-float","path":"filter-queries/operation-lt-float","lang":"v2","origin":"content-delivery","title":"Operation: lt_float","attributes":{"title":"Operation: `lt_float`","sidebarTitle":"lt_float"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_float

\n

As soon as you need to query for a specific float value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_float]=100.50all entries with price field lower than 100.50
filter_query[price][lt_float]=99.50all entries with price field lower than 99.50
filter_query[price][lt_float]=1999.50all entries with price field lower than 1999.50 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"0.00124\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"74.99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-lt-int":{"contentPath":"content-delivery/v2/filter-queries/operation-lt-int","path":"filter-queries/operation-lt-int","lang":"v2","origin":"content-delivery","title":"Operation: lt_int","attributes":{"title":"Operation: `lt_int`","sidebarTitle":"lt_int"},"content":"

Allows you to filter fields of type number, or custom field type with numbers in the schema. Returns all entries that are LOWER than the provided value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n

Use-cases: lt_int

\n

As soon as you need to query for a specific integer value in your content entries, this is your go to filter for lower than checks. You can build price filter for your products if your price value is in the CMS and not your PIM or any other number oriented kind of filter.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[price][lt_int]=100all entries with price field lower than 100
filter_query[price][lt_int]=99all entries with price field lower than 99
filter_query[price][lt_int]=1999all entries with price field lower than 1999 (no thousand separator)
\n","example":"

Example Request

\n\n

Example Response

\n
{  \n  \"stories\": [\n    {\n      \"name\": \"Paper\",\n      \"created_at\": \"2018-12-10T17:50:54.023Z\",\n      \"published_at\": \"2018-12-10T17:51:18.988Z\",\n      \"id\": 461934,\n      \"uuid\": \"7b372086-0c79-4890-9f01-2e6e41098f87\",\n      \"content\": {\n        \"_uid\": \"5bbcd6f0-494a-42bd-b135-a1f7216c27ce\",\n        \"name\": \"Paper\",\n        \"image\": \"//a.storyblok.com/f/44203/4032x3024/747174042a/paper.jpg\",\n        \"price\": \"24\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"paper\",\n      \"full_slug\": \"products/paper\",\n      ...\n    },\n    {\n      \"name\": \"Shoe\",\n      \"created_at\": \"2018-12-10T17:49:40.741Z\",\n      \"published_at\": \"2018-12-10T17:50:30.588Z\",\n      \"id\": 461932,\n      \"uuid\": \"9176c97c-2602-4878-80f0-ea89c9eb26b7\",\n      \"content\": {\n        \"_uid\": \"89dbca77-6df2-4c42-bcd5-a2d81277fe4b\",\n        \"name\": \"Shoe\",\n        \"image\": \"//a.storyblok.com/f/44203/2880x1920/3af2f49951/shoe.jpg\",\n        \"price\": \"99\",\n        \"component\": \"product\",\n        \"description\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat mauris, faucibus quis pharetra sit amet, pretium ac libero. Etiam vehicula eleifend bibendum.\"\n      },\n      \"slug\": \"shoe\",\n      \"full_slug\": \"products/shoe\",\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-in":{"contentPath":"content-delivery/v2/filter-queries/operation-not-in","path":"filter-queries/operation-not-in","lang":"v2","origin":"content-delivery","title":"Operation: not_in","attributes":{"title":"Operation: `not_in`","sidebarTitle":"not_in"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) does not have a value that is equal to one of the values provided.

\n

Use-cases: not_in

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[author][not_in]=authorId&starts_with=posts/all Posts except one Author
filter_query[seo.title][not_in]=Titleall entries with field seo and a nested field title and not the value Title
filter_query[component][not_in]=postall entries without one Content Type
filter_query[component][not_in]=post,newsall entries that are not of Content Type "post" or "news"
filter_query[featured][not_in]=trueall entries where the field featured is not true
\n","example":"

Example Request (all Posts without specific Author)

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"My first post\",\n      \"id\": 107349,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n        \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n        \"title\": \"My second title\",\n        // filtered on this author attribute\n        \"author\": \"33f4fb1b-5243-4bf2-246e-7d5753607421\",\n        \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod...\",\n        \"schedule\": \"2018-08-31 21:59\",\n        \"component\": \"post\",\n        \"categories\": [\n          \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n        ],\n        \"description\": \"Description of the first\"\n      },\n      \"slug\": \"my-first-post\",\n      \"full_slug\": \"posts/my-first-post\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/operation-not-like":{"contentPath":"content-delivery/v2/filter-queries/operation-not-like","path":"filter-queries/operation-not-like","lang":"v2","origin":"content-delivery","title":"Operation: not_like","attributes":{"title":"Operation: `not_like`","sidebarTitle":"not_like"},"content":"

Filter your entries by checking if your custom attribute (any field inside the content field) has a value that is "not_like" the value provided.

\n

Use-cases: not_like

\n

Get all content entries that are containing a specific value.

\n

You can combined this query with the starts_with, pagination, other filter query, and query/sorting options of Stories if needed.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Filter QueryDescription
filter_query[name][not_like]=john*all entries not starting with the name "John"
filter_query[name][not_like]=*john*all entries not containing the name "John"
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    {\n      \"name\": \"Mister Master\",\n      \"id\": 107350,\n      \"uuid\": \"ac0d2ed0-e323-43ca-ae59-5cd7d38683cb\",\n      \"content\": {\n        \"_uid\": \"81c6e3c4-4cad-485f-ae35-18958dcf4cd2\",\n        \"name\": \"Mister Master\",\n        \"component\": \"author\"\n      },\n      \"slug\": \"mister-master\",\n      \"full_slug\": \"authors/mister-master\",\n      ...\n    },\n    {\n      ...\n    }\n  ]\n}\n
\n"},"filter-queries/overview":{"contentPath":"content-delivery/v2/filter-queries/overview","path":"filter-queries/overview","lang":"v2","origin":"content-delivery","title":"Filter Queries","attributes":{"title":"Filter Queries","sidebarTitle":"Operations","showChildren":true},"content":"

With the filter_query you're able to filter by specific attribute(s) of your stories. The filter_query parameter accepts an attribute and an operation key.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationDescription
isMatches a value type
inMatches exactly one value
not_inMatches all without the given value
likeMatches exactly one value with a wildcard search using * (Example: "john*")
not_likeMatches all without the given value
any_in_arrayMatches any value of given array
all_in_arrayMust match all values of given array
gt_dateGreater than date (Format: YYYY-mm-dd HH:MM)
lt_dateLess than date (Format: 2018-03-03 10:00)
gt_intGreater than integer value
lt_intLess than integer value
gt_floatGreater than float value
lt_floatLess than float value
\n

You can find one example for each filter query in the description page for each operation, and examples that combine multiple filters in the filter examples section.

\n

By default the applied filters are connected by the AND operator but it is also possible to apply filters by the OR operator using the keyword __or. Following an example using the Javascript SDK:

\n
StoryblokClient.get('cdn/stories', {\n  filter_query: {\n    __or: [\n      { color: { in: 'red' } },\n      { background: { in: 'blue' } }\n    ],\n    component: { in: 'article' }\n  }\n})\n
\n","example":"

Endpoint

\n
GET /v2/cdn/stories/?filter_query[ATTRIBUTE][OPERATION]=VALUE,...\n
\n

Example Story Object

\n

We will demonstrate use-cases and example on a simple blog content structure as shown below. You're not limited by the fields in this example. Every field in the content field can be used as the ATTRIBUTE key in your filter_query.

\n
{\n  \"story\": {\n    // default story object fields\n    \"content\": {\n      \"component\": \"post\",\n        // attributes you define yoruself are located here\n      \"image\": \"//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg\",\n      \"title\": \"My second title\",\n      \"author\": \"22f4fb1b-50b3-4bf2-816e-7d589e307421\",\n      \"content\": \"Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\",\n      \"schedule\": \"2018-08-31 21:59\",\n      \"description\": \"Description of the third\",\n      \"categories\": [\n        \"9aa72a2f-04ae-48df-b71f-25f53044dc97\"\n      ]\n    }\n  }\n}\n
\n"},"topics/authentication":{"contentPath":"content-delivery/v2/topics/authentication","path":"topics/authentication","lang":"v2","origin":"content-delivery","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your access token in API requests. You can manage your API tokens in the Dashboard of each space. In your Space Dashboard at app.storyblok.com you will be able to generate two types of tokens

\n\n

Public and Preview tokens are read only and do not allow you or others to write or delete entries in your space. The public token can be published. All tokens can be revoked at any point in time. You can also create multiple tokens of the same type to grant access for specific use-cases. For CRUD operations check out the Management API documentation.

\n

If you're using the Content Staging (eg. Release and Schedule) feature you can also create Public and Preview tokens for each staging environment.

\n","example":"

Example Request

\n
\n\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// init with access token\nconst Storyblok = new StoryblokClient({\n  accessToken: 'wANpEQEsMYGOwLxwXQ76Ggtt',\n  cache: {\n    clear: 'auto',\n    type: 'memory'\n  }\n})\n
\n

or use directly as parameter

\n
\n\n\n

To perform a GET request with your token append the query parameter token with your preview or public token as shown in the example above.

\n"},"topics/cache-invalidation":{"contentPath":"content-delivery/v2/topics/cache-invalidation","path":"topics/cache-invalidation","lang":"v2","origin":"content-delivery","title":"Cache Invalidation","attributes":{"title":"Cache Invalidation"},"content":"

Storyblok uses a CDN in front of the API to deliver your content in the fastest way possible. To have a high cache hit rate for published content the Storyblok appends a parameter called cv which stands for "cache version". This parameter is an integer that contains a Unix timestamp.

\n

The "cache version" is always updating if you publish any new content in Storyblok and you can retrieve it by doing an API call to a CDN resource without providing the cv parameter /v2/cdn/stories?token=wANpEQEsMYGOwLxwXQ76Ggtt&version=published.

\n

If you don't use our official JavaScript SDK which handles the cv parameter automatically, you need to make sure to pass the cv parameter in your requests like following:

\n
    \n
  1. Do a request to the stories endpoint /v2/cdn/stories without appending the cv parameter
  2. \n
  3. Check the response body for the cv attribute
  4. \n
  5. Save the cv attribute in memory and use it for the subsequent requests
  6. \n
  7. When publishing new content clear the attribute from the memory and save a new one by starting at step 1.
  8. \n
\n

If an resource's response does not provide a cv parameter, it is possible to receive the most recent version of the data by providing a cv parameter in your request that is set to the Unix timestamp representing the current time.

\n

When changing a page/folder's slug in the UI, the cached_url to reflect the changes, we suggest for cases when the slug changes often or a large number of stories is being moved, to use the resolve_links parameter and url as its value to get the latest slug of the linked stories.

\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"story\": {\n    \"name\": \"Example\",\n    \"slug\": \"example\",\n    ...\n  },\n  \"cv\": 1541863983\n}\n
\n

Use the cv attribute value as cv parameter for the subsequent requests:

\n\n"},"topics/errors":{"contentPath":"content-delivery/v2/topics/errors","path":"topics/errors","lang":"v2","origin":"content-delivery","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"content-delivery/v2/topics/introduction","path":"topics/introduction","lang":"v2","origin":"content-delivery","title":"Content Delivery API V2 Reference","attributes":{"title":"Content Delivery API V2 Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Content Delivery API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code, tokens found on the dashboard however are read only and therefore fine to use in a client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

To make the API as explorable as possible, accounts have draft versions and published version of API tokens. To access the draft version of your content you can use the preview token, and for receiving published content you can use the public token. The preview token is able to also load the published content. To switch between those versions you can append the query parameter version=draft/published and using the appropriate token to perform a draft or published version call.

\n

The requests in the right sidebar are designed to work as is. The sample requests are performed using a preview API token of a test space with demo content.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Content Delivery API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL:

\n
https://api.storyblok.com/v2\n
\n

Base URL for spaces created in the US:

\n
https://api{-us}.storyblok.com/v2\n
\n

Base URL for spaces created in China:

\n
https://app.storyblokchina.cn\n
\n"},"topics/pagination":{"contentPath":"content-delivery/v2/topics/pagination","path":"topics/pagination","lang":"v2","origin":"content-delivery","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"content-delivery/v2/topics/rate-limit","path":"topics/rate-limit","lang":"v2","origin":"content-delivery","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The content delivery api has a rate limit of 50 requests per second for uncached request. The limit decreases if you use a higher page size than 25.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Type of requestRate Limit
Cached requests from the CDN> 1000 per second
Single content item, datasources, ...50 per second
Listings with page size below and with 2550 per second
Listings with page size between 25 and 5015 per second
Listings with page size between 50 and 7510 per second
Listings with page size between 75 and 1005 per second
\n"}} \ No newline at end of file diff --git a/static/management.methods.v1.json b/static/management.methods.v1.json index 3cbbb4e4..7936a913 100644 --- a/static/management.methods.v1.json +++ b/static/management.methods.v1.json @@ -1 +1 @@ -{"core-resources/activities/activities":{"contentPath":"management/v1/core-resources/activities/activities","path":"core-resources/activities/activities","lang":"v1","origin":"management","title":"Activities","attributes":{"title":"Activities"},"content":"

Activities are created on update, create and delete actions in Storyblok for resources like stories, components, spaces, datasources and datasource entries.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/activities/:activity_id\n
\n"},"core-resources/activities/retrieve-multiple-activities":{"contentPath":"management/v1/core-resources/activities/retrieve-multiple-activities","path":"core-resources/activities/retrieve-multiple-activities","lang":"v1","origin":"management","title":"Retrieve multiple Activities","attributes":{"title":"Retrieve multiple Activities"},"content":"

Returns an array of activity objects. Can be filtered on date ranges and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
created_at_gteActivity creation date is greater than YYYY-MM-DD
created_at_lteActivity creation date is lower than YYYY-MM-DD
\n","example":"

Example Request

\n\n

You will receive an array of activity objects as response.

\n"},"core-resources/activities/retrieve-one-activity":{"contentPath":"management/v1/core-resources/activities/retrieve-one-activity","path":"core-resources/activities/retrieve-one-activity","lang":"v1","origin":"management","title":"Retrieve one Activity","attributes":{"title":"Retrieve one Activity"},"content":"

Returns a single activity object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded activity object as response.

\n"},"core-resources/activities/the-activity-object":{"contentPath":"management/v1/core-resources/activities/the-activity-object","path":"core-resources/activities/the-activity-object","lang":"v1","origin":"management","title":"The Activity Object","attributes":{"title":"The Activity Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
trackable_idId of reference object that was changes
trackable_typeType of the referenced object
owner_idId of User that created the object
owner_typeDefault: "User"
keyKey defined by type.action (eg: story.create, story.update, component.create)
parametersAdditional parameter passed; Default: null
recipient_idDefault: null
recipient_typeDefault: null
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
space_idSpace ID reference
\n","example":"

Example Object

\n
{\n  \"activity\": {\n    \"id\": 5405,\n    \"trackable_id\": null,\n    \"trackable_type\": null,\n    \"owner_id\": null,\n    \"owner_type\": null,\n    \"key\": null,\n    \"parameters\": {\n    },\n    \"recipient_id\": null,\n    \"recipient_type\": null,\n    \"created_at\": \"2018-11-10T15:32:58.649Z\",\n    \"updated_at\": \"2018-11-10T15:32:58.649Z\",\n    \"space_id\": 606\n  }\n}\n
\n"},"core-resources/approvals/approvals":{"contentPath":"management/v1/core-resources/approvals/approvals","path":"core-resources/approvals/approvals","lang":"v1","origin":"management","title":"Approvals","attributes":{"title":"Approvals"},"content":"

Triggers an approval message for a specific content entry. It allows you to send an approval request to another collaborator of the space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/approvals/:approval_id\n
\n"},"core-resources/approvals/create-approval":{"contentPath":"management/v1/core-resources/approvals/create-approval","path":"core-resources/approvals/create-approval","lang":"v1","origin":"management","title":"Create Approval","attributes":{"title":"Create Approval"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
\n","example":"

Example Request Object

\n
{\n  \"approval\": {\n    \"story_id\": 1066,\n    \"approver_id\": 1028\n  }\n}\n
\n

Example Request

\n\n

Example Response Object

\n
{\n  \"approval\": {\n    \"id\": 11,\n    \"status\": \"pending\"\n  }\n}\n
\n"},"core-resources/approvals/create-release-approval":{"contentPath":"management/v1/core-resources/approvals/create-release-approval","path":"core-resources/approvals/create-release-approval","lang":"v1","origin":"management","title":"Create Release Approval","attributes":{"title":"Create Release Approval"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
release_idID of the release that should be approved
\n","example":"

Example Request Object

\n
{\n  \"approval\": {\n    \"story_id\": 1067,\n    \"approver_id\": 1030\n  },\n  \"release_id\": 16\n}\n
\n

Example Request

\n\n

Example Response Object

\n
{\n  \"approval\": {\n    \"id\": 12,\n    \"status\": \"pending\"\n  }\n}\n
\n"},"core-resources/approvals/delete-approval":{"contentPath":"management/v1/core-resources/approvals/delete-approval","path":"core-resources/approvals/delete-approval","lang":"v1","origin":"management","title":"Delete an Approval","attributes":{"title":"Delete an Approval"},"content":"

Delete an approval by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/approvals/retrieve-multiple-approvals":{"contentPath":"management/v1/core-resources/approvals/retrieve-multiple-approvals","path":"core-resources/approvals/retrieve-multiple-approvals","lang":"v1","origin":"management","title":"Retrieve multiple Activities","attributes":{"title":"Retrieve multiple Activities"},"content":"

Returns an array of approval objects. This endpoint can be filtered on approver and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
approverNumeric Id of the approver
\n","example":"

Example Request

\n\n

You will receive an array of approval objects as response.

\n"},"core-resources/approvals/retrieve-one-approval":{"contentPath":"management/v1/core-resources/approvals/retrieve-one-approval","path":"core-resources/approvals/retrieve-one-approval","lang":"v1","origin":"management","title":"Retrieve one Approval","attributes":{"title":"Retrieve one Approval"},"content":"

Returns a single approval object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a approval object as response.

\n"},"core-resources/approvals/the-approval-object":{"contentPath":"management/v1/core-resources/approvals/the-approval-object","path":"core-resources/approvals/the-approval-object","lang":"v1","origin":"management","title":"The Approval Object","attributes":{"title":"The Approval Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
statusStatus of approval
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
\n","example":"

Example Object

\n
{\n  \"approval\": {\n    \"id\": 11,\n    \"status\": \"pending\",\n    \"story_id\": 1066,\n    \"approver_id\": 1028\n  }\n}\n
\n"},"core-resources/asset-folders/asset-folders":{"contentPath":"management/v1/core-resources/asset-folders/asset-folders","path":"core-resources/asset-folders/asset-folders","lang":"v1","origin":"management","title":"Asset Folders","attributes":{"title":"Asset Folders"},"content":"

Asset folder allow you to group your assets. Besides the overall root folder you can define nested folder structures.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/asset_folders/:asset_folder_id\n
\n"},"core-resources/asset-folders/create-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/create-asset-folder","path":"core-resources/asset-folders/create-asset-folder","lang":"v1","origin":"management","title":"Create an Asset Folder","attributes":{"title":"Create an Asset Folder"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
asset_folderYour full asset folder object
asset_folder[name]Name is required
\n","example":"

Example Request

\n\n

You will receive an asset folder object as response.

\n"},"core-resources/asset-folders/delete-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/delete-asset-folder","path":"core-resources/asset-folders/delete-asset-folder","lang":"v1","origin":"management","title":"Delete an Asset Folder","attributes":{"title":"Delete an Asset Folder"},"content":"

Delete an asset folder by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/asset-folders/retrieve-multiple-asset-folders":{"contentPath":"management/v1/core-resources/asset-folders/retrieve-multiple-asset-folders","path":"core-resources/asset-folders/retrieve-multiple-asset-folders","lang":"v1","origin":"management","title":"Retrieve multiple Asset Folders","attributes":{"title":"Retrieve multiple Asset Folders"},"content":"

Returns an array of asset folder objects.

\n","example":"

Example Request

\n\n

You will receive an array of asset folder objects as response.

\n"},"core-resources/asset-folders/retrieve-one-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/retrieve-one-asset-folder","path":"core-resources/asset-folders/retrieve-one-asset-folder","lang":"v1","origin":"management","title":"Retrieve one Asset Folder","attributes":{"title":"Retrieve one Asset Folder"},"content":"

Returns a single, asset folder object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded asset folder object as response.

\n"},"core-resources/asset-folders/the-asset-folder-object":{"contentPath":"management/v1/core-resources/asset-folders/the-asset-folder-object","path":"core-resources/asset-folders/the-asset-folder-object","lang":"v1","origin":"management","title":"The Asset Folder Object","attributes":{"title":"The Asset Folder Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameDisplay name of your asset folder
parent_idParent asset folder id
\n","example":"

Example Object

\n
{\n  \"asset_folder\": {\n    \"id\": 41,\n    \"name\": \"Header Images\",\n    \"parent_id\": null\n  }\n}\n
\n"},"core-resources/asset-folders/update-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/update-asset-folder","path":"core-resources/asset-folders/update-asset-folder","lang":"v1","origin":"management","title":"Update an Asset Folder","attributes":{"title":"Update an Asset Folder"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
asset_folderYour full asset folder object
\n","example":"

Example Request

\n\n

You will receive an asset folder object as response.

\n"},"core-resources/assets/assets":{"contentPath":"management/v1/core-resources/assets/assets","path":"core-resources/assets/assets","lang":"v1","origin":"management","title":"Assets","attributes":{"title":"Assets"},"content":"

Assets like images, videos and documents are kept in the CDN as long as possible and will rarely hit the origin server. Each asset object references one of those uploaded images, videos and documents.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/assets/:asset_id\n
\n"},"core-resources/assets/delete-asset":{"contentPath":"management/v1/core-resources/assets/delete-asset","path":"core-resources/assets/delete-asset","lang":"v1","origin":"management","title":"Delete an Asset","attributes":{"title":"Delete an Asset"},"content":"

Delete an asset by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/assets/retrieve-multiple-assets":{"contentPath":"management/v1/core-resources/assets/retrieve-multiple-assets","path":"core-resources/assets/retrieve-multiple-assets","lang":"v1","origin":"management","title":"Retrieve multiple Assets","attributes":{"title":"Retrieve multiple Assets"},"content":"

Returns an array of asset objects. This endpoint is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
in_folderProvide the numeric id of a folder to filter the assets by a specific folder
sort_byPossible values: created_at:asc, created_at:desc, updated_at:asc, updated_at:desc, short_filename:asc, short_filename:desc
searchProvide a search term to filter a specific file by the filename
\n","example":"

Example Request

\n\n

You will receive an array of asset objects as response.

\n"},"core-resources/assets/retrieve-one-asset":{"contentPath":"management/v1/core-resources/assets/retrieve-one-asset","path":"core-resources/assets/retrieve-one-asset","lang":"v1","origin":"management","title":"Retrieve one Asset","attributes":{"title":"Retrieve one Asset"},"content":"

Returns a single asset object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive an asset object as response.

\n"},"core-resources/assets/signed-response-object":{"contentPath":"management/v1/core-resources/assets/signed-response-object","path":"core-resources/assets/signed-response-object","lang":"v1","origin":"management","title":"Signed Response Object","attributes":{"title":"Signed Response Object"},"content":"

After creating an asset entry using a POST request you will receive a response object with all information needed to finally upload your asset. The second request after the creation of the asset entry will need all information in fields appended to your application/x-www-form-urlencoded request besides the actual file input. See the demo on how to upload an asset.

\n","example":"

Example Object

\n
{\n  \"pretty_url\": \"//a-example.storyblok.com/f/606/e5990a3595/your_file.jpg\",\n  \"public_url\": \"https://s3.amazonaws.com/a-example.storyblok.com/f/606/e5990a3595/your_file.jpg\",\n  \"fields\": {\n    \"key\": \"f/606/e5990a3595/your_file.jpg\",\n    \"acl\": \"public-read\",\n    \"Expires\": \"Sun, 10 Nov 2019 15:33:00 GMT\",\n    \"Cache-Control\": \"public; max-age=31536000\",\n    \"Content-Type\": \"image/jpeg\",\n    \"policy\": \"eyJleHBpcmF0aW9uIjoiMjAxOC0xMS0xMFQxNTo...ei1hbGdvcml0aG0iOiJBV1M0LUhNQUM...LWFtei1kYXRlIjoiMjAxODExMTBUMTUzMzAwWiJ9XX0=\",\n    \"x-amz-credential\": \"AKIAIU627EN23A/20181110/s3/aws4_request\",\n    \"x-amz-algorithm\": \"AWS4-HMAC-SHA256\",\n    \"x-amz-date\": \"20181110T153300Z\",\n    \"x-amz-signature\": \"aaedd72b54636662b137b7648b54bdb47ee3b1dd28173313647930e625c8\"\n  },\n  \"post_url\": \"https://s3.amazonaws.com/a-example.storyblok.com\"\n}\n
\n"},"core-resources/assets/the-asset-object":{"contentPath":"management/v1/core-resources/assets/the-asset-object","path":"core-resources/assets/the-asset-object","lang":"v1","origin":"management","title":"The Asset Object","attributes":{"title":"The Asset Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
filenameFull path of the asset, including the file name
space_idSpace ID in which the asset is connected
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
deleted_atDeleted date (Format: YYYY-mm-dd HH:MM)
fileFile Object
asset_folder_idId of the folder containing this asset
short_filenameThe file name of the asset
content_typeThe MIME type of the asset
content_lengthThe content length in bytes
\n","example":"

Example Object

\n
{\n  \"id\": 14,\n  \"filename\": \"/f/616/SIZE/UNIQUEIDENTIFIER/your_filename.jpg\",\n  \"space_id\": 616,\n  \"created_at\": \"2018-11-10T15:33:00.578Z\",\n  \"updated_at\": \"2018-11-10T15:33:00.578Z\",\n  \"file\": {\n    \"url\": null\n  },\n  \"asset_folder_id\": null,\n  \"deleted_at\": null,\n  \"short_filename\": \"your_filename.jpg\",\n  \"content_type\": \"image/jpeg\",\n  \"content_length\": 12303\n}\n
\n"},"core-resources/assets/upload-asset":{"contentPath":"management/v1/core-resources/assets/upload-asset","path":"core-resources/assets/upload-asset","lang":"v1","origin":"management","title":"Upload Asset","attributes":{"title":"Upload Asset"},"content":"

Uploading assets in Storyblok is a three step process. First you need to sign the asset you want to upload. Then you need to post the image as form data to our Amazon S3 bucket. Lastly, you need to send another request to finalize the process and let Storyblok retrieve the MIME type and the content length for your asset. Uploaded files will have parameterized names; Every dot "." (except the last one) will be replaced with underscore "_".

\n

Here you can find an example using Node.js on Github.

\n","example":"
    \n
  1. Start by requesting a signed upload URL and parameter
  2. \n
\n

Example Request

\n\n

Example Request (with asset folder)

\n\n
    \n
  1. Use the received signed response object to upload your file (example uses Node.js) and to finalize the process:
  2. \n
\n
const FormData = require('form-data')\nconst fs = require('fs')\n\nconst file = '/path_to/your_file.jpg'\nconst fileUpload = (signed_response_object, success, failed) => {\n  let form = new FormData()\n  // apply all fields from the signed response object to the second request\n  for (let key in signed_response_object.fields) {\n    form.append(key, signed_response_object.fields[key])\n  }\n  // also append the file read stream\n  form.append('file', fs.createReadStream(file))\n  // submit your form\n  form.submit(signed_response_object.post_url, (err, res) => {\n    if (err) throw err\n    \n    // 3. finalize the upload\n    Storyblok.get('spaces/606/assets/' + signed_response_object.id + '/finish_upload').then(response => {\n      console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n    }).catch(error => { \n      throw error\n    })\n    console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n  })\n}\n
\n"},"core-resources/comments/create":{"contentPath":"management/v1/core-resources/comments/create","path":"core-resources/comments/create","lang":"v1","origin":"management","title":"Create a Workflow Stage Change","attributes":{"title":"Create a Workflow Stage Change"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stage_changeYour workflow stage change object
workflow_stage_change[workflow_stage_id]Workflow stage id required
workflow_stage_change[story_id]Story id required
\n","example":"

Example Request

\n\n

You will receive a workflow stage change object as response.

\n"},"core-resources/comments/delete":{"contentPath":"management/v1/core-resources/comments/delete","path":"core-resources/comments/delete","lang":"v1","origin":"management","title":"Delete a Workflow Stage Change","attributes":{"title":"Delete a Workflow Stage Change"},"content":"

Delete a workflow stage change using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/comments/get-all":{"contentPath":"management/v1/core-resources/comments/get-all","path":"core-resources/comments/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Space Role","attributes":{"title":"Retrieve multiple Space Role"},"content":"

Returns an array of space role objects.

\n","example":"

Example Request

\n\n

You will an array of space role objects as response.

\n"},"core-resources/comments/get-one":{"contentPath":"management/v1/core-resources/comments/get-one","path":"core-resources/comments/get-one","lang":"v1","origin":"management","title":"Retrieve one Space Role","attributes":{"title":"Retrieve one Space Role"},"content":"

Returns a single, space role object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/comments/intro":{"contentPath":"management/v1/core-resources/comments/intro","path":"core-resources/comments/intro","lang":"v1","origin":"management","title":"Space Roles","attributes":{"title":"Space Roles"},"content":"

Space roles are custom permission sets that can be attached to collaborators to define their roles and permissions in a specific space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/space_roles/:space_role_id\n
\n"},"core-resources/comments/object":{"contentPath":"management/v1/core-resources/comments/object","path":"core-resources/comments/object","lang":"v1","origin":"management","title":"The Space Role Object","attributes":{"title":"The Space Role Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
roleName used in the interface
access_tasksIs allowed to access the Tasks menu item
allowed_pathsStory ids the user should have access to (acts as whitelist). If no item is selected the user has rights to access all content items.
resolved_allowed_pathsResolved allowed_paths for displaying paths
field_permissionsHide specific fields for this user with an array of strings with the schema: "component_name.field_name"
permissionsAllow specific actions in interface by adding the permission as array of strings
\n

Possible Permissions

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PermissionDescription
publish_storiesAllow publishing of content entries
save_storiesAllow editing and saving of content entries
edit_datasourcesAllow editing and saving of datasources
access_commerceAllow access to commerce app
edit_story_slugDeny the change of slugs of content entries
move_storyDeny moving of content entries
view_composerDeny access to visual composer
\n","example":"

Example Object

\n
{\n  \"space_role\": {\n    \"id\": 18,\n    \"role\": \"English User\",\n    \"access_tasks\": true,\n    \"resolved_allowed_paths\": [\n\n    ],\n    \"allowed_paths\": [\n      12412,\n      51122\n    ],\n    \"field_permissions\": [\n\n    ],\n    \"permissions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/comments/update":{"contentPath":"management/v1/core-resources/comments/update","path":"core-resources/comments/update","lang":"v1","origin":"management","title":"Update a Space Role","attributes":{"title":"Update a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour full component object
space_role[name]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/component-groups/component-groups":{"contentPath":"management/v1/core-resources/component-groups/component-groups","path":"core-resources/component-groups/component-groups","lang":"v1","origin":"management","title":"Component Groups","attributes":{"title":"Component Groups"},"content":"

A component group can be used to group components together. Each component can have only one component group.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/component_groups/:component_group_id\n
\n"},"core-resources/component-groups/create-component-group":{"contentPath":"management/v1/core-resources/component-groups/create-component-group","path":"core-resources/component-groups/create-component-group","lang":"v1","origin":"management","title":"Create a Component Group","attributes":{"title":"Create a Component Group"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
component_groupYour full component group object
component_group[name]The component group name is required
\n","example":"

Example Request

\n\n

You will receive a fully loaded component group object as response.

\n"},"core-resources/component-groups/delete-component-group":{"contentPath":"management/v1/core-resources/component-groups/delete-component-group","path":"core-resources/component-groups/delete-component-group","lang":"v1","origin":"management","title":"Delete a Component Group","attributes":{"title":"Delete a Component Group"},"content":"

Delete any component group using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/component-groups/retrieve-multiple-component-groups":{"contentPath":"management/v1/core-resources/component-groups/retrieve-multiple-component-groups","path":"core-resources/component-groups/retrieve-multiple-component-groups","lang":"v1","origin":"management","title":"Retrieve multiple Component Groups","attributes":{"title":"Retrieve multiple Component Groups"},"content":"

Returns an array of component group objects. The response of this endpoint is not paginated and you will retrieve all component groups.

\n","example":"

Example Request

\n\n

You will receive an array of component group objects as response.

\n"},"core-resources/component-groups/retrieve-one-component-group":{"contentPath":"management/v1/core-resources/component-groups/retrieve-one-component-group","path":"core-resources/component-groups/retrieve-one-component-group","lang":"v1","origin":"management","title":"Retrieve one Component Group","attributes":{"title":"Retrieve one Component Group"},"content":"

Returns a single, fully loaded component group object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded component group object as response.

\n"},"core-resources/component-groups/the-component-group-object":{"contentPath":"management/v1/core-resources/component-groups/the-component-group-object","path":"core-resources/component-groups/the-component-group-object","lang":"v1","origin":"management","title":"The Component Group Object","attributes":{"title":"The Component Group Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameName of the group
uuidUuid of the group
\n","example":"

Example Object

\n
{\n  \"component_group\": {\n    \"id\": 214123,\n    \"name\": \"Teasers\",\n    \"uuid\": \"19323-32144-23423-42314\"\n  }\n}\n
\n"},"core-resources/component-groups/update-component-group":{"contentPath":"management/v1/core-resources/component-groups/update-component-group","path":"core-resources/component-groups/update-component-group","lang":"v1","origin":"management","title":"Update a Component group","attributes":{"title":"Update a Component group"},"content":"","example":"

Example Request

\n\n

You will receive a fully loaded, updated component group object as response.

\n"},"core-resources/components/components":{"contentPath":"management/v1/core-resources/components/components","path":"core-resources/components/components","lang":"v1","origin":"management","title":"Components","attributes":{"title":"Components"},"content":"

A component is a standalone entity that is meaningful in its own right. While components (or bloks) can be nested in each other, semantically they remain equal. Each component is a small piece of your data structure which can be filled with content or nested by your content editor. One component can consist of as many field types as required.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/components/:component_id\n
\n"},"core-resources/components/create-component":{"contentPath":"management/v1/core-resources/components/create-component","path":"core-resources/components/create-component","lang":"v1","origin":"management","title":"Create a Component","attributes":{"title":"Create a Component"},"content":"

You can set most of the fields that are available in the component object, below we only list the properties in the example and possible required fields.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
componentThe component object
component[name]Technical name used for component property in entries required
component[display_name]Name that will be used in the editor interface
component[image]URL to the preview image, if uploaded
component[preview]Define the field that should be used for preview in the interface
component[is_root]Component should be usable as a Content Type
component[is_nestable]Component should be insertable in blocks field type fields
component[component_group_uuid]The component group uuid of the component
component[schema]Key value pairs of component fields
\n","example":"

Example Request

\n\n

You will receive a fully loaded component object as response.

\n"},"core-resources/components/delete-component":{"contentPath":"management/v1/core-resources/components/delete-component","path":"core-resources/components/delete-component","lang":"v1","origin":"management","title":"Delete a Component","attributes":{"title":"Delete a Component"},"content":"

Delete any component using its numeric id. Already used components will still stay in place but will show up with no schema definition so your inserted values won't be removed. You can use the update stories to migrate your content to other or new components.

\n","example":"

Example Request

\n\n"},"core-resources/components/possible-field-types":{"contentPath":"management/v1/core-resources/components/possible-field-types","path":"core-resources/components/possible-field-types","lang":"v1","origin":"management","title":"Possible field types","attributes":{"title":"Possible field types"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Field TypeDescription
bloksBlocks; a field to interleave other components in your current one
textText; a text field
textareaTextarea; a text area
markdownMarkdown; write markdown with a text area and additional formatting options
numberNumber; a number field
datetimeDate/Time; a date- and time picker
booleanBoolean; a checkbox - true/false
optionsMulti-Options; a list of checkboxes
optionSingle-Option; a single dropdown
imageImage; a upload field for a single image with cropping possibilities
fileFile; a upload field for a single file
multiassetMulti-Assets; a upload field for a multiple files
multilinkLink; an input field for internal linking to other stories
sectionGroup; no input possibility - allows you to group fields in sections
customPlugin; Extend the editor yourself with a color picker or similar - Check out: Creating a Storyblok field type plugin
\n","example":"

Example Object

\n
\"field_key\": {\n  ...\n  \"type\": \"text\", // <-- field type\n  ...\n}\n
\n"},"core-resources/components/retrieve-multiple-components":{"contentPath":"management/v1/core-resources/components/retrieve-multiple-components","path":"core-resources/components/retrieve-multiple-components","lang":"v1","origin":"management","title":"Retrieve multiple Components","attributes":{"title":"Retrieve multiple Components"},"content":"

Returns an array of component objects. The response of this endpoint is not paginated and you will retrieve all components.

\n","example":"

Example Request

\n\n

You will receive an array of component objects as response.

\n"},"core-resources/components/retrieve-one-component":{"contentPath":"management/v1/core-resources/components/retrieve-one-component","path":"core-resources/components/retrieve-one-component","lang":"v1","origin":"management","title":"Retrieve one Component","attributes":{"title":"Retrieve one Component"},"content":"

Returns a single, fully loaded component object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded component object as response.

\n"},"core-resources/components/the-component-field-object":{"contentPath":"management/v1/core-resources/components/the-component-field-object","path":"core-resources/components/the-component-field-object","lang":"v1","origin":"management","title":"The Component Field","attributes":{"title":"The Component Field"},"content":"

Not every property will be used for every field type; some may only effect specific types.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
typeThe type of your field
posPosition of field in component
translatableCan field be translated; Default: false
requiredIs field required; Default: false
regexClient Regex validation for the field
descriptionDescription shown in the editor interface
default_valueDefault value for the field; Can be an escaped JSON object
can_syncAdvanced usage to sync with field in preview; Default: false
preview_fieldIs used as instance preview field below component name in bloks types
no_translateBoolean; Should be excluded in translation export
rtlBoolean; Enable global RTL for this field
Only for type: markdown, text, textarea
rich_markdownEnable rich markdown view by default (true/false);
Only for type: markdown
keysArray of field keys to include in this section;
Only for type: section
field_typeName of the custom field type plugin;
Only for type: custom
sourcePossible values: undefined: Self; internal_stories: Stories; internal: Datasource; external: API Endpoint in Datasource Entries Array Format;
Only for type: options, option, custom;
use_uuidDefault: true; available in option and source=internal_stories
folder_slugFilter on selectable stories path; Effects editor only if source=internal_stories; In case you have a multi-language folder structure you can add the '{0}' placeholder and the path will be adapted dynamically. Examples: "{0}/categories/", {0}/{1}/categories/
datasource_slugDefine selectable datasources string; Effects editor only if source=internal
external_datasourceDefine external datasource JSON Url; Effects editor only if source=external
optionsArray of datasource entries [{name:"", value:""}]; Effects editor only if source=undefined
image_cropActivate force crop for images: (true/false);
Only for type: image
keep_image_sizeKeep original size: (true/false);
Only for type: image
image_widthDefine width in px or width ratio if keep_image_size is enabled;
Only for type: image
image_heightDefine height in px or height ratio if keep_image_size is enabled;
Only for type: image
asset_folder_idDefault asset folder numeric id to store uploaded image of that field;
Only for type: image
add_httpsPrepends https: to stop usage of relative protocol;
Only for type: image, file
restrict_componentsActivate restriction nestable component option; Default: false;
Only for type: bloks
maximumMaximum amount of added bloks in this blok field;
Only for type: bloks
restrict_content_typesActivate restriction content type option;
Only for type: multilink
component_whitelistArray of component/content type names: ["post","page","product"];
Only for type: bloks, multilink
disable_timeDisables time selection from date picker; Default: false;
Only for type: datetime
max_lengthSet the max length of the input string;
Only for type: text, textarea, markdown
\n","example":"

Example Object

\n
// name of the field as key eg. \"field key\" in schema property in your component\n\"title\": {\n  \"type\": \"text\",\n  \"pos\": 0,\n  \"translatable\": true,\n  \"required\": true,\n  \"regex\": \"\",\n  \"description\": \"Description for the field\",\n  \"display_name\": \"\",\n  \"default_value\": \"\",\n  \"can_sync\": false,\n  \"rtl\": false,\n  \"no_translate\": false\n}\n
\n"},"core-resources/components/the-component-object":{"contentPath":"management/v1/core-resources/components/the-component-object","path":"core-resources/components/the-component-object","lang":"v1","origin":"management","title":"The Component Object","attributes":{"title":"The Component Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameTechnical name used for component property in entries
display_nameName that will be used in the editor interface
created_atCreation date (Format: YYYY-mm-dd HH:MM)
imageURL to the preview image, if uploaded
previewDefine the field that should be used for preview in the interface
is_rootComponent should be usable as a Content Type
is_nestableComponent should be insertable in blocks field type fields
all_presetsArray of presets for this component
real_nameDuplicated technical name, used for internal tasks
component_group_uuidThe component group uuid of the component
\n","example":"

Example Object

\n
{\n  \"component\": {\n    \"id\": 214123,\n    \"name\": \"post\",\n    \"display_name\": \"Post\",\n    \"created_at\": \"2018-12-28T14:54:01.423Z\",\n    \"schema\": {\n      // definition of fields (schema) for this component\n      \"title\": {\n        \"type\": \"text\",\n        \"pos\": 0\n      },\n      \"description\": {\n        \"type\": \"text\",\n        \"pos\": 1\n      },\n      ...\n    },\n    \"image\": null,\n    \"preview_field\": null,\n    \"is_root\": true,\n    \"is_nestable\": true,\n    \"all_presets\": [],\n    \"preset_id\": null,\n    \"real_name\": \"post\",\n    \"component_group_uuid\": \"19323-32144-23423-42314\"\n  },\n  \"update_content\": true\n}\n
\n"},"core-resources/components/update-component":{"contentPath":"management/v1/core-resources/components/update-component","path":"core-resources/components/update-component","lang":"v1","origin":"management","title":"Update a Component","attributes":{"title":"Update a Component"},"content":"

Send the component object with updated values to our backend using the PUT method. An update on component will not take over already inserted values, make sure to also update your stories that contain this component.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
componentYour full component object
component[name]Technical name used for component property in entries required
component[display_name]Name that will be used in the editor interface
component[image]URL to the preview image, if uploaded
component[preview]Define the field that should be used for preview in the interface
component[is_root]Component should be usable as a Content Type
component[is_nestable]Component should be insertable in blocks field type fields
component[component_group_uuid]The component group uuid of the component
component[schema]Key value pairs of component fields
\n","example":"

Example Request

\n\n

You will receive a fully loaded, updated component object as response.

\n"},"core-resources/datasource-entries/create-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/create-datasource-entry","path":"core-resources/datasource-entries/create-datasource-entry","lang":"v1","origin":"management","title":"Create a Datasource Entry","attributes":{"title":"Create a Datasource Entry"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasource_entryYour full datasource entry object
datasource_entry[name]Name is required
datasource_entry[value]Value is required
datasource_entry[datasource_id]Datasource Id is required
\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n"},"core-resources/datasource-entries/datasource-entries":{"contentPath":"management/v1/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v1","origin":"management","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

The actual KEY/VALUE pair object a datasource consists of. One specific datasource entry is a set of two linked data items: a key, which is a unique identifier for the item of data scoped in the data source, and the value, which is the data that is identified.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/datasource_entries/:datasource_entry_id\n
\n"},"core-resources/datasource-entries/delete-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/delete-datasource-entry","path":"core-resources/datasource-entries/delete-datasource-entry","lang":"v1","origin":"management","title":"Delete a Datasource Entry","attributes":{"title":"Delete a Datasource Entry"},"content":"

Delete a datasource entry by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"management/v1/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v1","origin":"management","title":"Retrieve multiple Datasource Entries","attributes":{"title":"Retrieve multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects. This endpoint is paged and can be filtered by a datasource id or slug. The dimension parameter allows you to have the dimension value filled with the according data.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
datasource_idProvide the numeric id of a datasource
datasource_slugProvide the slug of a datasource
dimensionProvide dimension to receive the dimension_value filled
\n","example":"

Example Request

\n\n

You will receive an array of datasource entry objects as response.

\n"},"core-resources/datasource-entries/retrieve-one-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/retrieve-one-datasource-entry","path":"core-resources/datasource-entries/retrieve-one-datasource-entry","lang":"v1","origin":"management","title":"Retrieve one Datasource Entry","attributes":{"title":"Retrieve one Datasource Entry"},"content":"

Returns a single datasource entry object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"management/v1/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v1","origin":"management","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameThe key which will be used to resolve the given value
valueThe actual value for the provided key
datasource_idNumeric ID of connected datasource
\n","example":"

Example Object

\n
{ \n  \"datasource_entry\" : {\n    \"id\": 52,\n    \"name\": \"newsletter_text\",\n    \"value\": \"Subscribe to our newsletter to make sure you don’t miss anything.\",\n    \"datasource_id\": \"\"\n  }\n}\n
\n"},"core-resources/datasource-entries/update-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/update-datasource-entry","path":"core-resources/datasource-entries/update-datasource-entry","lang":"v1","origin":"management","title":"Update a Datasource Entry","attributes":{"title":"Update a Datasource Entry"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasource_entryYour full datasource entry object
datasource_entry[name]Name is required
datasource_entry[value]Value is required
datasource_entry[dimension_value]Value of the key in the provided dimension_id (optional)
dimension_idNumeric dimension id (optional, but required to set a dimension_value)
\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n

Example Request for setting a value for specific dimension

\n\n

You will receive a datasource entry object as response. The dimension_id is available in your datasource object

\n"},"core-resources/datasources/create-datasource":{"contentPath":"management/v1/core-resources/datasources/create-datasource","path":"core-resources/datasources/create-datasource","lang":"v1","origin":"management","title":"Create a Datasource","attributes":{"title":"Create a Datasource"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasourceYour full datasource object
datasource[name]Name is required
datasource[slug]Slug is required
\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/datasources/datasources":{"contentPath":"management/v1/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v1","origin":"management","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A datasource is a collection of datasource entries with a specific name and slug. Each datasource entry is a collection of key-value pairs (KVP), so called datasource entries. Those key-value pairs can be used for a single choice, multiple choice options and as well directly through our API to use them for multi-language labels, categories, or anything similar.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/datasources/:datasource_id\n
\n"},"core-resources/datasources/delete-datasource":{"contentPath":"management/v1/core-resources/datasources/delete-datasource","path":"core-resources/datasources/delete-datasource","lang":"v1","origin":"management","title":"Delete a Datasource","attributes":{"title":"Delete a Datasource"},"content":"

Delete a datasource by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"management/v1/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v1","origin":"management","title":"Retrieve multiple Datasources","attributes":{"title":"Retrieve multiple Datasources"},"content":"

Returns an array of datasource objects. This endpoint is paged and can be filtered by slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
searchProvide a search string
by_idsProvide ids
\n","example":"

Example Request

\n\n

You will receive an array of datasource objects as response.

\n"},"core-resources/datasources/retrieve-one-datasource":{"contentPath":"management/v1/core-resources/datasources/retrieve-one-datasource","path":"core-resources/datasources/retrieve-one-datasource","lang":"v1","origin":"management","title":"Retrieve one Datasource","attributes":{"title":"Retrieve one Datasource"},"content":"

Returns a single datasource object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"management/v1/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v1","origin":"management","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID, used to reference datasource entries
nameThe key which will be used to resolve the given value
slugThe slug used to request the datasource via API
dimensionsList of defined dimensions for this datasource
\n","example":"

Example Object

\n
{\n  \"datasource\": {\n    \"id\": 91,\n    \"name\": \"Labels for Website\",\n    \"slug\": \"labels\",\n    \"dimensions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/datasources/update-datasource":{"contentPath":"management/v1/core-resources/datasources/update-datasource","path":"core-resources/datasources/update-datasource","lang":"v1","origin":"management","title":"Update a Datasource","attributes":{"title":"Update a Datasource"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasourceA datasource object
\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/deployments/create":{"contentPath":"management/v1/core-resources/deployments/create","path":"core-resources/deployments/create","lang":"v1","origin":"management","title":"Create a Branch Deployment","attributes":{"title":"Create a Branch Deployment"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
branch_idThe branch id to deploy required
release_uuidsThe uuids of releases to deploy
\n","example":"

Example Request

\n\n"},"core-resources/deployments/intro":{"contentPath":"management/v1/core-resources/deployments/intro","path":"core-resources/deployments/intro","lang":"v1","origin":"management","title":"Branch deployments","attributes":{"title":"Branch deployments"},"content":"

The endpoint /v1/spaces/:space_id/deployments can be used to deploy branches.

\n

You can read more about branches here.

\n","example":""},"core-resources/field-types/create-field-type":{"contentPath":"management/v1/core-resources/field-types/create-field-type","path":"core-resources/field-types/create-field-type","lang":"v1","origin":"management","title":"Create a Field Type","attributes":{"title":"Create a Field Type"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
field_typeYour field type object
field_type[name]Name is required
\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/delete-field-type":{"contentPath":"management/v1/core-resources/field-types/delete-field-type","path":"core-resources/field-types/delete-field-type","lang":"v1","origin":"management","title":"Delete a Field Type","attributes":{"title":"Delete a Field Type"},"content":"

Delete a field type by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/field-types/field-types":{"contentPath":"management/v1/core-resources/field-types/field-types","path":"core-resources/field-types/field-types","lang":"v1","origin":"management","title":"Field types","attributes":{"title":"Field types"},"content":"

We built Storyblok with a robust and flexible plugin system to give our customers the power to extend the editor with custom fields like a color picker or a google maps location selector. It’s basically a Vue.js 2.5.2 component extended with a few helpers in the ‘window.Storyblok.plugin’ variable.

\n

This endpoint lets you push and pull the code of your field type via the management api and can be used to automatically deploy a plugin.

\n

Read more about field type development.

\n","example":"

Endpoint

\n
GET /v1/field_types/:id\n
\n"},"core-resources/field-types/retrieve-multiple-field-types":{"contentPath":"management/v1/core-resources/field-types/retrieve-multiple-field-types","path":"core-resources/field-types/retrieve-multiple-field-types","lang":"v1","origin":"management","title":"Retrieve multiple Field Types","attributes":{"title":"Retrieve multiple Field Types"},"content":"

Returns an array of field type objects. This endpoint is paged.

\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/retrieve-one-field-type":{"contentPath":"management/v1/core-resources/field-types/retrieve-one-field-type","path":"core-resources/field-types/retrieve-one-field-type","lang":"v1","origin":"management","title":"Retrieve one Field Type","attributes":{"title":"Retrieve one Field Type"},"content":"

Returns a single field type object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/the-field-type-object":{"contentPath":"management/v1/core-resources/field-types/the-field-type-object","path":"core-resources/field-types/the-field-type-object","lang":"v1","origin":"management","title":"The Field Type Object","attributes":{"title":"The Field Type Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your field type
nameGiven name of your field type. Needs to be unique. A personal prefix is recommended (Example: my-geo-selector).
bodyThe uncompiled javascript code of the field type.
compiled_bodyUsed by the online code editor. Needs to be an empty string if using local plugin development.
space_idsArray of space ids where the field type is assigned to.
\n","example":"

Example Object

\n
{\n  \"field_type\": {\n    \"id\": 124,\n    \"name\": \"my-geo-selector\",\n    \"body\": \"var Fieldtype = {}\",\n    \"compiled_body\": \"\",\n    \"space_ids\": []\n  }\n}\n
\n"},"core-resources/field-types/update-field-type":{"contentPath":"management/v1/core-resources/field-types/update-field-type","path":"core-resources/field-types/update-field-type","lang":"v1","origin":"management","title":"Update a Field Type","attributes":{"title":"Update a Field Type"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
field_typeYour full field type object.
field_type[body]The javascript code of the field type.
field_type[compiled_body]Used by the online code editor. Needs to be an empty string if using local plugin development.
field_type[space_ids]Array of space ids where the field type is assigned to.
publishIf this parameter is not empty the field type will be published.
\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/presets/create-preset":{"contentPath":"management/v1/core-resources/presets/create-preset","path":"core-resources/presets/create-preset","lang":"v1","origin":"management","title":"Create a Preset","attributes":{"title":"Create a Preset"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
presetYour full preset object
preset[name]Name is required
preset[component_id]Use numeric component id for referencing
\n","example":"

Example Request

\n\n

You will receive a fully loaded preset object as response.

\n"},"core-resources/presets/delete-preset":{"contentPath":"management/v1/core-resources/presets/delete-preset","path":"core-resources/presets/delete-preset","lang":"v1","origin":"management","title":"Delete a Preset","attributes":{"title":"Delete a Preset"},"content":"

Delete a preset by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/presets/presets":{"contentPath":"management/v1/core-resources/presets/presets","path":"core-resources/presets/presets","lang":"v1","origin":"management","title":"Presets","attributes":{"title":"Presets"},"content":"

As a developer, you can now define multiple default values for your components. For example, a teaser component can have three styles:

\n\n

To make it easier for the editor to find the necessary configuration of this three styles you can save it as presets and upload a screenshot.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/presets/:preset_id\n
\n"},"core-resources/presets/retrieve-multiple-presets":{"contentPath":"management/v1/core-resources/presets/retrieve-multiple-presets","path":"core-resources/presets/retrieve-multiple-presets","lang":"v1","origin":"management","title":"Retrieve multiple Presets","attributes":{"title":"Retrieve multiple Presets"},"content":"

Returns an array of preset objects.

\n","example":"

Example Request

\n\n

You will receive an array of preset objects as response.

\n"},"core-resources/presets/retrieve-one-preset":{"contentPath":"management/v1/core-resources/presets/retrieve-one-preset","path":"core-resources/presets/retrieve-one-preset","lang":"v1","origin":"management","title":"Retrieve one Preset","attributes":{"title":"Retrieve one Preset"},"content":"

Returns a single preset object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a preset object as response.

\n"},"core-resources/presets/the-preset-object":{"contentPath":"management/v1/core-resources/presets/the-preset-object","path":"core-resources/presets/the-preset-object","lang":"v1","origin":"management","title":"The Preset Object","attributes":{"title":"The Preset Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your preset
nameGiven name of your preset
preset[preset]Object with the fields you want to save in the preset
component_idID of the component the preset should be connected
imageScreenshot or other preview image for your editor; Default: null
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
\n","example":"

Example Object

\n
{\n  \"preset\": {\n    \"id\": 1814,\n    \"name\": \"Teaser with filled headline\",\n    \"preset\": {\n      // fields of the component filled with content\n      \"headline\": \"This is a default value for the preset!\",\n      ...\n    },\n    \"component_id\": 62,\n    \"space_id\": 606,\n    \"image\": \"//a.storyblok.com/f/606/...\",\n    \"created_at\": \"2018-11-10T15:33:16.726Z\",\n    \"updated_at\": \"2018-11-10T15:33:16.726Z\"\n  }\n}\n
\n"},"core-resources/presets/update-preset":{"contentPath":"management/v1/core-resources/presets/update-preset","path":"core-resources/presets/update-preset","lang":"v1","origin":"management","title":"Update a Preset","attributes":{"title":"Update a Preset"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
presetYour full preset object
\n","example":"

Example Request

\n\n

You will receive a fully loaded preset object as response.

\n"},"core-resources/releases/create":{"contentPath":"management/v1/core-resources/releases/create","path":"core-resources/releases/create","lang":"v1","origin":"management","title":"Create a Release","attributes":{"title":"Create a Release"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
releaseYour release object required
release[name]Name of the release
release[release_at]Date to deploy the release (Format: YYYY-mm-dd HH:MM)
release[branches_to_deploy]Ids of pipeline stages (called branches before) to deploy the release to
\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/releases/delete":{"contentPath":"management/v1/core-resources/releases/delete","path":"core-resources/releases/delete","lang":"v1","origin":"management","title":"Delete a Release","attributes":{"title":"Delete a Release"},"content":"

Delete a release using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/releases/get-all":{"contentPath":"management/v1/core-resources/releases/get-all","path":"core-resources/releases/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Releases","attributes":{"title":"Retrieve multiple Releases"},"content":"

Returns an array of releases.

\n","example":"

Example Request

\n\n

You will get an array of release objects as response.

\n"},"core-resources/releases/get-one":{"contentPath":"management/v1/core-resources/releases/get-one","path":"core-resources/releases/get-one","lang":"v1","origin":"management","title":"Retrieve one Release","attributes":{"title":"Retrieve one Release"},"content":"

Returns a single release object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/releases/intro":{"contentPath":"management/v1/core-resources/releases/intro","path":"core-resources/releases/intro","lang":"v1","origin":"management","title":"Releases","attributes":{"title":"Releases"},"content":"

You can read more about releases here.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/workflow_stages/:id\n
\n"},"core-resources/releases/object":{"contentPath":"management/v1/core-resources/releases/object","path":"core-resources/releases/object","lang":"v1","origin":"management","title":"The Release object","attributes":{"title":"The Release object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameName of the release
release_atDate to deploy the release (Format: YYYY-mm-dd HH:MM)
branches_to_deployIds of branches to deploy the release to
\n","example":"

Example Object

\n
{\n  \"release\": {\n    \"id\": 2,\n    \"name\": \"Summer Release\",\n    \"release_at\": \"2025-01-01 01:01\",\n    \"branches_to_deploy\": [9,2]\n  }\n}\n
\n"},"core-resources/releases/update":{"contentPath":"management/v1/core-resources/releases/update","path":"core-resources/releases/update","lang":"v1","origin":"management","title":"Update a Release","attributes":{"title":"Update a Release"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
releaseYour release object required
release[name]Name of the release
release[release_at]Date to deploy the release (Format: YYYY-mm-dd HH:MM)
release[branches_to_deploy]Ids of branches to deploy the release to
do_releaseIf this parameter is included in the request the release will be deployed
\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/space-roles/create-space-role":{"contentPath":"management/v1/core-resources/space-roles/create-space-role","path":"core-resources/space-roles/create-space-role","lang":"v1","origin":"management","title":"Create a Space Role","attributes":{"title":"Create a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour space role object
space_role[name]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/space-roles/delete-space-role":{"contentPath":"management/v1/core-resources/space-roles/delete-space-role","path":"core-resources/space-roles/delete-space-role","lang":"v1","origin":"management","title":"Delete a Space Role","attributes":{"title":"Delete a Space Role"},"content":"

Delete a space role using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/space-roles/retrieve-multiple-spaces-roles":{"contentPath":"management/v1/core-resources/space-roles/retrieve-multiple-spaces-roles","path":"core-resources/space-roles/retrieve-multiple-spaces-roles","lang":"v1","origin":"management","title":"Retrieve multiple Space Role","attributes":{"title":"Retrieve multiple Space Role"},"content":"

Returns an array of space role objects.

\n","example":"

Example Request

\n\n

You will an array of space role objects as response.

\n"},"core-resources/space-roles/retrieve-one-space-role":{"contentPath":"management/v1/core-resources/space-roles/retrieve-one-space-role","path":"core-resources/space-roles/retrieve-one-space-role","lang":"v1","origin":"management","title":"Retrieve one Space Role","attributes":{"title":"Retrieve one Space Role"},"content":"

Returns a single, space role object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/space-roles/space-roles":{"contentPath":"management/v1/core-resources/space-roles/space-roles","path":"core-resources/space-roles/space-roles","lang":"v1","origin":"management","title":"Space Roles","attributes":{"title":"Space Roles"},"content":"

Space roles are custom permission sets that can be attached to collaborators to define their roles and permissions in a specific space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/space_roles/:space_role_id\n
\n"},"core-resources/space-roles/the-space-role-object":{"contentPath":"management/v1/core-resources/space-roles/the-space-role-object","path":"core-resources/space-roles/the-space-role-object","lang":"v1","origin":"management","title":"The Space Role Object","attributes":{"title":"The Space Role Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
roleName used in the interface
access_tasksIs allowed to access the Tasks menu item
allowed_pathsStory ids the user should have access to (acts as whitelist). If no item is selected the user has rights to access all content items.
resolved_allowed_pathsResolved allowed_paths for displaying paths
field_permissionsHide specific fields for this user with an array of strings with the schema: "component_name.field_name"
permissionsAllow specific actions in interface by adding the permission as array of strings
\n

Possible Permissions

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PermissionDescription
publish_storiesAllow publishing of content entries
save_storiesAllow editing and saving of content entries
edit_datasourcesAllow editing and saving of datasources
access_commerceAllow access to commerce app
edit_story_slugDeny the change of slugs of content entries
move_storyDeny moving of content entries
view_composerDeny access to visual composer
\n","example":"

Example Object

\n
{\n  \"space_role\": {\n    \"id\": 18,\n    \"role\": \"English User\",\n    \"access_tasks\": true,\n    \"resolved_allowed_paths\": [\n\n    ],\n    \"allowed_paths\": [\n      12412,\n      51122\n    ],\n    \"field_permissions\": [\n\n    ],\n    \"permissions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/space-roles/update-space-role":{"contentPath":"management/v1/core-resources/space-roles/update-space-role","path":"core-resources/space-roles/update-space-role","lang":"v1","origin":"management","title":"Update a Space Role","attributes":{"title":"Update a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour full component object
space_role[name]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/spaces/backup-space":{"contentPath":"management/v1/core-resources/spaces/backup-space","path":"core-resources/spaces/backup-space","lang":"v1","origin":"management","title":"Backup a Space","attributes":{"title":"Backup a Space"},"content":"

Trigger the backup task for your space. Make sure you've configured backups in your space options.

\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/create-space":{"contentPath":"management/v1/core-resources/spaces/create-space","path":"core-resources/spaces/create-space","lang":"v1","origin":"management","title":"Create a Space","attributes":{"title":"Create a Space"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[name]Name of your space; required
space[domain]Domain for your default preview url
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name and location (url) objects
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/delete-space":{"contentPath":"management/v1/core-resources/spaces/delete-space","path":"core-resources/spaces/delete-space","lang":"v1","origin":"management","title":"Delete a Space","attributes":{"title":"Delete a Space"},"content":"

Delete a space by its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/spaces/duplicate-space":{"contentPath":"management/v1/core-resources/spaces/duplicate-space","path":"core-resources/spaces/duplicate-space","lang":"v1","origin":"management","title":"Duplicate a Space","attributes":{"title":"Duplicate a Space"},"content":"

Duplicate a space and all it's content entries and components; Assets will not be duplicated and still will reference the original space.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[name]Name of your space; required
space[domain]Domain for your default preview url
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name and location (url) objects
dup_idThe numeric id of the original space
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/retrieve-multiple-spaces":{"contentPath":"management/v1/core-resources/spaces/retrieve-multiple-spaces","path":"core-resources/spaces/retrieve-multiple-spaces","lang":"v1","origin":"management","title":"Retrieve multiple Spaces","attributes":{"title":"Retrieve multiple Spaces"},"content":"

Returns an array of space objects.

\n","example":"

Example Request

\n\n

You will receive an array of space objects as response.

\n"},"core-resources/spaces/retrieve-one-space":{"contentPath":"management/v1/core-resources/spaces/retrieve-one-space","path":"core-resources/spaces/retrieve-one-space","lang":"v1","origin":"management","title":"Retrieve one Space","attributes":{"title":"Retrieve one Space"},"content":"

Returns a single space object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/spaces":{"contentPath":"management/v1/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v1","origin":"management","title":"Spaces","attributes":{"title":"Spaces"},"content":"

A space is a content repository. Think of it as a place to keep all the content related to one project. Each space has its own components, datasources, assets, environments, domains, collaborators, and permissions.

\n

If you want to launch several websites or apps, the best way to go is to create a separate space for each project.

\n

If your goal is to deliver the same content to multiple platforms (a common set would be the web, iOS, and an Android app), then you should use one space and create multiple API keys to deliver the content. You can find the API keys in the space dashboard.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"management/v1/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v1","origin":"management","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

The space object contains all information of one of your accounts spaces. Some of the properties are read only other can be managed by the API. Properties that you are able to change or use during creation can be found in the specifici sections.

\n

Example Space Options

\n
...\n\"options\": {\n  \"branch_deployed_hook\": \"\", // Your webhook endpoint for branch deployments\n  \"s3_bucket\": \"storyblok-backup\", // Your S3 bucket name\n  \"aws_arn\": \"arn:aws:iam::12312412:role/StoryblokRemote49122\",\n  \"backup_frequency\": \"daily\", \n  \"languages\": [ { \"code\": \"de\", \"name\": \"German\" } ]\n}\n
\n

Example Space Billing Address

\n
...\n\"billing_address\": {\n  \"tax_number\": \"ATU72706128\", // Your VAT number\n  \"order_number\": \"Your custom order number\",\n  \"company\": \"Storyblok GmbH\",\n  \"email\": \"billing@storyblok.com\", \n  \"name\": \"Ing. Dominik Angerer\", \n  \"address_city\": \"Linz\", \n  \"address_country\": \"Austria\", \n  \"address_iso_country\": \"AT\",\n  \"address_line1\": \"Peter-Behrens-Platz 1\", \n  \"address_zip\": \"4020\", \n}\n
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"name\": \"Example Space\",\n    \"domain\": \"https://example.storyblok.com\",\n    \"uniq_domain\": null,\n    \"plan\": \"starter\",\n    \"plan_level\": 0,\n    \"limits\": { },\n    \"created_at\": \"2018-11-10T15:33:18.402Z\",\n    \"id\": 680,\n    \"role\": \"admin\",\n    \"owner_id\": 1114,\n    \"story_published_hook\": null,\n    \"environments\": null,\n    \"stories_count\": 1,\n    \"parent_id\": null,\n    \"assets_count\": 0,\n    \"searchblok_id\": null,\n    \"duplicatable\": null,\n    \"request_count_today\": 0,\n    \"api_requests\": 1000,\n    \"exceeded_requests\": 0,\n    \"billing_address\": { \n      // billing infromation\n    },\n    \"routes\": [ ],\n    \"euid\": null,\n    \"trial\": true,\n    \"default_root\": \"page\",\n    \"has_slack_webhook\": false,\n    \"api_logs_per_month\": [ ],\n    \"first_token\": \"8IE7MzYCzw5d7KLckDa38Att\",\n    \"has_pending_tasks\": false,\n    \"options\": { },\n    \"collaborators\": [ ],\n    \"settings\": [ ],\n    \"owner\": {\n      // user object\n    }\n  }\n}\n
\n"},"core-resources/spaces/update-space":{"contentPath":"management/v1/core-resources/spaces/update-space","path":"core-resources/spaces/update-space","lang":"v1","origin":"management","title":"Update a Space","attributes":{"title":"Update a Space"},"content":"

You're only able to update the following properties of your space.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[id]Numeric id of your space
space[name]Name of your space
space[domain]Domain for your default preview url
space[uniq_domain]Unique Domain for the Storyblok Rendering Service
space[owner_id]Numeric user id of the owner for that space
space[parent_id]Space id of a possible parent space
space[duplicatable]Is the space globally duplicatable by all users
space[default_root]Default content type used for this space default: page
space[options]Options for backup and language configurations
space[routes]Routes for the Storyblok Rendering Service
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name, location (url) objects
space[billing_address]Billing information used to generate your invoices for this space
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/stories/create-story":{"contentPath":"management/v1/core-resources/stories/create-story","path":"core-resources/stories/create-story","lang":"v1","origin":"management","title":"Create a Story","attributes":{"title":"Create a Story"},"content":"

You can set most of the fields that are available in the story object, below we only list the properties in the example and the possible required fields. Stories are not published by default. If you want to create a published Story add the parameter publish with the value 1.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyYour full story object
story[name]Name of the story is required
story[slug]Slug is required; Used to identify the story (can not include /create stories with is_folder and required path segments and parent_id link instead)
story[content]Object structure for your content
story[default_root] (required*)Default content type/root component. (*Required if is_folder is true)
story[is_folder]If true a folder will be created instead of a story
story[parent_id]The id of the parent
story[disble_fe_editor]Is side by side editor disabled for all entries in folder (true/false)
story[path]Given real path, used in the preview editor
story[is_startpage]Is startpage of current folder (true/false)
story[position]Integer value of the position
story[first_published_at]First publishing date (Format: YYYY-mm-dd HH:MM)
story[translated_slugs_attributes]Add translated slugs/names if you have the "Translatable slugs" app installed. Example: [{lang: "de", slug: "startseite", name: "Startseite"}].
publishShould the story be published immediately (set 1 to publish)
release_idNumeric ID of release (optional)
\n

You can save any data in the story[content] attribute, and use it in the editor, as long as you follow these rules:

\n\n

This lets you import data and define the schema of your components afterwards in the interface where necessary.

\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as a response.

\n"},"core-resources/stories/delete-story":{"contentPath":"management/v1/core-resources/stories/delete-story","path":"core-resources/stories/delete-story","lang":"v1","origin":"management","title":"Delete a Story","attributes":{"title":"Delete a Story"},"content":"

Delete a content entry by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/stories/internationalization-for-stories":{"contentPath":"management/v1/core-resources/stories/internationalization-for-stories","path":"core-resources/stories/internationalization-for-stories","lang":"v1","origin":"management","title":"Internationalization for Stories","attributes":{"title":"Internationalization for Stories"},"content":"

If you use our field level translations functionality, you can provide the values for the translations/languages within the same content object by appending __i18n__ followed by the language code. Make sure to have the component field option translatable to true.

\n

Get a full list of our languages codes on Github.

\n","example":"

Example Request

\n\n"},"core-resources/stories/publish-a-story":{"contentPath":"management/v1/core-resources/stories/publish-a-story","path":"core-resources/stories/publish-a-story","lang":"v1","origin":"management","title":"Publish a Story","attributes":{"title":"Publish a Story"},"content":"

Publishing a story besides using the publish property via creation, can be done by using a GET request for each story you want to publish.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
release_idNumeric ID of release (optional)
langLanguage code to publish the story individually (optional, must be enabled in the space settings)
\n","example":"

Example Request

\n\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"management/v1/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v1","origin":"management","title":"Retrieve multiple Stories","attributes":{"title":"Retrieve multiple Stories"},"content":"

Returns an array of story objects without content. Can be filtered with the parameters below and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
pageCurrent page of stories
contain_componentFilters by component in all levels of the content. Allows comma separated value for multiple components
text_searchFilter by a term using full text search
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. To sort integers append :int. To sort floats append :float. Possible values are all root attributes of the entry (position and parent_position are special invisible attributes) and all fields of your content type inside content with a dot as seperator. Example: 'position:asc', 'parent_position:asc', 'content.your_custom_field:asc', 'content.your_number_field:asc:int', 'created_at:desc'.
pinnedFilter by pinned stories if '1'
excluding_idsExclude stories by ids (comma separated) from result
by_idsFilter by ids (comma separated)
by_uuidsFilter by uuids (comma separated)
with_tagFilter by tag
folder_onlyFilter by folders only
story_onlyFilter by stories only
with_parentFilter by parent id
with_slugFilter by exact slug
starts_withFilter stories starting with a specific slug
in_trashFilter by items in the trash folder
searchFilter by search term
filter_queryFilter by specific attribute(s) of your content type. See content delivery api documentation.
in_releaseFilter items by the release id
is_publishedtrue for entries that are currently published; false for those that are currently not published or unpulished
\n","example":"

Example Request

\n\n

Example Request with search_term

\n\n

Example Request with by_uuids

\n\n

You will receive an array of story objects without content as response.

\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"management/v1/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v1","origin":"management","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a single, fully loaded story object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as response.

\n"},"core-resources/stories/stories":{"contentPath":"management/v1/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v1","origin":"management","title":"Stories","attributes":{"title":"Stories"},"content":"

The stories endpoint will let you manage all content entries of your Storyblok space. You can use it to import, export or modify content.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/stories/:story_id\n
\n"},"core-resources/stories/the-story-object":{"contentPath":"management/v1/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v1","origin":"management","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. You can use this object to build up your entities when migrating or importing content.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugThe slug / path you give this story
full_slugCombined parent folder and current slug
pathGiven real path, used in the preview editor
contentYour defined custom content object
release_idId of your content stage (default: null)
publishedIs story published (true/false)
unpublished_changesStory has unpublished changes; saved but not published (true/false)
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
is_folderIs story a folder (true/false)
default_rootComponent name which will be used as default content type for this folders entries
disble_fe_editorIs side by side editor disabled for all entries in folder (true/false)
parent_idParent story/folder numeric id
parentEssential parent information as object (resolved from parent_id)
group_idAlternates group id (uuid string)
alternatesArray of resolved subset of link objects
tag_listArray of Tags (string only)
breadcrumbsArray of resolved subset of link objects (one per path segment / parent)
sort_by_dateLegacy: Additional sorting date field (Format: YYYY-mm-dd)
meta_dataJSON to add meta data that is not setting the story status to unpublished changes. Example: User ratings.
pinnedTo pin the story in the toolbar
preview_token[token]Token passed to the editor as preview parameter to allow editmode verification
preview_token[timestamp]Timestamp passed to the editor as preview parameter to allow editmode verification
last_author[id]Last author user object numeric id
last_author[userid]Last author userid/username
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
imported_atLatest import date (Format: YYYY-mm-dd HH:MM)
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 369689,\n    \"uuid\": \"039508c6-e9fa-42b5-b952-c7d96ab6099d\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"created_at\": \"2018-10-29T10:27:52.802Z\",\n    \"updated_at\": \"2018-10-30T12:24:07.499Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"imported_at\": null,\n    // group id defines the referenced alternates\n    \"group_id\": \"fb33b858-277f-4690-81fb-e0a080bd39ac\",\n    // resolved alternates by group_id\n    \"alternates\": [],\n    \"sort_by_date\": null,\n    \"tag_list\": [],\n    \"is_folder\": false,\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"component\": \"your_content_type\"\n      // and fields you define yourself are in here\n    },\n    \"path\": null,\n    \"default_root\": null,\n    \"disble_fe_editor\": false,\n    // parent folder id\n    \"parent_id\": 369683,\n    // resolved parent folder information\n    \"parent\": {\n      \"id\": 369683,\n      \"slug\": \"posts\",\n      \"name\": \"Posts\",\n      \"disble_fe_editor\": true,\n      \"uuid\": \"dcfcc350-e63e-4232-8dcb-ba4b8e70799d\"\n    },\n    \"full_slug\": \"posts/my-third-post\", // automatically generated\n    // resolved full_slug parts\n    \"breadcrumbs\": [{\n      \"id\": 369683,\n      \"name\": \"Posts\",\n      \"parent_id\": 0,\n      \"disble_fe_editor\": true\n    }],\n    \"published\": false,\n    \"unpublished_changes\": true,\n    \"is_startpage\": false,\n    \"meta_data\": null,\n    \"pinned\": false,\n    \"preview_token\": {\n      \"token\": \"279395174a25be38b702f9ec90d08a960e1a5a84\",\n      \"timestamp\": \"1545530576\"\n    },\n    \"last_author\": {\n      \"id\": 39821,\n      \"userid\": \"storyblok\"\n    }\n  }\n}\n
\n"},"core-resources/stories/unpublish-a-story":{"contentPath":"management/v1/core-resources/stories/unpublish-a-story","path":"core-resources/stories/unpublish-a-story","lang":"v1","origin":"management","title":"Unpublish a Story","attributes":{"title":"Unpublish a Story"},"content":"

Unpublishing a story besides using the unpublish action in visual editor or in content viewer, can be done by using a GET request for each story you want to unpublish.

\n","example":"

Example Request

\n\n"},"core-resources/stories/update-story":{"contentPath":"management/v1/core-resources/stories/update-story","path":"core-resources/stories/update-story","lang":"v1","origin":"management","title":"Update a Story","attributes":{"title":"Update a Story"},"content":"

Can be used to build migrations, updates if you changed your component structure, or if you only need to do a bulk action on all your content items. If you want to publish your story immediately add the parameter publish with the value 1 to the object.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyYour full story object
story[name]Name of the story is required
story[slug]Slug is required; Used to identify the story (can not include /create stories with is_folder and required path segments and parent_id link instead)
story[content]Object structure for your content
story[default_root] (required*)Default content type/root component. (*Required if is_folder is true)
story[is_folder]If true a folder will be created instead of a story
story[parent_id]The id of the parent
story[disble_fe_editor]Is side by side editor disabled for all entries in folder (true/false)
story[path]Given real path, used in the preview editor
story[is_startpage]Is startpage of current folder (true/false)
story[position]Integer value of the position
story[first_published_at]First publishing date (Format: YYYY-mm-dd HH:MM)
story[translated_slugs_attributes]Add/modify/delete translated slugs/names if you have the "Translatable slugs" app installed. Example: [{lang: "de", slug: "startseite", name: "Startseite"}]. To edit existing slugs add the id to the object. To delete an item add _destroy with the value 1 to the object.
force_updateIf '1' it will overwrite a locked story
release_idNumeric ID of release (optional)
publishIf '1' it will publish the story, 'publish' must be omitted if publication is not desired
langLanguage code to publish the story individually (must be enabled in the space settings)
\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as response.

\n"},"core-resources/tasks/create-task":{"contentPath":"management/v1/core-resources/tasks/create-task","path":"core-resources/tasks/create-task","lang":"v1","origin":"management","title":"Create a Task","attributes":{"title":"Create a Task"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
taskYour full task object
task[name]Name is required
\n","example":"

Example Request

\n\n

You will receive a fully loaded task object as response.

\n"},"core-resources/tasks/delete-taks":{"contentPath":"management/v1/core-resources/tasks/delete-taks","path":"core-resources/tasks/delete-taks","lang":"v1","origin":"management","title":"Delete a Task","attributes":{"title":"Delete a Task"},"content":"

Delete a task by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/tasks/retrieve-multiple-tasks":{"contentPath":"management/v1/core-resources/tasks/retrieve-multiple-tasks","path":"core-resources/tasks/retrieve-multiple-tasks","lang":"v1","origin":"management","title":"Retrieve multiple Tasks","attributes":{"title":"Retrieve multiple Tasks"},"content":"

Returns an array of task objects. This endpoint is paged.

\n","example":"

Example Request

\n\n

You will receive an array of task objects as response.

\n"},"core-resources/tasks/retrieve-one-task":{"contentPath":"management/v1/core-resources/tasks/retrieve-one-task","path":"core-resources/tasks/retrieve-one-task","lang":"v1","origin":"management","title":"Retrieve one Task","attributes":{"title":"Retrieve one Task"},"content":"

Returns a single task object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a task object as response.

\n"},"core-resources/tasks/tasks":{"contentPath":"management/v1/core-resources/tasks/tasks","path":"core-resources/tasks/tasks","lang":"v1","origin":"management","title":"Tasks","attributes":{"title":"Tasks"},"content":"

You can create a Task to send requests to one of your custom endpoints. This lets you trigger a build for production or other common use-cases like product syncs or publishing tasks. Future updates will also bring scheduled and timed tasks so you can handle all your tasks at one place.

\n

The payload Storyblok will send to your webhook url as POST request:

\n
{\n  \"task\": {\n    \"id\": 214, \n    \"name\": \"My Task Name\"\n  }, \n  \"space_id\": 606\n}\n
\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/tasks/:task_id\n
\n"},"core-resources/tasks/the-task-object":{"contentPath":"management/v1/core-resources/tasks/the-task-object","path":"core-resources/tasks/the-task-object","lang":"v1","origin":"management","title":"The Task Object","attributes":{"title":"The Task Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your task
nameGiven name of your task
descriptionA brief description of your task for your editors
task_typeDefault: webhook; Currently available: webhook
last_executionDate and time of last execution (Format: YYYY-mm-dd HH:MM)
webhook_urlURL of webhook that should be called when tasks is being executed
last_responseLast execution response log
lambda_codeBeta: Lambda function code
\n","example":"

Example Object

\n
{\n  \"task\": {\n    \"id\": 124,\n    \"name\": \"My Task Name\",\n    \"description\": null,\n    \"task_type\": \"webhook\",\n    \"last_execution\": null,\n    \"lambda_code\": null,\n    \"last_response\": null,\n    \"webhook_url\": \"https://www.storyblok.com\"\n  }\n}\n
\n"},"core-resources/tasks/update-task":{"contentPath":"management/v1/core-resources/tasks/update-task","path":"core-resources/tasks/update-task","lang":"v1","origin":"management","title":"Update a Task","attributes":{"title":"Update a Task"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
taskYour full task object
\n","example":"

Example Request

\n\n

You will receive a fully loaded task object as response.

\n"},"core-resources/workflow-stage-changes/create":{"contentPath":"management/v1/core-resources/workflow-stage-changes/create","path":"core-resources/workflow-stage-changes/create","lang":"v1","origin":"management","title":"Create a Workflow Stage Change","attributes":{"title":"Create a Workflow Stage Change"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stage_changeYour workflow stage change object
workflow_stage_change[workflow_stage_id]Workflow stage id required
workflow_stage_change[story_id]Story id required
\n","example":"

Example Request

\n\n

You will receive a workflow stage change object as response.

\n"},"core-resources/workflow-stage-changes/get-all":{"contentPath":"management/v1/core-resources/workflow-stage-changes/get-all","path":"core-resources/workflow-stage-changes/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Workflow Stage Changes","attributes":{"title":"Retrieve multiple Workflow Stage Changes"},"content":"

Returns an array of workflow stage change objects.

\n
\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
with_storyId of Story
\n","example":"

Example Request

\n\n

You will get an array of workflow stage change objects as response.

\n"},"core-resources/workflow-stage-changes/intro":{"contentPath":"management/v1/core-resources/workflow-stage-changes/intro","path":"core-resources/workflow-stage-changes/intro","lang":"v1","origin":"management","title":"Workflow Stage Changes","attributes":{"title":"Workflow Stage Changes"},"content":"

Workflow stage changes are objects that are assigned to a specific content item.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/workflow_stage_changes/:id\n
\n"},"core-resources/workflow-stage-changes/object":{"contentPath":"management/v1/core-resources/workflow-stage-changes/object","path":"core-resources/workflow-stage-changes/object","lang":"v1","origin":"management","title":"The Workflow Stage Change Object","attributes":{"title":"The Workflow Stage Change Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
user_idUser id
created_atCreation date
workflow_stage_idWorkflow stage id
\n","example":"

Example Object

\n
{\n  \"workflow_stage_change\": {\n    \"id\": 18,\n    \"workflow_stage_id\": 123,\n    \"created_at\": \"2020-01-01 10:00:00\",\n    \"user_id\": 123\n  }\n}\n
\n"},"core-resources/workflow-stages/create":{"contentPath":"management/v1/core-resources/workflow-stages/create","path":"core-resources/workflow-stages/create","lang":"v1","origin":"management","title":"Create a Workflow Stage","attributes":{"title":"Create a Workflow Stage"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stageYour workflow stage object required
workflow_stage[after_publish_id]Workflow stage id that gets assigned after publishing
workflow_stage[allow_publish]Boolean to allow publishing
workflow_stage[is_default]Boolean to set as default
workflow_stage[position]Position (Integer)
workflow_stage[allow_all_stages]Boolean to allow all stages
workflow_stage[allow_all_users]Boolean to allow change to all users
workflow_stage[name]Workflow name
workflow_stage[color]Workflow color
workflow_stage[user_ids]User ids that are allowed to change the stage
workflow_stage[space_role_ids]Space role ids that are allowed to change the stage
workflow_stage[workflow_stage_ids]Workflow stage ids the user can change the stage to
\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"core-resources/workflow-stages/delete":{"contentPath":"management/v1/core-resources/workflow-stages/delete","path":"core-resources/workflow-stages/delete","lang":"v1","origin":"management","title":"Delete a Workflow Stage","attributes":{"title":"Delete a Workflow Stage"},"content":"

Delete a workflow stage using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/workflow-stages/get-all":{"contentPath":"management/v1/core-resources/workflow-stages/get-all","path":"core-resources/workflow-stages/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Workflow Stages","attributes":{"title":"Retrieve multiple Workflow Stages"},"content":"

Returns an array of workflow stages.

\n","example":"

Example Request

\n\n

You will an array of workflow stages as response.

\n"},"core-resources/workflow-stages/get-one":{"contentPath":"management/v1/core-resources/workflow-stages/get-one","path":"core-resources/workflow-stages/get-one","lang":"v1","origin":"management","title":"Retrieve one Workflow Stage","attributes":{"title":"Retrieve one Workflow Stage"},"content":"

Returns a single, workflow stage object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"core-resources/workflow-stages/intro":{"contentPath":"management/v1/core-resources/workflow-stages/intro","path":"core-resources/workflow-stages/intro","lang":"v1","origin":"management","title":"Workflow Stage","attributes":{"title":"Workflow Stage"},"content":"

Content production in enterprises sometimes requires strict workflows to make sure that every team member gets involved. Storyblok allows you to define workflow stages and rules to control what each user is allowed to do.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/workflow_stages/:id\n
\n"},"core-resources/workflow-stages/object":{"contentPath":"management/v1/core-resources/workflow-stages/object","path":"core-resources/workflow-stages/object","lang":"v1","origin":"management","title":"The Workflow Stage Object","attributes":{"title":"The Workflow Stage Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
after_publish_idWorkflow stage id that gets assigned after publishing
allow_publishBoolean to allow publishing
is_defaultBoolean to set as default
positionPosition (Integer)
allow_all_stagesBoolean to allow all stages
allow_all_usersBoolean to allow change to all users
nameWorkflow name
colorWorkflow color
user_idsUser ids that are allowed to change the stage
space_role_idsSpace role ids that are allowed to change the stage
workflow_stage_idsWorkflow stage ids the user can change the stage to
\n","example":"

Example Object

\n
{\n  \"workflow_stage\": {\n    \"id\": 2,\n    \"allow_publish\": false,\n    \"is_default\": true,\n    \"user_ids\": [9,2],\n    \"space_role_ids\": [],\n    \"workflow_stage_ids\": [3],\n    \"name\": \"Drafting\",\n    \"color\": \"#babcb6\",\n    \"allow_all_stages\": false,\n    \"allow_all_users\": false,\n    \"position\": 1,\n    \"after_publish_id\": null\n  }\n}\n
\n"},"core-resources/workflow-stages/update":{"contentPath":"management/v1/core-resources/workflow-stages/update","path":"core-resources/workflow-stages/update","lang":"v1","origin":"management","title":"Update a Workflow Stage","attributes":{"title":"Update a Workflow Stage"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stageYour workflow stage object required
workflow_stage[after_publish_id]Workflow stage id that gets assigned after publishing
workflow_stage[allow_publish]Boolean to allow publishing
workflow_stage[is_default]Boolean to set as default
workflow_stage[position]Position (Integer)
workflow_stage[allow_all_stages]Boolean to allow all stages
workflow_stage[allow_all_users]Boolean to allow change to all users
workflow_stage[name]Workflow name
workflow_stage[color]Workflow color
workflow_stage[user_ids]User ids that are allowed to change the stage
workflow_stage[space_role_ids]Space role ids that are allowed to change the stage
workflow_stage[workflow_stage_ids]Workflow stage ids the user can change the stage to
\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"topics/authentication":{"contentPath":"management/v1/topics/authentication","path":"topics/authentication","lang":"v1","origin":"management","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your personal access token in API requests. The easiest way to get started is to create an OAuth2 token using the Storyblok app. Go to the My Account section at app.storyblok.com and click on “Generate new token”.

\n

Your personal access token will grant anyone who obtains it with access to all associated spaces for your account, so make sure to never expose it on the client side or commit it in your source code. Use strategies like environment variables to secure your personal access token. If you have exposed your personal access token, make sure to delete it immediately from the My Account section.

\n

Using an OAuth2 token, a username and password doesn’t need to be permanently stored and you can revoke access at any time.

\n","example":"
\n\n

Example Request

\n
curl -H \"Authorization: YOUR_OAUTH_TOKEN\" https://mapi.storyblok.com/\n
\n
\n
\n\n

Example Request

\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// Initialize the client with the oauth token\nconst Storyblok = new StoryblokClient({\n  oauthToken: 'YOUR_OAUTH_TOKEN'\n})\n
\n
\n"},"topics/errors":{"contentPath":"management/v1/topics/errors","path":"topics/errors","lang":"v1","origin":"management","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
403 - ForbiddenInsufficient permissions.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"management/v1/topics/introduction","path":"topics/introduction","lang":"v1","origin":"management","title":"Management API Reference","attributes":{"title":"Management API Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Management API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

The requests in the right sidebar are designed to work as is. The sample requests can be performed using your own API Authentication Token that you can obtain from your profile in the Storyblok application.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Management API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL

\n
https://mapi.storyblok.com\n
\n"},"topics/pagination":{"contentPath":"management/v1/topics/pagination","path":"topics/pagination","lang":"v1","origin":"management","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n
https://api.storyblok.com/v1/spaces/(:space_id)/stories/?per_page=2&page=1\n
\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"management/v1/topics/rate-limit","path":"topics/rate-limit","lang":"v1","origin":"management","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The management api is rate limited to 3 requests per second for users on the free plan and 6 requests per second for other users.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PlanRate Limit
Free3 per second
Basic6 per second
Advanced6 per second
Premium6 per second
EnterpriseCustom
\n"},"topics/use-cases":{"contentPath":"management/v1/topics/use-cases","path":"topics/use-cases","lang":"v1","origin":"management","title":"Use Cases","attributes":{"title":"Use Cases"},"content":"

The Management API should not be used to consume your information as it does not utilize our global CDN for your requests and can result in higher latencies. Please make sure to use the Content Delivery API instead.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Use Case
Migration from your current data storage / CMS
Integration with 3rd party applications
Import and Export automation
Automatic translation workflows
Component versioning
Whitelabel integrations
\n"}} \ No newline at end of file +{"core-resources/activities/activities":{"contentPath":"management/v1/core-resources/activities/activities","path":"core-resources/activities/activities","lang":"v1","origin":"management","title":"Activities","attributes":{"title":"Activities"},"content":"

Activities are created on update, create and delete actions in Storyblok for resources like stories, components, spaces, datasources and datasource entries.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/activities/:activity_id\n
\n"},"core-resources/activities/retrieve-multiple-activities":{"contentPath":"management/v1/core-resources/activities/retrieve-multiple-activities","path":"core-resources/activities/retrieve-multiple-activities","lang":"v1","origin":"management","title":"Retrieve multiple Activities","attributes":{"title":"Retrieve multiple Activities"},"content":"

Returns an array of activity objects. Can be filtered on date ranges and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
created_at_gteActivity creation date is greater than YYYY-MM-DD
created_at_lteActivity creation date is lower than YYYY-MM-DD
\n","example":"

Example Request

\n\n

You will receive an array of activity objects as response.

\n"},"core-resources/activities/retrieve-one-activity":{"contentPath":"management/v1/core-resources/activities/retrieve-one-activity","path":"core-resources/activities/retrieve-one-activity","lang":"v1","origin":"management","title":"Retrieve one Activity","attributes":{"title":"Retrieve one Activity"},"content":"

Returns a single activity object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded activity object as response.

\n"},"core-resources/activities/the-activity-object":{"contentPath":"management/v1/core-resources/activities/the-activity-object","path":"core-resources/activities/the-activity-object","lang":"v1","origin":"management","title":"The Activity Object","attributes":{"title":"The Activity Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
trackable_idId of reference object that was changes
trackable_typeType of the referenced object
owner_idId of User that created the object
owner_typeDefault: "User"
keyKey defined by type.action (eg: story.create, story.update, component.create)
parametersAdditional parameter passed; Default: null
recipient_idDefault: null
recipient_typeDefault: null
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
space_idSpace ID reference
\n","example":"

Example Object

\n
{\n  \"activity\": {\n    \"id\": 5405,\n    \"trackable_id\": null,\n    \"trackable_type\": null,\n    \"owner_id\": null,\n    \"owner_type\": null,\n    \"key\": null,\n    \"parameters\": {\n    },\n    \"recipient_id\": null,\n    \"recipient_type\": null,\n    \"created_at\": \"2018-11-10T15:32:58.649Z\",\n    \"updated_at\": \"2018-11-10T15:32:58.649Z\",\n    \"space_id\": 606\n  }\n}\n
\n"},"core-resources/approvals/approvals":{"contentPath":"management/v1/core-resources/approvals/approvals","path":"core-resources/approvals/approvals","lang":"v1","origin":"management","title":"Approvals","attributes":{"title":"Approvals"},"content":"

Triggers an approval message for a specific content entry. It allows you to send an approval request to another collaborator of the space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/approvals/:approval_id\n
\n"},"core-resources/approvals/create-approval":{"contentPath":"management/v1/core-resources/approvals/create-approval","path":"core-resources/approvals/create-approval","lang":"v1","origin":"management","title":"Create Approval","attributes":{"title":"Create Approval"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
\n","example":"

Example Request Object

\n
{\n  \"approval\": {\n    \"story_id\": 1066,\n    \"approver_id\": 1028\n  }\n}\n
\n

Example Request

\n\n

Example Response Object

\n
{\n  \"approval\": {\n    \"id\": 11,\n    \"status\": \"pending\"\n  }\n}\n
\n"},"core-resources/approvals/create-release-approval":{"contentPath":"management/v1/core-resources/approvals/create-release-approval","path":"core-resources/approvals/create-release-approval","lang":"v1","origin":"management","title":"Create Release Approval","attributes":{"title":"Create Release Approval"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
release_idID of the release that should be approved
\n","example":"

Example Request Object

\n
{\n  \"approval\": {\n    \"story_id\": 1067,\n    \"approver_id\": 1030\n  },\n  \"release_id\": 16\n}\n
\n

Example Request

\n\n

Example Response Object

\n
{\n  \"approval\": {\n    \"id\": 12,\n    \"status\": \"pending\"\n  }\n}\n
\n"},"core-resources/approvals/delete-approval":{"contentPath":"management/v1/core-resources/approvals/delete-approval","path":"core-resources/approvals/delete-approval","lang":"v1","origin":"management","title":"Delete an Approval","attributes":{"title":"Delete an Approval"},"content":"

Delete an approval by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/approvals/retrieve-multiple-approvals":{"contentPath":"management/v1/core-resources/approvals/retrieve-multiple-approvals","path":"core-resources/approvals/retrieve-multiple-approvals","lang":"v1","origin":"management","title":"Retrieve multiple Approvals","attributes":{"title":"Retrieve multiple Approvals"},"content":"

Returns an array of approval objects. This endpoint can be filtered on approver and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
approverNumeric Id of the approver
\n","example":"

Example Request

\n\n

You will receive an array of approval objects as response.

\n"},"core-resources/approvals/retrieve-one-approval":{"contentPath":"management/v1/core-resources/approvals/retrieve-one-approval","path":"core-resources/approvals/retrieve-one-approval","lang":"v1","origin":"management","title":"Retrieve one Approval","attributes":{"title":"Retrieve one Approval"},"content":"

Returns a single approval object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a approval object as response.

\n"},"core-resources/approvals/the-approval-object":{"contentPath":"management/v1/core-resources/approvals/the-approval-object","path":"core-resources/approvals/the-approval-object","lang":"v1","origin":"management","title":"The Approval Object","attributes":{"title":"The Approval Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
statusStatus of approval
story_idID of content entry that should be approved
approver_idID of the User that should be the approver
\n","example":"

Example Object

\n
{\n  \"approval\": {\n    \"id\": 11,\n    \"status\": \"pending\",\n    \"story_id\": 1066,\n    \"approver_id\": 1028\n  }\n}\n
\n"},"core-resources/asset-folders/asset-folders":{"contentPath":"management/v1/core-resources/asset-folders/asset-folders","path":"core-resources/asset-folders/asset-folders","lang":"v1","origin":"management","title":"Asset Folders","attributes":{"title":"Asset Folders"},"content":"

Asset folder allow you to group your assets. Besides the overall root folder you can define nested folder structures.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/asset_folders/:asset_folder_id\n
\n"},"core-resources/asset-folders/create-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/create-asset-folder","path":"core-resources/asset-folders/create-asset-folder","lang":"v1","origin":"management","title":"Create an Asset Folder","attributes":{"title":"Create an Asset Folder"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
asset_folderYour full asset folder object
asset_folder[name]Name is required
asset_folder[parent_id]The identifier of the parent folder. The parent_id parameter is optional. If the parent_id is omitted or set to null, the folder is created at root level
\n","example":"

Example Request

\n\n

You will receive an asset folder object as response.

\n"},"core-resources/asset-folders/delete-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/delete-asset-folder","path":"core-resources/asset-folders/delete-asset-folder","lang":"v1","origin":"management","title":"Delete an Asset Folder","attributes":{"title":"Delete an Asset Folder"},"content":"

Delete an asset folder by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/asset-folders/retrieve-multiple-asset-folders":{"contentPath":"management/v1/core-resources/asset-folders/retrieve-multiple-asset-folders","path":"core-resources/asset-folders/retrieve-multiple-asset-folders","lang":"v1","origin":"management","title":"Retrieve multiple Asset Folders","attributes":{"title":"Retrieve multiple Asset Folders"},"content":"

Returns an array of asset folder objects.

\n","example":"

Example Request

\n\n

You will receive an array of asset folder objects as response.

\n"},"core-resources/asset-folders/retrieve-one-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/retrieve-one-asset-folder","path":"core-resources/asset-folders/retrieve-one-asset-folder","lang":"v1","origin":"management","title":"Retrieve one Asset Folder","attributes":{"title":"Retrieve one Asset Folder"},"content":"

Returns a single, asset folder object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded asset folder object as response.

\n"},"core-resources/asset-folders/the-asset-folder-object":{"contentPath":"management/v1/core-resources/asset-folders/the-asset-folder-object","path":"core-resources/asset-folders/the-asset-folder-object","lang":"v1","origin":"management","title":"The Asset Folder Object","attributes":{"title":"The Asset Folder Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameDisplay name of your asset folder
parent_idParent asset folder id
\n","example":"

Example Object

\n
{\n  \"asset_folder\": {\n    \"id\": 41,\n    \"name\": \"Header Images\",\n    \"parent_id\": null\n  }\n}\n
\n"},"core-resources/asset-folders/update-asset-folder":{"contentPath":"management/v1/core-resources/asset-folders/update-asset-folder","path":"core-resources/asset-folders/update-asset-folder","lang":"v1","origin":"management","title":"Update an Asset Folder","attributes":{"title":"Update an Asset Folder"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
asset_folderYour full asset folder object
\n","example":"

Example Request

\n\n

You will receive a status code 204 as response.

\n"},"core-resources/assets/assets":{"contentPath":"management/v1/core-resources/assets/assets","path":"core-resources/assets/assets","lang":"v1","origin":"management","title":"Assets","attributes":{"title":"Assets"},"content":"

Assets like images, videos and documents are kept in the CDN as long as possible and will rarely hit the origin server. Each asset object references one of those uploaded images, videos and documents.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/assets/:asset_id\n
\n"},"core-resources/assets/delete-asset":{"contentPath":"management/v1/core-resources/assets/delete-asset","path":"core-resources/assets/delete-asset","lang":"v1","origin":"management","title":"Delete an Asset","attributes":{"title":"Delete an Asset"},"content":"

Delete an asset by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/assets/retrieve-multiple-assets":{"contentPath":"management/v1/core-resources/assets/retrieve-multiple-assets","path":"core-resources/assets/retrieve-multiple-assets","lang":"v1","origin":"management","title":"Retrieve multiple Assets","attributes":{"title":"Retrieve multiple Assets"},"content":"

Returns an array of asset objects. This endpoint is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
in_folderProvide the numeric id of a folder to filter the assets by a specific folder
sort_byPossible values: created_at:asc, created_at:desc, updated_at:asc, updated_at:desc, short_filename:asc, short_filename:desc
searchProvide a search term to filter a specific file by the filename
is_privateIf "1" it only displays private assets
\n","example":"

Example Request

\n\n

You will receive an array of asset objects as response.

\n"},"core-resources/assets/retrieve-one-asset":{"contentPath":"management/v1/core-resources/assets/retrieve-one-asset","path":"core-resources/assets/retrieve-one-asset","lang":"v1","origin":"management","title":"Retrieve one Asset","attributes":{"title":"Retrieve one Asset"},"content":"

Returns a single asset object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive an asset object as response.

\n"},"core-resources/assets/signed-response-object":{"contentPath":"management/v1/core-resources/assets/signed-response-object","path":"core-resources/assets/signed-response-object","lang":"v1","origin":"management","title":"Signed Response Object","attributes":{"title":"Signed Response Object"},"content":"

After creating an asset entry using a POST request you will receive a response object with all information needed to finally upload your asset. The second request after the creation of the asset entry will need all information in fields appended to your application/x-www-form-urlencoded request besides the actual file input. See the demo on how to upload an asset.

\n","example":"

Example Object

\n
{\n  \"pretty_url\": \"//a-example.storyblok.com/f/606/e5990a3595/your_file.jpg\",\n  \"public_url\": \"https://s3.amazonaws.com/a-example.storyblok.com/f/606/e5990a3595/your_file.jpg\",\n  \"fields\": {\n    \"key\": \"f/606/e5990a3595/your_file.jpg\",\n    \"acl\": \"public-read\",\n    \"Expires\": \"Sun, 10 Nov 2019 15:33:00 GMT\",\n    \"Cache-Control\": \"public; max-age=31536000\",\n    \"Content-Type\": \"image/jpeg\",\n    \"policy\": \"eyJleHBpcmF0aW9uIjoiMjAxOC0xMS0xMFQxNTo...ei1hbGdvcml0aG0iOiJBV1M0LUhNQUM...LWFtei1kYXRlIjoiMjAxODExMTBUMTUzMzAwWiJ9XX0=\",\n    \"x-amz-credential\": \"AKIAIU627EN23A/20181110/s3/aws4_request\",\n    \"x-amz-algorithm\": \"AWS4-HMAC-SHA256\",\n    \"x-amz-date\": \"20181110T153300Z\",\n    \"x-amz-signature\": \"aaedd72b54636662b137b7648b54bdb47ee3b1dd28173313647930e625c8\"\n  },\n  \"post_url\": \"https://s3.amazonaws.com/a-example.storyblok.com\"\n}\n
\n"},"core-resources/assets/the-asset-object":{"contentPath":"management/v1/core-resources/assets/the-asset-object","path":"core-resources/assets/the-asset-object","lang":"v1","origin":"management","title":"The Asset Object","attributes":{"title":"The Asset Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
filenameFull path of the asset, including the file name
space_idSpace ID in which the asset is connected
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
deleted_atDeleted date (Format: YYYY-mm-dd HH:MM)
fileFile Object
asset_folder_idId of the folder containing this asset
short_filenameThe file name of the asset
content_typeThe MIME type of the asset
content_lengthThe content length in bytes
is_privateDefines if the asset should be inaccessable to the public
\n","example":"

Example Object

\n
{\n  \"id\": 14,\n  \"filename\": \"/f/616/SIZE/UNIQUEIDENTIFIER/your_filename.jpg\",\n  \"space_id\": 616,\n  \"created_at\": \"2018-11-10T15:33:00.578Z\",\n  \"updated_at\": \"2018-11-10T15:33:00.578Z\",\n  \"file\": {\n    \"url\": null\n  },\n  \"asset_folder_id\": null,\n  \"deleted_at\": null,\n  \"short_filename\": \"your_filename.jpg\",\n  \"content_type\": \"image/jpeg\",\n  \"content_length\": 12303,\n  \"is_private\": false\n}\n
\n"},"core-resources/assets/update-asset":{"contentPath":"management/v1/core-resources/assets/update-asset","path":"core-resources/assets/update-asset","lang":"v1","origin":"management","title":"Update Asset","attributes":{"title":"Update Asset"},"content":"

Updating assets in Storyblok is very similar to uploading assets, however here you need to specify the ID of the asset you want to update alongside the new asset data. Also, you need to pass a new key and value pair "validate_upload":"1" to the request.

\n","example":"
    \n
  1. Start by requesting a signed upload URL and parameter
  2. \n
\n

Example Request

\n\n

Example Request (with asset folder)

\n\n
    \n
  1. Use the received signed response object to upload your file (example uses Node.js) and to finalize the process:
  2. \n
\n
const FormData = require('form-data')\nconst fs = require('fs')\n\nconst file = '/path_to/your_file.jpg'\nconst fileUpload = (signed_response_object, success, failed) => {\n  let form = new FormData()\n  // apply all fields from the signed response object to the second request\n  for (let key in signed_response_object.fields) {\n    form.append(key, signed_response_object.fields[key])\n  }\n  // also append the file read stream\n  form.append('file', fs.createReadStream(file))\n  // submit your form\n  form.submit(signed_response_object.post_url, (err, res) => {\n    if (err) throw err\n    \n    // 3. finalize the upload\n    Storyblok.get('spaces/606/assets/' + signed_response_object.id + '/finish_upload').then(response => {\n      console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n    }).catch(error => { \n      throw error\n    })\n    console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n  })\n}\n
\n
Storyblok.post('spaces/656/assets/', {\n  filename: 'new_file.jpg',\n  id: '18472',\n  validate_upload: '1'\n}).then(response => {\n  console.log(response)\n}).catch(error => { \n  throw error\n})\n
\n"},"core-resources/assets/upload-asset":{"contentPath":"management/v1/core-resources/assets/upload-asset","path":"core-resources/assets/upload-asset","lang":"v1","origin":"management","title":"Upload Asset","attributes":{"title":"Upload Asset"},"content":"

Uploading assets in Storyblok is a three step process. First you need to sign the asset you want to upload. Then you need to post the image as form data to our Amazon S3 bucket. Lastly, you need to send another request to finalize the process and let Storyblok retrieve the MIME type and the content length for your asset. Uploaded files will have parameterized names; Every dot "." (except the last one) will be replaced with underscore "_".

\n

Here you can find an example using Node.js on Github.

\n","example":"
    \n
  1. Start by requesting a signed upload URL and parameter
  2. \n
\n

Example Request

\n\n

Example Request (with asset folder)

\n\n
    \n
  1. Use the received signed response object to upload your file (example uses Node.js) and to finalize the process:
  2. \n
\n
const FormData = require('form-data')\nconst fs = require('fs')\n\nconst file = '/path_to/your_file.jpg'\nconst fileUpload = (signed_response_object, success, failed) => {\n  let form = new FormData()\n  // apply all fields from the signed response object to the second request\n  for (let key in signed_response_object.fields) {\n    form.append(key, signed_response_object.fields[key])\n  }\n  // also append the file read stream\n  form.append('file', fs.createReadStream(file))\n  // submit your form\n  form.submit(signed_response_object.post_url, (err, res) => {\n    if (err) throw err\n    \n    // 3. finalize the upload\n    Storyblok.get('spaces/606/assets/' + signed_response_object.id + '/finish_upload').then(response => {\n      console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n    }).catch(error => { \n      throw error\n    })\n    console.log('https://a.storyblok.com/' + signed_response_object.fields.key + ' uploaded!')\n  })\n}\n
\n"},"core-resources/collaborators/add-collaborator":{"contentPath":"management/v1/core-resources/collaborators/add-collaborator","path":"core-resources/collaborators/add-collaborator","lang":"v1","origin":"management","title":"Add a Collaborator","attributes":{"title":"Add a Collaborator"},"content":"

You can set some of the fields available in the collaborator object, below we only list the properties in the example and the possible required fields.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
collaboratorThe collaborator object
emailEmail that will be used in the space interface for collaborator or collaborator SSO ID required
rolethe role name of the collaborator. could be admin, editor or set to a roleid. For custom roles, you need to set role_id for the role and set role to multi if you have more than one custom role required
space_idNumeric id of the collaborator space required
space_role_idNumeric id connected with a role, usually an array of ids with more than one role required
space_role_idsAn array of numeric ids for multiple roles in a space for a collaborator
permissionsPermissions for a collaborator, usually is set to can_subscribe for a collaborator.
allow_multiple_roles_creationBoolean value, if true you can create multiple roles for a collaborator
\n","example":"

Example Request

\n\n

You will receive a fully loaded collaborator object as response.

\n"},"core-resources/collaborators/add-users-with-sso":{"contentPath":"management/v1/core-resources/collaborators/add-users-with-sso","path":"core-resources/collaborators/add-users-with-sso","lang":"v1","origin":"management","title":"Add a user with SSO","attributes":{"title":"Add a user with SSO"},"content":"

Similar to add-collaborator. You can add a user with SSO by using the sso_id property. The sso_id is the unique identifier of the user in your system. You can use this identifier to identify the user in Storyblok.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
sso_idThe unique identifier of the user in your system, can be an email required
emailEmail that will be used in the space interface for collaborator or collaborator SSO ID required
roleRole name of the collaborator, could be admin, editor or custom roles, which is set to id and set to multi if you have more than one role required
space_role_idNumeric id of the space role connected with collaborators, usually null with more than one collaborator required
\n","example":"

Example Request

\n\n

Example object

\n
{\n   \"collaborator\":{\n      \"user\":null,\n      \"role\":\"editor\",\n      \"user_id\":null,\n      \"permissions\":[\n         \n      ],\n      \"allowed_path\":\"\",\n      \"field_permissions\":\"\",\n      \"id\":110236,\n      \"space_role_id\":35053,\n      \"invitation\":{\n         \"email\":{\n            \"SSO Id\"\n         },\n         \"expires_at\":\"2022-09-29T00:51:35.074Z\"\n      },\n      \"space_role_ids\":[\n         // ...\n      ],\n      \"space_id\":175323\n   }\n}\n
\n"},"core-resources/collaborators/collaborators":{"contentPath":"management/v1/core-resources/collaborators/collaborators","path":"core-resources/collaborators/collaborators","lang":"v1","origin":"management","title":"Collaborators","attributes":{"title":"Collaborators"},"content":"

The collaborators endpoint tells you which collaborators have access to a space. You can use the collaborators endpoint to add, remove or update collaborators, including their roles and permissions.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/collaborators\n
\n"},"core-resources/collaborators/delete-collaborator":{"contentPath":"management/v1/core-resources/collaborators/delete-collaborator","path":"core-resources/collaborators/delete-collaborator","lang":"v1","origin":"management","title":"Delete a Collaborator","attributes":{"title":"Delete a Collaborator"},"content":"

Delete a collaborator by using their collaborator id. SSO users can be deleted by using their sso_id.

\n","example":"

Example Request

\n\n"},"core-resources/collaborators/the-collaborator-object":{"contentPath":"management/v1/core-resources/collaborators/the-collaborator-object","path":"core-resources/collaborators/the-collaborator-object","lang":"v1","origin":"management","title":"The Collaborator Object","attributes":{"title":"The Collaborator Object"},"content":"

This is an object representing collaborators in a space. Some of the properties can be read only and others can be managed by the space owner using the API. You can define the properties of a collaborator such as roles and permissions.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id of collaborator
firstnameFirst name of collaborator
lastnameLast name of collaborator
alt_emailEmail of collaborator
avatarAvatar of collaborator usually an image
useridUser id of collaborator
friendly_nameFriendly name of collaborator
roleRole of the collaborator, could be admin, editor or custom roles
user_idUser/numeric id of collaborator
permissionsAllow specific actions for collaborator in interface and add the permission as array of strings
allowed_pathsStory ids the user should have access to (acts as whitelist). If no item is selected the user has rights to access all content items.
field_permissionsHide specific fields for this user with an array of strings with the schema
space_role_idNumeric id of the space role connected with collaborators
space_idNumeric id of the collaborator space
space_role_idsArray of space role ids
\n

You can learn more about permissions and roles for collaborators in the Space Roles endpoint.

\n","example":"

Example Object

\n
{\n   \"collaborators\":[\n      {\n         \"user\":{\n            \"id\":262115,\n            \"firstname\":\"Marve\",\n            \"lastname\":\"Priscy\",\n            \"alt_email\":null,\n            \"avatar\":\"avatars/115866/5fgecfcb64/mayve.jpeg\",\n            \"userid\":\"mayve@email.com\",\n            \"friendly_name\":\"Marve Priscy\"\n         },\n         \"role\":\"49708\",\n         \"user_id\":262115,\n         \"permissions\":[\"can_subscribe\"],\n         \"allowed_path\":\"\",\n         \"field_permissions\":\"\",\n         \"id\":236290,\n         \"space_role_id\":\"49708\",\n         \"invitation\":null,\n         \"space_role_ids\":[],\n         \"space_id\":866112\n      }\n   ]\n}\n
\n"},"core-resources/collaborators/update-collaborator":{"contentPath":"management/v1/core-resources/collaborators/update-collaborator","path":"core-resources/collaborators/update-collaborator","lang":"v1","origin":"management","title":"Update a Collaborator Roles and Permissions","attributes":{"title":"Update a Collaborator Roles and Permissions"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
collaboratorThe collaborator object
idThe collaborator id
rolethe role name of the collaborator. Could be admin, editor or set to a roleid. For custom roles, you need to set role_id for the role and set role to multi if you have more than one custom role required
space_role_idNumeric id connected with a role, usually an array of ids with more than one role required
permissionsPermissions for a collaborator, usually is set to can_subscribe for a collaborator or empty array.
allow_multiple_roles_creationBoolean value, if true allows for creating multiple roles using ids for a collaborator
\n","example":"

Example Request

\n\n"},"core-resources/comments/create":{"contentPath":"management/v1/core-resources/comments/create","path":"core-resources/comments/create","lang":"v1","origin":"management","title":"Create a Workflow Stage Change","attributes":{"title":"Create a Workflow Stage Change"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stage_changeYour workflow stage change object
workflow_stage_change[workflow_stage_id]Workflow stage id required
workflow_stage_change[story_id]Story id required
\n","example":"

Example Request

\n\n

You will receive a workflow stage change object as response.

\n"},"core-resources/comments/delete":{"contentPath":"management/v1/core-resources/comments/delete","path":"core-resources/comments/delete","lang":"v1","origin":"management","title":"Delete a Workflow Stage Change","attributes":{"title":"Delete a Workflow Stage Change"},"content":"

Delete a workflow stage change using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/comments/get-all":{"contentPath":"management/v1/core-resources/comments/get-all","path":"core-resources/comments/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Space Role","attributes":{"title":"Retrieve multiple Space Role"},"content":"

Returns an array of space role objects.

\n","example":"

Example Request

\n\n

You will an array of space role objects as response.

\n"},"core-resources/comments/get-one":{"contentPath":"management/v1/core-resources/comments/get-one","path":"core-resources/comments/get-one","lang":"v1","origin":"management","title":"Retrieve one Space Role","attributes":{"title":"Retrieve one Space Role"},"content":"

Returns a single, space role object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/comments/intro":{"contentPath":"management/v1/core-resources/comments/intro","path":"core-resources/comments/intro","lang":"v1","origin":"management","title":"Space Roles","attributes":{"title":"Space Roles"},"content":"

Space roles are custom permission sets that can be attached to collaborators to define their roles and permissions in a specific space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/space_roles/:space_role_id\n
\n"},"core-resources/comments/object":{"contentPath":"management/v1/core-resources/comments/object","path":"core-resources/comments/object","lang":"v1","origin":"management","title":"The Space Role Object","attributes":{"title":"The Space Role Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
roleName used in the interface
access_tasksIs allowed to access the Tasks menu item
allowed_pathsStory ids the user should have access to (acts as whitelist). If no item is selected the user has rights to access all content items.
resolved_allowed_pathsResolved allowed_paths for displaying paths
field_permissionsHide specific fields for this user with an array of strings with the schema: "component_name.field_name"
permissionsAllow specific actions in interface by adding the permission as array of strings
\n

Possible Permissions

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PermissionDescription
publish_storiesAllow publishing of content entries
save_storiesAllow editing and saving of content entries
edit_datasourcesAllow editing and saving of datasources
access_commerceAllow access to commerce app
edit_story_slugDeny the change of slugs of content entries
move_storyDeny moving of content entries
view_composerDeny access to visual composer
\n","example":"

Example Object

\n
{\n  \"space_role\": {\n    \"id\": 18,\n    \"role\": \"English User\",\n    \"access_tasks\": true,\n    \"resolved_allowed_paths\": [\n\n    ],\n    \"allowed_paths\": [\n      12412,\n      51122\n    ],\n    \"field_permissions\": [\n\n    ],\n    \"permissions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/comments/update":{"contentPath":"management/v1/core-resources/comments/update","path":"core-resources/comments/update","lang":"v1","origin":"management","title":"Update a Space Role","attributes":{"title":"Update a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour full component object
space_role[name]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/component-groups/component-groups":{"contentPath":"management/v1/core-resources/component-groups/component-groups","path":"core-resources/component-groups/component-groups","lang":"v1","origin":"management","title":"Component Groups","attributes":{"title":"Component Groups"},"content":"

A component group can be used to group components together. Each component can have only one component group.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/component_groups/:component_group_id\n
\n"},"core-resources/component-groups/create-component-group":{"contentPath":"management/v1/core-resources/component-groups/create-component-group","path":"core-resources/component-groups/create-component-group","lang":"v1","origin":"management","title":"Create a Component Group","attributes":{"title":"Create a Component Group"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
component_groupYour full component group object
component_group[name]The component group name is required
\n","example":"

Example Request

\n\n

You will receive a fully loaded component group object as response.

\n"},"core-resources/component-groups/delete-component-group":{"contentPath":"management/v1/core-resources/component-groups/delete-component-group","path":"core-resources/component-groups/delete-component-group","lang":"v1","origin":"management","title":"Delete a Component Group","attributes":{"title":"Delete a Component Group"},"content":"

Delete any component group using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/component-groups/retrieve-multiple-component-groups":{"contentPath":"management/v1/core-resources/component-groups/retrieve-multiple-component-groups","path":"core-resources/component-groups/retrieve-multiple-component-groups","lang":"v1","origin":"management","title":"Retrieve multiple Component Groups","attributes":{"title":"Retrieve multiple Component Groups"},"content":"

Returns an array of component group objects. The response of this endpoint is not paginated and you will retrieve all component groups.

\n","example":"

Example Request

\n\n

You will receive an array of component group objects as response.

\n"},"core-resources/component-groups/retrieve-one-component-group":{"contentPath":"management/v1/core-resources/component-groups/retrieve-one-component-group","path":"core-resources/component-groups/retrieve-one-component-group","lang":"v1","origin":"management","title":"Retrieve one Component Group","attributes":{"title":"Retrieve one Component Group"},"content":"

Returns a single, fully loaded component group object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded component group object as response.

\n"},"core-resources/component-groups/the-component-group-object":{"contentPath":"management/v1/core-resources/component-groups/the-component-group-object","path":"core-resources/component-groups/the-component-group-object","lang":"v1","origin":"management","title":"The Component Group Object","attributes":{"title":"The Component Group Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameName of the group
uuidUuid of the group
\n","example":"

Example Object

\n
{\n  \"component_group\": {\n    \"id\": 214123,\n    \"name\": \"Teasers\",\n    \"uuid\": \"19323-32144-23423-42314\"\n  }\n}\n
\n"},"core-resources/component-groups/update-component-group":{"contentPath":"management/v1/core-resources/component-groups/update-component-group","path":"core-resources/component-groups/update-component-group","lang":"v1","origin":"management","title":"Update a Component group","attributes":{"title":"Update a Component group"},"content":"","example":"

Example Request

\n\n

You will receive a fully loaded, updated component group object as response.

\n"},"core-resources/components/components":{"contentPath":"management/v1/core-resources/components/components","path":"core-resources/components/components","lang":"v1","origin":"management","title":"Components","attributes":{"title":"Components"},"content":"

A component is a standalone entity that is meaningful in its own right. While components (or bloks) can be nested in each other, semantically they remain equal. Each component is a small piece of your data structure which can be filled with content or nested by your content editor. One component can consist of as many field types as required.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/components/:component_id\n
\n"},"core-resources/components/create-component":{"contentPath":"management/v1/core-resources/components/create-component","path":"core-resources/components/create-component","lang":"v1","origin":"management","title":"Create a Component","attributes":{"title":"Create a Component"},"content":"

You can set most of the fields that are available in the component object, below we only list the properties in the example and possible required fields.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
componentThe component object
component[name]Technical name used for component property in entries required
component[display_name]Name that will be used in the editor interface
component[image]URL to the preview image, if uploaded
component[preview]Define the field that should be used for preview in the interface
component[is_root]Component should be usable as a Content Type
component[is_nestable]Component should be insertable in blocks field type fields
component[component_group_uuid]The component group uuid of the component
component[schema]Key value pairs of component fields
\n","example":"

Example Request

\n\n

You will receive a fully loaded component object as response.

\n"},"core-resources/components/delete-component":{"contentPath":"management/v1/core-resources/components/delete-component","path":"core-resources/components/delete-component","lang":"v1","origin":"management","title":"Delete a Component","attributes":{"title":"Delete a Component"},"content":"

Delete any component using its numeric id. Already used components will still stay in place but will show up with no schema definition so your inserted values won't be removed. You can use the update stories to migrate your content to other or new components.

\n","example":"

Example Request

\n\n"},"core-resources/components/possible-field-types":{"contentPath":"management/v1/core-resources/components/possible-field-types","path":"core-resources/components/possible-field-types","lang":"v1","origin":"management","title":"Possible field types","attributes":{"title":"Possible field types"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Field TypeDescription
bloksBlocks: a field to interleave other components in your current one
textText: a text field
textareaTextarea: a text area
markdownMarkdown: write markdown with a text area and additional formatting options
numberNumber: a number field
datetimeDate/Time: a date- and time picker
booleanBoolean: a checkbox - true/false
optionsMulti-Options: a list of checkboxes
optionSingle-Option: a single dropdown
assetAsset: Single asset (images, videos, audio, and documents)
multiassetMulti-Assets: (images, videos, audio, and documents)
multilinkLink: an input field for internal linking to other stories
sectionGroup: no input possibility - allows you to group fields in sections
customPlugin: Extend the editor yourself with a color picker or similar - Check out: Creating a Storyblok field type plugin
imageImage (old): a upload field for a single image with cropping possibilities
fileFile (old): a upload field for a single file
\n","example":"

Example Object

\n
\"field_key\": {\n  ...\n  \"type\": \"text\", // <-- field type\n  ...\n}\n
\n"},"core-resources/components/retrieve-multiple-components":{"contentPath":"management/v1/core-resources/components/retrieve-multiple-components","path":"core-resources/components/retrieve-multiple-components","lang":"v1","origin":"management","title":"Retrieve multiple Components","attributes":{"title":"Retrieve multiple Components"},"content":"

Returns an array of component objects. The response of this endpoint is not paginated and you will retrieve all components.

\n","example":"

Example Request

\n\n

You will receive an array of component objects as response.

\n"},"core-resources/components/retrieve-one-component":{"contentPath":"management/v1/core-resources/components/retrieve-one-component","path":"core-resources/components/retrieve-one-component","lang":"v1","origin":"management","title":"Retrieve one Component","attributes":{"title":"Retrieve one Component"},"content":"

Returns a single, fully loaded component object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded component object as response.

\n"},"core-resources/components/the-component-field-object":{"contentPath":"management/v1/core-resources/components/the-component-field-object","path":"core-resources/components/the-component-field-object","lang":"v1","origin":"management","title":"The Component Field","attributes":{"title":"The Component Field"},"content":"

Not every property will be used for every field type; some may only effect specific types.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
typeThe type of your field
posPosition of field in component
translatableCan field be translated; Default: false
requiredIs field required; Default: false
regexClient Regex validation for the field
descriptionDescription shown in the editor interface
default_valueDefault value for the field; Can be an escaped JSON object
can_syncAdvanced usage to sync with field in preview; Default: false
preview_fieldIs used as instance preview field below component name in bloks types
no_translateBoolean; Should be excluded in translation export
rtlBoolean; Enable global RTL for this field
Only for type: markdown, text, textarea
exclude_from_mergeExcludes a blok from being merged during a merge action (only works with the Dimensions App)
exclude_from_overwriteExcludes a blok from being overwritten during an overwrite action (only works with the Dimensions App)
force_mergeOverwrites a blok during a merge action (only works with the Dimensions App)
rich_markdownEnable rich markdown view by default (true/false);
Only for type: markdown
keysArray of field keys to include in this section;
Only for type: section
field_typeName of the custom field type plugin;
Only for type: custom
sourcePossible values: undefined: Self; internal_stories: Stories; internal: Datasource; external: API Endpoint in Datasource Entries Array Format;
Only for type: options, option, custom;
use_uuidDefault: true; available in option and source=internal_stories
folder_slugFilter on selectable stories path; Effects editor only if source=internal_stories; In case you have a multi-language folder structure you can add the '{0}' placeholder and the path will be adapted dynamically. Examples: "{0}/categories/", {0}/{1}/categories/
datasource_slugDefine selectable datasources string; Effects editor only if source=internal
external_datasourceDefine external datasource JSON Url; Effects editor only if source=external
optionsArray of datasource entries [{name:"", value:""}]; Effects editor only if source=undefined
image_cropActivate force crop for images: (true/false);
Only for type: image
keep_image_sizeKeep original size: (true/false);
Only for type: image
image_widthDefine width in px or width ratio if keep_image_size is enabled;
Only for type: image
image_heightDefine height in px or height ratio if keep_image_size is enabled;
Only for type: image
asset_folder_idDefault asset folder numeric id to store uploaded image of that field;
Only for type: image
add_httpsPrepends https: to stop usage of relative protocol;
Only for type: image, file
restrict_componentsActivate restriction nestable component option; Default: false;
Only for type: bloks
maximumMaximum amount of added bloks in this blok field;
Only for type: bloks
restrict_content_typesActivate restriction content type option;
Only for type: multilink
component_whitelistArray of component/content type names: ["post","page","product"];
Only for type: bloks, multilink
disable_timeDisables time selection from date picker; Default: false;
Only for type: datetime
max_lengthSet the max length of the input string;
Only for type: text, textarea, markdown
filetypesArray of file type names: ["images", "videos", "audios", "texts"];
Only for type: multiasset
\n","example":"

Example Object

\n
// name of the field as key eg. \"field key\" in schema property in your component\n\"title\": {\n  \"type\": \"text\",\n  \"pos\": 0,\n  \"translatable\": true,\n  \"required\": true,\n  \"regex\": \"\",\n  \"description\": \"Description for the field\",\n  \"display_name\": \"\",\n  \"default_value\": \"\",\n  \"can_sync\": false,\n  \"rtl\": false,\n  \"no_translate\": false\n}\n
\n"},"core-resources/components/the-component-object":{"contentPath":"management/v1/core-resources/components/the-component-object","path":"core-resources/components/the-component-object","lang":"v1","origin":"management","title":"The Component Object","attributes":{"title":"The Component Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameTechnical name used for component property in entries
display_nameName that will be used in the editor interface
created_atCreation date (Format: YYYY-mm-dd HH:MM)
imageURL to the preview image, if uploaded
previewDefine the field that should be used for preview in the interface
is_rootComponent should be usable as a Content Type
is_nestableComponent should be insertable in blocks field type fields
all_presetsArray of presets for this component
real_nameDuplicated technical name, used for internal tasks
component_group_uuidThe component group uuid of the component
\n","example":"

Example Object

\n
{\n  \"component\": {\n    \"id\": 214123,\n    \"name\": \"post\",\n    \"display_name\": \"Post\",\n    \"created_at\": \"2018-12-28T14:54:01.423Z\",\n    \"schema\": {\n      // definition of fields (schema) for this component\n      \"title\": {\n        \"type\": \"text\",\n        \"pos\": 0\n      },\n      \"description\": {\n        \"type\": \"text\",\n        \"pos\": 1\n      },\n      ...\n    },\n    \"image\": null,\n    \"preview_field\": null,\n    \"is_root\": true,\n    \"is_nestable\": true,\n    \"all_presets\": [],\n    \"preset_id\": null,\n    \"real_name\": \"post\",\n    \"component_group_uuid\": \"19323-32144-23423-42314\"\n  },\n  \"update_content\": true\n}\n
\n"},"core-resources/components/update-component":{"contentPath":"management/v1/core-resources/components/update-component","path":"core-resources/components/update-component","lang":"v1","origin":"management","title":"Update a Component","attributes":{"title":"Update a Component"},"content":"

Send the component object with updated values to our backend using the PUT method. An update on component will not take over already inserted values, make sure to also update your stories that contain this component.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
componentYour full component object
component[name]Technical name used for component property in entries required
component[display_name]Name that will be used in the editor interface
component[image]URL to the preview image, if uploaded
component[preview]Define the field that should be used for preview in the interface
component[is_root]Component should be usable as a Content Type
component[is_nestable]Component should be insertable in blocks field type fields
component[component_group_uuid]The component group uuid of the component
component[schema]Key value pairs of component fields
\n","example":"

Example Request

\n\n

You will receive a fully loaded, updated component object as response.

\n"},"core-resources/datasource-entries/create-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/create-datasource-entry","path":"core-resources/datasource-entries/create-datasource-entry","lang":"v1","origin":"management","title":"Create a Datasource Entry","attributes":{"title":"Create a Datasource Entry"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasource_entryYour full datasource entry object
datasource_entry[name]Name is required
datasource_entry[value]Value is required
datasource_entry[datasource_id]Datasource Id is required
\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n"},"core-resources/datasource-entries/datasource-entries":{"contentPath":"management/v1/core-resources/datasource-entries/datasource-entries","path":"core-resources/datasource-entries/datasource-entries","lang":"v1","origin":"management","title":"Datasource Entries","attributes":{"title":"Datasource Entries"},"content":"

The actual KEY/VALUE pair object a datasource consists of. One specific datasource entry is a set of two linked data items: a key, which is a unique identifier for the item of data scoped in the data source, and the value, which is the data that is identified.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/datasource_entries/:datasource_entry_id\n
\n"},"core-resources/datasource-entries/delete-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/delete-datasource-entry","path":"core-resources/datasource-entries/delete-datasource-entry","lang":"v1","origin":"management","title":"Delete a Datasource Entry","attributes":{"title":"Delete a Datasource Entry"},"content":"

Delete a datasource entry by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/datasource-entries/retrieve-multiple-datasource-entries":{"contentPath":"management/v1/core-resources/datasource-entries/retrieve-multiple-datasource-entries","path":"core-resources/datasource-entries/retrieve-multiple-datasource-entries","lang":"v1","origin":"management","title":"Retrieve multiple Datasource Entries","attributes":{"title":"Retrieve multiple Datasource Entries"},"content":"

Returns an array of datasource entry objects. This endpoint is paged and can be filtered by a datasource id or slug. The dimension parameter allows you to have the dimension value filled with the according data.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
datasource_idProvide the numeric id of a datasource
datasource_slugProvide the slug of a datasource
dimensionProvide dimension to receive the dimension_value filled
\n","example":"

Example Request

\n\n

You will receive an array of datasource entry objects as response.

\n"},"core-resources/datasource-entries/retrieve-one-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/retrieve-one-datasource-entry","path":"core-resources/datasource-entries/retrieve-one-datasource-entry","lang":"v1","origin":"management","title":"Retrieve one Datasource Entry","attributes":{"title":"Retrieve one Datasource Entry"},"content":"

Returns a single datasource entry object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n"},"core-resources/datasource-entries/the-datasource-entry-object":{"contentPath":"management/v1/core-resources/datasource-entries/the-datasource-entry-object","path":"core-resources/datasource-entries/the-datasource-entry-object","lang":"v1","origin":"management","title":"The Datasource Entry Object","attributes":{"title":"The Datasource Entry Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
nameThe key which will be used to resolve the given value
valueThe actual value for the provided key
datasource_idNumeric ID of connected datasource
\n","example":"

Example Object

\n
{ \n  \"datasource_entry\" : {\n    \"id\": 52,\n    \"name\": \"newsletter_text\",\n    \"value\": \"Subscribe to our newsletter to make sure you don’t miss anything.\",\n    \"datasource_id\": \"\"\n  }\n}\n
\n"},"core-resources/datasource-entries/update-datasource-entry":{"contentPath":"management/v1/core-resources/datasource-entries/update-datasource-entry","path":"core-resources/datasource-entries/update-datasource-entry","lang":"v1","origin":"management","title":"Update a Datasource Entry","attributes":{"title":"Update a Datasource Entry"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasource_entryYour full datasource entry object
datasource_entry[name]Name is required
datasource_entry[value]Value is required
datasource_entry[dimension_value]Value of the key in the provided dimension_id (optional)
dimension_idNumeric dimension id (optional, but required to set a dimension_value)
\n","example":"

Example Request

\n\n

You will receive a datasource entry object as response.

\n

Example Request for setting a value for specific dimension

\n\n

You will receive a datasource entry object as response. The dimension_id is available in your datasource object

\n"},"core-resources/datasources/create-datasource":{"contentPath":"management/v1/core-resources/datasources/create-datasource","path":"core-resources/datasources/create-datasource","lang":"v1","origin":"management","title":"Create a Datasource","attributes":{"title":"Create a Datasource"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasourceYour full datasource object
datasource[name]Name is required
datasource[slug]Slug is required
\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/datasources/datasources":{"contentPath":"management/v1/core-resources/datasources/datasources","path":"core-resources/datasources/datasources","lang":"v1","origin":"management","title":"Datasources","attributes":{"title":"Datasources"},"content":"

A datasource is a collection of datasource entries with a specific name and slug. Each datasource entry is a collection of key-value pairs (KVP), so called datasource entries. Those key-value pairs can be used for a single choice, multiple choice options and as well directly through our API to use them for multi-language labels, categories, or anything similar.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/datasources/:datasource_id\n
\n"},"core-resources/datasources/delete-datasource":{"contentPath":"management/v1/core-resources/datasources/delete-datasource","path":"core-resources/datasources/delete-datasource","lang":"v1","origin":"management","title":"Delete a Datasource","attributes":{"title":"Delete a Datasource"},"content":"

Delete a datasource by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/datasources/retrieve-multiple-datasources":{"contentPath":"management/v1/core-resources/datasources/retrieve-multiple-datasources","path":"core-resources/datasources/retrieve-multiple-datasources","lang":"v1","origin":"management","title":"Retrieve multiple Datasources","attributes":{"title":"Retrieve multiple Datasources"},"content":"

Returns an array of datasource objects. This endpoint is paged and can be filtered by slug.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
searchProvide a search string
by_idsProvide ids
\n","example":"

Example Request

\n\n

You will receive an array of datasource objects as response.

\n"},"core-resources/datasources/retrieve-one-datasource":{"contentPath":"management/v1/core-resources/datasources/retrieve-one-datasource","path":"core-resources/datasources/retrieve-one-datasource","lang":"v1","origin":"management","title":"Retrieve one Datasource","attributes":{"title":"Retrieve one Datasource"},"content":"

Returns a single datasource object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/datasources/the-datasource-object":{"contentPath":"management/v1/core-resources/datasources/the-datasource-object","path":"core-resources/datasources/the-datasource-object","lang":"v1","origin":"management","title":"The Datasource Object","attributes":{"title":"The Datasource Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID, used to reference datasource entries
nameThe key which will be used to resolve the given value
slugThe slug used to request the datasource via API
dimensionsList of defined dimensions for this datasource
\n","example":"

Example Object

\n
{\n  \"datasource\": {\n    \"id\": 91,\n    \"name\": \"Labels for Website\",\n    \"slug\": \"labels\",\n    \"dimensions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/datasources/update-datasource":{"contentPath":"management/v1/core-resources/datasources/update-datasource","path":"core-resources/datasources/update-datasource","lang":"v1","origin":"management","title":"Update a Datasource","attributes":{"title":"Update a Datasource"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
datasourceA datasource object
\n","example":"

Example Request

\n\n

You will receive a datasource object as response.

\n"},"core-resources/deployments/branch-list":{"contentPath":"management/v1/core-resources/deployments/branch-list","path":"core-resources/deployments/branch-list","lang":"v1","origin":"management","title":"Retrieve multiple branches","attributes":{"title":"Retrieve multiple branches"},"content":"

Returns an array of branches objects. This endpoint is useful for retrieving the branch identifiers. The branch identifier is needed for triggering a deployment.

\n","example":"

Example Request

\n\n"},"core-resources/deployments/branch-one":{"contentPath":"management/v1/core-resources/deployments/branch-one","path":"core-resources/deployments/branch-one","lang":"v1","origin":"management","title":"Retrieve one branch","attributes":{"title":"Retrieve one branch"},"content":"

Returns the selected branch (or pipeline) objects. This endpoint is useful for retrieving information related to a specific branch.

\n","example":"

Example Request

\n\n"},"core-resources/deployments/create":{"contentPath":"management/v1/core-resources/deployments/create","path":"core-resources/deployments/create","lang":"v1","origin":"management","title":"Create a Branch Deployment","attributes":{"title":"Create a Branch Deployment"},"content":"

Once you have set your pipelines (via the Storyblok App or the Management API), you can start to trigger the deployment.\nThe deployment could be triggered via Storyblok UI in the Content section, by selecting the pipeline in the Pipelines dropdown.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
branch_idThe branch id to deploy required
release_uuidsThe array of releases (referenced by their respective uuids to deploy)
\n","example":"

Example Request

\n\n"},"core-resources/deployments/intro":{"contentPath":"management/v1/core-resources/deployments/intro","path":"core-resources/deployments/intro","lang":"v1","origin":"management","title":"Branch deployments","attributes":{"title":"Branch deployments"},"content":"

The endpoint /v1/spaces/:space_id/deployments can be used to trigger the deployment process across the branches.

\n

Stories created via the Management API are created in the default branch (Preview). Subsequently, they can be released to other branches (e.g. Staging, Production) by creating a branch deployment.

\n

Stories created via the Management API are created in the default branch (Preview). Subsequently, they can be deployed to other branches (e.g. Staging, Production according to the "source of sync" option) by triggering a deployment.

\n

For using this endpoint, you have to install the Pipelines application.

\n","example":""},"core-resources/field-types/create-field-type":{"contentPath":"management/v1/core-resources/field-types/create-field-type","path":"core-resources/field-types/create-field-type","lang":"v1","origin":"management","title":"Create a Field Type","attributes":{"title":"Create a Field Type"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
field_typeYour field type object
field_type[name]Name is required
\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/delete-field-type":{"contentPath":"management/v1/core-resources/field-types/delete-field-type","path":"core-resources/field-types/delete-field-type","lang":"v1","origin":"management","title":"Delete a Field Type","attributes":{"title":"Delete a Field Type"},"content":"

Delete a field type by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/field-types/field-types":{"contentPath":"management/v1/core-resources/field-types/field-types","path":"core-resources/field-types/field-types","lang":"v1","origin":"management","title":"Field types","attributes":{"title":"Field types"},"content":"

We built Storyblok with a robust and flexible plugin system to give our customers the power to extend the editor with custom fields like a color picker or a google maps location selector. It’s basically a Vue.js 2.5.2 component extended with a few helpers in the ‘window.Storyblok.plugin’ variable.

\n

This endpoint lets you push and pull the code of your field type via the management api and can be used to automatically deploy a plugin.

\n

Read more about field type development.

\n","example":"

Endpoint

\n
GET /v1/field_types/:id\n
\n"},"core-resources/field-types/retrieve-multiple-field-types":{"contentPath":"management/v1/core-resources/field-types/retrieve-multiple-field-types","path":"core-resources/field-types/retrieve-multiple-field-types","lang":"v1","origin":"management","title":"Retrieve multiple Field Types","attributes":{"title":"Retrieve multiple Field Types"},"content":"

Returns an array of field type objects. This endpoint is paged.

\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/retrieve-one-field-type":{"contentPath":"management/v1/core-resources/field-types/retrieve-one-field-type","path":"core-resources/field-types/retrieve-one-field-type","lang":"v1","origin":"management","title":"Retrieve one Field Type","attributes":{"title":"Retrieve one Field Type"},"content":"

Returns a single field type object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/field-types/the-field-type-object":{"contentPath":"management/v1/core-resources/field-types/the-field-type-object","path":"core-resources/field-types/the-field-type-object","lang":"v1","origin":"management","title":"The Field Type Object","attributes":{"title":"The Field Type Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your field type
nameGiven name of your field type. Needs to be unique. A personal prefix is recommended (Example: my-geo-selector).
bodyThe uncompiled javascript code of the field type.
compiled_bodyUsed by the online code editor. Needs to be an empty string if using local plugin development.
space_idsArray of space ids where the field type is assigned to.
\n","example":"

Example Object

\n
{\n  \"field_type\": {\n    \"id\": 124,\n    \"name\": \"my-geo-selector\",\n    \"body\": \"var Fieldtype = {}\",\n    \"compiled_body\": \"\",\n    \"space_ids\": []\n  }\n}\n
\n"},"core-resources/field-types/update-field-type":{"contentPath":"management/v1/core-resources/field-types/update-field-type","path":"core-resources/field-types/update-field-type","lang":"v1","origin":"management","title":"Update a Field Type","attributes":{"title":"Update a Field Type"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
field_typeYour full field type object.
field_type[body]The javascript code of the field type.
field_type[compiled_body]Used by the online code editor. Needs to be an empty string if using local plugin development.
field_type[space_ids]Array of space ids where the field type is assigned to.
publishIf this parameter is not empty the field type will be published.
\n","example":"

Example Request

\n\n

You will receive a field type object as response.

\n"},"core-resources/presets/create-preset":{"contentPath":"management/v1/core-resources/presets/create-preset","path":"core-resources/presets/create-preset","lang":"v1","origin":"management","title":"Create a Preset","attributes":{"title":"Create a Preset"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
presetYour full preset object
preset[name]Name is required
preset[component_id]Use numeric component id for referencing
\n","example":"

Example Request

\n\n

You will receive a fully loaded preset object as response.

\n"},"core-resources/presets/delete-preset":{"contentPath":"management/v1/core-resources/presets/delete-preset","path":"core-resources/presets/delete-preset","lang":"v1","origin":"management","title":"Delete a Preset","attributes":{"title":"Delete a Preset"},"content":"

Delete a preset by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/presets/presets":{"contentPath":"management/v1/core-resources/presets/presets","path":"core-resources/presets/presets","lang":"v1","origin":"management","title":"Presets","attributes":{"title":"Presets"},"content":"

As a developer, you can now define multiple default values for your components. For example, a teaser component can have three styles:

\n\n

To make it easier for the editor to find the necessary configuration of this three styles you can save it as presets and upload a screenshot.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/presets/:preset_id\n
\n"},"core-resources/presets/retrieve-multiple-presets":{"contentPath":"management/v1/core-resources/presets/retrieve-multiple-presets","path":"core-resources/presets/retrieve-multiple-presets","lang":"v1","origin":"management","title":"Retrieve multiple Presets","attributes":{"title":"Retrieve multiple Presets"},"content":"

Returns an array of preset objects.

\n","example":"

Example Request

\n\n

You will receive an array of preset objects as response.

\n"},"core-resources/presets/retrieve-one-preset":{"contentPath":"management/v1/core-resources/presets/retrieve-one-preset","path":"core-resources/presets/retrieve-one-preset","lang":"v1","origin":"management","title":"Retrieve one Preset","attributes":{"title":"Retrieve one Preset"},"content":"

Returns a single preset object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a preset object as response.

\n"},"core-resources/presets/the-preset-object":{"contentPath":"management/v1/core-resources/presets/the-preset-object","path":"core-resources/presets/the-preset-object","lang":"v1","origin":"management","title":"The Preset Object","attributes":{"title":"The Preset Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your preset
nameGiven name of your preset
preset[preset]Object with the fields you want to save in the preset
component_idID of the component the preset should be connected
imageScreenshot or other preview image for your editor; Default: null
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
\n","example":"

Example Object

\n
{\n  \"preset\": {\n    \"id\": 1814,\n    \"name\": \"Teaser with filled headline\",\n    \"preset\": {\n      // fields of the component filled with content\n      \"headline\": \"This is a default value for the preset!\",\n      ...\n    },\n    \"component_id\": 62,\n    \"space_id\": 606,\n    \"image\": \"//a.storyblok.com/f/606/...\",\n    \"created_at\": \"2018-11-10T15:33:16.726Z\",\n    \"updated_at\": \"2018-11-10T15:33:16.726Z\"\n  }\n}\n
\n"},"core-resources/presets/update-preset":{"contentPath":"management/v1/core-resources/presets/update-preset","path":"core-resources/presets/update-preset","lang":"v1","origin":"management","title":"Update a Preset","attributes":{"title":"Update a Preset"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
presetYour full preset object
\n","example":"

Example Request

\n\n

You will receive a fully loaded preset object as response.

\n"},"core-resources/releases/create":{"contentPath":"management/v1/core-resources/releases/create","path":"core-resources/releases/create","lang":"v1","origin":"management","title":"Create a Release","attributes":{"title":"Create a Release"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
releaseYour release object required
release[name]Name of the release
release[release_at]Date to deploy the release (Format: YYYY-mm-dd HH:MM)
release[branches_to_deploy]Ids of pipeline stages (called branches before) to deploy the release to
\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/releases/delete":{"contentPath":"management/v1/core-resources/releases/delete","path":"core-resources/releases/delete","lang":"v1","origin":"management","title":"Delete a Release","attributes":{"title":"Delete a Release"},"content":"

Delete a release using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/releases/filter-by-release":{"contentPath":"management/v1/core-resources/releases/filter-by-release","path":"core-resources/releases/filter-by-release","lang":"v1","origin":"management","title":"Filter Stories by Release","attributes":{"title":"Filter Stories by Release"},"content":"

You can filter stories in a release using their unique ID and the in_release parameter in Stories object.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/stories?in_release=:release_id\n
\n"},"core-resources/releases/get-all":{"contentPath":"management/v1/core-resources/releases/get-all","path":"core-resources/releases/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Releases","attributes":{"title":"Retrieve multiple Releases"},"content":"

Returns an array of releases.

\n","example":"

Example Request

\n\n

You will get an array of release objects as response.

\n"},"core-resources/releases/get-one":{"contentPath":"management/v1/core-resources/releases/get-one","path":"core-resources/releases/get-one","lang":"v1","origin":"management","title":"Retrieve one Release","attributes":{"title":"Retrieve one Release"},"content":"

Returns a single release object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/releases/intro":{"contentPath":"management/v1/core-resources/releases/intro","path":"core-resources/releases/intro","lang":"v1","origin":"management","title":"Releases","attributes":{"title":"Releases"},"content":"

You can read more about releases here.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/releases\n
\n"},"core-resources/releases/object":{"contentPath":"management/v1/core-resources/releases/object","path":"core-resources/releases/object","lang":"v1","origin":"management","title":"The Release object","attributes":{"title":"The Release object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
nameName of the releases to be deployed
idNumeric ID of a release
release_atDate to deploy the release (Format: YYYY-mm-dd HH:MM)
releasedBoolean if the release is released
uuidUnique ID of the release
timezoneTimezone of the release
branches_to_deployAn array of branches to deploy the release to
created_atDate and time the release was created (Format: YYYY-mm-dd HH:MM)
owner_idNumeric ID of the release owner
\n","example":"

Example Object

\n
{\n    \"releases\": [\n        {\n            \"name\": \"Winter Special Release\",\n            \"id\": 95629,\n            \"release_at\": \"2023-04-20T18:30:00.000Z\",\n            \"released\": false,\n            \"uuid\": \"b8997523-2837-4f75-8613-05da9e7471af\",\n            \"timezone\": \"Africa/Algiers\",\n            \"branches_to_deploy\": [9,2],\n            \"created_at\": \"2023-04-20T17:15:47.646Z\",\n            \"owner_id\": 99734\n        }\n    ]\n}\n
\n"},"core-resources/releases/update":{"contentPath":"management/v1/core-resources/releases/update","path":"core-resources/releases/update","lang":"v1","origin":"management","title":"Update a Release","attributes":{"title":"Update a Release"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
releaseYour release object required
release[name]Name of the release
release[release_at]Date to deploy the release (Format: YYYY-mm-dd HH:MM)
release[branches_to_deploy]Ids of branches to deploy the release to
do_releaseIf this parameter is included in the request the release will be deployed
\n","example":"

Example Request

\n\n

You will receive a release object as response.

\n"},"core-resources/space-roles/create-space-role":{"contentPath":"management/v1/core-resources/space-roles/create-space-role","path":"core-resources/space-roles/create-space-role","lang":"v1","origin":"management","title":"Create a Space Role","attributes":{"title":"Create a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour space role object
space_role[role]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/space-roles/delete-space-role":{"contentPath":"management/v1/core-resources/space-roles/delete-space-role","path":"core-resources/space-roles/delete-space-role","lang":"v1","origin":"management","title":"Delete a Space Role","attributes":{"title":"Delete a Space Role"},"content":"

Delete a space role using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/space-roles/retrieve-multiple-spaces-roles":{"contentPath":"management/v1/core-resources/space-roles/retrieve-multiple-spaces-roles","path":"core-resources/space-roles/retrieve-multiple-spaces-roles","lang":"v1","origin":"management","title":"Retrieve multiple Space Role","attributes":{"title":"Retrieve multiple Space Role"},"content":"

Returns an array of space role objects.

\n","example":"

Example Request

\n\n

You will receive an array of space role objects as response.

\n"},"core-resources/space-roles/retrieve-one-space-role":{"contentPath":"management/v1/core-resources/space-roles/retrieve-one-space-role","path":"core-resources/space-roles/retrieve-one-space-role","lang":"v1","origin":"management","title":"Retrieve one Space Role","attributes":{"title":"Retrieve one Space Role"},"content":"

Returns a single, space role object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/space-roles/space-roles":{"contentPath":"management/v1/core-resources/space-roles/space-roles","path":"core-resources/space-roles/space-roles","lang":"v1","origin":"management","title":"Space Roles","attributes":{"title":"Space Roles"},"content":"

Space roles are custom permission sets that can be attached to collaborators to define their roles and permissions in a specific space.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/space_roles/:space_role_id\n
\n"},"core-resources/space-roles/the-space-role-object":{"contentPath":"management/v1/core-resources/space-roles/the-space-role-object","path":"core-resources/space-roles/the-space-role-object","lang":"v1","origin":"management","title":"The Space Role Object","attributes":{"title":"The Space Role Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
roleName used in the interface
access_tasksIs allowed to access the Tasks menu item
allowed_pathsStory ids the user should have access to (acts as whitelist). If no item is selected the user has rights to access all content items.
resolved_allowed_pathsResolved allowed_paths for displaying paths
field_permissionsHide specific fields for this user with an array of strings with the schema: "component_name.field_name"
permissionsAllow specific actions in interface by adding the permission as array of strings
\n

Possible Permissions

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PermissionDescription
publish_storiesAllow publishing of content entries
save_storiesAllow editing and saving of content entries
edit_datasourcesAllow editing and saving of datasources
access_commerceAllow access to commerce app
edit_story_slugDeny the change of slugs of content entries
move_storyDeny moving of content entries
view_composerDeny access to visual composer
\n","example":"

Example Object

\n
{\n  \"space_role\": {\n    \"id\": 18,\n    \"role\": \"English User\",\n    \"access_tasks\": true,\n    \"resolved_allowed_paths\": [\n\n    ],\n    \"allowed_paths\": [\n      12412,\n      51122\n    ],\n    \"field_permissions\": [\n\n    ],\n    \"permissions\": [\n\n    ]\n  }\n}\n
\n"},"core-resources/space-roles/update-space-role":{"contentPath":"management/v1/core-resources/space-roles/update-space-role","path":"core-resources/space-roles/update-space-role","lang":"v1","origin":"management","title":"Update a Space Role","attributes":{"title":"Update a Space Role"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space_roleYour full component object
space_role[role]The space role name is required
\n","example":"

Example Request

\n\n

You will receive a space role object as response.

\n"},"core-resources/spaces/backup-space":{"contentPath":"management/v1/core-resources/spaces/backup-space","path":"core-resources/spaces/backup-space","lang":"v1","origin":"management","title":"Backup a Space","attributes":{"title":"Backup a Space"},"content":"

Trigger the backup task for your space. Make sure you've configured backups in your space options.

\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/create-space":{"contentPath":"management/v1/core-resources/spaces/create-space","path":"core-resources/spaces/create-space","lang":"v1","origin":"management","title":"Create a Space","attributes":{"title":"Create a Space"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[name]Name of your space; required
space[domain]Domain for your default preview url
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name and location (url) objects
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/delete-space":{"contentPath":"management/v1/core-resources/spaces/delete-space","path":"core-resources/spaces/delete-space","lang":"v1","origin":"management","title":"Delete a Space","attributes":{"title":"Delete a Space"},"content":"

Delete a space by its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/spaces/duplicate-space":{"contentPath":"management/v1/core-resources/spaces/duplicate-space","path":"core-resources/spaces/duplicate-space","lang":"v1","origin":"management","title":"Duplicate a Space","attributes":{"title":"Duplicate a Space"},"content":"

Duplicate a space and all it's content entries and components; Assets will not be duplicated and still will reference the original space.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[name]Name of your space; required
space[domain]Domain for your default preview url
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name and location (url) objects
dup_idThe numeric id of the original space
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/retrieve-multiple-spaces":{"contentPath":"management/v1/core-resources/spaces/retrieve-multiple-spaces","path":"core-resources/spaces/retrieve-multiple-spaces","lang":"v1","origin":"management","title":"Retrieve multiple Spaces","attributes":{"title":"Retrieve multiple Spaces"},"content":"

Returns an array of space objects.

\n","example":"

Example Request

\n\n

You will receive an array of space objects as response.

\n"},"core-resources/spaces/retrieve-one-space":{"contentPath":"management/v1/core-resources/spaces/retrieve-one-space","path":"core-resources/spaces/retrieve-one-space","lang":"v1","origin":"management","title":"Retrieve one Space","attributes":{"title":"Retrieve one Space"},"content":"

Returns a single space object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/spaces/spaces":{"contentPath":"management/v1/core-resources/spaces/spaces","path":"core-resources/spaces/spaces","lang":"v1","origin":"management","title":"Spaces","attributes":{"title":"Spaces"},"content":"

A space is a content repository. Think of it as a place to keep all the content related to one project. Each space has its own components, datasources, assets, environments, domains, collaborators, and permissions.

\n

If you want to launch several websites or apps, the best way to go is to create a separate space for each project.

\n

If your goal is to deliver the same content to multiple platforms (a common set would be the web, iOS, and an Android app), then you should use one space and create multiple API keys to deliver the content. You can find the API keys in the space dashboard.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id\n
\n"},"core-resources/spaces/the-space-object":{"contentPath":"management/v1/core-resources/spaces/the-space-object","path":"core-resources/spaces/the-space-object","lang":"v1","origin":"management","title":"The Space Object","attributes":{"title":"The Space Object"},"content":"

The space object contains all information of one of your accounts spaces. Some of the properties are read only other can be managed by the API. Properties that you are able to change or use during creation can be found in the specifici sections.

\n

Example Space Options

\n
...\n\"options\": {\n  \"branch_deployed_hook\": \"\", // Your webhook endpoint for branch deployments\n  \"s3_bucket\": \"storyblok-backup\", // Your S3 bucket name\n  \"aws_arn\": \"arn:aws:iam::12312412:role/StoryblokRemote49122\",\n  \"backup_frequency\": \"daily\", \n  \"languages\": [ { \"code\": \"de\", \"name\": \"German\" } ]\n}\n
\n

Example Space Billing Address

\n
...\n\"billing_address\": {\n  \"tax_number\": \"ATU72706128\", // Your VAT number\n  \"order_number\": \"Your custom order number\",\n  \"company\": \"Storyblok GmbH\",\n  \"email\": \"billing@storyblok.com\", \n  \"name\": \"Ing. Dominik Angerer\", \n  \"address_city\": \"Linz\", \n  \"address_country\": \"Austria\", \n  \"address_iso_country\": \"AT\",\n  \"address_line1\": \"Peter-Behrens-Platz 1\", \n  \"address_zip\": \"4020\", \n}\n
\n","example":"

Example Object

\n
{\n  \"space\": {\n    \"name\": \"Example Space\",\n    \"domain\": \"https://example.storyblok.com\",\n    \"uniq_domain\": null,\n    \"plan\": \"starter\",\n    \"plan_level\": 0,\n    \"limits\": { },\n    \"created_at\": \"2018-11-10T15:33:18.402Z\",\n    \"id\": 680,\n    \"role\": \"admin\",\n    \"owner_id\": 1114,\n    \"story_published_hook\": null,\n    \"environments\": null,\n    \"stories_count\": 1,\n    \"parent_id\": null,\n    \"assets_count\": 0,\n    \"searchblok_id\": null,\n    \"duplicatable\": null,\n    \"request_count_today\": 0,\n    \"api_requests\": 1000,\n    \"exceeded_requests\": 0,\n    \"billing_address\": { \n      // billing infromation\n    },\n    \"routes\": [ ],\n    \"euid\": null,\n    \"trial\": true,\n    \"default_root\": \"page\",\n    \"has_slack_webhook\": false,\n    \"api_logs_per_month\": [ ],\n    \"first_token\": \"8IE7MzYCzw5d7KLckDa38Att\",\n    \"has_pending_tasks\": false,\n    \"options\": { },\n    \"collaborators\": [ ],\n    \"settings\": [ ],\n    \"owner\": {\n      // user object\n    }\n  }\n}\n
\n"},"core-resources/spaces/update-space":{"contentPath":"management/v1/core-resources/spaces/update-space","path":"core-resources/spaces/update-space","lang":"v1","origin":"management","title":"Update a Space","attributes":{"title":"Update a Space"},"content":"

You're only able to update the following properties of your space.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
space[id]Numeric id of your space
space[name]Name of your space
space[domain]Domain for your default preview url
space[uniq_domain]Unique Domain for the Storyblok Rendering Service
space[owner_id]Numeric user id of the owner for that space
space[parent_id]Space id of a possible parent space
space[duplicatable]Is the space globally duplicatable by all users
space[default_root]Default content type used for this space default: page
space[options]Options for backup and language configurations
space[routes]Routes for the Storyblok Rendering Service
space[story_published_hook]Published Webhook URL
space[searchblok_id]Searchblok id, if available
space[environments]Array of name, location (url) objects
space[billing_address]Billing information used to generate your invoices for this space
\n","example":"

Example Request

\n\n

You will receive a space object as response.

\n"},"core-resources/stories/compare-story-version":{"contentPath":"management/v1/core-resources/stories/compare-story-version","path":"core-resources/stories/compare-story-version","lang":"v1","origin":"management","title":"Compare a Story Version","attributes":{"title":"Compare a Story Version"},"content":"

With this endpoint you can compare the changes between two versions of a story in Storyblok. You need to provide the story ID and version ID in the request to retrieve the comparison results.

\n","example":"

Example Request

\n\n"},"core-resources/stories/create-story":{"contentPath":"management/v1/core-resources/stories/create-story","path":"core-resources/stories/create-story","lang":"v1","origin":"management","title":"Create a Story","attributes":{"title":"Create a Story"},"content":"

You can set most of the fields that are available in the story object, below we only list the properties in the example and the possible required fields. Stories are not published by default. If you want to create a published Story add the parameter publish with the value 1.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyYour full story object
story[name]Name of the story is required
story[slug]Slug is required; Used to identify the story (can not include /create stories with is_folder and required path segments and parent_id link instead)
story[content]Object structure for your content
story[default_root] (required*)Default content type/root component. (*Required if is_folder is true)
story[is_folder]If true a folder will be created instead of a story
story[parent_id]The id of the parent
story[disble_fe_editor]Is side by side editor disabled for all entries in folder (true/false)
story[path]Given real path, used in the preview editor
story[is_startpage]Is startpage of current folder (true/false)
story[position]Integer value of the position
story[first_published_at]First publishing date (Format: YYYY-mm-dd HH:MM)
story[translated_slugs_attributes]Add translated slugs/names if you have the "Translatable slugs" app installed. Example: [{lang: "de", slug: "startseite", name: "Startseite"}].
publishShould the story be published immediately (set 1 to publish)
release_idNumeric ID of release (optional)
\n

You can save any data in the story[content] attribute, and use it in the editor, as long as you follow these rules:

\n\n

This lets you import data and define the schema of your components afterwards in the interface where necessary.

\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as a response.

\n"},"core-resources/stories/delete-story":{"contentPath":"management/v1/core-resources/stories/delete-story","path":"core-resources/stories/delete-story","lang":"v1","origin":"management","title":"Delete a Story","attributes":{"title":"Delete a Story"},"content":"

Delete a content entry by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/stories/get-story-versions":{"contentPath":"management/v1/core-resources/stories/get-story-versions","path":"core-resources/stories/get-story-versions","lang":"v1","origin":"management","title":"Get Story Versions","attributes":{"title":"Get Story Versions"},"content":"

This allows you to retrieve the versions of a story and the corresponding author information. You can also filter the results based on pagination using the page parameter. This can be done with a GET request on the story version you wish to retrieve.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
idNumeric id of the story version
eventThe type of version change in story
created_atDate and time of of change (Format: YYYY-mm-dd HH:MM)
author_idID of the author
authorAuthor of the change in the story
item_idThe story ID
is_draftBoolean value, if false means story is published
\n","example":"

Example Request

\n\n

Example Request with Pagination

\n\n"},"core-resources/stories/internationalization-for-stories":{"contentPath":"management/v1/core-resources/stories/internationalization-for-stories","path":"core-resources/stories/internationalization-for-stories","lang":"v1","origin":"management","title":"Internationalization for Stories","attributes":{"title":"Internationalization for Stories"},"content":"

If you use our field level translations functionality, you can provide the values for the translations/languages within the same content object by appending __i18n__ followed by the language code. Make sure to have the component field option translatable to true.

\n

Get a full list of our languages codes on Github.

\n","example":"

Example Request

\n\n"},"core-resources/stories/publish-a-story":{"contentPath":"management/v1/core-resources/stories/publish-a-story","path":"core-resources/stories/publish-a-story","lang":"v1","origin":"management","title":"Publish a Story","attributes":{"title":"Publish a Story"},"content":"

Publishing a story besides using the publish property via creation, can be done by using a GET request for each story you want to publish.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
release_idNumeric ID of release (optional)
langLanguage code to publish the story individually (optional, must be enabled in the space settings)
\n","example":"

Example Request

\n\n"},"core-resources/stories/retrieve-multiple-stories":{"contentPath":"management/v1/core-resources/stories/retrieve-multiple-stories","path":"core-resources/stories/retrieve-multiple-stories","lang":"v1","origin":"management","title":"Retrieve multiple Stories","attributes":{"title":"Retrieve multiple Stories"},"content":"

Returns an array of story objects without content. Can be filtered with the parameters below and is paged.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
pageCurrent page of stories
contain_componentFilters by component in all levels of the content. Allows comma separated value for multiple components
text_searchFilter by a term using full text search
sort_bySort entries by specific attribute and order with content.YOUR_FIELD:asc and content.YOUR_FIELD:desc. To sort integers append :int. To sort floats append :float. Possible values are all root attributes of the entry (position and parent_position are special invisible attributes) and all fields of your content type inside content with a dot as seperator. Example: 'position:asc', 'parent_position:asc', 'content.your_custom_field:asc', 'content.your_number_field:asc:int', 'created_at:desc'.
pinnedFilter by pinned stories if '1'
excluding_idsExclude stories by ids (comma separated) from result
by_idsFilter by ids (comma separated)
by_uuidsFilter by uuids (comma separated)
with_tagFilter by tag
folder_onlyFilter by folders only
story_onlyFilter by stories only
with_parentFilter by parent id
with_slugFilter by exact slug
starts_withFilter stories starting with a specific slug
in_trashFilter by items in the trash folder
searchFilter by search term
filter_queryFilter by specific attribute(s) of your content type. See content delivery api documentation.
in_releaseFilter items by the release id
is_publishedtrue for entries that are currently published; false for those that are currently not published or unpublished
\n","example":"

Example Request

\n\n

Example Request with search_term

\n\n

Example Request with by_uuids

\n\n

You will receive an array of story objects without content as response.

\n"},"core-resources/stories/retrieve-one-story":{"contentPath":"management/v1/core-resources/stories/retrieve-one-story","path":"core-resources/stories/retrieve-one-story","lang":"v1","origin":"management","title":"Retrieve one Story","attributes":{"title":"Retrieve one Story"},"content":"

Returns a single, fully loaded story object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as response.

\n"},"core-resources/stories/stories":{"contentPath":"management/v1/core-resources/stories/stories","path":"core-resources/stories/stories","lang":"v1","origin":"management","title":"Stories","attributes":{"title":"Stories"},"content":"

The stories endpoint will let you manage all content entries of your Storyblok space. You can use it to import, export or modify content.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/stories/:story_id\n
\n"},"core-resources/stories/the-story-object":{"contentPath":"management/v1/core-resources/stories/the-story-object","path":"core-resources/stories/the-story-object","lang":"v1","origin":"management","title":"The Story Object","attributes":{"title":"The Story Object"},"content":"

This is an object representing your content entry. One Story object can be of a specific type, so called content types and is able to contain components. You define the fields and nestability of your content types to achieve your content structure. You can use this object to build up your entities when migrating or importing content. You can set alternate versions of a story with Management API using the group_id of the story.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric id
uuidGenerated uuid string
nameThe name you give this story
slugThe slug / path you give this story
full_slugCombined parent folder and current slug
pathGiven real path, used in the preview editor
contentYour defined custom content object
release_idId of your content stage (default: null)
publishedIs story published (true/false)
unpublished_changesStory has unpublished changes; saved but not published (true/false)
positionPosition in folder
is_startpageIs startpage of current folder (true/false)
is_folderIs story a folder (true/false)
default_rootComponent name which will be used as default content type for this folders entries
disble_fe_editorIs side by side editor disabled for all entries in folder (true/false)
parent_idParent story/folder numeric id
parentEssential parent information as object (resolved from parent_id)
group_idAlternates group id (uuid string)
alternatesArray of resolved subset of link objects
tag_listArray of Tags (string only)
breadcrumbsArray of resolved subset of link objects (one per path segment / parent)
sort_by_dateLegacy: Additional sorting date field (Format: YYYY-mm-dd)
meta_dataJSON to add meta data that is not setting the story status to unpublished changes. Example: User ratings.
pinnedTo pin the story in the toolbar
preview_token[token]Token passed to the editor as preview parameter to allow editmode verification
preview_token[timestamp]Timestamp passed to the editor as preview parameter to allow editmode verification
last_author[id]Last author user object numeric id
last_author[userid]Last author userid/username
created_atCreation date (Format: YYYY-mm-dd HH:MM)
updated_atLatest update date (Format: YYYY-mm-dd HH:MM)
published_atLatest publishing date (Format: YYYY-mm-dd HH:MM)
first_published_atFirst publishing date (Format: YYYY-mm-dd HH:MM)
imported_atLatest import date (Format: YYYY-mm-dd HH:MM)
\n","example":"

Example Object

\n
{\n  \"story\": {\n    \"id\": 369689,\n    \"uuid\": \"039508c6-e9fa-42b5-b952-c7d96ab6099d\",\n    \"name\": \"My third post\",\n    \"slug\": \"my-third-post\",\n    \"created_at\": \"2018-10-29T10:27:52.802Z\",\n    \"updated_at\": \"2018-10-30T12:24:07.499Z\",\n    \"published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"first_published_at\": \"2018-08-07T09:40:13.802Z\",\n    \"imported_at\": null,\n    // group id defines the referenced alternates\n    \"group_id\": \"fb33b858-277f-4690-81fb-e0a080bd39ac\",\n    // resolved alternates by group_id\n    \"alternates\": [],\n    \"sort_by_date\": null,\n    \"tag_list\": [],\n    \"is_folder\": false,\n    \"content\": {\n      \"_uid\": \"98cccd01-f807-4494-996d-c6b0de2045a5\",\n      \"component\": \"your_content_type\"\n      // and fields you define yourself are in here\n    },\n    \"path\": null,\n    \"default_root\": null,\n    \"disble_fe_editor\": false,\n    // parent folder id\n    \"parent_id\": 369683,\n    // resolved parent folder information\n    \"parent\": {\n      \"id\": 369683,\n      \"slug\": \"posts\",\n      \"name\": \"Posts\",\n      \"disble_fe_editor\": true,\n      \"uuid\": \"dcfcc350-e63e-4232-8dcb-ba4b8e70799d\"\n    },\n    \"full_slug\": \"posts/my-third-post\", // automatically generated\n    // resolved full_slug parts\n    \"breadcrumbs\": [{\n      \"id\": 369683,\n      \"name\": \"Posts\",\n      \"parent_id\": 0,\n      \"disble_fe_editor\": true\n    }],\n    \"published\": false,\n    \"unpublished_changes\": true,\n    \"is_startpage\": false,\n    \"meta_data\": null,\n    \"pinned\": false,\n    \"preview_token\": {\n      \"token\": \"279395174a25be38b702f9ec90d08a960e1a5a84\",\n      \"timestamp\": \"1545530576\"\n    },\n    \"last_author\": {\n      \"id\": 39821,\n      \"userid\": \"storyblok\"\n    }\n  }\n}\n
\n"},"core-resources/stories/unpublish-a-story":{"contentPath":"management/v1/core-resources/stories/unpublish-a-story","path":"core-resources/stories/unpublish-a-story","lang":"v1","origin":"management","title":"Unpublish a Story","attributes":{"title":"Unpublish a Story"},"content":"

Unpublishing a story besides using the unpublish action in visual editor or in content viewer, can be done by using a GET request for each story you want to unpublish.

\n","example":"

Example Request

\n\n"},"core-resources/stories/update-story":{"contentPath":"management/v1/core-resources/stories/update-story","path":"core-resources/stories/update-story","lang":"v1","origin":"management","title":"Update a Story","attributes":{"title":"Update a Story"},"content":"

Can be used for migrations, updates (e.g. if you changed your component structure), or bulk actions. If you want to publish your story immediately, add the parameter publish with the value 1 to the object. In order to set alternate versions of a story, you can set the group_id equal to the group_id of the story (or stories) that should be the alternate(s).

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
storyYour full story object
story[name]Name of the story is required
story[slug]Slug is required; Used to identify the story (can not include /create stories with is_folder and required path segments and parent_id link instead)
story[content]Object structure for your content
story[default_root] (required*)Default content type/root component. (*Required if is_folder is true)
story[is_folder]If true a folder will be created instead of a story
story[parent_id]The id of the parent
story[alternates]Array of resolved subset of link objects (automatically generated)
story[disble_fe_editor]Is side by side editor disabled for all entries in folder (true/false)
story[path]Given real path, used in the preview editor
story[is_startpage]Is startpage of current folder (true/false)
story[position]Integer value of the position
story[first_published_at]First publishing date (Format: YYYY-mm-dd HH:MM)
story[translated_slugs_attributes]Add/modify/delete translated slugs/names if you have the "Translatable slugs" app installed. Example: [{lang: "de", slug: "startseite", name: "Startseite"}]. To edit existing slugs add the id to the object. To delete an item add _destroy with the value 1 to the object.
group_idNumeric ID of the group (optional)
force_updateIf '1' it will overwrite a locked story
release_idNumeric ID of release (optional)
publishIf '1' it will publish the story, 'publish' must be omitted if publication is not desired
langLanguage code to publish the story individually (must be enabled in the space settings)
\n","example":"

Example Request

\n\n

You will receive a fully loaded story object as response.

\n"},"core-resources/tasks/create-task":{"contentPath":"management/v1/core-resources/tasks/create-task","path":"core-resources/tasks/create-task","lang":"v1","origin":"management","title":"Create a Task","attributes":{"title":"Create a Task"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
taskYour full task object
task[name]Name is required
\n","example":"

Example Request

\n\n

You will receive a fully loaded task object as response.

\n"},"core-resources/tasks/delete-taks":{"contentPath":"management/v1/core-resources/tasks/delete-taks","path":"core-resources/tasks/delete-taks","lang":"v1","origin":"management","title":"Delete a Task","attributes":{"title":"Delete a Task"},"content":"

Delete a task by using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/tasks/retrieve-multiple-tasks":{"contentPath":"management/v1/core-resources/tasks/retrieve-multiple-tasks","path":"core-resources/tasks/retrieve-multiple-tasks","lang":"v1","origin":"management","title":"Retrieve multiple Tasks","attributes":{"title":"Retrieve multiple Tasks"},"content":"

Returns an array of task objects. This endpoint is paged.

\n","example":"

Example Request

\n\n

You will receive an array of task objects as response.

\n"},"core-resources/tasks/retrieve-one-task":{"contentPath":"management/v1/core-resources/tasks/retrieve-one-task","path":"core-resources/tasks/retrieve-one-task","lang":"v1","origin":"management","title":"Retrieve one Task","attributes":{"title":"Retrieve one Task"},"content":"

Returns a single task object with a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a task object as response.

\n"},"core-resources/tasks/tasks":{"contentPath":"management/v1/core-resources/tasks/tasks","path":"core-resources/tasks/tasks","lang":"v1","origin":"management","title":"Tasks","attributes":{"title":"Tasks"},"content":"

You can create a Task to send requests to one of your custom endpoints. This lets you trigger a build for production or other common use-cases like product syncs or publishing tasks. Future updates will also bring scheduled and timed tasks so you can handle all your tasks at one place.

\n

The payload Storyblok will send to your webhook url as POST request:

\n
{\n  \"task\": {\n    \"id\": 214, \n    \"name\": \"My Task Name\"\n  }, \n  \"space_id\": 606\n}\n
\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/tasks/:task_id\n
\n"},"core-resources/tasks/the-task-object":{"contentPath":"management/v1/core-resources/tasks/the-task-object","path":"core-resources/tasks/the-task-object","lang":"v1","origin":"management","title":"The Task Object","attributes":{"title":"The Task Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric ID of your task
nameGiven name of your task
descriptionA brief description of your task for your editors
task_typeDefault: webhook; Currently available: webhook
last_executionDate and time of last execution (Format: YYYY-mm-dd HH:MM)
webhook_urlURL of webhook that should be called when tasks is being executed
last_responseLast execution response log
lambda_codeBeta: Lambda function code
\n","example":"

Example Object

\n
{\n  \"task\": {\n    \"id\": 124,\n    \"name\": \"My Task Name\",\n    \"description\": null,\n    \"task_type\": \"webhook\",\n    \"last_execution\": null,\n    \"lambda_code\": null,\n    \"last_response\": null,\n    \"webhook_url\": \"https://www.storyblok.com\"\n  }\n}\n
\n"},"core-resources/tasks/update-task":{"contentPath":"management/v1/core-resources/tasks/update-task","path":"core-resources/tasks/update-task","lang":"v1","origin":"management","title":"Update a Task","attributes":{"title":"Update a Task"},"content":"
\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
taskYour full task object
\n","example":"

Example Request

\n\n

You will receive a fully loaded task object as response.

\n"},"core-resources/workflow-stage-changes/create":{"contentPath":"management/v1/core-resources/workflow-stage-changes/create","path":"core-resources/workflow-stage-changes/create","lang":"v1","origin":"management","title":"Create a Workflow Stage Change","attributes":{"title":"Create a Workflow Stage Change"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stage_changeYour workflow stage change object
workflow_stage_change[workflow_stage_id]Workflow stage id required
workflow_stage_change[story_id]Story id required
\n","example":"

Example Request

\n\n

You will receive a workflow stage change object as response.

\n"},"core-resources/workflow-stage-changes/get-all":{"contentPath":"management/v1/core-resources/workflow-stage-changes/get-all","path":"core-resources/workflow-stage-changes/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Workflow Stage Changes","attributes":{"title":"Retrieve multiple Workflow Stage Changes"},"content":"

Returns an array of workflow stage change objects.

\n
\n\n\n\n\n\n\n\n\n\n\n
ParameterDescription
with_storyId of Story
\n","example":"

Example Request

\n\n

You will get an array of workflow stage change objects as response.

\n"},"core-resources/workflow-stage-changes/intro":{"contentPath":"management/v1/core-resources/workflow-stage-changes/intro","path":"core-resources/workflow-stage-changes/intro","lang":"v1","origin":"management","title":"Workflow Stage Changes","attributes":{"title":"Workflow Stage Changes"},"content":"

Workflow stage changes are objects that are assigned to a specific content item.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/workflow_stage_changes/:id\n
\n"},"core-resources/workflow-stage-changes/object":{"contentPath":"management/v1/core-resources/workflow-stage-changes/object","path":"core-resources/workflow-stage-changes/object","lang":"v1","origin":"management","title":"The Workflow Stage Change Object","attributes":{"title":"The Workflow Stage Change Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
user_idUser id
created_atCreation date
workflow_stage_idWorkflow stage id
\n","example":"

Example Object

\n
{\n  \"workflow_stage_change\": {\n    \"id\": 18,\n    \"workflow_stage_id\": 123,\n    \"created_at\": \"2020-01-01 10:00:00\",\n    \"user_id\": 123\n  }\n}\n
\n"},"core-resources/workflow-stages/create":{"contentPath":"management/v1/core-resources/workflow-stages/create","path":"core-resources/workflow-stages/create","lang":"v1","origin":"management","title":"Create a Workflow Stage","attributes":{"title":"Create a Workflow Stage"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stageYour workflow stage object required
workflow_stage[after_publish_id]Workflow stage id that gets assigned after publishing
workflow_stage[allow_publish]Boolean to allow publishing
workflow_stage[is_default]Boolean to set as default
workflow_stage[position]Position (Integer)
workflow_stage[allow_all_stages]Boolean to allow all stages
workflow_stage[allow_all_users]Boolean to allow change to all users
workflow_stage[name]Workflow name
workflow_stage[color]Workflow color
workflow_stage[user_ids]User ids that are allowed to change the stage
workflow_stage[space_role_ids]Space role ids that are allowed to change the stage
workflow_stage[workflow_stage_ids]Workflow stage ids the user can change the stage to
workflow_stage[workflow_id]Workflow id (if missing, automatically sets to default workflow) optional
\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"core-resources/workflow-stages/delete":{"contentPath":"management/v1/core-resources/workflow-stages/delete","path":"core-resources/workflow-stages/delete","lang":"v1","origin":"management","title":"Delete a Workflow Stage","attributes":{"title":"Delete a Workflow Stage"},"content":"

Delete a workflow stage using its numeric id.

\n","example":"

Example Request

\n\n"},"core-resources/workflow-stages/get-all":{"contentPath":"management/v1/core-resources/workflow-stages/get-all","path":"core-resources/workflow-stages/get-all","lang":"v1","origin":"management","title":"Retrieve multiple Workflow Stages","attributes":{"title":"Retrieve multiple Workflow Stages"},"content":"

Returns an array of workflow stages.

\n","example":"

Example Request

\n\n

You will an array of workflow stages as response.

\n"},"core-resources/workflow-stages/get-one":{"contentPath":"management/v1/core-resources/workflow-stages/get-one","path":"core-resources/workflow-stages/get-one","lang":"v1","origin":"management","title":"Retrieve one Workflow Stage","attributes":{"title":"Retrieve one Workflow Stage"},"content":"

Returns a single, workflow stage object by providing a specific numeric id.

\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"core-resources/workflow-stages/intro":{"contentPath":"management/v1/core-resources/workflow-stages/intro","path":"core-resources/workflow-stages/intro","lang":"v1","origin":"management","title":"Workflow Stage","attributes":{"title":"Workflow Stage"},"content":"

Content production in enterprises sometimes requires strict workflows to make sure that every team member gets involved. Storyblok allows you to define workflow stages and rules to control what each user is allowed to do.

\n","example":"

Endpoint

\n
GET /v1/spaces/:space_id/workflow_stages/:id\n
\n"},"core-resources/workflow-stages/object":{"contentPath":"management/v1/core-resources/workflow-stages/object","path":"core-resources/workflow-stages/object","lang":"v1","origin":"management","title":"The Workflow Stage Object","attributes":{"title":"The Workflow Stage Object"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
idNumeric Unique ID
after_publish_idWorkflow stage id that gets assigned after publishing
allow_publishBoolean to allow publishing
is_defaultBoolean to set as default
positionPosition (Integer)
allow_all_stagesBoolean to allow all stages
allow_all_usersBoolean to allow change to all users
nameWorkflow name
colorWorkflow color
user_idsUser ids that are allowed to change the stage
space_role_idsSpace role ids that are allowed to change the stage
workflow_stage_idsWorkflow stage ids the user can change the stage to
workflow_idNumeric ID of connected workflow
\n","example":"

Example Object

\n
{\n  \"workflow_stage\": {\n    \"id\": 2,\n    \"allow_publish\": false,\n    \"is_default\": true,\n    \"user_ids\": [9,2],\n    \"space_role_ids\": [],\n    \"workflow_stage_ids\": [3],\n    \"name\": \"Drafting\",\n    \"color\": \"#babcb6\",\n    \"allow_all_stages\": false,\n    \"allow_all_users\": false,\n    \"position\": 1,\n    \"after_publish_id\": null,\n    \"workflow_id\": 14780\n  }\n}\n
\n"},"core-resources/workflow-stages/update":{"contentPath":"management/v1/core-resources/workflow-stages/update","path":"core-resources/workflow-stages/update","lang":"v1","origin":"management","title":"Update a Workflow Stage","attributes":{"title":"Update a Workflow Stage"},"content":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PropertyDescription
workflow_stageYour workflow stage object required
workflow_stage[after_publish_id]Workflow stage id that gets assigned after publishing
workflow_stage[allow_publish]Boolean to allow publishing
workflow_stage[is_default]Boolean to set as default
workflow_stage[position]Position (Integer)
workflow_stage[allow_all_stages]Boolean to allow all stages
workflow_stage[allow_all_users]Boolean to allow change to all users
workflow_stage[name]Workflow name
workflow_stage[color]Workflow color
workflow_stage[user_ids]User ids that are allowed to change the stage
workflow_stage[space_role_ids]Space role ids that are allowed to change the stage
workflow_stage[workflow_stage_ids]Workflow stage ids the user can change the stage to
\n","example":"

Example Request

\n\n

You will receive a workflow stage object as response.

\n"},"topics/authentication":{"contentPath":"management/v1/topics/authentication","path":"topics/authentication","lang":"v1","origin":"management","title":"Authentication","attributes":{"title":"Authentication"},"content":"

Authenticate your account by including your personal access token in API requests. The easiest way to get started is to create an OAuth2 token using the Storyblok app. Go to the My Account section at app.storyblok.com and click on “Generate new token”.

\n

Your personal access token will grant anyone who obtains it with access to all associated spaces for your account, so make sure to never expose it on the client side or commit it in your source code. Use strategies like environment variables to secure your personal access token. If you have exposed your personal access token, make sure to delete it immediately from the My Account section.

\n

Using an OAuth2 token, a username and password doesn’t need to be permanently stored and you can revoke access at any time.

\n

Authorization for Apps

\n

In order to Authenticate your Apps, make sure to add an "Authorization" header with your OAuth2 token.

\n

Examples

\n
curl -H \"Authorization: YOUR_OAUTH_TOKEN\" https://mapi.storyblok.com/\n
\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// Initialize the client with the oauth token\nconst Storyblok = new StoryblokClient({\n  oauthToken: 'YOUR_OAUTH_TOKEN'\n})\n
\n","example":"
\n\n

Example Request

\n
curl -H \"Authorization: YOUR_OAUTH_TOKEN\" https://mapi.storyblok.com/\n
\n
\n
\n\n

Example Request

\n
// npm install storyblok-js-client\nconst StoryblokClient = require('storyblok-js-client')\n\n// Initialize the client with the oauth token\nconst Storyblok = new StoryblokClient({\n  oauthToken: 'YOUR_OAUTH_TOKEN'\n})\n
\n
\n"},"topics/errors":{"contentPath":"management/v1/topics/errors","path":"topics/errors","lang":"v1","origin":"management","title":"Errors","attributes":{"title":"Errors"},"content":"

Storyblok uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, content entry was not published but version requested was set to published, etc.). Codes in the 5xx range indicate an error with Storyblok's servers (these are rare).

\n

Some 4xx errors that could be handled programmatically (e.g., content entry was not found) include an error code that briefly explains the error reported.

\n","example":"

Http Status Code Summary

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
CodeDescription
200 - OKEverything worked as expected.
400 - Bad RequestWrong format was sent (eg. XML instead of JSON).
401 - UnauthorizedNo valid API key provided.
403 - ForbiddenInsufficient permissions.
404 - Not FoundThe requested resource doesn't exist (perhaps due to not yet published content entries).
422 - Unprocessable EntityThe request was unacceptable, often due to missing a required parameter.
429 - Too Many RequestsToo many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server ErrorsSomething went wrong on Storyblok's end. (These are rare.)
\n"},"topics/introduction":{"contentPath":"management/v1/topics/introduction","path":"topics/introduction","lang":"v1","origin":"management","title":"Management API Reference","attributes":{"title":"Management API Reference","sidebarTitle":"Introduction"},"content":"

The Storyblok Management API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP query parameters and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.

\n

The requests in the right sidebar are designed to work as is. The sample requests can be performed using your own API Authentication Token that you can obtain from your profile in the Storyblok application.

\n","example":"

API Libraries

\n

Official libraries for the Storyblok Management API are available in several languages. Community-supported libraries are also available for additional languages.

\n

Base URL:

\n
https://mapi.storyblok.com\n
\n

For spaces whose server location is in the United States, please use this URL:

\n
https://api-us.storyblok.com\n
\n

For spaces whose server location is in China, please use this URL:

\n
https://app.storyblokchina.cn\n
\n"},"topics/organization":{"contentPath":"management/v1/topics/organization","path":"topics/organization","lang":"v1","origin":"management","title":"Organization","attributes":{"title":"Organization","sidebarTitle":"Organization"},"content":"

The Organization endpoint is helpful for obtaining comprehensive statistics on your Storyblok spaces. It provides valuable information, such as the number of users within your organization, as well as details like last_sign_in_at or last_sign_in_ip.

\n

On the right hand site you can see an example response.

\n","example":"

Example Request

\n
curl -H \"Authorization: YOUR_OAUTH_TOKEN\" https://mapi.storyblok.com/v1/orgs/me\n
\n

Example Response

\n
{\n  \"org\": {\n    \"name\": \"ORG Name\",\n    \"users\": [\n      {\n        \"userid\": \"exampleemail@storyblok.com\",\n        \"email\": \"exampleemail@storyblok.com\",\n        \"username\": null,\n        \"real_email\": \"exampleemail@storyblok.com\",\n        \"avatar\": null,\n        \"id\": 106362,\n        \"organization\": null,\n        \"sign_in_count\": 0,\n        \"created_at\": \"2022-01-12T12:56:56.806Z\",\n        \"firstname\": \"Dipankar\",\n        \"lastname\": \"Maikap\",\n        \"org_role\": \"member\",\n        \"last_sign_in_at\": null,\n        \"last_sign_in_ip\": \"168.121.178.3\",\n        \"disabled\": false,\n        \"partner_role\": null,\n        \"friendly_name\": \"Dipankar Maikap\",\n        \"on_spaces\": [\n          1,\n          2\n        ],\n        \"roles_on_spaces\": {\n          \"1\": [\n            \"admin\"\n          ],\n          \"2\": [\n            \"admin\"\n          ]\n        }\n      }\n    ],\n    \"track_statistics\": true,\n    \"invitations\": [\n      {\n        \"id\": 105845,\n        \"email\": \"exampleemail@storyblok.com\",\n        \"org_id\": 34,\n        \"user_id\": 17,\n        \"expires_at\": \"2023-06-13T12:28:44.527Z\",\n        \"org_role\": \"admin\",\n        \"inviter_id\": 1,\n        \"registered\": false\n      }\n    ]\n  }\n}\n
\n"},"topics/pagination":{"contentPath":"management/v1/topics/pagination","path":"topics/pagination","lang":"v1","origin":"management","title":"Pagination","attributes":{"title":"Pagination"},"content":"

All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list stories and datasource_entries. These list API methods share a common structure, taking these two parameters: page, per_page.

\n

The default per_page is set to 25 entries per page. You can increase this number to receive up to 100 entries per page. To go through different pages you can utilize the page parameter. The page parameter is a numeric value and uses 1 as default.

\n

To allow a calculation of how many pages are available you can access the Total response header that you will receive after you made your first request. Access it and divide it with your per_page parameter to receive the highest possible page, otherwise you will receive an empty array as result.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query ParameterDescription
pageDefault: 1. Increase this to receive the next page of content entries
per_pageDefault: 25, Max for Stories: 100, Max for Datasource Entries: 1000 . Defines the number of content entries you will receive per page
\n","example":"

Example Request

\n
https://api.storyblok.com/v1/spaces/(:space_id)/stories/?per_page=2&page=1\n
\n

Example Response

\n
{\n  \"stories\": [\n    { ... },\n    { ... }\n  ]\n}\n
\n

Example Response Headers

\n
status: 200\nper-page: 2\ntotal: 3\n...\n
\n"},"topics/rate-limit":{"contentPath":"management/v1/topics/rate-limit","path":"topics/rate-limit","lang":"v1","origin":"management","title":"Rate Limit","attributes":{"title":"Rate Limit"},"content":"

The management api is rate limited to 3 requests per second for users on the free plan and 6 requests per second for other users.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
PlanRate Limit
Community3 per second
Entry6 per second
Teams6 per second
EnterpriseCustom
Enterprise +Custom
\n"},"topics/use-cases":{"contentPath":"management/v1/topics/use-cases","path":"topics/use-cases","lang":"v1","origin":"management","title":"Use Cases","attributes":{"title":"Use Cases"},"content":"

The Management API should not be used to consume your information as it does not utilize our global CDN for your requests and can result in higher latencies. Please make sure to use the Content Delivery API instead.

\n","example":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Use Case
Migration from your current data storage / CMS
Integration with 3rd party applications
Import and Export automation
Automatic translation workflows
Component versioning
Whitelabel integrations
\n"}} \ No newline at end of file