Patch experiment
For the complete documentation index, see llms.txt. For the full documentation snapshot, see llms-full.txt.
Update an experiment. Updating an experiment uses the semantic patch format.
To make a semantic patch request, you must append domain-model=launchdarkly.semanticpatch to your Content-Type header. To learn more, read Updates using semantic patch.
Instructions
Semantic patch requests support the following kind instructions for updating experiments.
updateName
Updates the experiment name.
Parameters
value: The new name.
Here’s an example:
{
"instructions": [{
"kind": "updateName",
"value": "Example updated experiment name"
}]
}
updateDescription
Updates the experiment description.
Parameters
value: The new description.
Here’s an example:
{
"instructions": [{
"kind": "updateDescription",
"value": "Example updated description"
}]
}
startIteration
Starts a new iteration for this experiment. You must create a new iteration before calling this instruction.
An iteration may not be started until it meets the following criteria:
- Its associated flag is toggled on and is not archived
- Its
randomizationUnitis set - At least one of its
treatmentshas a non-zeroallocationPercent
Parameters
changeJustification: The reason for starting a new iteration. Required when you callstartIterationon an already running experiment, otherwise optional.
Here’s an example:
{
"instructions": [{
"kind": "startIteration",
"changeJustification": "It's time to start a new iteration"
}]
}
stopIteration
Stops the current iteration for this experiment.
Parameters
winningTreatmentId: The ID of the winning treatment. Treatment IDs are returned as part of the Get experiment response. They are the_idof each element in thetreatmentsarray.winningReason: The reason for the winner
Here’s an example:
{
"instructions": [{
"kind": "stopIteration",
"winningTreatmentId": "3a548ec2-72ac-4e59-8518-5c24f5609ccf",
"winningReason": "Example reason to stop the iteration"
}]
}
archiveExperiment
Archives this experiment. Archived experiments are hidden by default in the LaunchDarkly user interface. You cannot start new iterations for archived experiments.
Here’s an example:
{
"instructions": [{ "kind": "archiveExperiment" }]
}
restoreExperiment
Restores an archived experiment. After restoring an experiment, you can start new iterations for it again.
Here’s an example:
{
"instructions": [{ "kind": "restoreExperiment" }]
}
curl --request PATCH \
--url https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"comment": "Example comment describing the update",
"instructions": [
{
"kind": "updateName",
"value": "Updated experiment name"
}
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}"
payload = {
"comment": "Example comment describing the update",
"instructions": [
{
"kind": "updateName",
"value": "Updated experiment name"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
comment: 'Example comment describing the update',
instructions: [{kind: 'updateName', value: 'Updated experiment name'}]
})
};
fetch('https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}', 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/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'comment' => 'Example comment describing the update',
'instructions' => [
[
'kind' => 'updateName',
'value' => 'Updated experiment name'
]
]
]),
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/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}"
payload := strings.NewReader("{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"key": "experiment-key-123abc",
"name": "Example experiment",
"_maintainerId": "12ab3c45de678910fgh12345",
"_creationDate": "1654104600000",
"environmentKey": "<string>",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project/environments/my-environment",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/environments/my-environment/experiments/my-experiment",
"type": "application/json"
}
},
"_id": "12ab3c45de678910fgh12345",
"description": "An example experiment, used in testing",
"methodology": "bayesian",
"dataSource": "snowflake",
"archivedDate": "1654104600000",
"tags": [
"experiment",
"feature"
],
"holdoutId": "f3b74309-d581-44e1-8a2b-bb2933b4fe40",
"currentIteration": {
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
},
"type": "experiment",
"draftIteration": {
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
},
"previousIterations": [
{
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
}
],
"analysisConfig": {
"bayesianThreshold": "<string>",
"significanceThreshold": "<string>",
"testDirection": "<string>",
"multipleComparisonCorrectionMethod": "bonferroni",
"multipleComparisonCorrectionScope": "variations",
"sequentialTestingEnabled": true
}
}{
"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": "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
Path Parameters
The project key
The environment key
The experiment key
Body
The instructions to perform when updating. This should be an array with objects that look like {"kind": "update_action"}. Some instructions also require a value field in the array element.
Show child attributes
Show child attributes
"[{\"kind\": \"updateName\", \"value\": \"Updated experiment name\"}]"
Optional comment describing the update
"Optional comment"
Response
Experiment response
The experiment key
"experiment-key-123abc"
The experiment name
"Example experiment"
The ID of the member who maintains this experiment.
"12ab3c45de678910fgh12345"
Timestamp of when the experiment was created
"1654104600000"
The location and content type of related resources
Show child attributes
Show child attributes
{
"parent": {
"href": "/api/v2/projects/my-project/environments/my-environment",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/environments/my-environment/experiments/my-experiment",
"type": "application/json"
}
}
The experiment ID
"12ab3c45de678910fgh12345"
The experiment description
"An example experiment, used in testing"
The results analysis approach.
bayesian, frequentist, export_only "bayesian"
The source of metric data in order to analyze results. Defaults to "launchdarkly" when not provided.
launchdarkly, snowflake "snowflake"
Timestamp of when the experiment was archived
"1654104600000"
Tags for the experiment
["experiment", "feature"]
The holdout ID
"f3b74309-d581-44e1-8a2b-bb2933b4fe40"
Details on the current iteration
Show child attributes
Show child attributes
The experiment type
"experiment"
Details on the current iteration. This iteration may be already started, or may still be a draft.
Show child attributes
Show child attributes
Details on the previous iterations for this experiment.
Show child attributes
Show child attributes
Details of the Analysis Configuration for this experiment.
Show child attributes
Show child attributes
curl --request PATCH \
--url https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"comment": "Example comment describing the update",
"instructions": [
{
"kind": "updateName",
"value": "Updated experiment name"
}
]
}
'import requests
url = "https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}"
payload = {
"comment": "Example comment describing the update",
"instructions": [
{
"kind": "updateName",
"value": "Updated experiment name"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
comment: 'Example comment describing the update',
instructions: [{kind: 'updateName', value: 'Updated experiment name'}]
})
};
fetch('https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}', 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/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'comment' => 'Example comment describing the update',
'instructions' => [
[
'kind' => 'updateName',
'value' => 'Updated experiment name'
]
]
]),
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/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}"
payload := strings.NewReader("{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/projects/{projectKey}/environments/{environmentKey}/experiments/{experimentKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"comment\": \"Example comment describing the update\",\n \"instructions\": [\n {\n \"kind\": \"updateName\",\n \"value\": \"Updated experiment name\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"key": "experiment-key-123abc",
"name": "Example experiment",
"_maintainerId": "12ab3c45de678910fgh12345",
"_creationDate": "1654104600000",
"environmentKey": "<string>",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project/environments/my-environment",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/environments/my-environment/experiments/my-experiment",
"type": "application/json"
}
},
"_id": "12ab3c45de678910fgh12345",
"description": "An example experiment, used in testing",
"methodology": "bayesian",
"dataSource": "snowflake",
"archivedDate": "1654104600000",
"tags": [
"experiment",
"feature"
],
"holdoutId": "f3b74309-d581-44e1-8a2b-bb2933b4fe40",
"currentIteration": {
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
},
"type": "experiment",
"draftIteration": {
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
},
"previousIterations": [
{
"hypothesis": "The new button placement will increase conversion",
"status": "running",
"createdAt": "1654104600000",
"_id": "12ab3c45de678910fgh12345",
"startedAt": "1655314200000",
"endedAt": "1656610200000",
"winningTreatmentId": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"winningReason": "We ran this iteration for two weeks and the winning variation was clear",
"canReshuffleTraffic": true,
"flags": {},
"reallocationFrequencyMillis": 3600000,
"version": 0,
"primaryMetric": {
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"primarySingleMetric": {
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
},
"primaryFunnel": {
"key": "metric-group-key-123abc",
"name": "My metric group",
"kind": "funnel",
"_links": {
"parent": {
"href": "/api/v2/projects/my-project",
"type": "application/json"
},
"self": {
"href": "/api/v2/projects/my-project/metric-groups/my-metric-group",
"type": "application/json"
}
},
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
},
"randomizationUnit": "user",
"attributes": [
"<string>"
],
"treatments": [
{
"name": "Treatment 1",
"allocationPercent": "10",
"_id": "122c9f3e-da26-4321-ba68-e0fc02eced58",
"baseline": true,
"parameters": [
{
"variationId": "<string>",
"flagKey": "<string>"
}
]
}
],
"secondaryMetrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc"
}
],
"metrics": [
{
"key": "metric-key-123abc",
"_versionId": "<string>",
"name": "My metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"isGroup": true,
"isNumeric": true,
"eventKey": "event-key-123abc",
"metrics": [
{
"key": "metric-key-123abc",
"name": "Example metric",
"kind": "custom",
"_links": {
"self": {
"href": "/api/v2/metrics/my-project/my-metric",
"type": "application/json"
}
},
"_versionId": "version-id-123abc",
"isNumeric": true,
"unitAggregationType": "sum",
"eventKey": "event-key-123abc",
"nameInGroup": "Step 1",
"randomizationUnits": [
"user"
]
}
]
}
],
"layerSnapshot": {
"key": "checkout-flow",
"name": "Checkout Flow",
"reservationPercent": 10,
"otherReservationPercent": 70
},
"covariateInfo": {
"id": "74a49a2b-4834-4246-917e-5d85231d8c2a",
"fileName": "covariate.csv",
"createdAt": "1654104600000"
}
}
],
"analysisConfig": {
"bayesianThreshold": "<string>",
"significanceThreshold": "<string>",
"testDirection": "<string>",
"multipleComparisonCorrectionMethod": "bonferroni",
"multipleComparisonCorrectionScope": "variations",
"sequentialTestingEnabled": true
}
}{
"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": "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."
}