Create a scene
POST
/v1/scenesHeader parameters
Idempotency-KeystringrequiredA unique string that makes retries safe. Any value 16-255 characters; reuse it only when retrying the exact same request.
min length 16 · max length 255 · matches ^[A-Za-z0-9._:-]+$
X-RoasOS-ProjectstringOptional label to group this request under one of your projects. Appears in your usage records.
min length 1 · max length 64 · matches ^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$
X-RoasOS-Cost-CenterstringOptional label to attribute this request to a cost center. Appears in your usage records.
min length 1 · max length 64 · matches ^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$
Request body
requiredapplication/jsonnamestringrequiredmin length 1 · max length 200
promptstringrequiredmin length 1 · max length 10000
modelstringdefault: "nano-banana-pro"
Allowed:
nano-banana-proresolutionstringdefault: "1K"
Allowed:
1K2K4Kwebhook_urlstring<uri>quote_onlybooleandefault: false
quote_idstring<uuid>optionsobjectdefault: {}
Show propertiesHide properties
aspect_ratiostringAllowed:
1:116:99:164:33:43:22:3reference_imagesstring<uri>[]max items 4
avatar_idstring<uuid>product_imagestring<uri>modestringAllowed:
ugcproductcustomResponses
200Side-effect-free scene quote. If authorization.status is approval_required, open authorize_url, approve as a workspace owner/admin, then resubmit quote_id with the same Idempotency-Key. No credits are reserved and no provider work starts.
dataobjectrequiredShow propertiesHide properties
kindstringrequiredAllowed:
quotequote_idstring<uuid>requiredreserved_creditsintegerrequiredmin 0
expires_atstring<date-time>requiredpricing_versionstringrequiredmin length 1 · max length 80
authorizationobjectrequiredShow propertiesHide properties
Any of:
object
statusstringrequiredAllowed:
auto_approvedobject
statusstringrequiredAllowed:
approval_requiredauthorize_urlstring<uri>requiredmax length 2048
confirmationobjectrequiredShow propertiesHide properties
generation_typestringrequiredAllowed:
imagevideoaudiolipsyncscenemodelstringrequiredmin length 1 · max length 200
modestringmin length 1 · max length 160
resolutionstringmin length 1 · max length 32
output_countintegermin 0 · max 16
duration_secondsnumbermin 0 · max 3600
generate_audiobooleanreference_countintegermin 0 · max 16
text_lengthintegermin 0 · max 1000000
201Scene creation started
dataobjectrequiredShow propertiesHide properties
idstring<uuid>requiredtypestringrequiredAllowed:
imagevideoaudiolipsyncscenestatusstringrequiredAllowed:
processingmodelstringrequiredmin length 1 · max length 200
credits_usedintegerrequiredmin 0
credits_remainingintegerrequiredmin 0
estimated_secondsintegerrequiredmin 0 · max 86400
created_atstring<date-time>required402Insufficient credits
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
403The API key is not authorized for this model or request credit ceiling
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
409The idempotency key is already processing, has an unknown outcome, or was reused with different request data
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
410The supplied authoritative quote expired and must be replaced using a new idempotency key
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
428The supplied quote requires owner/admin spend authorization
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
429Rate limit, concurrency limit, or daily/monthly credit budget exceeded
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
503The paid request could not be claimed safely or an external billing outcome is unknown
errorobjectrequiredShow propertiesHide properties
codestringrequiredmin length 1 · max length 128
messagestringrequiredmin length 1 · max length 2000
retryablebooleanrequiredrequest_idstring<uuid>requiredbalanceintegermin 0
requiredintegermin 0
fieldstringmin length 1 · max length 512
statestringmin length 1 · max length 128
retryWithNewKeybooleanparameterstringmin length 1 · max length 128
allowedstring[]max items 100
Request
curl -X POST "https://api.roasos.com/v1/scenes" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{
"name": "Morning vanity",
"prompt": "Premium skincare bottle on a warm stone vanity",
"model": "nano-banana-pro",
"resolution": "1K",
"options": {
"aspect_ratio": "9:16",
"mode": "product"
}
}'const response = await fetch("https://api.roasos.com/v1/scenes", {
method: "POST",
headers: {
"Idempotency-Key": "string",
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "Morning vanity",
"prompt": "Premium skincare bottle on a warm stone vanity",
"model": "nano-banana-pro",
"resolution": "1K",
"options": {
"aspect_ratio": "9:16",
"mode": "product"
}
})
});import requests
response = requests.post(
"https://api.roasos.com/v1/scenes",
headers={
"Idempotency-Key": "string",
"Content-Type": "application/json"
},
json={
"name": "Morning vanity",
"prompt": "Premium skincare bottle on a warm stone vanity",
"model": "nano-banana-pro",
"resolution": "1K",
"options": {
"aspect_ratio": "9:16",
"mode": "product"
}
},
)Response
{
"data": {
"kind": "quote",
"quote_id": "<uuid>",
"reserved_credits": 0,
"expires_at": "2024-01-01T00:00:00Z",
"pricing_version": "string",
"authorization": {
"status": "auto_approved"
},
"confirmation": {
"generation_type": "image",
"model": "string",
"mode": "string",
"resolution": "string",
"output_count": 0,
"duration_seconds": 0,
"generate_audio": true,
"reference_count": 0,
"text_length": 0
}
}
}{
"data": {
"id": "<uuid>",
"type": "image",
"status": "processing",
"model": "string",
"credits_used": 0,
"credits_remaining": 0,
"estimated_seconds": 0,
"created_at": "2024-01-01T00:00:00Z"
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}{
"error": {
"code": "string",
"message": "string",
"retryable": true,
"request_id": "<uuid>",
"balance": 0,
"required": 0,
"field": "string",
"state": "string",
"retryWithNewKey": true,
"parameter": "string",
"allowed": [
"string"
]
}
}