curl --request POST \
--url https://api.agents.slng.ai/v1/agents/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.agents.slng.ai/v1/agents/import"
payload = {}
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({})
};
fetch('https://api.agents.slng.ai/v1/agents/import', 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.agents.slng.ai/v1/agents/import",
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([
]),
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.agents.slng.ai/v1/agents/import"
payload := strings.NewReader("{}")
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.agents.slng.ai/v1/agents/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agents.slng.ai/v1/agents/import")
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 = "{}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"organisation_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "<string>",
"system_prompt": "<string>",
"greeting": "<string>",
"language": "<string>",
"region": "<string>",
"models": {
"stt": "slng/deepgram/nova:3-en",
"llm": "groq/openai/gpt-oss-120b",
"tts": "slng/deepgram/aura:2-en",
"tts_voice": "aura-2-thalia-en",
"stt_kwargs": {},
"llm_kwargs": {},
"tts_kwargs": {},
"fallbacks": {
"stt": [],
"llm": [],
"tts": []
},
"stt_final_timeout_s": 1,
"llm_first_token_timeout_s": 1,
"tts_first_audio_timeout_s": 1,
"failure_audio_enabled": true
},
"idle_nudges": {
"first_nudge_text": "<string>",
"second_nudge_text": "<string>",
"final_hangup_text": "<string>",
"enabled": true,
"first_nudge_delay_seconds": 15,
"second_nudge_delay_seconds": 30,
"hangup_delay_seconds": 15
},
"enable_interruptions": true,
"tool_mode": "legacy",
"tools": [
{}
],
"tool_refs": [
{
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
"tool_id": "550e8400-e29b-41d4-a716-446655440000",
"version": 2,
"description": "<string>",
"invocation": "model",
"system": {
"triggers": [
{
"event": "call_start",
"source_attachment_id": "550e8400-e29b-41d4-a716-446655440000"
}
],
"arguments": []
},
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": {
"segments": [
{
"type": "literal",
"value": "<string>"
}
]
},
"wait": false
}
},
"argument_overrides": {},
"config_overrides": {
"type": "api_request",
"url": "<string>"
}
}
],
"mcp_refs": [
{
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
"server_id": "550e8400-e29b-41d4-a716-446655440000",
"tool_name": "<string>",
"observed_schema_hash": "<string>",
"description": "<string>",
"invocation": "model",
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": {
"segments": [
{
"type": "literal",
"value": "<string>"
}
]
},
"wait": false
}
},
"argument_overrides": {}
}
],
"livekit_deployment": "<string>",
"template_variables": {},
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z",
"inbound_greeting": "<string>",
"outbound_greeting": "<string>",
"models_validation_error": "<string>",
"llm_router_enabled": true,
"sip_inbound_trunk_id": "550e8400-e29b-41d4-a716-446655440000",
"sip_outbound_trunk_id": "550e8400-e29b-41d4-a716-446655440000",
"runtime_variables": [
{
"name": "<string>",
"description": "<string>"
}
],
"deleted_at": "2026-01-15T10:30:00Z"
}{
"state": "ready",
"candidate_hash": "<string>",
"resource_hash": "<string>",
"config": {},
"dependency_hash": "<string>",
"preparation_operation_id": "<string>",
"retry_after_seconds": 30
}{
"detail": "The request could not be processed."
}{
"detail": "Authentication is required for this endpoint."
}{
"detail": "You do not have access to this resource."
}{
"detail": "The requested resource was not found."
}{
"detail": "Agent with name 'Appointment Reminder' already exists"
}{
"detail": [
{
"loc": [
"body",
"language"
],
"msg": "Input should be a valid string",
"type": "string_type"
}
]
}{
"detail": "An unexpected internal error occurred."
}Import agent
Create a new voice agent from an agent configuration document.
The request body is the canonical agent config document, exactly as returned by
the config download endpoints (GET /v1/agents/{agent_id}/config and
GET /v1/agents/{agent_id}/versions/{version_number}/config). Config documents
never contain inline secrets; API Request authentication is carried as
organisation Vault secret references, which must exist in the importing
organisation’s Vault.
The document does not include telephony connections. Use the
sip_outbound_trunk_id query parameter to attach an outbound connection to the
imported agent; an inbound connection can be assigned afterwards via update.
curl --request POST \
--url https://api.agents.slng.ai/v1/agents/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.agents.slng.ai/v1/agents/import"
payload = {}
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({})
};
fetch('https://api.agents.slng.ai/v1/agents/import', 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.agents.slng.ai/v1/agents/import",
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([
]),
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.agents.slng.ai/v1/agents/import"
payload := strings.NewReader("{}")
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.agents.slng.ai/v1/agents/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agents.slng.ai/v1/agents/import")
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 = "{}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"organisation_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "<string>",
"system_prompt": "<string>",
"greeting": "<string>",
"language": "<string>",
"region": "<string>",
"models": {
"stt": "slng/deepgram/nova:3-en",
"llm": "groq/openai/gpt-oss-120b",
"tts": "slng/deepgram/aura:2-en",
"tts_voice": "aura-2-thalia-en",
"stt_kwargs": {},
"llm_kwargs": {},
"tts_kwargs": {},
"fallbacks": {
"stt": [],
"llm": [],
"tts": []
},
"stt_final_timeout_s": 1,
"llm_first_token_timeout_s": 1,
"tts_first_audio_timeout_s": 1,
"failure_audio_enabled": true
},
"idle_nudges": {
"first_nudge_text": "<string>",
"second_nudge_text": "<string>",
"final_hangup_text": "<string>",
"enabled": true,
"first_nudge_delay_seconds": 15,
"second_nudge_delay_seconds": 30,
"hangup_delay_seconds": 15
},
"enable_interruptions": true,
"tool_mode": "legacy",
"tools": [
{}
],
"tool_refs": [
{
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
"tool_id": "550e8400-e29b-41d4-a716-446655440000",
"version": 2,
"description": "<string>",
"invocation": "model",
"system": {
"triggers": [
{
"event": "call_start",
"source_attachment_id": "550e8400-e29b-41d4-a716-446655440000"
}
],
"arguments": []
},
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": {
"segments": [
{
"type": "literal",
"value": "<string>"
}
]
},
"wait": false
}
},
"argument_overrides": {},
"config_overrides": {
"type": "api_request",
"url": "<string>"
}
}
],
"mcp_refs": [
{
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
"server_id": "550e8400-e29b-41d4-a716-446655440000",
"tool_name": "<string>",
"observed_schema_hash": "<string>",
"description": "<string>",
"invocation": "model",
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": {
"segments": [
{
"type": "literal",
"value": "<string>"
}
]
},
"wait": false
}
},
"argument_overrides": {}
}
],
"livekit_deployment": "<string>",
"template_variables": {},
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z",
"inbound_greeting": "<string>",
"outbound_greeting": "<string>",
"models_validation_error": "<string>",
"llm_router_enabled": true,
"sip_inbound_trunk_id": "550e8400-e29b-41d4-a716-446655440000",
"sip_outbound_trunk_id": "550e8400-e29b-41d4-a716-446655440000",
"runtime_variables": [
{
"name": "<string>",
"description": "<string>"
}
],
"deleted_at": "2026-01-15T10:30:00Z"
}{
"state": "ready",
"candidate_hash": "<string>",
"resource_hash": "<string>",
"config": {},
"dependency_hash": "<string>",
"preparation_operation_id": "<string>",
"retry_after_seconds": 30
}{
"detail": "The request could not be processed."
}{
"detail": "Authentication is required for this endpoint."
}{
"detail": "You do not have access to this resource."
}{
"detail": "The requested resource was not found."
}{
"detail": "Agent with name 'Appointment Reminder' already exists"
}{
"detail": [
{
"loc": [
"body",
"language"
],
"msg": "Input should be a valid string",
"type": "string_type"
}
]
}{
"detail": "An unexpected internal error occurred."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Optional outbound SIP trunk to attach to the imported agent.
"550e8400-e29b-41d4-a716-446655440000"
Body
Canonical agent configuration document, exactly as produced by the agent config download endpoints. The document is a portable, secret-free representation of the agent's configuration; API Request authentication is carried as organisation Vault secret references. Treat it as an opaque file: download, store, and re-import it without modification.
Response
Agent created from the imported config.
"550e8400-e29b-41d4-a716-446655440000"
"550e8400-e29b-41d4-a716-446655440000"
Model configuration for the agent runtime (STT + LLM + TTS).
Show child attributes
Show child attributes
Optional silence recovery behavior. The runtime can send two follow-up nudges, then speak a final message and hang up.
Show child attributes
Show child attributes
Tool system fixed when the agent was created. New agents use shared.
legacy, shared Legacy compatibility output. New shared agents return an empty array. Use tool_refs and mcp_refs for all new configuration.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Name of the runtime deployment serving this agent.
Show child attributes
Show child attributes
"2026-01-15T10:30:00Z"
"2026-01-15T10:30:00Z"
Set when the stored models configuration no longer validates against the
current rules. In that case models is returned as stored, without
validation.
Whether the agent's LLM traffic is routed through SLNG's managed LLM routing layer.
"550e8400-e29b-41d4-a716-446655440000"
"550e8400-e29b-41d4-a716-446655440000"
Show child attributes
Show child attributes
"2026-01-15T10:30:00Z"