curl --request POST \
--url https://api.galtea.ai/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
'import requests
url = "https://api.galtea.ai/runs"
payload = {
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
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({
productId: 'product_123',
versionId: 'version_123',
customId: 'nightly-regression'
})
};
fetch('https://api.galtea.ai/runs', 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.galtea.ai/runs",
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([
'productId' => 'product_123',
'versionId' => 'version_123',
'customId' => 'nightly-regression'
]),
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.galtea.ai/runs"
payload := strings.NewReader("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\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.galtea.ai/runs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/runs")
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 \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}"
response = http.request(request)
puts response.read_body{
"id": "run_123",
"productId": "product_123",
"versionId": "version_123",
"userId": "user_123",
"ordinal": 42,
"customId": "nightly-regression",
"relaunchedFromRunId": "run_122",
"openedBy": "LAUNCH",
"status": "COMPLETED",
"evaluationCount": 120,
"sessionCount": 30,
"finishedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"launches": [
{
"id": "runLaunch_123",
"runId": "run_123",
"kind": "GENERATE_INFERENCES",
"jobId": "<string>",
"status": "COMPLETED",
"error": "<string>",
"request": {},
"resolvedInputs": {},
"finishedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}
]
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Create run
Opens an empty run you can attribute later launches to, by passing its id as runId. A run you create this way is never closed automatically: close it yourself when the last launch is in.
curl --request POST \
--url https://api.galtea.ai/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
'import requests
url = "https://api.galtea.ai/runs"
payload = {
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
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({
productId: 'product_123',
versionId: 'version_123',
customId: 'nightly-regression'
})
};
fetch('https://api.galtea.ai/runs', 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.galtea.ai/runs",
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([
'productId' => 'product_123',
'versionId' => 'version_123',
'customId' => 'nightly-regression'
]),
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.galtea.ai/runs"
payload := strings.NewReader("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\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.galtea.ai/runs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/runs")
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 \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}"
response = http.request(request)
puts response.read_body{
"id": "run_123",
"productId": "product_123",
"versionId": "version_123",
"userId": "user_123",
"ordinal": 42,
"customId": "nightly-regression",
"relaunchedFromRunId": "run_122",
"openedBy": "LAUNCH",
"status": "COMPLETED",
"evaluationCount": 120,
"sessionCount": 30,
"finishedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"launches": [
{
"id": "runLaunch_123",
"runId": "run_123",
"kind": "GENERATE_INFERENCES",
"jobId": "<string>",
"status": "COMPLETED",
"error": "<string>",
"request": {},
"resolvedInputs": {},
"finishedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}
]
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Authorizations
API key authorization. Pass your API key in the Authorization header as a Bearer token. Both new (gsk_*) and legacy (gsk-) API keys are accepted, e.g. Authorization: Bearer gsk_... or Authorization: Bearer gsk-....
Body
Product this launch belongs to
1"product_123"
Version under test, when the launch targets one
1"version_123"
Your own label, unique per product
1"nightly-regression"
Response
Run created successfully
"run_123"
"product_123"
"version_123"
"user_123"
Per-product launch number, starting at 1 and never reused
42
Caller-supplied label
"nightly-regression"
The run this one repeats, when POST /runs/{id}/relaunch minted it
"run_122"
LAUNCH when a launch endpoint opened the run, which then closes when its last launch ends. CALLER when POST /runs opened it, which only POST /runs/{id}/close ends.
LAUNCH, CALLER "LAUNCH"
RUNNING, COMPLETED, FAILED, CANCELLED "COMPLETED"
Evaluations this run launched
120
Distinct sessions covered by the evaluations of this run
30
The launches the platform performed inside this run, oldest first. Single-run reads only.
Show child attributes
Show child attributes