curl --request GET \
--url https://api.ryvo.so/v1/agents/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ryvo.so/v1/agents/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ryvo.so/v1/agents/{id}', 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.ryvo.so/v1/agents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ryvo.so/v1/agents/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ryvo.so/v1/agents/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ryvo.so/v1/agents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "4d0f3c2a-6b7e-4a1c-9f2d-1e2b3c4d5e6f",
"runtime": "engine",
"name": "Sales assistant",
"status": "active",
"language": "es-MX",
"created_at": "2026-09-01T15:04:05.000Z",
"updated_at": "2026-09-20T10:11:12.000Z",
"phone_numbers": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone_number": "+5215555550100",
"label": "Main line"
}
],
"config": {
"version": 4,
"system_prompt": "You are the receptionist of Acme Dental. Book appointments and answer questions about opening hours.",
"first_message": "Hi, this is Acme Dental. How can I help you?",
"language": "es-MX",
"llm": {
"provider": "openai",
"model": "gpt-4o-mini",
"temperature": 0.7,
"routing": "auto",
"fallback": [
{
"provider": "<string>",
"model": "<string>"
}
],
"endpoint": "<string>"
},
"stt": {
"provider": "deepgram",
"model": "nova-3",
"language": "<string>",
"settings": {},
"sample_rate": 123
},
"voice": {
"provider": "elevenlabs",
"model": "eleven_flash_v2_5",
"voice_id": "<string>",
"fallback_voices": {},
"language": "<string>",
"settings": {},
"sample_rate": 123
},
"knowledge_base": {
"doc_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"folder_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"mode": "off",
"top_k": 2
},
"dynamic_variables": {
"lead_name": {
"default": "there"
}
},
"conversation": {
"max_duration_s": 43200,
"recording": {
"enabled": true,
"consent_text": "<string>"
},
"turns": {},
"audio": {},
"pronunciation": [
{
"term": "<string>",
"say": "<string>",
"match_case": true
}
],
"calling_hours": {
"timezone": "<string>",
"days": [
123
],
"start": "<string>",
"end": "<string>"
}
},
"tool_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"provider_agent_id": "agent_8801kpabc123",
"current_version": 4,
"published_version": 3
}{
"error": "unauthorized",
"message": "Invalid or revoked API key.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "insufficient_scope",
"message": "This API key does not have the agents:write scope.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "not_found",
"message": "Resource not found.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry in 32s (see the Retry-After header).",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}Get an agent
The agent plus its config. For Engine agents that is the head
(latest saved) definition; for ElevenLabs agents it is the summary
stored in Ryvo. config is null for an Engine agent that has no
saved configuration yet.
curl --request GET \
--url https://api.ryvo.so/v1/agents/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ryvo.so/v1/agents/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ryvo.so/v1/agents/{id}', 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.ryvo.so/v1/agents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ryvo.so/v1/agents/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ryvo.so/v1/agents/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ryvo.so/v1/agents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "4d0f3c2a-6b7e-4a1c-9f2d-1e2b3c4d5e6f",
"runtime": "engine",
"name": "Sales assistant",
"status": "active",
"language": "es-MX",
"created_at": "2026-09-01T15:04:05.000Z",
"updated_at": "2026-09-20T10:11:12.000Z",
"phone_numbers": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone_number": "+5215555550100",
"label": "Main line"
}
],
"config": {
"version": 4,
"system_prompt": "You are the receptionist of Acme Dental. Book appointments and answer questions about opening hours.",
"first_message": "Hi, this is Acme Dental. How can I help you?",
"language": "es-MX",
"llm": {
"provider": "openai",
"model": "gpt-4o-mini",
"temperature": 0.7,
"routing": "auto",
"fallback": [
{
"provider": "<string>",
"model": "<string>"
}
],
"endpoint": "<string>"
},
"stt": {
"provider": "deepgram",
"model": "nova-3",
"language": "<string>",
"settings": {},
"sample_rate": 123
},
"voice": {
"provider": "elevenlabs",
"model": "eleven_flash_v2_5",
"voice_id": "<string>",
"fallback_voices": {},
"language": "<string>",
"settings": {},
"sample_rate": 123
},
"knowledge_base": {
"doc_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"folder_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"mode": "off",
"top_k": 2
},
"dynamic_variables": {
"lead_name": {
"default": "there"
}
},
"conversation": {
"max_duration_s": 43200,
"recording": {
"enabled": true,
"consent_text": "<string>"
},
"turns": {},
"audio": {},
"pronunciation": [
{
"term": "<string>",
"say": "<string>",
"match_case": true
}
],
"calling_hours": {
"timezone": "<string>",
"days": [
123
],
"start": "<string>",
"end": "<string>"
}
},
"tool_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"provider_agent_id": "agent_8801kpabc123",
"current_version": 4,
"published_version": 3
}{
"error": "unauthorized",
"message": "Invalid or revoked API key.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "insufficient_scope",
"message": "This API key does not have the agents:write scope.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "not_found",
"message": "Resource not found.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry in 32s (see the Retry-After header).",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}Autorizaciones
A Bearer token. Create keys in the portal under Settings > API keys
(https://app.ryvo.so/developers). The token has the form
ryvo_live_<64 hex characters> and is shown once.
Header: Authorization: Bearer ryvo_live_...
Parámetros de ruta
The Ryvo uuid of the agent.
"4d0f3c2a-6b7e-4a1c-9f2d-1e2b3c4d5e6f"
Respuesta
The agent.
"4d0f3c2a-6b7e-4a1c-9f2d-1e2b3c4d5e6f"
engine is the Ryvo runtime; elevenlabs is the legacy voice runtime.
engine, elevenlabs "engine"
"Sales assistant"
draft, active, paused, archived, error "active"
"es-MX"
"2026-09-01T15:04:05.000Z"
"2026-09-20T10:11:12.000Z"
The numbers assigned to the agent. Empty for Engine agents today.
Show child attributes
Show child attributes
The head definition (engine), the stored summary (elevenlabs), or null when nothing is saved yet.
- Option 1
- Option 2
Show child attributes
Show child attributes
Only on elevenlabs agents. The agent id at the provider (agent_...).
"agent_8801kpabc123"
Only on engine agents. The latest saved version.
4
Only on engine agents. The version serving traffic; 0 when never published.
3

