Add a Collaborator
https://mapi.storyblok.com/v1/spaces/:space_id/collaborators/Add collaborators with specific roles and permissions.
The following list includes only required fields—find all available properties in the collaborator object page.
Path parameters
Section titled “Path parameters”- :space_id required number
Numeric ID of a space.
Request body properties
Section titled “Request body properties”- email required string
The collaborator’s email or SSO ID.
- role required string
The role name of the collaborator. It could be a default role (admin or editor), or a custom role listed with a
role_id. - space_role_id required number
Numeric ID associated with a single custom role.
- space_role_ids number[]
An array of numeric IDs associated with each custom role assigned to a single collaborator. Set
allow_multiple_roles_creationtotrueto enable multi-role. - permissions enum[]
An array of strings that define the role’s permissions.
Permission Description read_storiesRead-only access to stories save_storiesEdit and save stories publish_storiesPublish stories unpublish_storiesUnpublish stories publish_foldersPublish folders (including stories contained within) unpublish_foldersUnpublish folders (including stories contained within) deploy_storiesDeploy pipeline stories delete_storiesPermanently delete stories edit_imageEdit images in the Image Editor view_composerUse the Visual Editor change_alternate_groupChange alternate content groupings (for internationalization or variants) move_storyMove stories between folders edit_story_slugEdit a story URL view_contentIf checked, hides all stories except those defined in allowed_paths(Permissions → Content → Folder/Content item permissions)view_foldersIf checked, hides all folders except those defined in allowed_paths(Permissions → Content → Folder/Content item permissions)view_draft_jsonView the draft JSONpayload of storiesview_published_jsonView the published JSONpayload of storiesmanage_tagsCreate, edit, or delete tags edit_datasourcesEdit datasources edit_datasource_keysEdit datasources keys access_commerceAccess e-commerce features (if available) manage_block_libraryCreate, move, and edit blocks and folders hide_asset_foldersIf checked, hides all assets and folders except those defined in asset_folder_ids(Permissions → Assets → Asset Folder Permissions) - allow_multiple_roles_creation boolean
Set to
trueto add multiple role IDs for a single collaborator.
Response properties
Section titled “Response properties”- collaborator The Collaborator Object
Examples
Section titled “Examples”curl "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"allow_multiple_roles_creation\":false,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"admin\",\"space_role_id\":null,\"space_role_ids\":[]}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/288868932106293/collaborators/', { "allow_multiple_roles_creation": false, "email": "api.test@storyblok.com", "permissions": [], "role": "admin", "space_role_id": null, "space_role_ids": []}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["allow_multiple_roles_creation" => false,"email" => "api.test@storyblok.com","permissions" => [],"role" => "admin","space_role_id" => null,"space_role_ids" => []];
$client->post('spaces/288868932106293/collaborators/', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"allow_multiple_roles_creation":false,"email":"api.test@storyblok.com","permissions":[],"role":"admin","space_role_id":null,"space_role_ids":[]}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"allow_multiple_roles_creation\":false,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"admin\",\"space_role_id\":null,\"space_role_ids\":[]}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/"
querystring = {}
payload = {"allow_multiple_roles_creation":false,"email":"api.test@storyblok.com","permissions":[],"role":"admin","space_role_id":null,"space_role_ids":[]}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 = {"allow_multiple_roles_creation" => false,"email" => "api.test@storyblok.com","permissions" => [],"role" => "admin","space_role_id" => null,"space_role_ids" => []}
client.post('spaces/288868932106293/collaborators/', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "POST"request.httpBody = try JSONSerialization.data(withJSONObject: [ "allow_multiple_roles_creation": false, "email": "api.test@storyblok.com", "permissions": [ ], "role": "admin", "space_role_id": nil, "space_role_ids": [ ],])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/collaborators/") { contentType(ContentType.Application.Json) setBody(buildJsonObject { put("allow_multiple_roles_creation", false) put("email", "api.test@storyblok.com") putJsonArray("permissions") { } put("role", "admin") put("space_role_id", null) putJsonArray("space_role_ids") { } })}
println(response.body<JsonElement>())Request for adding a collaborator with one custom role.
curl "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"allow_multiple_roles_creation\":false,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"62454\",\"space_role_id\":62454,\"space_role_ids\":[]}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/288868932106293/collaborators/', { "allow_multiple_roles_creation": false, "email": "api.test@storyblok.com", "permissions": [], "role": "62454", "space_role_id": 62454, "space_role_ids": []}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["allow_multiple_roles_creation" => false,"email" => "api.test@storyblok.com","permissions" => [],"role" => "62454","space_role_id" => 62454,"space_role_ids" => []];
$client->post('spaces/288868932106293/collaborators/', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"allow_multiple_roles_creation":false,"email":"api.test@storyblok.com","permissions":[],"role":"62454","space_role_id":62454,"space_role_ids":[]}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"allow_multiple_roles_creation\":false,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"62454\",\"space_role_id\":62454,\"space_role_ids\":[]}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/"
querystring = {}
payload = {"allow_multiple_roles_creation":false,"email":"api.test@storyblok.com","permissions":[],"role":"62454","space_role_id":62454,"space_role_ids":[]}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 = {"allow_multiple_roles_creation" => false,"email" => "api.test@storyblok.com","permissions" => [],"role" => "62454","space_role_id" => 62454,"space_role_ids" => []}
client.post('spaces/288868932106293/collaborators/', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "POST"request.httpBody = try JSONSerialization.data(withJSONObject: [ "allow_multiple_roles_creation": false, "email": "api.test@storyblok.com", "permissions": [ ], "role": "62454", "space_role_id": 62454, "space_role_ids": [ ],])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/collaborators/") { contentType(ContentType.Application.Json) setBody(buildJsonObject { put("allow_multiple_roles_creation", false) put("email", "api.test@storyblok.com") putJsonArray("permissions") { } put("role", "62454") put("space_role_id", 62454) putJsonArray("space_role_ids") { } })}
println(response.body<JsonElement>())Request for adding a collaborator with multiple custom roles.
curl "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/" \ -X POST \ -H "Authorization: YOUR_OAUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"allow_multiple_roles_creation\":true,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"multi\",\"space_role_id\":null,\"space_role_ids\":[62454,123123]}"// Using the Universal JavaScript Client:// https://github.com/storyblok/storyblok-js-clientStoryblok.post('spaces/288868932106293/collaborators/', { "allow_multiple_roles_creation": true, "email": "api.test@storyblok.com", "permissions": [], "role": "multi", "space_role_id": null, "space_role_ids": [ 62454, 123123 ]}) .then(response => { console.log(response) }).catch(error => { console.log(error) })$client = new \Storyblok\ManagementClient('YOUR_OAUTH_TOKEN');
$payload = ["allow_multiple_roles_creation" => true,"email" => "api.test@storyblok.com","permissions" => [],"role" => "multi","space_role_id" => null,"space_role_ids" => [62454,123123]];
$client->post('spaces/288868932106293/collaborators/', $payload)->getBody();HttpResponse<String> response = Unirest.post("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/") .header("Content-Type", "application/json") .header("Authorization", "YOUR_OAUTH_TOKEN") .body({"allow_multiple_roles_creation":true,"email":"api.test@storyblok.com","permissions":[],"role":"multi","space_role_id":null,"space_role_ids":[62454,123123]}) .asString();var client = new RestClient("https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/");var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");request.AddHeader("Authorization", "YOUR_OAUTH_TOKEN");request.AddParameter("application/json", "{\"allow_multiple_roles_creation\":true,\"email\":\"api.test@storyblok.com\",\"permissions\":[],\"role\":\"multi\",\"space_role_id\":null,\"space_role_ids\":[62454,123123]}", ParameterType.RequestBody);IRestResponse response = client.Execute(request);import requests
url = "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/"
querystring = {}
payload = {"allow_multiple_roles_creation":true,"email":"api.test@storyblok.com","permissions":[],"role":"multi","space_role_id":null,"space_role_ids":[62454,123123]}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 = {"allow_multiple_roles_creation" => true,"email" => "api.test@storyblok.com","permissions" => [],"role" => "multi","space_role_id" => null,"space_role_ids" => [62454,123123]}
client.post('spaces/288868932106293/collaborators/', payload)var request = URLRequest(url: URL(string: "https://mapi.storyblok.com/v1/spaces/288868932106293/collaborators/")!)request.setValue("YOUR_OAUTH_TOKEN", forHTTPHeaderField: "Authorization")request.httpMethod = "POST"request.httpBody = try JSONSerialization.data(withJSONObject: [ "allow_multiple_roles_creation": true, "email": "api.test@storyblok.com", "permissions": [ ], "role": "multi", "space_role_id": nil, "space_role_ids": [ 62454, 123123, ],])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/collaborators/") { contentType(ContentType.Application.Json) setBody(buildJsonObject { put("allow_multiple_roles_creation", true) put("email", "api.test@storyblok.com") putJsonArray("permissions") { } put("role", "multi") put("space_role_id", null) putJsonArray("space_role_ids") { add(62454) add(123123) } })}
println(response.body<JsonElement>())Get in touch with the Storyblok community