Opens the same WebSocket the voice runtime would open ({llm_websocket_url}/test_connection_<random>), sends a call_details frame and a ping_pong, and waits up to 5 s for your server's first frame. This is the Test connection button in the custom LLM builder. Beyond Retell
Private, loopback and reserved addresses are refused unless the server sets EGRESS_ALLOW_PRIVATE. Requires the admin or developer role.
Request#
Body#
| Field | Type | Required | Description |
|---|---|---|---|
llm_websocket_url |
string | Yes | A ws:// or wss:// URL, 5 to 2000 characters. |
Example request#
curl -X POST "https://api.tried.com.au/test-custom-llm-connection" \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"llm_websocket_url": "wss://llm.example.com/ws"
}'const res = await fetch("https://api.tried.com.au/test-custom-llm-connection", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"llm_websocket_url": "wss://llm.example.com/ws"
}),
});
const data = await res.json();import os, requests
res = requests.post(
"https://api.tried.com.au/test-custom-llm-connection",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
json={
"llm_websocket_url": "wss://llm.example.com/ws",
},
)
data = res.json()Response#
200 OK whether or not the test passed.
{ "ok": true, "latency_ms": 184, "first_frame": "{\"response_type\":\"config\",\"config\":{\"auto_reconnect\":true}}", "error": null }| Field | Type | Description |
|---|---|---|
ok |
boolean | A frame arrived within 5 s. |
latency_ms |
integer or null | Time from opening the socket to the first frame. |
first_frame |
string or null | The first frame, up to 2000 characters. |
error |
string or null | For example Use a ws:// or wss:// URL, No frame within 5 s, Could not connect to the WebSocket server, or a close code. |
Errors#
| Status | When |
|---|---|
400 |
Validation failed. |
401 |
Missing or invalid API key. |
403 |
The key's IP allowlist or scopes reject the request. This route needs the admin scope. The member role cannot run this test. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.