curl --request POST \
--url https://apistable.com/v1/quotes \
--header 'Content-Type: application/json' \
--data '
{
"model": "prism-image-2",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"seed": 1,
"generate_audio": true,
"instrumental": true,
"lyrics": "<string>"
},
"output_count": 1,
"fallback": false,
"max_credits": 1
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'prism-image-2',
input: {
prompt: '<string>',
duration_seconds: 123,
resolution: '<string>',
seed: 1,
generate_audio: true,
instrumental: true,
lyrics: '<string>'
},
output_count: 1,
fallback: false,
max_credits: 1
})
};
fetch('https://apistable.com/v1/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://apistable.com/v1/quotes"
payload = {
"model": "prism-image-2",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"seed": 1,
"generate_audio": True,
"instrumental": True,
"lyrics": "<string>"
},
"output_count": 1,
"fallback": False,
"max_credits": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"is_preview": true,
"model": "<string>",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"aspect_ratio": "16:9",
"seed": 1,
"generate_audio": true,
"instrumental": true,
"lyrics": "<string>"
},
"output_count": 2,
"estimated_credits": 1,
"max_reserved_credits": 1,
"channel_quotes": [
{
"channel_type": "third_party",
"credits": 1
}
],
"price_version": "<string>",
"live_available": false
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Get a quote
See eligible channel prices and the maximum credit reservation.
curl --request POST \
--url https://apistable.com/v1/quotes \
--header 'Content-Type: application/json' \
--data '
{
"model": "prism-image-2",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"seed": 1,
"generate_audio": true,
"instrumental": true,
"lyrics": "<string>"
},
"output_count": 1,
"fallback": false,
"max_credits": 1
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'prism-image-2',
input: {
prompt: '<string>',
duration_seconds: 123,
resolution: '<string>',
seed: 1,
generate_audio: true,
instrumental: true,
lyrics: '<string>'
},
output_count: 1,
fallback: false,
max_credits: 1
})
};
fetch('https://apistable.com/v1/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://apistable.com/v1/quotes"
payload = {
"model": "prism-image-2",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"seed": 1,
"generate_audio": True,
"instrumental": True,
"lyrics": "<string>"
},
"output_count": 1,
"fallback": False,
"max_credits": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"is_preview": true,
"model": "<string>",
"input": {
"prompt": "<string>",
"duration_seconds": 123,
"resolution": "<string>",
"aspect_ratio": "16:9",
"seed": 1,
"generate_audio": true,
"instrumental": true,
"lyrics": "<string>"
},
"output_count": 2,
"estimated_credits": 1,
"max_reserved_credits": 1,
"channel_quotes": [
{
"channel_type": "third_party",
"credits": 1
}
],
"price_version": "<string>",
"live_available": false
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}API preview: generation providers are not connected. An authenticated request can return 503 without creating a task or charging credits.
Quote the complete input
The server normalizes defaults, filters incompatible channels, and applies each remaining channel’s pricing formula. Duration, resolution, audio, quality, and output_count may all change the total. The maximum reservation covers one successful route per result item, not the sum of every possible failed attempt. A quote is an estimate of accepted limits, not a promise that a preview model will run.Understand the upper bound
{
"is_preview": true,
"model": "prism-image-2",
"input": {
"prompt": "A sculptural chair in warm afternoon light",
"resolution": "1024"
},
"output_count": 4,
"estimated_credits": 80,
"max_reserved_credits": 240,
"channel_quotes": [
{
"channel_type": "third_party",
"credits": 80
},
{
"channel_type": "official",
"credits": 240
}
],
"price_version": "preview-2026-10-29",
"live_available": false
}
channel_quotes[].credits is the total for the whole batch on that route, not a per-item price. This endpoint returns an unreserved preview estimate, not a quote_id or a locked purchase offer.
Set max_credits
max_credits is your cap for the entire request. If the server’s maximum reservation is higher, it rejects the whole submission before any generation. It does not silently reduce output_count or divide a smaller budget between items.Body
1"prism-image-2"
Current preview input. Supported fields vary by modality and exact catalog model. No live provider mapping is implied.
Show child attributes
Show child attributes
Target result count. Images/videos accept 1–4; music and LLM must remain 1. Not a concurrency guarantee. / 目标结果数,非同时并发保证。
1 <= x <= 4Authorizes a higher-priced compatible official fallback after an eligible confirmed failure. Live execution is disabled in this build.
Whole-request reservation cap. Reject the entire request when max_reserved_credits exceeds it.
x >= 0Response
Preview quote
Current preview input. Supported fields vary by modality and exact catalog model. No live provider mapping is implied.
Show child attributes
Show child attributes
1 <= x <= 4Credits, not USD. / 积分,非美元。
x >= 0Credits, not USD. / 积分,非美元。
x >= 0Show child attributes
Show child attributes