curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/experimentRuns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": [
"<string>"
],
"timeSeriesDefinitionIDs": [
"<string>"
],
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"variantIDs": [
"<string>"
],
"expectedSharePct": 123
}
]
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/experimentRuns"
payload = {
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": ["<string>"],
"timeSeriesDefinitionIDs": ["<string>"],
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"variantIDs": ["<string>"],
"expectedSharePct": 123
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
experimentID: '<string>',
name: '<string>',
startMs: 123,
variantIDs: ['<string>'],
timeSeriesDefinitionIDs: ['<string>'],
description: '<string>',
endMs: 123,
groups: [{label: '<string>', variantIDs: ['<string>'], expectedSharePct: 123}]
})
};
fetch('https://api.cloud.corbado.io/v1/observe/experimentRuns', 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://api.cloud.corbado.io/v1/observe/experimentRuns",
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([
'experimentID' => '<string>',
'name' => '<string>',
'startMs' => 123,
'variantIDs' => [
'<string>'
],
'timeSeriesDefinitionIDs' => [
'<string>'
],
'description' => '<string>',
'endMs' => 123,
'groups' => [
[
'label' => '<string>',
'variantIDs' => [
'<string>'
],
'expectedSharePct' => 123
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.cloud.corbado.io/v1/observe/experimentRuns"
payload := strings.NewReader("{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cloud.corbado.io/v1/observe/experimentRuns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/experimentRuns")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": [
"<string>"
],
"timeSeriesDefinitionIDs": [
"<string>"
],
"createdMs": 123,
"updatedMs": 123,
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"role": "control",
"variantIDs": [
"<string>"
],
"expectedSharePct": 123
}
]
}{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}Create experiment run
Creates an Observe experiment run.
Required API key permission: observe:experiments:write.
curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/experimentRuns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": [
"<string>"
],
"timeSeriesDefinitionIDs": [
"<string>"
],
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"variantIDs": [
"<string>"
],
"expectedSharePct": 123
}
]
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/experimentRuns"
payload = {
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": ["<string>"],
"timeSeriesDefinitionIDs": ["<string>"],
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"variantIDs": ["<string>"],
"expectedSharePct": 123
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
experimentID: '<string>',
name: '<string>',
startMs: 123,
variantIDs: ['<string>'],
timeSeriesDefinitionIDs: ['<string>'],
description: '<string>',
endMs: 123,
groups: [{label: '<string>', variantIDs: ['<string>'], expectedSharePct: 123}]
})
};
fetch('https://api.cloud.corbado.io/v1/observe/experimentRuns', 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://api.cloud.corbado.io/v1/observe/experimentRuns",
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([
'experimentID' => '<string>',
'name' => '<string>',
'startMs' => 123,
'variantIDs' => [
'<string>'
],
'timeSeriesDefinitionIDs' => [
'<string>'
],
'description' => '<string>',
'endMs' => 123,
'groups' => [
[
'label' => '<string>',
'variantIDs' => [
'<string>'
],
'expectedSharePct' => 123
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.cloud.corbado.io/v1/observe/experimentRuns"
payload := strings.NewReader("{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cloud.corbado.io/v1/observe/experimentRuns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/experimentRuns")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"experimentID\": \"<string>\",\n \"name\": \"<string>\",\n \"startMs\": 123,\n \"variantIDs\": [\n \"<string>\"\n ],\n \"timeSeriesDefinitionIDs\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"endMs\": 123,\n \"groups\": [\n {\n \"label\": \"<string>\",\n \"variantIDs\": [\n \"<string>\"\n ],\n \"expectedSharePct\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"experimentID": "<string>",
"name": "<string>",
"startMs": 123,
"variantIDs": [
"<string>"
],
"timeSeriesDefinitionIDs": [
"<string>"
],
"createdMs": 123,
"updatedMs": 123,
"description": "<string>",
"endMs": 123,
"groups": [
{
"label": "<string>",
"role": "control",
"variantIDs": [
"<string>"
],
"expectedSharePct": 123
}
]
}{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}Authorizations
Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.
Body
ID of the experiment (format exp-<number>)
Start of the run in milliseconds since epoch
Selected variant IDs (format exv-<number>)
Time-series definition IDs to break down for this run (format tsd-<number>)
Optional end of the run in milliseconds since epoch (open-ended if omitted)
Optional A/B evaluation arms (control vs treatment) over the selected variants. Omit for a breakdown-only run.
Show child attributes
Show child attributes
Response
Experiment run created.
ID of the experiment run (format exr-<number>).
ID of the experiment (format exp-<number>).
Time-series definition IDs (format tsd-<number>).
A/B evaluation arms (control vs treatment). Absent for breakdown-only runs.
Show child attributes
Show child attributes
Was this page helpful?