List Models
curl --request GET \
--url https://api.vocily.ai/v1/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vocily.ai/v1/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vocily.ai/v1/models', 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.vocily.ai/v1/models",
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.vocily.ai/v1/models"
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.vocily.ai/v1/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vocily.ai/v1/models")
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{
"models": [
{
"id": "gpt-5-nano",
"label": "GPT-5 Nano",
"provider": "openai",
"provider_label": "OpenAI",
"is_default": false,
"rate_per_min": 0.001,
"chat_price_per_reply": 0.001
},
{
"id": "sarvam-105b-conversations",
"label": "Sarvam-105B",
"provider": "sarvam",
"provider_label": "Sarvam AI",
"is_default": false,
"rate_per_min": 0.002,
"chat_price_per_reply": 0.002
}
]
}{
"detail": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"detail": {
"code": "validation_error",
"message": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"type": "<string>"
}
]
},
"code": "VALIDATION_ERROR"
}{
"code": "rate_limited"
}Catalogues
Models
The LLMs you can put in model.model.
List Models
curl --request GET \
--url https://api.vocily.ai/v1/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vocily.ai/v1/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vocily.ai/v1/models', 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.vocily.ai/v1/models",
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.vocily.ai/v1/models"
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.vocily.ai/v1/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vocily.ai/v1/models")
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{
"models": [
{
"id": "gpt-5-nano",
"label": "GPT-5 Nano",
"provider": "openai",
"provider_label": "OpenAI",
"is_default": false,
"rate_per_min": 0.001,
"chat_price_per_reply": 0.001
},
{
"id": "sarvam-105b-conversations",
"label": "Sarvam-105B",
"provider": "sarvam",
"provider_label": "Sarvam AI",
"is_default": false,
"rate_per_min": 0.002,
"chat_price_per_reply": 0.002
}
]
}{
"detail": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"detail": {
"code": "validation_error",
"message": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"type": "<string>"
}
]
},
"code": "VALIDATION_ERROR"
}{
"code": "rate_limited"
}Every model in this list can be used. There is nothing here to filter out.
Two prices.
rate_per_min is what a minute of voice costs. chat_price_per_reply is what one
chat or WhatsApp reply costs. They are separate prices, so quote the one for the channel you are
talking about. Either is null when the model cannot be used on that channel.is_default marks the model an agent gets when you leave model out.
GET /v1/models
{
"models": [
{
"id": "gpt-5.4-nano",
"label": "GPT-5.4 Nano",
"provider": "openai",
"provider_label": "OpenAI",
"is_default": true,
"rate_per_min": 0.004,
"chat_price_per_reply": 0.004
}
]
}
provider and id are the two machine values: they go into model.provider and model.model on
PATCH /v1/agents/{agent_id}.Was this page helpful?
⌘I