409 scene_reconstruction_unavailable before generation starts.
The fixed-price scene API is available for Antim and PI production Teams.
Use a production Team key with the production base URL below.
The Scenes API reference
lists request fields and response schemas.
Submit with references directly
Send the prompt and reference in onePOST /v1/scenes request. No separate
image-upload call is required. For a remote image, use
"reference_images": [{"url": "https://example.com/workbench.jpg"}].
For a local image, attach a base64 data URL in data_url:
url, data_url, or an existing image_id per reference.
Inline PNG, JPEG and WebP images support up to 20 MiB decoded per image and
40 million pixels. Optional view labels use the same values as asset references.
Existing uploaded IDs remain supported for compatibility. Omit references for
text-to-scene generation. Asset-only reference_image_urls and reference_intent
are not scene request fields.
This caps a one-asset scene at **5 Team asset price plus $8 scene
assembly. Choose a new idempotency key for each intentional
new generation.
Your integration generates and persists the Idempotency-Key; end users do not need
to enter or manage it. It is required, must be 1–128 characters, and accepts letters,
digits, ., _, :, and -. A UUID is suitable. After a timeout or lost response,
retry with the same key and identical request to recover the same job and scene.
The response sets Idempotency-Replayed: true for a replay. Changed requests with
that key return 409 idempotency_conflict. Do not create a new key just because a
job is still running.
The 202 Accepted response contains both identifiers:
max_asset_definitions defaults to 50 (range 1–100), and max_instances defaults to
100 (range 1–500). A plan above either limit stops before modeling rather than silently
omitting objects. Prompts are limited to 20,000 characters and references to three images.
Models and worker configuration come from the Team’s pinned release, not caller overrides.
Price and spending limits
For the fixed-price scene release: Scene price = delivered unique canonical assets × the Team’s asset price + $8 assembly. The assembly fee defaults to 800 cents; use the accepted job’sscene_pricing for the
exact Team configuration. At 18**: two canonical assets × 8. Repeated instances do not incur
additional asset charges. Major visual variants are separate designs.
The asset price and assembly fee are frozen when the job is accepted. Provider calls,
parallel workers, and internal modeling iterations do not add metered charges to a
fixed-price scene. The final charge uses delivered definitions, excluding failed ones,
and settles once the accepted release’s required outputs are published. New releases
require Blender, GLB, USD and source outputs. A delivered
partial or candidate_delivered result is still billable; incomplete validation does
not make a delivered scene free. Failed and cancelled jobs cost $0, including when
a recovery archive is available. Teams with company billing use the Team credit account.
max_cost_cents is an optional ceiling, not a charge or an asset count:
- Omit it or send
nullto use the server-configured ceiling. - Send an integer from
1through1000000to set a per-request ceiling in cents. - Send
"unlimited"to remove the total cost cap on a release that supports it.
budget_cents; later settings changes and idempotent
replays do not replace it. A ceiling below one asset plus assembly is rejected with
422 scene_budget_too_low. After planning, the entire planned price must fit the
ceiling before asset generation starts. If it does not, the job fails without generating
the assets or charging for the scene. The service does not silently trim the plan to fit.
The ceiling is not reserved from the balance upfront, and credit eligibility still applies.
Older metered releases and jobs accepted under them retain their original accounting.
Check job.scene_pricing: a populated value identifies the fixed-price contract described
here. Do not infer fixed pricing for an older job where it is absent or null.
Poll progress and inspect results
job.status is succeeded, failed, or cancelled.
Use GET /v1/scenes/{scene_id} for the typed scene result, which is null until
publication. Inspect job.error if generation fails.
The job exposes scene_progress with phase (planning, assets, structure, or
placement) and planned/generated/excluded instance counts. The normal job phase
also tracks queueing, export, cancellation, and completion. Use the existing
job cancellation endpoint if needed; cancelling does not automatically
regenerate or retry the scene.
A successful job means native outputs were delivered. Inspect the scene result separately:
status:complete,candidate_delivered, orpartial.sceneCommitted: the saved native scene was committed within this job’s artifact package.assetDefinitions:planned,delivered, andexcludedcanonical designs. These differ from instance counts and determine the fixed asset charge.counts:planned,eligible,excluded,accepted, andpendinginstances.structure_status:completeorpartial.validationPassed: whether placement checks completed successfully with no excluded instances or unfinished structure.exports: available files, hashes, sizes, and relative download URLs.
job.scene_pricing exposes asset_price_cents,
assembly_fee_cents, and delivered_assets (which can be null before delivery).
Read settled_spend_cents for the actual charge and billing_status for settlement
progress; a running job’s zero settled spend is not its final price.
Download
format=blend, usd, usdz, glb, or source. Downloads are binary responses protected
by the owning Team key, with X-Content-SHA256 and Content-Length. New releases require Blender, GLB, a USD ZIP, and a source ZIP for successful
publication. USDZ is an optional conversion;
only download formats listed in exports. An unavailable conversion returns 409.
Export URLs are relative to the API origin and require POST, including URLs returned
in exports; they are not public GET links. Preserve the optional job_id query
parameter in returned URLs: it pins the download to that job’s artifacts even after
an export recovery publishes a newer delivery for the same scene. You can also pass
job_id=JOB_ID explicitly when downloading a specific scene job.
format=source downloads native inputs, dependencies, the plan, and diagnostics. It is
also available for failed/cancelled jobs when a complete recovery archive was saved.
If no archive survived, the API returns 409 checkpoint_unavailable. Downloads never
start another generation. The reconstruction is delivered as native files; this endpoint
does not import its individual assets into the editable Team library.
Use the existing Team key scopes: generate:asset to submit, read:assets to poll,
and export:assets to download. These legacy scope names cover scene reconstruction too.
Recover exports without generating again
If conversion failed, or an older scene lacks GLB, callPOST /v1/jobs/{job_id}/retry-export with a new saved Idempotency-Key.
Use a Team key with generate:asset and export:assets scopes. Poll the returned
job ID, then read the original scene ID for the newest successful delivery.
The previous delivery stays available while recovery runs.
Scene export recovery uses the retained authoring checkpoint and the current
compatible Team exporter. It does not generate assets again and costs $0,
including recovery from an uncharged failed scene. A complete saved authoring
checkpoint is required; this is not a retry of failed modeling. Reuse the same
idempotency key after a lost response to avoid redundant export work.