> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://onepin.ai/docs/reference/api-reference/providers/list-catalog-provider-models-api-v-1-providers-provider-models-get/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://onepin.ai/_mcp/server. # List Catalog Provider Models GET https://api.onepin.ai/api/v1/providers/{provider}/models List the models available to your account for a given provider. Returns each model's display name, content type, live `voice_count` (the number of platform voices catalogued under that model that can produce an officially supported locale on it — the same population the model's `voices` link returns), a `beta` badge flag, and a `controls` map describing the canonical provider-agnostic parameters supported by the model (e.g. speed, stability). Also includes `config_schema` for back-compat — new integrations should prefer `controls` as the authoritative parameter description. Each item includes a HATEOAS `voices` link to the paginated voice list for that model. Models staff have restricted to internal accounts or paying customers are omitted unless your account qualifies. Returns 404 if the provider is not recognized or has no models available to your account. Reference: https://onepin.ai/docs/reference/api-reference/providers/list-catalog-provider-models-api-v-1-providers-provider-models-get ## Authentication - `Authorization` header (bearer token, required) — Clerk JWT token - `Authorization` header (bearer token, required) — Onepin live API key (`op_live_...`). Test and public keys are reserved in Phase 1. ## Servers - `https://api.onepin.ai` (prod, default) - `https://dev-api.onepin.ai` (dev) ## Request ### Path parameters - `provider` (string, required) ### Headers - `X-Workspace-Id` (string, optional, nullable) ## Response ### 200 Successful Response - `data` (list of CatalogModelOut, required) - `meta` (Meta, required) - `pagination` (PaginationMeta, required) ## Errors ### 404 Not Found Error Provider not found - `error` (ApiErrorBody, required) - `meta` (Meta, required) ### 422 Unprocessable Entity Error Validation Error - `detail` (list of ValidationError, optional) ## Types ### CatalogModelOut Catalog model entry — lean, customer-safe. ``config_schema`` is the per-model NATIVE TTS config JSON-schema. POD-670: ``config_schema`` is now DEPRECATED as the FE slider source — read ``controls`` instead (the provider-agnostic canonical supported-set). ``config_schema`` is kept populated for back-compat until the FE migrates (POD-718). ``voice_count`` is the number of active platform voices catalogued under this ``(provider, model)``. - `model` (string, required) - `display_name` (string, required) - `voice_count` (integer, required) - `content_type` (string, optional, nullable) - `config_schema` (map from string to any, optional) - `controls` (map from string to any, optional) - `beta` (boolean, optional, default: false) - `links` (map from string to CatalogLink, optional) ### Meta - `request_id` (string, required) - `timestamp` (datetime, required) ### PaginationMeta - `limit` (integer, required) - `next` (string, optional, nullable) - `prev` (string, optional, nullable) ### ApiErrorBody - `code` (string, required) - `message` (string, required) - `details` (list of ApiErrorDetail, optional, default: []) ### ValidationError - `loc` (list of ValidationErrorLocItems, required) - `msg` (string, required) - `type` (string, required) - `input` (any, optional) - `ctx` (ValidationErrorCtx, optional) ### CatalogLink HATEOAS link to a nested catalog resource (HAL-FORMS-flavored). The server emits a concrete, ready-to-call ``href`` (path segments already filled in and URL-encoded) so the FE never constructs catalog URLs itself. - `href` (string, required) - `method` (string, optional, default: GET) ### ApiErrorDetail - `field` (string, required) - `message` (string, required) - `line_numbers` (list of integer, optional, nullable) - `min_chars` (integer, optional, nullable) ### ValidationErrorLocItems ### ValidationErrorCtx ## Examples **Response** ```json { "data": [ { "model": "string", "display_name": "string", "voice_count": 1, "content_type": "string", "config_schema": {}, "controls": {}, "beta": false, "links": {} } ], "meta": { "request_id": "string", "timestamp": "2024-01-15T09:30:00Z" }, "pagination": { "limit": 1, "next": "string", "prev": "string" } } ``` **SDK Code** ```python import requests url = "https://api.onepin.ai/api/v1/providers/provider/models" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.onepin.ai/api/v1/providers/provider/models'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.onepin.ai/api/v1/providers/provider/models" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.onepin.ai/api/v1/providers/provider/models") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.onepin.ai/api/v1/providers/provider/models") .header("Authorization", "Bearer ") .asString(); ``` ```php request('GET', 'https://api.onepin.ai/api/v1/providers/provider/models', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.onepin.ai/api/v1/providers/provider/models"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.onepin.ai/api/v1/providers/provider/models")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` > Onepin is a voice workflow platform that orchestrates, validates, and ships production-ready audio across 33 TTS models.