Create and Manage Folders
https://mapi.storyblok.com/v1/spaces/:space_id/storiesUse the Story endpoint to create and manage content folders.
You can use a small subset of properties from the Story Object to push new folders into your space or modify their configurations:
- Use
nameandslugto identify the folder. - Always pass
trueto theis_folderin the Request Body. - Use
parent_idto determine where the folder should be created. - You can also update existent folders to accept only specific content types.
Check the request examples in this section.
Path parameters
Section titled “Path parameters”- :space_id required number
Numeric ID of a space
Request body properties
Section titled “Request body properties”- story The Story Object
A single story object
Response properties
Section titled “Response properties”- story The Story Object
A single story object
Examples
Section titled “Examples”Create a new folder within your Space.
curl "https://mapi.storyblok.com/v1/spaces/288868932106293/stories" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"story\":{\"is_folder\":true,\"name\":\"A new folder\",\"parent_id\":0,\"slug\":\"a-new-folder\"}}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/288868932106293/stories', { "story": { "is_folder": true, "name": "A new folder", "parent_id": 0, "slug": "a-new-folder" }}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["story" => ["is_folder" => true,"name" => "A new folder","parent_id" => 0,"slug" => "a-new-folder"]];
$client->post('spaces/288868932106293/stories', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/288868932106293/stories") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"story":{"is_folder":true,"name":"A new folder","parent_id":0,"slug":"a-new-folder"}}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/stories");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"story\":{\"is_folder\":true,\"name\":\"A new folder\",\"parent_id\":0,\"slug\":\"a-new-folder\"}}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/stories"
querystring = {}
payload = {"story":{"is_folder":true,"name":"A new folder","parent_id":0,"slug":"a-new-folder"}}headers = { 'Content-Type': "application/json", 'Authorization': "YOUR_OAUTH_TOKEN"}
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
print(response.text)require 'storyblok'client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')
payload = {"story" => {"is_folder" => true,"name" => "A new folder","parent_id" => 0,"slug" => "a-new-folder"}}
client.post('spaces/288868932106293/stories', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/stories")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "POST"request.httpBody = try JSONSerialization.data(withJSONObject: [ "story": [ "is_folder": true, "name": "A new folder", "parent_id": 0, "slug": "a-new-folder", ],])let (data, _) = try await URLSession.shared.data(for: request)print(try JSONSerialization.jsonObject(with: data))val client = HttpClient { install(ContentNegotiation) { json() } install(DefaultRequest) { url { takeFrom("https://mapi.storyblok.com/v1/") headers.append("Authorization", "YOUR_OAUTH_TOKEN") } }}
val response = client.post("spaces/288868932106293/stories") { contentType(ContentType.Application.Json) setBody(buildJsonObject { putJsonObject("story") { put("is_folder", true) put("name", "A new folder") put("parent_id", 0) put("slug", "a-new-folder") } })}
println(response.body<JsonElement>())Create a folder to accept only a certain content type using the default_root property.
curl "https://mapi.storyblok.com/v1/spaces/288868932106293/stories" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"story\":{\"default_root\":\"article\",\"is_folder\":true,\"name\":\"A new folder\",\"parent_id\":0,\"slug\":\"a-new-folder\"}}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/288868932106293/stories', { "story": { "default_root": "article", "is_folder": true, "name": "A new folder", "parent_id": 0, "slug": "a-new-folder" }}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["story" => ["default_root" => "article","is_folder" => true,"name" => "A new folder","parent_id" => 0,"slug" => "a-new-folder"]];
$client->post('spaces/288868932106293/stories', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/288868932106293/stories") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"story":{"default_root":"article","is_folder":true,"name":"A new folder","parent_id":0,"slug":"a-new-folder"}}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/stories");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"story\":{\"default_root\":\"article\",\"is_folder\":true,\"name\":\"A new folder\",\"parent_id\":0,\"slug\":\"a-new-folder\"}}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/stories"
querystring = {}
payload = {"story":{"default_root":"article","is_folder":true,"name":"A new folder","parent_id":0,"slug":"a-new-folder"}}headers = { 'Content-Type': "application/json", 'Authorization': "YOUR_OAUTH_TOKEN"}
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
print(response.text)require 'storyblok'client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')
payload = {"story" => {"default_root" => "article","is_folder" => true,"name" => "A new folder","parent_id" => 0,"slug" => "a-new-folder"}}
client.post('spaces/288868932106293/stories', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/stories")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "POST"request.httpBody = try JSONSerialization.data(withJSONObject: [ "story": [ "default_root": "article", "is_folder": true, "name": "A new folder", "parent_id": 0, "slug": "a-new-folder", ],])let (data, _) = try await URLSession.shared.data(for: request)print(try JSONSerialization.jsonObject(with: data))val client = HttpClient { install(ContentNegotiation) { json() } install(DefaultRequest) { url { takeFrom("https://mapi.storyblok.com/v1/") headers.append("Authorization", "YOUR_OAUTH_TOKEN") } }}
val response = client.post("spaces/288868932106293/stories") { contentType(ContentType.Application.Json) setBody(buildJsonObject { putJsonObject("story") { put("default_root", "article") put("is_folder", true) put("name", "A new folder") put("parent_id", 0) put("slug", "a-new-folder") } })}
println(response.body<JsonElement>())Update a folder with strict content types.
curl "https://mapi.storyblok.com/v1/spaces/288868932106293/stories" \ -X PUT \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"story\":{\"content\":{\"content_types\":[\"category\"],\"lock_subfolders_content_types\":false},\"is_folder\":true,\"name\":\"Categories\",\"parent_id\":0,\"slug\":\"categories\"}}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.put('spaces/288868932106293/stories', { "story": { "content": { "content_types": [ "category" ], "lock_subfolders_content_types": false }, "is_folder": true, "name": "Categories", "parent_id": 0, "slug": "categories" }}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["story" => ["content" => ["content_types" => ["category"],"lock_subfolders_content_types" => false],"is_folder" => true,"name" => "Categories","parent_id" => 0,"slug" => "categories"]];
$client->put('spaces/288868932106293/stories', $payload)->getBody();HttpResponse<String> response = Unirest.put("https://mapi.storyblok.com/v1/spaces/288868932106293/stories") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"story":{"content":{"content_types":["category"],"lock_subfolders_content_types":false},"is_folder":true,"name":"Categories","parent_id":0,"slug":"categories"}}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/stories");var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"story\":{\"content\":{\"content_types\":[\"category\"],\"lock_subfolders_content_types\":false},\"is_folder\":true,\"name\":\"Categories\",\"parent_id\":0,\"slug\":\"categories\"}}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/stories"
querystring = {}
payload = {"story":{"content":{"content_types":["category"],"lock_subfolders_content_types":false},"is_folder":true,"name":"Categories","parent_id":0,"slug":"categories"}}headers = { 'Content-Type': "application/json", 'Authorization': "YOUR_OAUTH_TOKEN"}
response = requests.request("PUT", url, data=payload, headers=headers, params=querystring)
print(response.text)require 'storyblok'client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')
payload = {"story" => {"content" => {"content_types" => ["category"],"lock_subfolders_content_types" => false},"is_folder" => true,"name" => "Categories","parent_id" => 0,"slug" => "categories"}}
client.put('spaces/288868932106293/stories', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/stories")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "PUT"request.httpBody = try JSONSerialization.data(withJSONObject: [ "story": [ "content": [ "content_types": [ "category", ], "lock_subfolders_content_types": false, ], "is_folder": true, "name": "Categories", "parent_id": 0, "slug": "categories", ],])let (data, _) = try await URLSession.shared.data(for: request)print(try JSONSerialization.jsonObject(with: data))val client = HttpClient { install(ContentNegotiation) { json() } install(DefaultRequest) { url { takeFrom("https://mapi.storyblok.com/v1/") headers.append("Authorization", "YOUR_OAUTH_TOKEN") } }}
val response = client.put("spaces/288868932106293/stories") { contentType(ContentType.Application.Json) setBody(buildJsonObject { putJsonObject("story") { putJsonObject("content") { putJsonArray("content_types") { add("category") } put("lock_subfolders_content_types", false) } put("is_folder", true) put("name", "Categories") put("parent_id", 0) put("slug", "categories") } })}
println(response.body<JsonElement>())Get in touch with the Storyblok community