Update a Story
This endpoint 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.
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). Two stories are alternates with each other when their group IDs are the same.
https://mapi.storyblok.com/v1/spaces/:space_id/stories/:story_id
Path Parameters
-
:space_id
required numberNumeric ID of a space
-
:story_id
required numberThe numeric id of story
Request Body Properties
-
story
The Story ObjectA single story object
-
name
required stringThe complete name provided for the story
-
parent_id
numberID of the parent folder
-
group_id
stringGroup ID (UUID string), shared between stories defined as alternates
-
sort_by_date
stringDate defined in the story's entry configuration (Format:
YYYY-mm-dd
) -
tag_list
string[]Array of tag names
-
is_folder
booleantrue
if the instance constitutes a folder -
content
objectAn object containing the field data associated with the specific story type's specific content structure. Also includes a
component
property with the story type's technical name. -
slug
required stringThe slug specific for the story
-
path
stringValue of the real path defined in the story's entry configuration (usually, this value is only required for Storyblok's Visual Editor)
-
default_root
stringComponent name which will be used as default content type for this folders entries
-
disable_fe_editor
booleanIs side by side editor disabled for all entries in folder
-
is_startpage
booleantrue
if the story is defined as root for the folder -
meta_data
objectObject to store non-editable data that is exclusively maintained with the Management API
-
pinned
booleanTo pin the story in the toolbar
-
first_published_at
stringFirst publishing date (Format:
yyyy-MM-dd'T'HH:mm:ssZ
) -
position
numberNumeric representation of the story's position in the folder
-
-
group_id
stringGroup ID (UUID string), shared between stories defined as alternates
-
force_update
stringIf this is
1
, the request can overwrite a locked story. Do note that if you do so, the user who was previously editing the story (which is why it was locked) will encounter a content conflict model. -
release_id
numberNumeric ID of release (optional)
-
publish
numberShould the story be published immediately (set 1 to publish)
-
lang
stringLanguage code to publish the story individually (must be enabled in the space settings)
Response Properties
-
story
The Story ObjectA single story object
-
id
numberNumeric id of the story
-
name
stringThe complete name provided for the story
-
parent_id
numberID of the parent folder
-
group_id
stringGroup ID (UUID string), shared between stories defined as alternates
-
alternates
object[]An array containing objects that provide basic data of the stories defined as alternates of the current story
-
id
numberThe numeric ID
-
name
stringThe complete name provided for the story
-
slug
stringThe slug specific for the story
-
published
booleantrue
if a story has been published at least once (even if it is currently in draft) -
full_slug
stringThe full slug of the story, combining the parent folder(s) and the designated story slug
-
is_folder
booleantrue
if the instance constitutes a folder
-
-
created_at
stringCreation date (Format:
yyyy-MM-dd'T'HH:mm:ssZ
) -
deleted_at
stringDeleted date (Format: YYYY-mm-dd HH:MM)
-
sort_by_date
stringDate defined in the story's entry configuration (Format:
YYYY-mm-dd
) -
tag_list
string[]Array of tag names
-
updated_at
stringLatest update date (Format:
yyyy-MM-dd'T'HH:mm:ssZ
) -
published_at
stringLatest publishing date (Format:
yyyy-MM-dd'T'HH:mm:ssZ
) -
uuid
stringGenerated UUID string
-
is_folder
booleantrue
if the instance constitutes a folder -
content
objectAn object containing the field data associated with the specific story type's specific content structure. Also includes a
component
property with the story type's technical name. -
published
booleantrue
if a story has been published at least once (even if it is currently in draft) -
slug
stringThe slug specific for the story
-
path
stringValue of the real path defined in the story's entry configuration (usually, this value is only required for Storyblok's Visual Editor)
-
full_slug
stringThe full slug of the story, combining the parent folder(s) and the designated story slug
-
default_root
stringComponent name which will be used as default content type for this folders entries
-
disable_fe_editor
booleanIs side by side editor disabled for all entries in folder
-
parent
objectEssential parent information as object (resolved from
parent_id
) -
is_startpage
booleantrue
if the story is defined as root for the folder -
unpublished_changes
booleanStory has unpublished changes; saved but not published
-
meta_data
objectObject to store non-editable data that is exclusively maintained with the Management API
-
imported_at
stringLatest import date (Format: YYYY-mm-dd HH:MM)
-
preview_token
objectPreview token
-
token
stringThe token passed to the editor as preview parameter to allow edit mode verification
-
timestamp
stringTimestamp passed to the editor as preview parameter to allow edit mode verification
-
-
pinned
booleanTo pin the story in the toolbar
-
breadcrumbs
object[]Array of resolved subset of link objects (one per path segment / parent)
-
id
numberStory ID
-
name
stringThe complete name provided for the story
-
parent_id
numberID of the parent folder
-
disable_fe_editor
booleanIs side by side editor disabled for all entries in folder
-
path
stringValue of the real path defined in the story's entry configuration (usually, this value is only required for Storyblok's Visual Editor)
-
slug
stringThe slug specific for the story
-
translated_slugs
object[]Array of translated slug objects (if the app Translatable Slugs is installed)
-
-
first_published_at
stringFirst publishing date (Format:
yyyy-MM-dd'T'HH:mm:ssZ
) -
last_author
objectLast author
-
id
numberLast author user object numeric id
-
userid
stringLast author userid/username
-
friendly_name
stringFriendly name of last author
-
-
last_author_id
numberId of the last Author
-
translated_slugs
object[]Array of translated slug objects (if the app Translatable Slugs is installed)
-
story_id
numberID of the story
-
lang
stringLanguage code of the current language (can be requested with the
language
API parameter) -
slug
stringThe slug specific for the story
-
name
stringThe complete name provided for the story
-
published
booleantrue
if a story has been published at least once (even if it is currently in draft)
-
-
localized_paths
object[]An array of translated path objects
-
path
stringValue of the real path defined in the story's entry configuration (usually, this value is only required for Storyblok's Visual Editor)
-
name
stringThe complete name provided for the story
-
lang
stringLanguage code of the current language (can be requested with the
language
API parameter) -
published
booleantrue
if a story has been published at least once (even if it is currently in draft)
-
-
position
numberNumeric representation of the story's position in the folder
-
release_id
numberID of the current release (can be requested with the
from_release
API parameter) -
scheduled_dates
stringScheduled publishing date (Format: YYYY-mm-dd HH:MM)
-
favourite_for_user_ids
number[]Array of user IDs who have added the story in their favorites
-
curl "https://mapi.storyblok.com/v1/spaces/606/stories/2141" \
-X PUT \
-H "Authorization: YOUR_OAUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"story\": {\"name\": \"Updated Story Name\",\"slug\": \"story-name\",\"id\": 2141,\"content\": {\"component\": \"page\",\"body\": []}},\"force_update\": 1,\"publish\": 1}"
// Using the Universal JavaScript Client:
// https://github.com/storyblok/storyblok-js-client
Storyblok.put('/spaces/606/stories/2141', {
"story": {
"name": "Updated Story Name",
"slug": "story-name",
"id": 2141,
"content": {
"component": "page",
"body": []
}
},
"force_update": 1,
"publish": 1
})
.then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = [
"story" => [
"name" => "Updated Story Name",
"slug" => "story-name",
"id" => 2141,
"content" => [
"component" => "page",
"body" => []
]
],
"force_update" => 1,
"publish" => 1
];
$client->put('/spaces/606/stories/2141', $payload)->getBody();
require 'storyblok'
client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')
payload = {
"story" => {
"name" => "Updated Story Name",
"slug" => "story-name",
"id" => 2141,
"content" => {
"component" => "page",
"body" => []
}
},
"force_update" => 1,
"publish" => 1
}
client.put('/spaces/606/stories/2141', payload)
HttpResponse<String> response = Unirest.put("https://mapi.storyblok.com/v1/spaces/606/stories/2141")
.header("Content-Type", "application/json")
.header("Authorization", "YOUR_OAUTH_TOKEN")
.body("{\"story\": {\"name\": \"Updated Story Name\",\"slug\": \"story-name\",\"id\": 2141,\"content\": {\"component\": \"page\",\"body\": []}},\"force_update\": 1,\"publish\": 1}")
.asString();
var client = new RestClient("https://mapi.storyblok.com/v1/spaces/606/stories/2141");
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");
request.AddParameter("application/json", "{\"story\": {\"name\": \"Updated Story Name\",\"slug\": \"story-name\",\"id\": 2141,\"content\": {\"component\": \"page\",\"body\": []}},\"force_update\": 1,\"publish\": 1}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
import Foundation
let headers = [
"Content-Type": "application/json",
"Authorization": "YOUR_OAUTH_TOKEN"
]
let postData = NSData(data: "{\"story\": {\"name\": \"Updated Story Name\",\"slug\": \"story-name\",\"id\": 2141,\"content\": {\"component\": \"page\",\"body\": []}},\"force_update\": 1,\"publish\": 1}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://mapi.storyblok.com/v1/spaces/606/stories/2141")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.method = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let 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()
import requests
url = "https://mapi.storyblok.com/v1/spaces/606/stories/2141"
querystring = {}
payload = "{\"story\": {\"name\": \"Updated Story Name\",\"slug\": \"story-name\",\"id\": 2141,\"content\": {\"component\": \"page\",\"body\": []}},\"force_update\": 1,\"publish\": 1}"
headers = {
'Content-Type': "application/json",
'Authorization': "YOUR_OAUTH_TOKEN"
}
response = requests.request("PUT", url, data=payload, headers=headers, params=querystring)
print(response.text)