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/606/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/606/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/606/stories', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/606/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/606/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/606/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/606/stories', payload)import Foundation
let headers = [ "Content-Type": "application/json", "Authorization": "YOUR_OAUTH_TOKEN"]
let postData = NSData(data: {"story":{"is_folder":true,"name":"A new folder","parent_id":0,"slug":"a-new-folder"}}.data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://mapi.storyblok.com/v1/spaces/606/stories")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.method = "POST"request.allHTTPHeaderFields = headersrequest.httpBody = postData as Data
let session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})
dataTask.resume()Create a folder to accept only a certain content type using the default_root property.
curl "https://mapi.storyblok.com/v1/spaces/606/stories" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "\"{\n story: {\n default_root: \\"article\\",\n is_folder: true,\n name: \\"A new folder\\",\n parent_id: 0,\n slug: \\"a-new-folder\\",\n },\n}\""// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/606/stories', "{\n story: {\n default_root: \"article\",\n is_folder: true,\n name: \"A new folder\",\n parent_id: 0,\n slug: \"a-new-folder\",\n },\n}") .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = "[\n story => [\n default_root => \"article\",\n is_folder => true,\n name => \"A new folder\",\n parent_id => 0,\n slug => \"a-new-folder\",\n ],\n]";
$client->post('spaces/606/stories', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/606/stories") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body("{\n story: {\n default_root: \"article\",\n is_folder: true,\n name: \"A new folder\",\n parent_id: 0,\n slug: \"a-new-folder\",\n },\n}") .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/606/stories");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "\"{\\n story: {\\n default_root: \\\"article\\\",\\n is_folder: true,\\n name: \\\"A new folder\\\",\\n parent_id: 0,\\n slug: \\\"a-new-folder\\\",\\n },\\n}\"", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/606/stories"
querystring = {}
payload = "{\n story: {\n default_root: \"article\",\n is_folder: true,\n name: \"A new folder\",\n parent_id: 0,\n slug: \"a-new-folder\",\n },\n}"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 = "{\n story => {\n default_root => \"article\",\n is_folder => true,\n name => \"A new folder\",\n parent_id => 0,\n slug => \"a-new-folder\",\n },\n}"
client.post('spaces/606/stories', payload)import Foundation
let headers = [ "Content-Type": "application/json", "Authorization": "YOUR_OAUTH_TOKEN"]
let postData = NSData(data: "{\n story: {\n default_root: \"article\",\n is_folder: true,\n name: \"A new folder\",\n parent_id: 0,\n slug: \"a-new-folder\",\n },\n}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://mapi.storyblok.com/v1/spaces/606/stories")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.method = "POST"request.allHTTPHeaderFields = headersrequest.httpBody = postData as Data
let session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})
dataTask.resume()Update a folder with strict content types.
curl "https://mapi.storyblok.com/v1/spaces/606/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/606/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/606/stories', $payload)->getBody();HttpResponse<String> response = Unirest.put("https://mapi.storyblok.com/v1/spaces/606/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/606/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/606/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/606/stories', payload)import Foundation
let headers = [ "Content-Type": "application/json", "Authorization": "YOUR_OAUTH_TOKEN"]
let postData = NSData(data: {"story":{"content":{"content_types":["category"],"lock_subfolders_content_types":false},"is_folder":true,"name":"Categories","parent_id":0,"slug":"categories"}}.data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://mapi.storyblok.com/v1/spaces/606/stories")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.method = "PUT"request.allHTTPHeaderFields = headersrequest.httpBody = postData as Data
let session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})
dataTask.resume()Get in touch with the Storyblok community