curl --request POST \
--url https://app.launchdarkly.com/api/v2/integrations/{integrationKey} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"optional": "an optional property",
"required": "the required property",
"url": "https://example.com"
},
"name": "Example audit log subscription.",
"on": false,
"statements": [
{
"actions": [
"*"
],
"effect": "allow",
"resources": [
"proj/*:env/*:flag/*;testing-tag"
]
}
],
"tags": [
"testing-tag"
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/integrations/{integrationKey}"
payload = {
"config": {
"optional": "an optional property",
"required": "the required property",
"url": "https://example.com"
},
"name": "Example audit log subscription.",
"on": False,
"statements": [
{
"actions": ["*"],
"effect": "allow",
"resources": ["proj/*:env/*:flag/*;testing-tag"]
}
],
"tags": ["testing-tag"]
}
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({
config: {
optional: 'an optional property',
required: 'the required property',
url: 'https://example.com'
},
name: 'Example audit log subscription.',
on: false,
statements: [
{
actions: ['*'],
effect: 'allow',
resources: ['proj/*:env/*:flag/*;testing-tag']
}
],
tags: ['testing-tag']
})
};
fetch('https://app.launchdarkly.com/api/v2/integrations/{integrationKey}', 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/integrations/{integrationKey}",
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([
'config' => [
'optional' => 'an optional property',
'required' => 'the required property',
'url' => 'https://example.com'
],
'name' => 'Example audit log subscription.',
'on' => false,
'statements' => [
[
'actions' => [
'*'
],
'effect' => 'allow',
'resources' => [
'proj/*:env/*:flag/*;testing-tag'
]
]
],
'tags' => [
'testing-tag'
]
]),
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/integrations/{integrationKey}"
payload := strings.NewReader("{\n \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\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/integrations/{integrationKey}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/integrations/{integrationKey}")
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 \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"_links": {},
"_id": "1234a56b7c89d012345e678f",
"kind": "datadog",
"name": "Example Datadog integration",
"config": {},
"statements": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
],
"on": true,
"tags": [
"testing"
],
"_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>"
}
}
]
},
"_status": {
"successCount": 123,
"lastSuccess": 123,
"lastError": 123,
"errorCount": 123,
"errors": [
{
"statusCode": 123,
"responseBody": "<string>",
"timestamp": 123
}
]
},
"url": "<string>",
"apiKey": "<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": "not_found",
"message": "Invalid resource identifier"
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Create audit log subscription
Create an audit log subscription.
For each subscription, you must specify the set of resources you wish to subscribe to audit log notifications for. You can describe these resources using a custom role policy. To learn more, read Custom role concepts.
curl --request POST \
--url https://app.launchdarkly.com/api/v2/integrations/{integrationKey} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"optional": "an optional property",
"required": "the required property",
"url": "https://example.com"
},
"name": "Example audit log subscription.",
"on": false,
"statements": [
{
"actions": [
"*"
],
"effect": "allow",
"resources": [
"proj/*:env/*:flag/*;testing-tag"
]
}
],
"tags": [
"testing-tag"
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/integrations/{integrationKey}"
payload = {
"config": {
"optional": "an optional property",
"required": "the required property",
"url": "https://example.com"
},
"name": "Example audit log subscription.",
"on": False,
"statements": [
{
"actions": ["*"],
"effect": "allow",
"resources": ["proj/*:env/*:flag/*;testing-tag"]
}
],
"tags": ["testing-tag"]
}
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({
config: {
optional: 'an optional property',
required: 'the required property',
url: 'https://example.com'
},
name: 'Example audit log subscription.',
on: false,
statements: [
{
actions: ['*'],
effect: 'allow',
resources: ['proj/*:env/*:flag/*;testing-tag']
}
],
tags: ['testing-tag']
})
};
fetch('https://app.launchdarkly.com/api/v2/integrations/{integrationKey}', 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/integrations/{integrationKey}",
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([
'config' => [
'optional' => 'an optional property',
'required' => 'the required property',
'url' => 'https://example.com'
],
'name' => 'Example audit log subscription.',
'on' => false,
'statements' => [
[
'actions' => [
'*'
],
'effect' => 'allow',
'resources' => [
'proj/*:env/*:flag/*;testing-tag'
]
]
],
'tags' => [
'testing-tag'
]
]),
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/integrations/{integrationKey}"
payload := strings.NewReader("{\n \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\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/integrations/{integrationKey}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/integrations/{integrationKey}")
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 \"config\": {\n \"optional\": \"an optional property\",\n \"required\": \"the required property\",\n \"url\": \"https://example.com\"\n },\n \"name\": \"Example audit log subscription.\",\n \"on\": false,\n \"statements\": [\n {\n \"actions\": [\n \"*\"\n ],\n \"effect\": \"allow\",\n \"resources\": [\n \"proj/*:env/*:flag/*;testing-tag\"\n ]\n }\n ],\n \"tags\": [\n \"testing-tag\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"_links": {},
"_id": "1234a56b7c89d012345e678f",
"kind": "datadog",
"name": "Example Datadog integration",
"config": {},
"statements": [
{
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
]
}
],
"on": true,
"tags": [
"testing"
],
"_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>"
}
}
]
},
"_status": {
"successCount": 123,
"lastSuccess": 123,
"lastError": 123,
"errorCount": 123,
"errors": [
{
"statusCode": 123,
"responseBody": "<string>",
"timestamp": 123
}
]
},
"url": "<string>",
"apiKey": "<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": "not_found",
"message": "Invalid resource identifier"
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Authorizations
Path Parameters
The integration key
Body
A human-friendly name for your audit log subscription.
"Example audit log subscription."
The unique set of fields required to configure an audit log subscription integration of this type. Refer to the formVariables field in the corresponding manifest.json at https://github.com/launchdarkly/integration-framework/tree/main/integrations for a full list of fields for the integration you wish to configure.
Show child attributes
Show child attributes
{
"optional": "an optional property",
"required": "the required property",
"url": "https://example.com"
}
The set of resources you wish to subscribe to audit log notifications for.
Show child attributes
Show child attributes
Whether or not you want your subscription to actively send events.
false
An array of tags for this subscription.
["testing-tag"]
Slack webhook receiver URL. Only necessary for legacy Slack webhook integrations.
Datadog API key. Only necessary for legacy Datadog webhook integrations.
Response
Integration response
The location and content type of related resources
Show child attributes
Show child attributes
The ID for this integration audit log subscription
"1234a56b7c89d012345e678f"
The type of integration
"datadog"
A human-friendly name for the integration
"Example Datadog integration"
Details on configuration for an integration of this type. Refer to the formVariables field in the corresponding manifest.json for a full list of fields for each integration.
Show child attributes
Show child attributes
Represents a Custom role policy, defining a resource kinds filter the integration audit log subscription responds to.
Show child attributes
Show child attributes
Whether the integration is currently active
true
An array of tags for this integration
["testing"]
Details on the allowed and denied actions for this subscription
Show child attributes
Show child attributes
Details on the most recent successes and errors for this integration
Show child attributes
Show child attributes
Slack webhook receiver URL. Only used for legacy Slack webhook integrations.
Datadog API key. Only used for legacy Datadog webhook integrations.