Marble 2 beta
API reference
This reference is generated from the public Marble 2 beta Developer API. Each task shows both its submission operation and the task-specific output available underoperation.responsewhen the operation completes.
/api/v2/assetsList assets in a project
How to use it
List live assets in the key's project. Follow opaque pagination tokens rather than constructing them.
Open the guideQuery parameters
originoptional
ResourceOrigin | null
stateoptional
AssetState | null
Filter by state. Omit for all non-deleted states.
sessionoptional
string | null
Only assets made inside this Web API session.
appletoptional
string | null
Only assets that came from this applet.
mimeTypeoptional
string | null
Only assets of this media type. A trailing `/*`, as in `image/*`, matches every type in the family.
operationoptional
string | null
Only assets this Operation produced.
taskoptional
string | null
Only assets this task produced, e.g. `image2DraftSplats`.
produceroptional
AssetProducer | null
Only assets made this way, e.g. `UPLOAD` for the customer's own bytes. Assets recorded before the producer was stored match no value.
groupByoptional
AssetGrouping | null
Collect the assets under what produced them. The page then counts groups rather than assets.
orderByoptional
AssetOrder
Order of the page. A grouped page orders each group by its leading asset: its newest one descending, its oldest ascending.
pageSizeoptional
integer
pageTokenoptional
string | null
Response fields
One page of a project's assets, flat or grouped. ``assets`` and ``groups`` are alternatives rather than a pair: a request that named no ``groupBy`` fills the first and leaves the second empty, and one that named a grouping does the reverse. The page token pages whichever of the two was filled, so a grouped page counts groups.
assetsAsset[]optionalAssets in the selected page. Empty when the request named a grouping.
groupsAssetGroup[]optionalSet only when the request named a grouping. An asset the grouping cannot place is absent - uploads and imports have no producing task - so list without a grouping to reach those.
nextPageTokenstringoptionalOpaque token for the next page; empty on the final page.
/api/v2/assetsCreate an asset in a project
How to use it
Create project media from a URL, small base64 payload, or declared upload parts. Choose one ingestion mode per asset.
Open the guideRequest body
Body of a project-owned asset-create request.
assetIdstring | nulloptionalOptional client-supplied resource id.
assetAssetCreaterequiredAsset metadata and ingestion source.
Response fields
The new asset, plus a grant for every part it declared.
idstringrequiredAsset id, ``asset_<hex>``.
displayNamestring | nullrequiredUser-visible label.
mimeTypestringrequiredMedia MIME type, e.g. ``image/png``.
stateAssetStateoptionalLifecycle state. Only ``READY`` assets can be read or used by a task.
widthinteger | nulloptionalPixel width when known.
heightinteger | nulloptionalPixel height when known.
sizeBytesstring | nulloptionalSize in bytes serialized as a string for large-integer compatibility with JSON consumers.
checksumstring | nulloptionalChecksum when available.
createTimestring | nulloptionalServer-assigned.
typestring | nulloptionalAsset type, e.g. ``image``. Null for an untyped upload.
partsAssetPart[]optionalThe asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.
structureobject | nulloptionalWhat a reader needs besides the bytes.
producedByProducedBy | nulloptionalHow the asset came to exist, when that was recorded.
transientbooleanoptionalTrue when the bytes are not retained: an upload made while the account does not retain content, or an output of an operation that purges. Both are deleted an hour after the last operation that names them finishes; an upload no operation consumes is deleted by age instead. ``contentPath`` is null for such an asset; read it through ``:createReadUrl``.
contentPathstring | nulloptionalAlready percent-encoded path for the asset. Append it unchanged to ``baseUrl`` before ``?`` and ``signedQuery``. This path does not grant access by itself. Null until the asset is ``READY`` or when unavailable; use ``assets/{asset}:createReadUrl`` as a fallback.
urlstring | nulloptionalUnsigned content URL for the asset, ``baseUrl + contentPath``. It does not grant access by itself: the web app's read-prefix cookie authorizes it, and an API client appends ``?`` and a read prefix's ``signedQuery`` or uses ``assets/{asset}:createReadUrl`` instead. Null whenever ``contentPath`` is.
uploadsUploadGrant[]optionalOne grant per declared part; empty for URL or inline ingestion.
/api/v2/assets:createReadPrefixMint a signed read prefix for the key's project library
How to use it
Create one short-lived credential for downloading multiple assets in the API key's project. Combine it with each asset's contentPath.
Open the guideResponse fields
A short-lived credential for a project's whole asset library. Build one download URL as ``baseUrl + contentPath + "?" + signedQuery``. The same credential serves every ready asset in the project until ``expiresAt``. Treat it as a secret because it grants that broad access.
baseUrlstringrequiredProject content prefix, ending in ``/``. Append an asset's already encoded ``contentPath`` unchanged.
signedQuerystringrequiredOpaque, already encoded query string without the leading ``?``. Append it unchanged after ``baseUrl + contentPath``; do not parse or edit it.
expiresAtstringrequiredWhen this read credential expires; create a new one after.
/api/v2/assets/{asset}Delete an asset (soft-delete)
How to use it
Soft-delete an asset only after dependent work is complete. A deleted ID should not be reused.
Open the guidePath parameters
assetrequired
string
Response fields
Empty response body for endpoints that have no payload.
/api/v2/assets/{asset}Get an asset
How to use it
Read asset metadata and part roles by short ID. Create a download URL separately when you need the bytes.
Open the guidePath parameters
assetrequired
string
Response fields
A project-owned media asset.
idstringrequiredAsset id, ``asset_<hex>``.
displayNamestring | nullrequiredUser-visible label.
mimeTypestringrequiredMedia MIME type, e.g. ``image/png``.
stateAssetStateoptionalLifecycle state. Only ``READY`` assets can be read or used by a task.
widthinteger | nulloptionalPixel width when known.
heightinteger | nulloptionalPixel height when known.
sizeBytesstring | nulloptionalSize in bytes serialized as a string for large-integer compatibility with JSON consumers.
checksumstring | nulloptionalChecksum when available.
createTimestring | nulloptionalServer-assigned.
typestring | nulloptionalAsset type, e.g. ``image``. Null for an untyped upload.
partsAssetPart[]optionalThe asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.
structureobject | nulloptionalWhat a reader needs besides the bytes.
producedByProducedBy | nulloptionalHow the asset came to exist, when that was recorded.
transientbooleanoptionalTrue when the bytes are not retained: an upload made while the account does not retain content, or an output of an operation that purges. Both are deleted an hour after the last operation that names them finishes; an upload no operation consumes is deleted by age instead. ``contentPath`` is null for such an asset; read it through ``:createReadUrl``.
contentPathstring | nulloptionalAlready percent-encoded path for the asset. Append it unchanged to ``baseUrl`` before ``?`` and ``signedQuery``. This path does not grant access by itself. Null until the asset is ``READY`` or when unavailable; use ``assets/{asset}:createReadUrl`` as a fallback.
urlstring | nulloptionalUnsigned content URL for the asset, ``baseUrl + contentPath``. It does not grant access by itself: the web app's read-prefix cookie authorizes it, and an API client appends ``?`` and a read prefix's ``signedQuery`` or uses ``assets/{asset}:createReadUrl`` instead. Null whenever ``contentPath`` is.
/api/v2/assets/{asset}:completeUploadMark an asset upload complete
How to use it
Call this only after every declared upload succeeds. The returned READY asset can then be used by tasks.
Open the guidePath parameters
assetrequired
string
Request body
Body of an ``:completeUpload`` request.
checksumstring | nulloptionalwidthinteger | nulloptionalheightinteger | nulloptionalsizeBytesinteger | nulloptionalResponse fields
A project-owned media asset.
idstringrequiredAsset id, ``asset_<hex>``.
displayNamestring | nullrequiredUser-visible label.
mimeTypestringrequiredMedia MIME type, e.g. ``image/png``.
stateAssetStateoptionalLifecycle state. Only ``READY`` assets can be read or used by a task.
widthinteger | nulloptionalPixel width when known.
heightinteger | nulloptionalPixel height when known.
sizeBytesstring | nulloptionalSize in bytes serialized as a string for large-integer compatibility with JSON consumers.
checksumstring | nulloptionalChecksum when available.
createTimestring | nulloptionalServer-assigned.
typestring | nulloptionalAsset type, e.g. ``image``. Null for an untyped upload.
partsAssetPart[]optionalThe asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.
structureobject | nulloptionalWhat a reader needs besides the bytes.
producedByProducedBy | nulloptionalHow the asset came to exist, when that was recorded.
transientbooleanoptionalTrue when the bytes are not retained: an upload made while the account does not retain content, or an output of an operation that purges. Both are deleted an hour after the last operation that names them finishes; an upload no operation consumes is deleted by age instead. ``contentPath`` is null for such an asset; read it through ``:createReadUrl``.
contentPathstring | nulloptionalAlready percent-encoded path for the asset. Append it unchanged to ``baseUrl`` before ``?`` and ``signedQuery``. This path does not grant access by itself. Null until the asset is ``READY`` or when unavailable; use ``assets/{asset}:createReadUrl`` as a fallback.
urlstring | nulloptionalUnsigned content URL for the asset, ``baseUrl + contentPath``. It does not grant access by itself: the web app's read-prefix cookie authorizes it, and an API client appends ``?`` and a read prefix's ``signedQuery`` or uses ``assets/{asset}:createReadUrl`` instead. Null whenever ``contentPath`` is.
/api/v2/assets/{asset}:createReadUrlMint a signed read URL for an asset
How to use it
Create a short-lived download URL for one asset. Fetch it without sending the World Labs API key.
Open the guidePath parameters
assetrequired
string
Response fields
A short-lived credential for downloading one asset.
readUrlstringrequiredShort-lived download URL for the asset's bytes. Anyone with the URL can read the asset until it expires; create a fresh one rather than persisting this.
expiresAtstringrequiredWhen ``readUrl`` stops authorizing the download.
/api/v2/assets/{asset}:createUploadUrlMint a signed upload URL for an asset
How to use it
Create an upload URL for a single untyped object, upload the exact content type and length, then complete the asset.
Open the guidePath parameters
assetrequired
string
Request body
Body of an ``:createUploadUrl`` request. ``content_length`` is the wire-format string the API contract requires (JSON's large-integer limitation); the validator parses it to an int so handlers can pass it to the service layer untouched.
contentTypestringrequiredcontentLengthintegerrequiredExpected upload size in bytes, serialized on the wire as a string. Capped at 1 GiB.
Response fields
Upload ticket for a project-owned Asset.
uploadUrlstringrequiredShort-lived upload URL. Send the bytes here without the World Labs API key.
methodstringrequiredHTTP verb to use for the upload, e.g. PUT.
expiresAtstringrequiredWhen this upload grant expires; create a new one after.
headersobjectoptionalHeaders the client MUST include on the upload request.
/api/v2/assets/{asset}:createUploadUrlsRe-mint upload URLs for a typed asset's parts
How to use it
Create new upload URLs for all or selected roles of a typed multipart asset without recreating its record.
Open the guidePath parameters
assetrequired
string
Request body
Body of a ``:createUploadUrls`` request.
rolesstring[]optionalParts that need new upload grants. Empty selects every declared part.
Response fields
New upload grants for the requested asset parts.
uploadsUploadGrant[]optionalOne new upload grant per requested part role.
/api/v2/healthHealth check
How to use it
Use this unauthenticated probe to verify the API host is reachable before debugging credentials or request bodies.
Open the guideResponse fields
No documented JSON fields.
/api/v2/operationsList a project's long-running operations, newest first
How to use it
List the selected project's operations newest first, without result payloads. GET an individual operation for its response. Preserve page tokens exactly and use the origin filter when separating API work from app work.
Open the guideQuery parameters
originoptional
ResourceOrigin | null
taskoptional
string | null
Only operations of this task, as named in metadata.task.
statusoptional
OperationStatus | null
Only operations with this outcome. FAILED is every done operation carrying an error, including cancelled and expired ones.
createdAfteroptional
integer | null
Unix seconds; only operations accepted at or after this time.
createdBeforeoptional
integer | null
Unix seconds; only operations accepted before this time.
pageSizeoptional
integer
pageTokenoptional
string | null
Response fields
A page of operations, newest first.
operationsListedOperation[]requiredOperations ordered from newest to oldest.
nextPageTokenstring | nulloptionalToken for the next page; absent when there are no more.
/api/v2/operations/{operation}Get a long-running operation
How to use it
Poll by the operation's short ID. Treat done as the terminal signal and check for either response or error.
Open the guidePath parameters
operationrequired
string
Query parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap.
Response fields
An operation with its result, available through singular reads.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseobject | nulloptionalTask-specific result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
/api/v2/operations/{operation}:cancelRecord cancellation intent for a long-running operation
How to use it
Record best-effort cancellation intent with a stable requestId, then continue polling until the operation becomes terminal.
Open the guidePath parameters
operationrequired
string
Request body
Body of ``POST /api/v2/operations/{operation}:cancel``.
reasonstring | nulloptionalOptional caller-provided reason for cancellation.
requestIdstring | nulloptionalCancellation idempotency key, at most 36 characters; supply to make retries idempotent. Server generates one if omitted.
Response fields
An operation with its result, available through singular reads.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseobject | nulloptionalTask-specific result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
/api/v2/operations/{operation}:traceGet the public request and response for an operation
How to use it
Inspect the public request and response recorded for an operation when reproducing a result or debugging an integration.
Open the guidePath parameters
operationrequired
string
Response fields
The caller's recorded request beside the Operation's own response and error.
operationIdstringrequiredtaskNamestringrequiredtaskVersionstringrequiredrequestobject | nulloptionalThe request as the caller sent it, projected through the task's current public schema when that schema still accepts it and as recorded otherwise. Null only for early operations that retained no caller-shaped request.
responseobject | nulloptionalThe Operation's ``response``, served the same way.
errorOperationError | nulloptionalThe Operation's ``error``, served the same way.
/api/v2/operations/{operation}:waitBlock until a long-running operation is done
How to use it
Block for up to the server cap, then inspect done. A successful wait can still return a running operation, so keep a polling fallback.
Open the guidePath parameters
operationrequired
string
Request body
Body of ``POST /api/v2/operations/{operation}:wait``.
timeoutSecsinteger | nulloptionalSeconds to block waiting for the operation to finish, capped server-side at 30; omit to use the cap. Best-effort: the operation may still be running when this returns.
Response fields
An operation with its result, available through singular reads.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseobject | nulloptionalTask-specific result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
/api/v2/operations/{operation}/webhookDeliveryGet the webhook delivery record for an operation
How to use it
Validate inputs against the schema, keep resource IDs with your application records, and handle non-success responses explicitly.
Open the guidePath parameters
operationrequired
string
Response fields
The callback record for one operation.
namestringrequired`accounts/{account}/projects/{project}/operations/{operation}/webhookDelivery`.
deliveryIdstring | nulloptionalThe value sent in the `webhook-id` header; absent while SCHEDULED or PUBLISH_FAILED.
webhookUrlstring | nulloptionalThe accepted webhookUrl; absent once the operation's content was purged, while the delivery record itself stays.
stateSCHEDULED | PUBLISH_FAILED | PENDING | IN_FLIGHT | DELIVERED | SUPPRESSED | EXHAUSTEDrequiredSCHEDULED until the operation is terminal and handed over; PUBLISH_FAILED when Marble could not hand the completion to its webhook service (poll the operation instead); then the delivery's own state: PENDING (waiting for the next attempt), IN_FLIGHT, DELIVERED, SUPPRESSED (the receiver answered 410), EXHAUSTED (the 24-hour window closed, or after one attempt when the webhookUrl host resolves to a private address). A cancelled operation sends no event and answers 404.
eventobject | nulloptionalThe exact event body sent, once the delivery exists.
attemptCountintegeroptionalSends attempted so far; a claim counts before its outcome.
lastAttemptTimestring | nulloptionallastAttemptWebhookDeliveryAttempt | nulloptionalnextAttemptTimestring | nulloptionalScheduled time of the next attempt while PENDING.
expireTimestring | nulloptionalEnd of the 24-hour window.
finishTimestring | nulloptionalSet when terminal.
purgeTimestring | nulloptionalExpires 90 days after the webhook service accepted the delivery.
createTimestringrequiredupdateTimestringrequired/api/v2/tasks:atlasChiselSubmit the atlasChisel task
How to use it
Generate one RGB view per 1280 x 720 target camera from optional depth-only context, optional posed source photographs, a required prompt, and voxel or sampling controls.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of ``POST /api/v2/tasks:atlasChisel``.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
contextFramesPosedDepthAsset[]optionalPosed depth frames, one per target camera and posed at it, in target order; each camera is 1280x720. Depth only: frames carry no imageAsset, maskAsset, or depth confidenceAsset. Leave empty to generate from the prompt alone.
sourceFramesPosedRGBAsset[]optionalPosed RGB photographs of the scene, each an image and its camera in the targets' coordinate convention and scale. The generated views stay consistent with them: the servable feeds them to the model as views it has already committed, so a target that sees the same surfaces keeps their materials, colors, and lighting. Any cameras and any resolution; each is cover-resized and center-cropped onto 1280x720. Frames carry no maskAsset or depth. Together with contextFrames and targetCameras they fill at most 64 views of the servable's rollout.
targetCamerasPinholeCamera[]requiredPinhole cameras at 1280x720 for the views to generate, in output order, returned in `frames`. At most 32.
promptstringrequiredText prompt describing the scene.
enhancePromptbooleanoptionalRewrite the prompt into the structured scene caption the model trained on before inference. Set false to send the prompt as is.
voxelSizenumber | nulloptionalVoxel side length in the normalized scene gauge (90th-percentile disparity is approximately 1). The recommended range is 0 to 0.4. Omit or set to 0 to keep the original depth conditioning.
voxelGridOrientationworld | gauge | nulloptionalFrame the voxelization grid axes align to. 'world' (the default) axis-aligns voxels with the request's world coordinates, so world-axis-aligned faces (blockout walls) quantize flat; 'gauge' keeps the legacy grid aligned to the normalized scene gauge (the recentered mean camera pose). Ignored unless voxelSize is set.
modelParametersAtlasChiselModelParametersoptionalModel-specific parameters for atlasChisel.
returnDepthbooleanoptionalReturn the generated frames as posed RGBD: they are reconstructed together so the depth lands in the request's own camera frame and scale, and every entry in `frames` then carries a `depth` buffer. The contextFrames' own depth is not reconstructed or returned. A source photograph joins the reconstruction as an anchor, and gets no depth back, only when its image is at the generated resolution and its camera's principal point is centered. Needs at least two target cameras. Limitation: the depth scale is recovered from the camera centers that joined, so targets that share one center (a pure-rotation rig) and no anchor come back with a 0.0 or NaN scale and a success status.
Response fields
Long-running operation whose successful terminal ``response`` has type ``AtlasChiselResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseAtlasChiselResponse | nulloptional``AtlasChiselResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
framesPosedRGBAsset[] | nulloptionalGenerated RGB frames (image + camera), one per target camera in order.
promptUsedstring | nulloptionalFinal prompt supplied to inference.
requestIdstring | nulloptionalMeridian request id from servable runtime metadata.
/api/v2/tasks:atlasGenerateSubmit the atlasGenerate task
How to use it
Generate posed views from RGBD context at explicit target cameras, with optional reconstructed output depth.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of ``POST /api/v2/tasks:atlasGenerate``.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
contextFramesPosedRGBDAsset[]requiredPosed RGBD context views: each an image, its depth buffer, and its camera, all required. On the reference-context warp route the depth conditions the generation geometrically, so the generated views stay consistent with the provided scene; the hero base checkpoint conditions on the posed images only and does not consume the depth.
targetCamerasPinholeCamera[]requiredPinhole cameras for the views to generate, in output order. Generated frames are returned in `frames`, one per camera.
promptstring | nulloptionalText prompt describing the scene, if any.
enhancePromptbooleanoptionalEnhance the prompt with the ViewGen preset before inference. With no prompt, the enhancer captions the context images.
returnDepthbooleanoptionalReturn the generated frames as posed RGBD: they are reconstructed together with the context frames so the depth lands in the request's own camera frame and scale, and every entry in `frames` then carries a `depth` buffer. A context frame joins that reconstruction only when its image is at the generated resolution and its camera's principal point is centered. The scale is recovered from the camera centres that joined, so a request whose joined cameras all share one centre (a pure-rotation rig) is rejected.
modelParametersAtlasGenerateModelParametersoptionalModel-specific parameters for atlasGenerate.
Response fields
Long-running operation whose successful terminal ``response`` has type ``AtlasGenerateResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseAtlasGenerateResponse | nulloptional``AtlasGenerateResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
framesPosedRGBAsset[] | nulloptionalGenerated RGB frames (image + camera), one per target camera in order. Every frame also carries a `depth` buffer when the request set returnDepth.
promptUsedstring | nulloptionalFinal prompt supplied to inference, if any.
requestIdstring | nulloptionalMeridian request id from servable runtime metadata.
/api/v2/tasks:atlasMaskedSubmit the atlasMasked task
How to use it
Complete masked regions across posed context views, keeping image, mask, depth, and camera arrays aligned.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of ``POST /api/v2/tasks:atlasMasked``.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
contextFramesPosedRGBAAsset[]requiredThe views to complete, in output order: each an image, its alpha mask, and its camera. The mask is an 8-bit grayscale PNG on the image grid where 1 is kept -- those pixels are the observed image -- and 0 is what the model fills in. Each view is completed at its targetCameras entry of the same index.
targetCamerasPinholeCamera[]requiredPinhole cameras for the views to generate, one per context frame in the same order. Warning: the partial checkpoints condition target i on contextFrames[i]'s masked view and were trained with one context view per target, rendered from the target's own viewpoint. A count that differs from contextFrames, or a target off its frame's camera, is accepted but runs outside the training distribution and may generate degraded views.
promptstring | nulloptionalThe edit to make. With enhancePrompt on (the default), write an instruction that names what to add, remove, replace, or restyle and where, such as 'replace the yellow car with a stone fountain in the middle of the courtyard'. The enhancer reads it with the original context images but not the masks. Without a prompt it describes the images as they are, which tends to restore masked objects, so state removals explicitly. With enhancePrompt false the model receives the text unchanged as a caption of the finished image, so describe the whole finished scene instead.
enhancePromptbooleanoptionalRewrite the prompt before inference: the edit instruction and the context images become a detailed description of the finished scene, returned as promptUsed. Set false to send the prompt exactly as given.
returnDepthbooleanoptionalReturn the completed frames as posed RGBD: they are reconstructed together so the depth lands in the request's own camera frame and scale, and every entry in `frames` then carries a `depth` buffer. Needs at least two targetCameras. Limitation: the depth scale is recovered from the frames' camera centres, so views that share one centre (a pure-rotation rig) come back with a 0.0 or NaN scale and a success status.
modelParametersAtlasMaskedModelParametersoptionalModel-specific parameters for atlasMasked.
Response fields
Long-running operation whose successful terminal ``response`` has type ``AtlasMaskedResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseAtlasMaskedResponse | nulloptional``AtlasMaskedResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
framesPosedRGBAsset[] | nulloptionalGenerated frames (image + camera): one per target camera, in order. Every frame also carries a `depth` buffer when the request set returnDepth.
promptUsedstring | nulloptionalFinal prompt supplied to inference, if any.
requestIdstring | nulloptionalMeridian request id from servable runtime metadata.
/api/v2/tasks:atlasTextToImageSubmit the atlasTextToImage task
How to use it
Generate world-oriented image inputs from a prompt, then persist the operation ID and the resolved prompt and seed.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of ``POST /api/v2/tasks:atlasTextToImage``.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
promptstringrequiredText prompt to generate from.
aspectRatio16:9 | 9:16 | 4:3 | 3:4 | 1:1 | nulloptionalOutput width-to-height ratio. Omit for the model default.
enhancePromptbooleanoptionalWhether to enhance the prompt before generation. Defaults to true.
seedinteger | nulloptionalOptional RNG seed.
numStepsinteger | nulloptionalDiffusion step count.
numSamplesinteger | nulloptionalNumber of images to generate.
returnDepthbooleanoptionalAlso estimate depth per image (metric, single-view): every frame in `frames` then carries a `depth` buffer and the camera it was estimated under.
Response fields
Long-running operation whose successful terminal ``response`` has type ``AtlasTextToImageResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseAtlasTextToImageResponse | nulloptional``AtlasTextToImageResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
framesFrameRGBAsset[]requiredGenerated images, one frame per sample in generation order. Every frame also carries its estimated camera and a `depth` buffer when the request set returnDepth.
promptUsedstring | nulloptionalFinal prompt supplied to inference, if any.
aspectRatio16:9 | 9:16 | 4:3 | 3:4 | 1:1 | nulloptionalResolved width-to-height ratio used for generation.
/api/v2/tasks:images2PosedRGBDSubmit the images2PosedRGBD task
How to use it
Submit one or more ordered images, store the returned operation ID, then wait or poll until the operation is terminal.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of ``POST /api/v2/tasks:images2PosedRGBD``.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
base64OutputsbooleanoptionalWhen the task is answered at submission, return each output file as base64 in that response rather than by assetId and url. This skips storing the files before the answer and the caller's download after it. A task that is not answered at submission, and every later read of the operation, names the outputs by assetId and url either way.
framesFrameRGBAsset[]requiredOrdered image inputs (min 1). A frame that carries a camera, a depth buffer or a mask is rejected rather than quietly ignored: none of them reaches the reconstruction.
canonicalizeToFirstFramebooleanoptionalPlace the first camera at the origin facing forward.
targetResolution[integer, integer] | nulloptionalReturn the depth, confidence and camera intrinsics on this (width, height) pixel grid. The reconstruction is scaled to cover the requested size and center-cropped to it, so the result is exactly the size asked for and never stretched, and the intrinsics are updated with it -- unprojecting the returned depth with the returned camera gives the same geometry either way. A requested aspect that differs from the reconstruction's costs field of view, since the crop is what makes the size exact, and centroidWorld then describes the cropped view. Omit for the 1280 by 720 default; pass null to take the instance's own default.
refinePosesbooleanoptionalBundle-adjust the estimated cameras against dense matches before answering. The backbone's poses are good to about half a degree, which is enough to reconstruct from and not enough to refine against: the residual shows up as blur wherever two views disagree. The solve anchors on the depth this task has just produced, so it costs a matcher pass and a solve rather than another reconstruction, and it needs two or more frames. A solve that moves the cameras further than the guards allow is thrown away and the unrefined reconstruction is returned, which is a success rather than an error.
Response fields
Long-running operation whose successful terminal ``response`` has type ``Images2PosedRGBDResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseImages2PosedRGBDResponse | nulloptional``Images2PosedRGBDResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
framesImages2PosedRGBDPerImageResult[]requiredOne reconstructed frame per input image, in request order.
poseRefinementAcceptedboolean | nulloptionalWhen refinePoses was requested, whether the refined cameras were kept. False means the original reconstruction was returned; null means refinement was not requested.
/api/v2/tasks:splats2MeshSubmit the splats2Mesh task
How to use it
Submit the task once, persist its operation ID, and use the long-running operation lifecycle to retrieve the terminal result.
Open the guideQuery parameters
waitoptional
boolean
Block for the operation to finish before returning, up to the server wait cap. Returns the Operation either way — done with a response if it finished in time, otherwise still running.
Header parameters
Idempotency-Keyoptional
string | null
Optional idempotency key.
Request body
Body of a splats2Mesh request.
webhookUrlstring | nulloptionalWhere Marble POSTs one signed task.succeeded or task.failed event when this operation finishes; retried for 24 hours. Verify the signature with the public keys at /.well-known/webhooks/jwks.json. Cannot be combined with ?wait=true. https on port 443 only, no IP literals. Developer API only.
purgeContentOnOperationCompletionboolean | nulloptionalPurge this operation's outputs and the transient uploads it consumed one hour after it finishes. Omitted, the account's setting applies; true raises it for this operation; false is refused when the account already purges. Uploads in the library are never purged by an operation.
camerasPinholeCamera[] | object | nulloptionalCameras the splats are rendered from. The surface is reconstructed from those renders, so geometry no camera sees is not meshed. Name a strategy -- `auto_anchors` (the default) finds viewpoints in the scene's free space, `manual_anchors` takes them from the request, `exterior_sphere` rings the scene from outside for an object or turntable capture -- or pass a list of cameras to render as given, at most 512, sharing one width and height between 64 and 1024 that becomes the render resolution.
advancedOptionsSplats2MeshAdvancedOptions | nulloptionalFiner control over how the splats are rendered and how the surface is extracted. Omit for the defaults.
orientedBoundingBoxSplats2MeshOrientedBoundingBox | nulloptionalRegion to extract, as an oriented box in Three.js coordinates. Omit to mesh the whole scene.
targetFacesinteger | nulloptionalDecimate the extracted mesh to at most this many faces. A target above the extracted count does nothing. Omit to keep every face.
textureModeimage_texture | vertex_color | noneoptionalMesh appearance: 'image_texture' projects rendered views onto a UV atlas, 'vertex_color' bakes per-vertex colors, and 'none' leaves the mesh untextured.
Accepted: image_texture, vertex_color, none
textureSizeintegeroptionalHeight and width of the texture atlas, in pixels, for `image_texture` mode. One rendered view plus its border has to fit, so this must be at least 2% above the render size in play: the larger render bank under the anchor strategies, `renderHw` under `exterior_sphere`, or the supplied cameras' own size.
splatAssetTaskAssetrequiredThe Gaussian splat scene (.spz) to mesh. Inline base64 must carry a `data:` prefix to declare its media type: asset creation otherwise infers the type from the bytes, and the sniffer knows image formats only.
Response fields
Long-running operation whose successful terminal ``response`` has type ``Splats2MeshResponse``. This is the common Operation envelope with a task-specific response type, not a separate operation resource.
idstringrequiredShort operation id used in ``/operations/{operation}`` paths.
ownerIdstringrequiredAccount that owns the operation.
metadataobject | nulloptionalTask information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.
donebooleanrequiredWhether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.
errorOperationError | nulloptionalFailure details when ``done`` is true and the task failed; null while running and after success.
expiresAtSecsinteger | nulloptionalTask execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.
createdAtSecsinteger | nulloptionalUnix seconds when the operation was accepted.
responseSplats2MeshResponse | nulloptional``Splats2MeshResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.
namestringrequiredFull resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.
Completed operation output
Available after the operation finishes with done set to true.
meshTaskAssetrequiredThe generated GLB mesh.
anchorPositions[number, number, number][] | nulloptionalAnchor positions the cameras were generated from, in Three.js coordinates. Null when no anchors were used: cameras were supplied directly, or `exterior_sphere` was chosen.
metadataobjectoptionalDeprecated runtime diagnostics. Informational only -- keys are not part of the contract and may change.