curl --request POST \
--url https://app.launchdarkly.com/api/v2/roles \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"basePermissions": "reader",
"description": "An example role for members of the ops team",
"key": "role-key-123abc",
"name": "Ops team",
"policy": [
{
"actions": [
"updateOn"
],
"effect": "allow",
"resources": [
"proj/*:env/production:flag/*"
]
}
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/roles"
payload = {
"basePermissions": "reader",
"description": "An example role for members of the ops team",
"key": "role-key-123abc",
"name": "Ops team",
"policy": [
{
"actions": ["updateOn"],
"effect": "allow",
"resources": ["proj/*:env/production:flag/*"]
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
basePermissions: 'reader',
description: 'An example role for members of the ops team',
key: 'role-key-123abc',
name: 'Ops team',
policy: [
{
actions: ['updateOn'],
effect: 'allow',
resources: ['proj/*:env/production:flag/*']
}
]
})
};
fetch('https://app.launchdarkly.com/api/v2/roles', 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://app.launchdarkly.com/api/v2/roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'basePermissions' => 'reader',
'description' => 'An example role for members of the ops team',
'key' => 'role-key-123abc',
'name' => 'Ops team',
'policy' => [
[
'actions' => [
'updateOn'
],
'effect' => 'allow',
'resources' => [
'proj/*:env/production:flag/*'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.launchdarkly.com/api/v2/roles"
payload := strings.NewReader("{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.launchdarkly.com/api/v2/roles")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "1234a56b7c89d012345e678f",
"_links": {},
"key": "example-custom-role",
"name": "Example custom role",
"policy": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
],
"_access": {
"denied": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
],
"allowed": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
]
},
"description": "This custom role is just an example",
"basePermissions": "reader",
"resourceCategory": "<string>",
"assignedTo": {
"membersCount": 123,
"teamsCount": 123
},
"_presetBundleVersion": 123,
"_presetStatements": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
]
}{
"code": "invalid_request",
"message": "Invalid request body"
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "optimistic_locking_error",
"message": "Conflict. Optimistic lock error. Try again later."
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Create custom role
Create a new custom role
curl --request POST \
--url https://app.launchdarkly.com/api/v2/roles \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"basePermissions": "reader",
"description": "An example role for members of the ops team",
"key": "role-key-123abc",
"name": "Ops team",
"policy": [
{
"actions": [
"updateOn"
],
"effect": "allow",
"resources": [
"proj/*:env/production:flag/*"
]
}
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/roles"
payload = {
"basePermissions": "reader",
"description": "An example role for members of the ops team",
"key": "role-key-123abc",
"name": "Ops team",
"policy": [
{
"actions": ["updateOn"],
"effect": "allow",
"resources": ["proj/*:env/production:flag/*"]
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
basePermissions: 'reader',
description: 'An example role for members of the ops team',
key: 'role-key-123abc',
name: 'Ops team',
policy: [
{
actions: ['updateOn'],
effect: 'allow',
resources: ['proj/*:env/production:flag/*']
}
]
})
};
fetch('https://app.launchdarkly.com/api/v2/roles', 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://app.launchdarkly.com/api/v2/roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'basePermissions' => 'reader',
'description' => 'An example role for members of the ops team',
'key' => 'role-key-123abc',
'name' => 'Ops team',
'policy' => [
[
'actions' => [
'updateOn'
],
'effect' => 'allow',
'resources' => [
'proj/*:env/production:flag/*'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.launchdarkly.com/api/v2/roles"
payload := strings.NewReader("{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.launchdarkly.com/api/v2/roles")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"basePermissions\": \"reader\",\n \"description\": \"An example role for members of the ops team\",\n \"key\": \"role-key-123abc\",\n \"name\": \"Ops team\",\n \"policy\": [\n {\n \"actions\": [\n \"updateOn\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/production:flag/*\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "1234a56b7c89d012345e678f",
"_links": {},
"key": "example-custom-role",
"name": "Example custom role",
"policy": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
],
"_access": {
"denied": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
],
"allowed": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
]
},
"description": "This custom role is just an example",
"basePermissions": "reader",
"resourceCategory": "<string>",
"assignedTo": {
"membersCount": 123,
"teamsCount": 123
},
"_presetBundleVersion": 123,
"_presetStatements": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
]
}{
"code": "invalid_request",
"message": "Invalid request body"
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "optimistic_locking_error",
"message": "Conflict. Optimistic lock error. Try again later."
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Authorizations
Body
A human-friendly name for the custom role
"Ops team"
The custom role key
"role-key-123abc"
Resource statements for custom role
Show child attributes
Show child attributes
Description of custom role
"An example role for members of the ops team"
Base permissions to use for this role. Defaults to no_access (older roles defaulted to reader). Recommended to set this to no_access in all cases.
reader, no_access "reader"
The category of resources this role is intended to manage. Can be organization, project, or any. This field is immutable.
Response
Custom role response
The ID of the custom role
"1234a56b7c89d012345e678f"
The location and content type of related resources
Show child attributes
Show child attributes
The key of the custom role
"example-custom-role"
The name of the custom role
"Example custom role"
An array of the policies that comprise this custom role
Show child attributes
Show child attributes
Details on the allowed and denied actions for this custom role
Show child attributes
Show child attributes
The description of the custom role
"This custom role is just an example"
Base permissions to use for this role. Defaults to no_access (older roles defaulted to reader). Recommended to set this to no_access in all cases.
"reader"
The category of resources this role is intended to manage. Can be organization, project, or any. Once set, this field cannot be changed.
The number of teams and members this role is assigned to
Show child attributes
Show child attributes
If created from a preset, the preset bundle version
If created from a preset, the read-only statements copied from the preset
Show child attributes
Show child attributes