curl --request POST \
--url https://softmax.com/api/observatory/v2/experience-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"roster": [
{
"player": {
"policy_ref": "<string>",
"top_n": 50,
"random": true
},
"slot": -1
}
],
"coworld_id": "<string>",
"variant_id": "<string>",
"target": {
"coworld_id": "<string>",
"variant_id": "<string>",
"league_id": "<string>",
"league_name": "<string>",
"division_id": "<string>",
"division_name": "<string>"
},
"game_config_overrides": {},
"game_config_overlay_secret": "<string>",
"included_players": [
"<string>"
],
"excluded_players": [
"<string>"
],
"num_episodes": 1,
"notes": "<string>",
"execution_backend": "k8s",
"reporter_version_ids": [
"<string>"
]
}
'import requests
url = "https://softmax.com/api/observatory/v2/experience-requests"
payload = {
"roster": [
{
"player": {
"policy_ref": "<string>",
"top_n": 50,
"random": True
},
"slot": -1
}
],
"coworld_id": "<string>",
"variant_id": "<string>",
"target": {
"coworld_id": "<string>",
"variant_id": "<string>",
"league_id": "<string>",
"league_name": "<string>",
"division_id": "<string>",
"division_name": "<string>"
},
"game_config_overrides": {},
"game_config_overlay_secret": "<string>",
"included_players": ["<string>"],
"excluded_players": ["<string>"],
"num_episodes": 1,
"notes": "<string>",
"execution_backend": "k8s",
"reporter_version_ids": ["<string>"]
}
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({
roster: [{player: {policy_ref: '<string>', top_n: 50, random: true}, slot: -1}],
coworld_id: '<string>',
variant_id: '<string>',
target: {
coworld_id: '<string>',
variant_id: '<string>',
league_id: '<string>',
league_name: '<string>',
division_id: '<string>',
division_name: '<string>'
},
game_config_overrides: {},
game_config_overlay_secret: '<string>',
included_players: ['<string>'],
excluded_players: ['<string>'],
num_episodes: 1,
notes: '<string>',
execution_backend: 'k8s',
reporter_version_ids: ['<string>']
})
};
fetch('https://softmax.com/api/observatory/v2/experience-requests', 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://softmax.com/api/observatory/v2/experience-requests",
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([
'roster' => [
[
'player' => [
'policy_ref' => '<string>',
'top_n' => 50,
'random' => true
],
'slot' => -1
]
],
'coworld_id' => '<string>',
'variant_id' => '<string>',
'target' => [
'coworld_id' => '<string>',
'variant_id' => '<string>',
'league_id' => '<string>',
'league_name' => '<string>',
'division_id' => '<string>',
'division_name' => '<string>'
],
'game_config_overrides' => [
],
'game_config_overlay_secret' => '<string>',
'included_players' => [
'<string>'
],
'excluded_players' => [
'<string>'
],
'num_episodes' => 1,
'notes' => '<string>',
'execution_backend' => 'k8s',
'reporter_version_ids' => [
'<string>'
]
]),
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://softmax.com/api/observatory/v2/experience-requests"
payload := strings.NewReader("{\n \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\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://softmax.com/api/observatory/v2/experience-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://softmax.com/api/observatory/v2/experience-requests")
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 \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"requester_user_id": "<string>",
"coworld_id": "<string>",
"coworld_name": "<string>",
"coworld_version": "<string>",
"variant_id": "<string>",
"episode_count": 123,
"pending_count": 123,
"submitted_count": 123,
"running_count": 123,
"completed_count": 123,
"failed_count": 123,
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"episodes": [
{
"id": "<string>",
"requester_user_id": "<string>",
"policy_version_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"participants": [
{
"position": 123,
"policy_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"policy_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"policy_name": "<string>",
"version": 123,
"player_id": "<string>",
"player_name": "<string>",
"is_filler": false
}
],
"scores": [
{
"policy_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"score": 123
}
],
"created_at": "2023-11-07T05:31:56Z",
"round_id": "<string>",
"coworld_id": "<string>",
"coworld_name": "<string>",
"coworld_version": "<string>",
"variant_name": "<string>",
"game_config": {},
"max_steps": 123,
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"episode_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replay_url": "<string>",
"live_url": "<string>",
"error_type": "<string>",
"error": "<string>",
"failed_policy_index": 123,
"failed_agent_index": 123,
"dispatched_at": "2023-11-07T05:31:56Z",
"running_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"cost_usd": 123
}
],
"requester": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create Experience Request
curl --request POST \
--url https://softmax.com/api/observatory/v2/experience-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"roster": [
{
"player": {
"policy_ref": "<string>",
"top_n": 50,
"random": true
},
"slot": -1
}
],
"coworld_id": "<string>",
"variant_id": "<string>",
"target": {
"coworld_id": "<string>",
"variant_id": "<string>",
"league_id": "<string>",
"league_name": "<string>",
"division_id": "<string>",
"division_name": "<string>"
},
"game_config_overrides": {},
"game_config_overlay_secret": "<string>",
"included_players": [
"<string>"
],
"excluded_players": [
"<string>"
],
"num_episodes": 1,
"notes": "<string>",
"execution_backend": "k8s",
"reporter_version_ids": [
"<string>"
]
}
'import requests
url = "https://softmax.com/api/observatory/v2/experience-requests"
payload = {
"roster": [
{
"player": {
"policy_ref": "<string>",
"top_n": 50,
"random": True
},
"slot": -1
}
],
"coworld_id": "<string>",
"variant_id": "<string>",
"target": {
"coworld_id": "<string>",
"variant_id": "<string>",
"league_id": "<string>",
"league_name": "<string>",
"division_id": "<string>",
"division_name": "<string>"
},
"game_config_overrides": {},
"game_config_overlay_secret": "<string>",
"included_players": ["<string>"],
"excluded_players": ["<string>"],
"num_episodes": 1,
"notes": "<string>",
"execution_backend": "k8s",
"reporter_version_ids": ["<string>"]
}
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({
roster: [{player: {policy_ref: '<string>', top_n: 50, random: true}, slot: -1}],
coworld_id: '<string>',
variant_id: '<string>',
target: {
coworld_id: '<string>',
variant_id: '<string>',
league_id: '<string>',
league_name: '<string>',
division_id: '<string>',
division_name: '<string>'
},
game_config_overrides: {},
game_config_overlay_secret: '<string>',
included_players: ['<string>'],
excluded_players: ['<string>'],
num_episodes: 1,
notes: '<string>',
execution_backend: 'k8s',
reporter_version_ids: ['<string>']
})
};
fetch('https://softmax.com/api/observatory/v2/experience-requests', 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://softmax.com/api/observatory/v2/experience-requests",
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([
'roster' => [
[
'player' => [
'policy_ref' => '<string>',
'top_n' => 50,
'random' => true
],
'slot' => -1
]
],
'coworld_id' => '<string>',
'variant_id' => '<string>',
'target' => [
'coworld_id' => '<string>',
'variant_id' => '<string>',
'league_id' => '<string>',
'league_name' => '<string>',
'division_id' => '<string>',
'division_name' => '<string>'
],
'game_config_overrides' => [
],
'game_config_overlay_secret' => '<string>',
'included_players' => [
'<string>'
],
'excluded_players' => [
'<string>'
],
'num_episodes' => 1,
'notes' => '<string>',
'execution_backend' => 'k8s',
'reporter_version_ids' => [
'<string>'
]
]),
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://softmax.com/api/observatory/v2/experience-requests"
payload := strings.NewReader("{\n \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\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://softmax.com/api/observatory/v2/experience-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://softmax.com/api/observatory/v2/experience-requests")
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 \"roster\": [\n {\n \"player\": {\n \"policy_ref\": \"<string>\",\n \"top_n\": 50,\n \"random\": true\n },\n \"slot\": -1\n }\n ],\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"target\": {\n \"coworld_id\": \"<string>\",\n \"variant_id\": \"<string>\",\n \"league_id\": \"<string>\",\n \"league_name\": \"<string>\",\n \"division_id\": \"<string>\",\n \"division_name\": \"<string>\"\n },\n \"game_config_overrides\": {},\n \"game_config_overlay_secret\": \"<string>\",\n \"included_players\": [\n \"<string>\"\n ],\n \"excluded_players\": [\n \"<string>\"\n ],\n \"num_episodes\": 1,\n \"notes\": \"<string>\",\n \"execution_backend\": \"k8s\",\n \"reporter_version_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"requester_user_id": "<string>",
"coworld_id": "<string>",
"coworld_name": "<string>",
"coworld_version": "<string>",
"variant_id": "<string>",
"episode_count": 123,
"pending_count": 123,
"submitted_count": 123,
"running_count": 123,
"completed_count": 123,
"failed_count": 123,
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"episodes": [
{
"id": "<string>",
"requester_user_id": "<string>",
"policy_version_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"participants": [
{
"position": 123,
"policy_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"policy_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"policy_name": "<string>",
"version": 123,
"player_id": "<string>",
"player_name": "<string>",
"is_filler": false
}
],
"scores": [
{
"policy_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"score": 123
}
],
"created_at": "2023-11-07T05:31:56Z",
"round_id": "<string>",
"coworld_id": "<string>",
"coworld_name": "<string>",
"coworld_version": "<string>",
"variant_name": "<string>",
"game_config": {},
"max_steps": 123,
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"episode_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"replay_url": "<string>",
"live_url": "<string>",
"error_type": "<string>",
"error": "<string>",
"failed_policy_index": 123,
"failed_agent_index": 123,
"dispatched_at": "2023-11-07T05:31:56Z",
"running_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"cost_usd": 123
}
],
"requester": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer token issued by Softmax
Body
One participant per seat.
Show child attributes
Show child attributes
Direct Coworld target.
^cow_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Direct Coworld variant.
Direct Coworld target or league/division selector.
Show child attributes
Show child attributes
Shallow game config override validated against the resolved Coworld schema.
Coworld-owner-published private coworld.game_config_overlay.v1 object to merge before public overrides.
^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$If non-empty, restrict the top_n/random champion pool to only these players, as player IDs ('ply_...') or player names. Players named by policy_ref roster seats are always included. Entries that match no player are ignored.
Players to drop from the top_n/random champion pool entirely, as player IDs ('ply_...') or player names. Excluded players never appear in the pool, even after it regenerates mid-episode. Entries that match no player are ignored. Applied after included_players.
1 <= x <= 1001000k8s, antfarm Opt-in reporter attachment (spec 0061): reporter versions ('rv_...') to run over this request's episodes once the request completes. Runs are billed to the requester.
10Response
Successful Response
pending, submitted, running, completed, failed, cancelled Show child attributes
Show child attributes

