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,
"tools": [
{
"type": "template",
"id": "550e8400-e29b-41d4-a716-446655440000",
"prompt": "<string>",
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": "<string>"
}
}
}
],
"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"
}{
"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; webhook auth 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,
"tools": [
{
"type": "template",
"id": "550e8400-e29b-41d4-a716-446655440000",
"prompt": "<string>",
"execution_policy": {
"pre_action_message": {
"enabled": false,
"text": "<string>"
}
}
}
],
"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"
}{
"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; webhook auth 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
- Template tool
- Utility tool
- Webhook
- Human transfer
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"
Was this page helpful?