Skip to main content
POST
Reconstruct a scene
Rebuild the scene’s .spz Gaussian splat from the image batches you list — typically the initial batch from Create Scene plus the generated batches from Generate Scene Views. The more of the scene the views cover, the more complete the result. The request is asynchronous: it answers with a processing Scene Task; poll it until it finishes.
Pricing: scene tasks don’t currently consume credits.

Request parameters

Send application/json, up to 1 MiB. Unknown fields are rejected. targetC2w, projection, fov, and seed belong to Generate Scene Views and are rejected here.

Response parameters

Returns 200 OK with a Scene Task in processing state:
When it’s ready, result.spz.url is the rebuilt scene and result.referenceViewCount is how many views it used. result.outputBatch is null: reconstruct adds no images to the session.

Common errors

A batch ID that’s well-formed but not from this session is caught by the model: the task starts and then fails with INVALID_REQUEST.

Examples

Quick Start: Scene Model

See reconstruct in the full build, generate, and reconstruct flow.

Authorizations

Authorization
string
header
required

Server-side SDK clients use a project API key. Remote MCP clients use an OAuth access token. Never expose a project API key in browser code.

Headers

X-Request-Id
string

Optional caller-supplied correlation ID, up to 128 characters. The service returns the effective value in the response header for tracing and support.

Required string length: 1 - 128
X-Viggle-Source
string

Optional source-channel label, up to 128 characters, used to attribute traffic to an SDK, integration, product surface, or internal workflow.

Required string length: 1 - 128

Body

application/json

Body of POST /v1/scenes/reconstruct. spzOutputUrl and outputUris are mutually exclusive.

sessionId
string
required

Session chosen by the caller, scoped to the caller's account. A session holds one scene and its image batches, and runs one task at a time: a submission while a task is still processing answers 409 with that task in error.details.running_task_id.

Required string length: 1 - 128
Pattern: ^[A-Za-z0-9_-]+$
Example:

"living-room-01"

referenceBatchIds
string[]
required

1–35 distinct batch IDs from the same session, as returned in result.outputBatch.batchId. A well-formed ID from another session fails the task with INVALID_REQUEST.

Required array length: 1 - 35 elements
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
spzOutputUrl
string<uri>

Same as outputUris.spz.

outputUris
object

The caller's own upload URLs; Viggle PUTs each finished file to its URL. Null entries are ignored. An .spz sent here is not kept by Viggle, and the result's spz.url is this URL; a preview or panorama sent here is also kept, and the result links to Viggle's copy. Each URL must be http(s), without credentials, on a host that resolves only to public addresses.

Response

Scene task started.

A scene task (scn_ prefix), returned by every /v1/scenes submission and by GET /v1/scenes/{task_id}. ready, failed, and cancelled are terminal. A task stays readable for about 72 hours after it finishes.

id
string
required

Task ID, scn_{runId}.{sessionId}.

sessionId
string
required
operation
enum<string>
required

A custom-pano task reports pano.

Available options:
pano,
generate,
reconstruct
status
enum<string>
required
Available options:
processing,
ready,
failed,
cancelled
createdAt
integer<int64> | null
required

Start time, Unix milliseconds.

completedAt
integer<int64> | null
required

End time, Unix milliseconds; null while processing.

result
object | null
required

Set only when ready.

error
object | null
required

Set only when failed. code is INVALID_REQUEST (not retryable — the model rejected the input, such as a batch from another session) or PROCESSING_FAILED (retryable).