curl --request GET \
--url https://api.talqing.com/v1/catalog/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talqing.com/v1/catalog/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{
"kind": "llm",
"models": [
{
"base_url": "<string>",
"builtin_tools": [
{
"description": "<string>",
"label": "<string>",
"price_note": "<string>",
"type": "<string>",
"fixed": {},
"options": [
{
"key": "<string>",
"label": "<string>",
"path": [
"<string>"
],
"type": "boolean",
"choices": [
"<string>"
],
"conflicts_with": [
"<string>"
],
"description": "<string>",
"max_items": 123,
"required": false
}
]
}
],
"channel": [
"<string>"
],
"context_length": 123,
"label": "<string>",
"logo_url": "<string>",
"model": "<string>",
"note": "<string>",
"pricing": {},
"priority": {
"pricing": {
"cache_write_per_1m": 123,
"cached_input_per_1m": 123,
"input_per_1m": 123,
"output_per_1m": 123
},
"confirms": true,
"value": "priority"
},
"provider": "<string>",
"reasoning_efforts": [
"none"
],
"vision": false
}
],
"next_cursor": "<string>"
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}Search Models
Search the models a provider offers too many of to list.
GET /catalog carries every model except these. A provider marked
browse: "search" there — OpenRouter — reaches hundreds of models through
one key, so they are searched a page at a time instead; its searched_kinds
says which kinds. With no q the order is real-world popularity. Everything
returned is a valid llm.model or stt.model, per kind.
curl --request GET \
--url https://api.talqing.com/v1/catalog/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/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.talqing.com/v1/catalog/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talqing.com/v1/catalog/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{
"kind": "llm",
"models": [
{
"base_url": "<string>",
"builtin_tools": [
{
"description": "<string>",
"label": "<string>",
"price_note": "<string>",
"type": "<string>",
"fixed": {},
"options": [
{
"key": "<string>",
"label": "<string>",
"path": [
"<string>"
],
"type": "boolean",
"choices": [
"<string>"
],
"conflicts_with": [
"<string>"
],
"description": "<string>",
"max_items": 123,
"required": false
}
]
}
],
"channel": [
"<string>"
],
"context_length": 123,
"label": "<string>",
"logo_url": "<string>",
"model": "<string>",
"note": "<string>",
"pricing": {},
"priority": {
"pricing": {
"cache_write_per_1m": 123,
"cached_input_per_1m": 123,
"input_per_1m": 123,
"output_per_1m": 123
},
"confirms": true,
"value": "priority"
},
"provider": "<string>",
"reasoning_efforts": [
"none"
],
"vision": false
}
],
"next_cursor": "<string>"
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
1 <= x <= 50llm, stt Response
Successful Response
- LLMModelSearchResponse
- STTModelSearchResponse
One page of a searched provider's language models — never the whole registry.
Ordered by real-world popularity when q is empty (OpenRouter ranks its own
list by tokens processed, so the first screen is the models people actually
run) and by match quality when it is not, popularity breaking the ties.