curl --request POST \
--url https://api.enkryptai.com/rt/model/redteam/jailbreak \
--header 'Content-Type: application/json' \
--header 'X-Enkrypt-Model: <x-enkrypt-model>' \
--header 'X-Enkrypt-Model-Version: <x-enkrypt-model-version>' \
--header 'apikey: <api-key>' \
--data '
{
"run_name": "Jailbreak benchmark - Test Model v1"
}
'import requests
url = "https://api.enkryptai.com/rt/model/redteam/jailbreak"
payload = { "run_name": "Jailbreak benchmark - Test Model v1" }
headers = {
"X-Enkrypt-Model": "<x-enkrypt-model>",
"X-Enkrypt-Model-Version": "<x-enkrypt-model-version>",
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Enkrypt-Model': '<x-enkrypt-model>',
'X-Enkrypt-Model-Version': '<x-enkrypt-model-version>',
apikey: '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({run_name: 'Jailbreak benchmark - Test Model v1'})
};
fetch('https://api.enkryptai.com/rt/model/redteam/jailbreak', 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.enkryptai.com/rt/model/redteam/jailbreak",
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([
'run_name' => 'Jailbreak benchmark - Test Model v1'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Enkrypt-Model: <x-enkrypt-model>",
"X-Enkrypt-Model-Version: <x-enkrypt-model-version>",
"apikey: <api-key>"
],
]);
$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.enkryptai.com/rt/model/redteam/jailbreak"
payload := strings.NewReader("{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Enkrypt-Model", "<x-enkrypt-model>")
req.Header.Add("X-Enkrypt-Model-Version", "<x-enkrypt-model-version>")
req.Header.Add("apikey", "<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.post("https://api.enkryptai.com/rt/model/redteam/jailbreak")
.header("X-Enkrypt-Model", "<x-enkrypt-model>")
.header("X-Enkrypt-Model-Version", "<x-enkrypt-model-version>")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enkryptai.com/rt/model/redteam/jailbreak")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Enkrypt-Model"] = '<x-enkrypt-model>'
request["X-Enkrypt-Model-Version"] = '<x-enkrypt-model-version>'
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}"
response = http.request(request)
puts response.read_body{}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Run Jailbreak Benchmark with saved model
Identical to POST /rt/redteam/jailbreak, except the system under test is a saved model named in the X-Enkrypt-Model / X-Enkrypt-Model-Version headers instead of an inline target. The gateway resolves the model and fills in target before the request reaches the Red Team service. The same modality rules apply to the saved model: text in and text out, or text + image in and text out.
Saved models that reach their provider through a custom cURL command, custom headers/payload/response format, JWT auth, provider-specific auth_data or metadata, or an outbound proxy have no equivalent in the target shape and return 400. Use an inline target on POST /rt/redteam/jailbreak for those.
Relay routing is the one exception to that metadata rule: a model saved with model_config.connect_via_relay: true and a model_config.metadata.relay block is projected onto target.connect_via_relay / target.metadata.relay and runs through your bridge exactly as an inline relay target would. A saved model carrying metadata.relay alongside other provider metadata still returns 400, and so does one that sets connect_via_relay without a metadata.relay block, or a metadata.relay block without the flag.
curl --request POST \
--url https://api.enkryptai.com/rt/model/redteam/jailbreak \
--header 'Content-Type: application/json' \
--header 'X-Enkrypt-Model: <x-enkrypt-model>' \
--header 'X-Enkrypt-Model-Version: <x-enkrypt-model-version>' \
--header 'apikey: <api-key>' \
--data '
{
"run_name": "Jailbreak benchmark - Test Model v1"
}
'import requests
url = "https://api.enkryptai.com/rt/model/redteam/jailbreak"
payload = { "run_name": "Jailbreak benchmark - Test Model v1" }
headers = {
"X-Enkrypt-Model": "<x-enkrypt-model>",
"X-Enkrypt-Model-Version": "<x-enkrypt-model-version>",
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Enkrypt-Model': '<x-enkrypt-model>',
'X-Enkrypt-Model-Version': '<x-enkrypt-model-version>',
apikey: '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({run_name: 'Jailbreak benchmark - Test Model v1'})
};
fetch('https://api.enkryptai.com/rt/model/redteam/jailbreak', 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.enkryptai.com/rt/model/redteam/jailbreak",
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([
'run_name' => 'Jailbreak benchmark - Test Model v1'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Enkrypt-Model: <x-enkrypt-model>",
"X-Enkrypt-Model-Version: <x-enkrypt-model-version>",
"apikey: <api-key>"
],
]);
$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.enkryptai.com/rt/model/redteam/jailbreak"
payload := strings.NewReader("{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Enkrypt-Model", "<x-enkrypt-model>")
req.Header.Add("X-Enkrypt-Model-Version", "<x-enkrypt-model-version>")
req.Header.Add("apikey", "<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.post("https://api.enkryptai.com/rt/model/redteam/jailbreak")
.header("X-Enkrypt-Model", "<x-enkrypt-model>")
.header("X-Enkrypt-Model-Version", "<x-enkrypt-model-version>")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enkryptai.com/rt/model/redteam/jailbreak")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Enkrypt-Model"] = '<x-enkrypt-model>'
request["X-Enkrypt-Model-Version"] = '<x-enkrypt-model-version>'
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"run_name\": \"Jailbreak benchmark - Test Model v1\"\n}"
response = http.request(request)
puts response.read_body{}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Headers
Optional. The name of a saved Code of Conduct policy to label the run with. There is deliberately no body field for this - the request model rejects unknown keys. The benchmark's prompts and scoring are fixed, so the policy does not change what is tested.
"customer-support-coc"
The model saved name. E.g. Test Model
"Test Model"
The model version. Default is 'v1'
"v1"
Body
POST /v1/redteam/jailbreak payload.
Fixed recipe: the jailbreak corpus, the attacks and the evaluation are server-owned.
target is omitted: the saved model named in the X-Enkrypt-Model / X-Enkrypt-Model-Version headers supplies it.
Response
Successful Response
The accepted run. run_id is the value to carry into the run endpoints (GET /rt/runs/{run_id}, /records, /results, /stream).
Do not follow the *_url fields verbatim. They are relative and are not guaranteed to carry the /rt/ prefix this API is published under, so requesting one as given can return 400. Build the URL from run_id and the paths documented here instead - /rt/runs/{run_id}/records is the resource you want. The same applies to records_url on the results payload.
websocket_url is the Server-Sent Events progress stream (/rt/runs/{run_id}/stream) despite its name. The live log socket is logs_url - a relative path to join onto wss://api.enkryptai.com/wss/redteam/v1/logs/tasks/. See the Stream Run Logs (WebSocket) endpoint.

