curl --request GET \
--url https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups \
--header 'Authorization: <api-key>'import requests
url = "https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups', 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/engineering-insights/insights/groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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://app.launchdarkly.com/api/v2/engineering-insights/insights/groups"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"totalCount": 15,
"items": [
{
"key": "default-production-all-apps",
"name": "Production - All Apps",
"projectKey": "default",
"environmentKey": "production",
"createdAt": "1706701522000",
"environment": {
"_links": {
"self": {
"href": "/api/v2/projects/my-project/environments/my-environment",
"type": "application/json"
}
},
"_id": "57be1db38b75bf0772d11384",
"key": "environment-key-123abc",
"name": "My Environment",
"apiKey": "sdk-xxx",
"mobileKey": "mob-xxx",
"color": "F5A623",
"defaultTtl": 5,
"secureMode": true,
"defaultTrackEvents": false,
"requireComments": true,
"confirmChanges": true,
"tags": [
"ops"
],
"critical": true,
"_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>"
}
}
]
},
"approvalSettings": {
"required": true,
"bypassApprovalsForPendingChanges": false,
"minNumApprovals": 1,
"canReviewOwnRequest": false,
"canApplyDeclinedChanges": true,
"serviceKind": "launchdarkly",
"serviceConfig": {},
"requiredApprovalTags": [
"require-approval"
],
"autoApplyApprovedChanges": true,
"serviceKindConfigurationId": "1ef45a85-218f-4428-a8b2-a97e5f56c258"
},
"resourceApprovalSettings": {}
},
"scores": {
"overall": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"deploymentFrequency": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"deploymentFailureRate": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"leadTime": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"impactSize": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"experimentationCoverage": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"flagHealth": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"velocity": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"risk": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"efficiency": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"creationRatio": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
}
},
"scoreMetadata": {
"period": {
"startTime": "1706701522000",
"endTime": "1706701522000"
},
"lastPeriod": {
"startTime": "1706701522000",
"endTime": "1706701522000"
}
},
"applicationKeys": [
"billing-service",
"inventory-service"
]
}
],
"_links": {},
"metadata": {
"countByIndicator": {
"excellent": 1,
"good": 1,
"fair": 1,
"needsAttention": 1,
"notCalculated": 1,
"unknown": 1,
"total": 6
}
},
"scoreMetadata": {
"period": {
"startTime": "1706701522000",
"endTime": "1706701522000"
},
"lastPeriod": {
"startTime": "1706701522000",
"endTime": "1706701522000"
}
}
}{
"code": "invalid_request",
"message": "validation failed",
"errors": [
{
"attribute": "projectKey",
"reason": "must be present"
}
]
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}List insight groups
List groups for which you are collecting insights
Expanding the insight groups collection response
LaunchDarkly supports expanding the insight groups collection response to include additional fields.
To expand the response, append the expand query parameter and include the following:
scoresincludes details on all of the scores used in the engineering insights metrics views for each groupenvironmentincludes details on each environment associated with each groupmetadataincludes counts of the number of insight groups with particular indicators, such as “excellent,” “good,” “fair,” and so on.
For example, use ?expand=scores to include the scores field in the response. By default, this field is not included in the response.
curl --request GET \
--url https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups \
--header 'Authorization: <api-key>'import requests
url = "https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups', 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/engineering-insights/insights/groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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://app.launchdarkly.com/api/v2/engineering-insights/insights/groups"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/engineering-insights/insights/groups")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"totalCount": 15,
"items": [
{
"key": "default-production-all-apps",
"name": "Production - All Apps",
"projectKey": "default",
"environmentKey": "production",
"createdAt": "1706701522000",
"environment": {
"_links": {
"self": {
"href": "/api/v2/projects/my-project/environments/my-environment",
"type": "application/json"
}
},
"_id": "57be1db38b75bf0772d11384",
"key": "environment-key-123abc",
"name": "My Environment",
"apiKey": "sdk-xxx",
"mobileKey": "mob-xxx",
"color": "F5A623",
"defaultTtl": 5,
"secureMode": true,
"defaultTrackEvents": false,
"requireComments": true,
"confirmChanges": true,
"tags": [
"ops"
],
"critical": true,
"_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>"
}
}
]
},
"approvalSettings": {
"required": true,
"bypassApprovalsForPendingChanges": false,
"minNumApprovals": 1,
"canReviewOwnRequest": false,
"canApplyDeclinedChanges": true,
"serviceKind": "launchdarkly",
"serviceConfig": {},
"requiredApprovalTags": [
"require-approval"
],
"autoApplyApprovedChanges": true,
"serviceKindConfigurationId": "1ef45a85-218f-4428-a8b2-a97e5f56c258"
},
"resourceApprovalSettings": {}
},
"scores": {
"overall": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"deploymentFrequency": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"deploymentFailureRate": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"leadTime": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"impactSize": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"experimentationCoverage": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"flagHealth": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"velocity": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"risk": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"efficiency": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
},
"creationRatio": {
"score": 100,
"indicator": "excellent",
"indicatorRange": {
"min": 0,
"max": 100
},
"aggregateOf": [
"deploymentFrequency",
"leadTime"
],
"diffVsLastPeriod": 123,
"lastPeriod": "<unknown>"
}
},
"scoreMetadata": {
"period": {
"startTime": "1706701522000",
"endTime": "1706701522000"
},
"lastPeriod": {
"startTime": "1706701522000",
"endTime": "1706701522000"
}
},
"applicationKeys": [
"billing-service",
"inventory-service"
]
}
],
"_links": {},
"metadata": {
"countByIndicator": {
"excellent": 1,
"good": 1,
"fair": 1,
"needsAttention": 1,
"notCalculated": 1,
"unknown": 1,
"total": 6
}
},
"scoreMetadata": {
"period": {
"startTime": "1706701522000",
"endTime": "1706701522000"
},
"lastPeriod": {
"startTime": "1706701522000",
"endTime": "1706701522000"
}
}
}{
"code": "invalid_request",
"message": "validation failed",
"errors": [
{
"attribute": "projectKey",
"reason": "must be present"
}
]
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Authorizations
Query Parameters
The number of insight groups to return. Default is 20. Must be between 1 and 20 inclusive.
Where to start in the list. Use this with pagination. For example, an offset of 10 skips the first ten items and then returns the next items in the list, up to the query limit.
Sort flag list by field. Prefix field with - to sort in descending order. Allowed fields: name
Filter list of insights groups by name.
Options: scores, environment, metadata
Response
Insight groups collection response
The total number of insight groups
15
A list of insight groups
Show child attributes
Show child attributes
The location and content type of related resources
Show child attributes
Show child attributes
Metadata about the insight groups
Show child attributes
Show child attributes
Metadata about the insight scores, when expanded
Show child attributes
Show child attributes