Platform Endpoints
Initialize Environment
Create an isolated test environment
POST
/
api
/
platform
/
initEnv
Initialize Environment
curl --request POST \
--url https://api.example.com/api/platform/initEnv \
--header 'Content-Type: application/json' \
--data '
{
"templateService": "<string>",
"templateName": "<string>",
"testId": "<string>",
"impersonateUserId": "<string>",
"impersonateEmail": "<string>",
"ttlSeconds": 123
}
'import requests
url = "https://api.example.com/api/platform/initEnv"
payload = {
"templateService": "<string>",
"templateName": "<string>",
"testId": "<string>",
"impersonateUserId": "<string>",
"impersonateEmail": "<string>",
"ttlSeconds": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
templateService: '<string>',
templateName: '<string>',
testId: '<string>',
impersonateUserId: '<string>',
impersonateEmail: '<string>',
ttlSeconds: 123
})
};
fetch('https://api.example.com/api/platform/initEnv', 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.example.com/api/platform/initEnv",
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([
'templateService' => '<string>',
'templateName' => '<string>',
'testId' => '<string>',
'impersonateUserId' => '<string>',
'impersonateEmail' => '<string>',
'ttlSeconds' => 123
]),
CURLOPT_HTTPHEADER => [
"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.example.com/api/platform/initEnv"
payload := strings.NewReader("{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/platform/initEnv")
.header("Content-Type", "application/json")
.body("{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/platform/initEnv")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}"
response = http.request(request)
puts response.read_body{
"environmentId": "<string>",
"environmentUrl": "<string>",
"schemaName": "<string>",
"expiresAt": "<string>",
"templateSchema": "<string>",
"service": "<string>"
}Request
POST /api/platform/initEnv
Body Parameters
string
required
Service type:
"slack" or "linear"string
Template to clone from (e.g.,
"slack_default", "linear_expanded").
Required if testId is not provided.string
Test ID to get template configuration from. If provided,
templateService and templateName are inferred.string
User ID the agent will act as. Required if
testId is not provided.string
Email of the user to impersonate. Alternative to
impersonateUserId.number
default:"1800"
Time-to-live in seconds. Environment auto-deletes after this time.
Example Request
curl -X POST https://api.agentdiff.dev/api/platform/initEnv \
-H "X-API-Key: ad_live_sk_..." \
-H "Content-Type: application/json" \
-d '{
"templateService": "slack",
"templateName": "slack_default",
"impersonateUserId": "U01AGENBOT9",
"ttlSeconds": 3600
}'
Response
string
Unique environment identifier
string
Base URL for service API calls
string
PostgreSQL schema name for this environment
string
ISO 8601 timestamp when environment will auto-delete
string
Template that was cloned
string
Service type (
slack or linear)Example Response
{
"environmentId": "abc123def456",
"environmentUrl": "/api/env/abc123def456/services/slack",
"schemaName": "state_pool_abc123",
"expiresAt": "2025-11-26T16:00:00Z",
"templateSchema": "slack_default",
"service": "slack"
}
Errors
| Error | Status | Description |
|---|---|---|
template_not_found | 404 | Template doesn’t exist |
missing_impersonate | 400 | impersonateUserId or impersonateEmail required |
invalid_service | 400 | Unknown service type |
SDK Usage
env = client.init_env(
templateService="slack",
templateName="slack_default",
impersonateUserId="U01AGENBOT9",
ttlSeconds=3600
)
const env = await client.initEnv({
templateService: 'slack',
templateName: 'slack_default',
impersonateUserId: 'U01AGENBOT9',
ttlSeconds: 3600
});
⌘I
Initialize Environment
curl --request POST \
--url https://api.example.com/api/platform/initEnv \
--header 'Content-Type: application/json' \
--data '
{
"templateService": "<string>",
"templateName": "<string>",
"testId": "<string>",
"impersonateUserId": "<string>",
"impersonateEmail": "<string>",
"ttlSeconds": 123
}
'import requests
url = "https://api.example.com/api/platform/initEnv"
payload = {
"templateService": "<string>",
"templateName": "<string>",
"testId": "<string>",
"impersonateUserId": "<string>",
"impersonateEmail": "<string>",
"ttlSeconds": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
templateService: '<string>',
templateName: '<string>',
testId: '<string>',
impersonateUserId: '<string>',
impersonateEmail: '<string>',
ttlSeconds: 123
})
};
fetch('https://api.example.com/api/platform/initEnv', 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.example.com/api/platform/initEnv",
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([
'templateService' => '<string>',
'templateName' => '<string>',
'testId' => '<string>',
'impersonateUserId' => '<string>',
'impersonateEmail' => '<string>',
'ttlSeconds' => 123
]),
CURLOPT_HTTPHEADER => [
"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.example.com/api/platform/initEnv"
payload := strings.NewReader("{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/platform/initEnv")
.header("Content-Type", "application/json")
.body("{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/platform/initEnv")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"templateService\": \"<string>\",\n \"templateName\": \"<string>\",\n \"testId\": \"<string>\",\n \"impersonateUserId\": \"<string>\",\n \"impersonateEmail\": \"<string>\",\n \"ttlSeconds\": 123\n}"
response = http.request(request)
puts response.read_body{
"environmentId": "<string>",
"environmentUrl": "<string>",
"schemaName": "<string>",
"expiresAt": "<string>",
"templateSchema": "<string>",
"service": "<string>"
}