Get Model Capabilities
curl --request GET \
--url https://api.pictory.ai/pictoryapis/v1/aistudio/models \
--header 'Authorization: <authorization>'import requests
url = "https://api.pictory.ai/pictoryapis/v1/aistudio/models"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.pictory.ai/pictoryapis/v1/aistudio/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.pictory.ai/pictoryapis/v1/aistudio/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: <authorization>"
],
]);
$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.pictory.ai/pictoryapis/v1/aistudio/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.pictory.ai/pictoryapis/v1/aistudio/models")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pictory.ai/pictoryapis/v1/aistudio/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"defaults": { "video": "pixverse5.6", "extend": "pixverse6", "image": "seedream3.0" },
"trainingPresets": ["sales-training", "product-training", "soft-skills-training"],
"videoModels": [
{
"model": "pixverse6",
"aspectRatios": ["16:9", "4:3", "1:1", "3:4", "9:16", "2:3", "3:2", "21:9"],
"durations": ["5s", "8s", "10s", "15s"],
"audio": "optional",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": true }
},
{
"model": "veo3.1_fast",
"aspectRatios": ["16:9", "9:16"],
"durations": ["4s", "6s", "8s"],
"audio": "optional",
"referenceImages": { "max": 3, "durations": ["8s"] },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": false,
"extend": { "supported": true, "durations": ["7s"] }
},
{
"model": "pixverse5.5",
"retired": true,
"servedAs": "pixverse5.6",
"aspectRatios": ["16:9", "9:16", "1:1", "3:4", "4:3"],
"durations": ["5s", "8s", "10s"],
"audio": "none",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": false }
}
],
"imageModels": [
{
"model": "nanobanana-lite2",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": true,
"referenceImages": { "max": 4 },
"aspectRatioOnEdit": true,
"editsServedBy": "nanobanana2"
},
{
"model": "flux-schnell",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": false,
"referenceImages": { "max": 0 },
"aspectRatioOnEdit": false
}
]
}
{
"message": "Unauthorized"
}
AI Studio
Get Model Capabilities
List the AI Studio models and exactly what each one accepts
GET
/
pictoryapis
/
v1
/
aistudio
/
models
Get Model Capabilities
curl --request GET \
--url https://api.pictory.ai/pictoryapis/v1/aistudio/models \
--header 'Authorization: <authorization>'import requests
url = "https://api.pictory.ai/pictoryapis/v1/aistudio/models"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.pictory.ai/pictoryapis/v1/aistudio/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.pictory.ai/pictoryapis/v1/aistudio/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: <authorization>"
],
]);
$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.pictory.ai/pictoryapis/v1/aistudio/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.pictory.ai/pictoryapis/v1/aistudio/models")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pictory.ai/pictoryapis/v1/aistudio/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"defaults": { "video": "pixverse5.6", "extend": "pixverse6", "image": "seedream3.0" },
"trainingPresets": ["sales-training", "product-training", "soft-skills-training"],
"videoModels": [
{
"model": "pixverse6",
"aspectRatios": ["16:9", "4:3", "1:1", "3:4", "9:16", "2:3", "3:2", "21:9"],
"durations": ["5s", "8s", "10s", "15s"],
"audio": "optional",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": true }
},
{
"model": "veo3.1_fast",
"aspectRatios": ["16:9", "9:16"],
"durations": ["4s", "6s", "8s"],
"audio": "optional",
"referenceImages": { "max": 3, "durations": ["8s"] },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": false,
"extend": { "supported": true, "durations": ["7s"] }
},
{
"model": "pixverse5.5",
"retired": true,
"servedAs": "pixverse5.6",
"aspectRatios": ["16:9", "9:16", "1:1", "3:4", "4:3"],
"durations": ["5s", "8s", "10s"],
"audio": "none",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": false }
}
],
"imageModels": [
{
"model": "nanobanana-lite2",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": true,
"referenceImages": { "max": 4 },
"aspectRatioOnEdit": true,
"editsServedBy": "nanobanana2"
},
{
"model": "flux-schnell",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": false,
"referenceImages": { "max": 0 },
"aspectRatioOnEdit": false
}
]
}
{
"message": "Unauthorized"
}
Overview
This endpoint returns every video and image model available on the AI Studio endpoints together with the aspect ratios, durations, reference limits, audio support, and features each one accepts. It is generated from the same registry that validates generation requests, so it always matches what the API enforces. Use it to build model pickers or to validate requests before sending them, instead of hard-coding the tables from the documentation.A valid API key is required to use this endpoint. Obtain your API key from the API Access page in your Pictory dashboard.
API Endpoint
GET https://api.pictory.ai/pictoryapis/v1/aistudio/models
Request Headers
string
required
API key for authentication (starts with
pictai_)Authorization: YOUR_API_KEY
Response
Success Response (200)
object
The model used when a request omits
model: video for plain video generation, extend for a request with extendVideoUrl, and image for image generation.array
The values accepted by the
trainingPreset request field.array
One entry per video model.
Show Video Model Properties
Show Video Model Properties
string
The value to send as
modelboolean
Present and
true for ids that are no longer offered but still accepted for compatibilitystring
For retired ids, the model that serves and bills the request
array
Accepted
aspectRatio valuesarray
Accepted
duration valuesstring
optional (send audio: true to enable), always (audio cannot be turned off), or noneobject
max: the number of referenceImageUrls accepted. durations: when not null, the only duration values accepted while reference images are attached.boolean
Whether
firstFrameImageUrl is acceptedstring
The highest resolution the model delivers (
"1080p" or "720p"). Every request is served at this tier, except the per-duration limits listed under Output Resolution.boolean
Whether
endFrameImageUrl (a first and end frame transition) is acceptedobject
supported: whether extendVideoUrl is accepted. durations: when present, the fixed continuation length the model produces.array
One entry per image model.
Show Image Model Properties
Show Image Model Properties
string
The value to send as
modelarray
Accepted
aspectRatio valuesboolean
Whether reference images are accepted
object
max: the number of referenceImageUrls accepted (0 when editing is not supported)boolean
Whether
aspectRatio is honored when reference images are provided; when false, the output follows the reference imagestring
Present when editing requests are served by a different model at this model’s rate
Credit rates are not part of this response. Refer to the pricing tables on the Generate Video and Generate Image pages.
Response Examples
{
"defaults": { "video": "pixverse5.6", "extend": "pixverse6", "image": "seedream3.0" },
"trainingPresets": ["sales-training", "product-training", "soft-skills-training"],
"videoModels": [
{
"model": "pixverse6",
"aspectRatios": ["16:9", "4:3", "1:1", "3:4", "9:16", "2:3", "3:2", "21:9"],
"durations": ["5s", "8s", "10s", "15s"],
"audio": "optional",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": true }
},
{
"model": "veo3.1_fast",
"aspectRatios": ["16:9", "9:16"],
"durations": ["4s", "6s", "8s"],
"audio": "optional",
"referenceImages": { "max": 3, "durations": ["8s"] },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": false,
"extend": { "supported": true, "durations": ["7s"] }
},
{
"model": "pixverse5.5",
"retired": true,
"servedAs": "pixverse5.6",
"aspectRatios": ["16:9", "9:16", "1:1", "3:4", "4:3"],
"durations": ["5s", "8s", "10s"],
"audio": "none",
"referenceImages": { "max": 4, "durations": null },
"maxResolution": "1080p",
"firstFrame": true,
"endFrame": true,
"extend": { "supported": false }
}
],
"imageModels": [
{
"model": "nanobanana-lite2",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": true,
"referenceImages": { "max": 4 },
"aspectRatioOnEdit": true,
"editsServedBy": "nanobanana2"
},
{
"model": "flux-schnell",
"aspectRatios": ["1:1", "16:9", "9:16"],
"editing": false,
"referenceImages": { "max": 0 },
"aspectRatioOnEdit": false
}
]
}
{
"message": "Unauthorized"
}
Status Codes
| Status Code | Description |
|---|---|
| 200 | Request processed successfully. |
| 401 | Unauthorized. The API key in the Authorization header is missing or invalid. |
| 500 | Internal server error. Retry the request after a brief delay. |
Code Examples
curl --request GET \
--url 'https://api.pictory.ai/pictoryapis/v1/aistudio/models' \
--header 'Authorization: YOUR_API_KEY' \
--header 'accept: application/json'
import requests
response = requests.get(
"https://api.pictory.ai/pictoryapis/v1/aistudio/models",
headers={"Authorization": "YOUR_API_KEY", "accept": "application/json"},
)
models = response.json()
for model in models["videoModels"]:
print(model["model"], model["durations"], "audio:", model["audio"])
const response = await fetch('https://api.pictory.ai/pictoryapis/v1/aistudio/models', {
headers: { 'Authorization': 'YOUR_API_KEY', 'accept': 'application/json' }
});
const models = await response.json();
for (const model of models.videoModels) {
console.log(model.model, model.durations, 'audio:', model.audio);
}
Was this page helpful?
