List batch model capabilities
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.phaseo.app/v1/batches/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.app/v1/batches/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.phaseo.app/v1/batches/models \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.app/v1/batches/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.phaseo.app/v1/batches/models")
.header("Authorization", "Bearer <token>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.app/v1/batches/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;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.app/v1/batches/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{
"object": "list",
"data": [
{
"model": "<string>",
"name": "<string>",
"status": "<string>",
"input_types": [
"<string>"
],
"output_types": [
"<string>"
],
"supported_params": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"supported_params_detail": {},
"supported_parameters_detail": {},
"providers": [
{
"id": "<string>",
"supported_params": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"supported_params_detail": {},
"supported_parameters_detail": {}
}
],
"pricing": {}
}
]
}{
"error": "error_type",
"ok": false,
"message": "Human-readable error message",
"description": "Additional error details.",
"generation_id": "G-abc123",
"status_code": 502,
"error_type": "system",
"error_origin": "upstream",
"reason": "all_candidates_failed",
"attempt_count": 2,
"failed_providers": [
"google-ai-studio",
"openai"
],
"failed_statuses": [
403,
429
],
"upstream_error": {
"code": "PERMISSION_DENIED",
"message": "The caller does not have permission.",
"description": "<string>",
"param": "<string>"
},
"failure_sample": [
{
"provider": "<string>",
"type": "<string>",
"status": 123,
"upstream_error_code": "<string>",
"upstream_error_message": "<string>",
"upstream_error_description": "<string>",
"upstream_error_param": "<string>",
"upstream_payload_preview": "<string>",
"retryable": true
}
],
"provider_failure_diagnostics": {
"category": "credentials_not_configured",
"hint": "<string>",
"provider": "<string>"
},
"routing_diagnostics": {
"filterStages": [
{
"stage": "<string>",
"beforeCount": 123,
"afterCount": 123,
"droppedProviders": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
}
]
},
"provider_candidate_diagnostics": {
"totalProviders": 123,
"supportsEndpointCount": 123,
"candidateCount": 123,
"droppedUnsupportedEndpoint": [
"<string>"
],
"droppedMissingAdapter": [
{
"providerId": "<string>",
"endpoint": "<string>"
}
]
},
"provider_enablement": {
"capability": "<string>",
"providersBefore": [
"<string>"
],
"providersAfter": [
"<string>"
],
"dropped": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
},
"missing_pricing_providers": [
"<string>"
],
"provider_payment_required_provider": "openai",
"provider_payment_required_support_notice": "Our upstream provider billing appears to be unavailable. If this persists, contact support.",
"details": [
{}
]
}Batches
List batch models
Internal testing. The Batch API is available only to enabled workspaces. Requests from other workspaces return 403, and the API may change before general availability.
List batch-capable models and their supported batch parameters.
GET
/
batches
/
models
List batch model capabilities
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.phaseo.app/v1/batches/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.app/v1/batches/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.phaseo.app/v1/batches/models \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.app/v1/batches/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.phaseo.app/v1/batches/models")
.header("Authorization", "Bearer <token>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.app/v1/batches/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;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.app/v1/batches/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{
"object": "list",
"data": [
{
"model": "<string>",
"name": "<string>",
"status": "<string>",
"input_types": [
"<string>"
],
"output_types": [
"<string>"
],
"supported_params": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"supported_params_detail": {},
"supported_parameters_detail": {},
"providers": [
{
"id": "<string>",
"supported_params": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"supported_params_detail": {},
"supported_parameters_detail": {}
}
],
"pricing": {}
}
]
}{
"error": "error_type",
"ok": false,
"message": "Human-readable error message",
"description": "Additional error details.",
"generation_id": "G-abc123",
"status_code": 502,
"error_type": "system",
"error_origin": "upstream",
"reason": "all_candidates_failed",
"attempt_count": 2,
"failed_providers": [
"google-ai-studio",
"openai"
],
"failed_statuses": [
403,
429
],
"upstream_error": {
"code": "PERMISSION_DENIED",
"message": "The caller does not have permission.",
"description": "<string>",
"param": "<string>"
},
"failure_sample": [
{
"provider": "<string>",
"type": "<string>",
"status": 123,
"upstream_error_code": "<string>",
"upstream_error_message": "<string>",
"upstream_error_description": "<string>",
"upstream_error_param": "<string>",
"upstream_payload_preview": "<string>",
"retryable": true
}
],
"provider_failure_diagnostics": {
"category": "credentials_not_configured",
"hint": "<string>",
"provider": "<string>"
},
"routing_diagnostics": {
"filterStages": [
{
"stage": "<string>",
"beforeCount": 123,
"afterCount": 123,
"droppedProviders": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
}
]
},
"provider_candidate_diagnostics": {
"totalProviders": 123,
"supportsEndpointCount": 123,
"candidateCount": 123,
"droppedUnsupportedEndpoint": [
"<string>"
],
"droppedMissingAdapter": [
{
"providerId": "<string>",
"endpoint": "<string>"
}
]
},
"provider_enablement": {
"capability": "<string>",
"providersBefore": [
"<string>"
],
"providersAfter": [
"<string>"
],
"dropped": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
},
"missing_pricing_providers": [
"<string>"
],
"provider_payment_required_provider": "openai",
"provider_payment_required_support_notice": "Our upstream provider billing appears to be unavailable. If this persists, contact support.",
"details": [
{}
]
}Returns active models that can be used with the Batch API.
Use this endpoint before creating a batch when you need to discover provider-specific batch constraints such as:
- allowed
endpointvalues for batch input rows - supported
completion_windowvalues - model/provider-specific parameters exposed through
supported_params_detailandsupported_parameters_detail
list envelope. Each item includes:
modelnamestatusinput_typesandoutput_typessupported_paramssupported_parameterssupported_params_detailsupported_parameters_detailproviders, each with provider-level supported parameter detailpricing
supported_parameters is a compatibility alias for supported_params. supported_params_detail and supported_parameters_detail are aliases for the same structured metadata. New clients should prefer supported_parameters and supported_parameters_detail; existing clients can continue reading supported_params and supported_params_detail.
You can filter models by supported batch parameter with the params query parameter. Repeat it or pass a comma-separated list. The filter accepts canonical names and aliases from supported_parameters_detail, so params=request_endpoint can match models whose canonical parameter is endpoint, and params=window can match completion_window.
curl "https://api.phaseo.app/v1/batches/models?params=request_endpoint,window" \
-H "Authorization: Bearer $PHASEO_API_KEY"
{
"object": "list",
"data": [
{
"model": "openai/gpt-5-mini",
"status": "active",
"supported_params": ["endpoint", "completion_window"],
"supported_parameters": ["endpoint", "completion_window"],
"supported_parameters_detail": {
"endpoint": {
"supported": true,
"values": ["/v1/responses", "/v1/chat/completions"],
"providers": ["openai"]
},
"completion_window": {
"supported": true,
"values": ["24h"],
"providers": ["openai"]
}
}
},
{
"model": "openai/text-embedding-3-small",
"status": "active",
"supported_params": ["endpoint", "completion_window"],
"supported_parameters": ["endpoint", "completion_window"],
"supported_parameters_detail": {
"endpoint": {
"supported": true,
"values": ["/v1/embeddings"],
"providers": ["openai"]
},
"completion_window": {
"supported": true,
"values": ["24h"],
"providers": ["openai"]
}
}
},
{
"model": "openai/gpt-image-1.5",
"status": "active",
"supported_params": ["endpoint", "completion_window"],
"supported_parameters": ["endpoint", "completion_window"],
"supported_parameters_detail": {
"endpoint": {
"supported": true,
"values": ["/v1/images/generations", "/v1/images/edits"],
"providers": ["openai"]
},
"completion_window": {
"supported": true,
"values": ["24h"],
"providers": ["openai"]
}
}
},
{
"model": "openai/omni-moderation",
"status": "active",
"supported_params": ["endpoint", "completion_window"],
"supported_parameters": ["endpoint", "completion_window"],
"supported_parameters_detail": {
"endpoint": {
"supported": true,
"values": ["/v1/moderations"],
"providers": ["openai"]
},
"completion_window": {
"supported": true,
"values": ["24h"],
"providers": ["openai"]
}
}
},
{
"model": "openai/sora-2",
"status": "active",
"supported_params": ["endpoint", "completion_window"],
"supported_parameters": ["endpoint", "completion_window"],
"supported_parameters_detail": {
"endpoint": {
"supported": true,
"values": ["/v1/videos"],
"providers": ["openai"]
},
"completion_window": {
"supported": true,
"values": ["24h"],
"providers": ["openai"]
}
}
}
]
}
Authorizations
Bearer token authentication
Query Parameters
Optional supported-parameter filter. Repeat the parameter or pass a comma-separated list. Canonical names and aliases are accepted, for example endpoint, request_endpoint, completion_window, or window.
Last modified on August 12, 2026
Was this page helpful?
⌘I