curl --request PUT \
--url https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId} \
--header 'X-DOMO-Developer-Token: <api-key>'import requests
url = "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}"
headers = {"X-DOMO-Developer-Token": "<api-key>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {'X-DOMO-Developer-Token': '<api-key>'}};
fetch('https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"X-DOMO-Developer-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("X-DOMO-Developer-Token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}")
.header("X-DOMO-Developer-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-DOMO-Developer-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": "Unable to verify user with id 1",
"status": 400,
"statusReason": "Bad Request",
"toe": "X1EIQPAW9O-YR1AP-0WM59"
}{
"message": "The item you're looking for can not be found",
"status": 403,
"statusReason": "Forbidden",
"toe": "GP0ITH3EYK-UTED0-8ZCS2"
}{
"message": "No collection with id a3f7d891-bc24-4e56-9a12-c7e3b0f845d2 found",
"status": 404,
"statusReason": "Not Found",
"toe": "UO3SB982DA-RL9G8-GO8DF"
}Update Permissions
Grant or replace permissions for a user, group, or app instance on a collection.
Permission Inheritance
Users and groups inherit permissions from the app, so often the most convenient approach is to give the app the permissions you want all users to have. Anyone who has the app card shared with them inherits its permissions on the collection and its documents. By default, apps receive read, create_content, read_content, update_content, and delete_content on their collections.
For finer-grained control — when not everyone should be able to create, update, or delete documents — grant permissions directly to individual users or groups instead.
Available Permissions
| Permission | Grants |
|---|---|
admin | All permissions to the collection and its documents |
write | Update the collection’s properties |
read | Read the collection’s properties |
share | Add or remove permissions this entity already holds |
delete | Delete the collection |
create_content | Create documents in the collection |
update_content | Update documents in the collection |
read_content | Read documents in the collection |
delete_content | Delete documents from the collection |
READ is always included in the resulting permission set, even if you do not specify it.
Removing all entity permissions leaves only users with the Manage AppDB grant with access.
curl --request PUT \
--url https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId} \
--header 'X-DOMO-Developer-Token: <api-key>'import requests
url = "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}"
headers = {"X-DOMO-Developer-Token": "<api-key>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {'X-DOMO-Developer-Token': '<api-key>'}};
fetch('https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"X-DOMO-Developer-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("X-DOMO-Developer-Token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}")
.header("X-DOMO-Developer-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instance}.domo.com/api/datastores/v1/collections/{collectionId}/permission/{entity}/{entityId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-DOMO-Developer-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": "Unable to verify user with id 1",
"status": 400,
"statusReason": "Bad Request",
"toe": "X1EIQPAW9O-YR1AP-0WM59"
}{
"message": "The item you're looking for can not be found",
"status": 403,
"statusReason": "Forbidden",
"toe": "GP0ITH3EYK-UTED0-8ZCS2"
}{
"message": "No collection with id a3f7d891-bc24-4e56-9a12-c7e3b0f845d2 found",
"status": 404,
"statusReason": "Not Found",
"toe": "UO3SB982DA-RL9G8-GO8DF"
}Authorizations
Domo Developer Token for authentication.
Path Parameters
The ID of the collection.
The type of entity the permissions apply to.
USER, GROUP, RYUU_APP The ID of the entity the permissions apply to. For a USER or GROUP, this is the numeric ID (for example, 870010733). For a RYUU_APP, this is the app instance's UUID — the same value as the app's datastore UUID, which also appears as the subdomain of the app's origin (e.g., https://<instance-uuid>.domoapps.domo.com).
Query Parameters
One or more permissions to apply. Pass as a comma-separated list.
admin, write, read, share, delete, create_content, update_content, read_content, delete_content Controls how the specified permissions are applied to the entity's existing permission set.
false(default) — additive: merges the specified permissions with any permissions the entity already holds.true— replace: discards the entity's existing permissions and replaces them with exactly the permissions you specify.READis still always included in the resulting set.
Response
Permissions updated successfully. No response body is returned.

