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.

get/api/v2/assets

List 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 guide

Query parameters

origin

optional

ResourceOrigin | null

state

optional

AssetState | null

Filter by state. Omit for all non-deleted states.

session

optional

string | null

Only assets made inside this Web API session.

applet

optional

string | null

Only assets that came from this applet.

mimeType

optional

string | null

Only assets of this media type. A trailing `/*`, as in `image/*`, matches every type in the family.

operation

optional

string | null

Only assets this Operation produced.

task

optional

string | null

Only assets this task produced, e.g. `image2DraftSplats`.

producer

optional

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.

groupBy

optional

AssetGrouping | null

Collect the assets under what produced them. The page then counts groups rather than assets.

orderBy

optional

AssetOrder

Order of the page. A grouped page orders each group by its leading asset: its newest one descending, its oldest ascending.

pageSize

optional

integer

pageToken

optional

string | null

Response fields

200ListAssetsResponse

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[]optional

Assets in the selected page. Empty when the request named a grouping.

groupsAssetGroup[]optional

Set 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.

nextPageTokenstringoptional

Opaque token for the next page; empty on the final page.

post/api/v2/assets

Create 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 guide

Request body

CreateAssetRequest

Body of a project-owned asset-create request.

assetIdstring | nulloptional

Optional client-supplied resource id.

assetAssetCreaterequired

Asset metadata and ingestion source.

Response fields

201CreateAssetResponse

The new asset, plus a grant for every part it declared.

idstringrequired

Asset id, ``asset_<hex>``.

displayNamestring | nullrequired

User-visible label.

mimeTypestringrequired

Media MIME type, e.g. ``image/png``.

stateAssetStateoptional

Lifecycle state. Only ``READY`` assets can be read or used by a task.

widthinteger | nulloptional

Pixel width when known.

heightinteger | nulloptional

Pixel height when known.

sizeBytesstring | nulloptional

Size in bytes serialized as a string for large-integer compatibility with JSON consumers.

checksumstring | nulloptional

Checksum when available.

createTimestring | nulloptional

Server-assigned.

typestring | nulloptional

Asset type, e.g. ``image``. Null for an untyped upload.

partsAssetPart[]optional

The asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.

structureobject | nulloptional

What a reader needs besides the bytes.

producedByProducedBy | nulloptional

How the asset came to exist, when that was recorded.

transientbooleanoptional

True 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 | nulloptional

Already 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 | nulloptional

Unsigned 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[]optional

One grant per declared part; empty for URL or inline ingestion.

post/api/v2/assets:createReadPrefix

Mint 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 guide

Response fields

200CreateReadPrefixResponse

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.

baseUrlstringrequired

Project content prefix, ending in ``/``. Append an asset's already encoded ``contentPath`` unchanged.

signedQuerystringrequired

Opaque, already encoded query string without the leading ``?``. Append it unchanged after ``baseUrl + contentPath``; do not parse or edit it.

expiresAtstringrequired

When this read credential expires; create a new one after.

delete/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 guide

Path parameters

asset

required

string

Response fields

200Empty

Empty response body for endpoints that have no payload.

get/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 guide

Path parameters

asset

required

string

Response fields

200Asset

A project-owned media asset.

idstringrequired

Asset id, ``asset_<hex>``.

displayNamestring | nullrequired

User-visible label.

mimeTypestringrequired

Media MIME type, e.g. ``image/png``.

stateAssetStateoptional

Lifecycle state. Only ``READY`` assets can be read or used by a task.

widthinteger | nulloptional

Pixel width when known.

heightinteger | nulloptional

Pixel height when known.

sizeBytesstring | nulloptional

Size in bytes serialized as a string for large-integer compatibility with JSON consumers.

checksumstring | nulloptional

Checksum when available.

createTimestring | nulloptional

Server-assigned.

typestring | nulloptional

Asset type, e.g. ``image``. Null for an untyped upload.

partsAssetPart[]optional

The asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.

structureobject | nulloptional

What a reader needs besides the bytes.

producedByProducedBy | nulloptional

How the asset came to exist, when that was recorded.

transientbooleanoptional

True 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 | nulloptional

Already 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 | nulloptional

Unsigned 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.

post/api/v2/assets/{asset}:completeUpload

Mark 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 guide

Path parameters

asset

required

string

Request body

CompleteUploadRequest

Body of an ``:completeUpload`` request.

checksumstring | nulloptional
widthinteger | nulloptional
heightinteger | nulloptional
sizeBytesinteger | nulloptional

Response fields

200Asset

A project-owned media asset.

idstringrequired

Asset id, ``asset_<hex>``.

displayNamestring | nullrequired

User-visible label.

mimeTypestringrequired

Media MIME type, e.g. ``image/png``.

stateAssetStateoptional

Lifecycle state. Only ``READY`` assets can be read or used by a task.

widthinteger | nulloptional

Pixel width when known.

heightinteger | nulloptional

Pixel height when known.

sizeBytesstring | nulloptional

Size in bytes serialized as a string for large-integer compatibility with JSON consumers.

checksumstring | nulloptional

Checksum when available.

createTimestring | nulloptional

Server-assigned.

typestring | nulloptional

Asset type, e.g. ``image``. Null for an untyped upload.

partsAssetPart[]optional

The asset's media files. Empty until the upload completes; an untyped asset then holds one part covering the whole media.

structureobject | nulloptional

What a reader needs besides the bytes.

producedByProducedBy | nulloptional

How the asset came to exist, when that was recorded.

transientbooleanoptional

True 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 | nulloptional

Already 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 | nulloptional

Unsigned 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.

post/api/v2/assets/{asset}:createReadUrl

Mint 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 guide

Path parameters

asset

required

string

Response fields

200CreateReadUrlResponse

A short-lived credential for downloading one asset.

readUrlstringrequired

Short-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.

expiresAtstringrequired

When ``readUrl`` stops authorizing the download.

post/api/v2/assets/{asset}:createUploadUrl

Mint 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 guide

Path parameters

asset

required

string

Request body

CreateUploadUrlRequest

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.

contentTypestringrequired
contentLengthintegerrequired

Expected upload size in bytes, serialized on the wire as a string. Capped at 1 GiB.

Response fields

200CreateUploadUrlResponse

Upload ticket for a project-owned Asset.

uploadUrlstringrequired

Short-lived upload URL. Send the bytes here without the World Labs API key.

methodstringrequired

HTTP verb to use for the upload, e.g. PUT.

expiresAtstringrequired

When this upload grant expires; create a new one after.

headersobjectoptional

Headers the client MUST include on the upload request.

post/api/v2/assets/{asset}:createUploadUrls

Re-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 guide

Path parameters

asset

required

string

Request body

CreateUploadUrlsRequest

Body of a ``:createUploadUrls`` request.

rolesstring[]optional

Parts that need new upload grants. Empty selects every declared part.

Response fields

200CreateUploadUrlsResponse

New upload grants for the requested asset parts.

uploadsUploadGrant[]optional

One new upload grant per requested part role.

get/api/v2/health

Health check

How to use it

Use this unauthenticated probe to verify the API host is reachable before debugging credentials or request bodies.

Open the guide

Response fields

200object

No documented JSON fields.

get/api/v2/operations

List 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 guide

Query parameters

origin

optional

ResourceOrigin | null

task

optional

string | null

Only operations of this task, as named in metadata.task.

status

optional

OperationStatus | null

Only operations with this outcome. FAILED is every done operation carrying an error, including cancelled and expired ones.

createdAfter

optional

integer | null

Unix seconds; only operations accepted at or after this time.

createdBefore

optional

integer | null

Unix seconds; only operations accepted before this time.

pageSize

optional

integer

pageToken

optional

string | null

Response fields

200ListedOperationsResponse

A page of operations, newest first.

operationsListedOperation[]required

Operations ordered from newest to oldest.

nextPageTokenstring | nulloptional

Token for the next page; absent when there are no more.

get/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 guide

Path parameters

operation

required

string

Query parameters

wait

optional

boolean

Block for the operation to finish before returning, up to the server wait cap.

Response fields

200Operation

An operation with its result, available through singular reads.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseobject | nulloptional

Task-specific result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

post/api/v2/operations/{operation}:cancel

Record 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 guide

Path parameters

operation

required

string

Request body

CancelOperationRequest | null

Body of ``POST /api/v2/operations/{operation}:cancel``.

reasonstring | nulloptional

Optional caller-provided reason for cancellation.

requestIdstring | nulloptional

Cancellation idempotency key, at most 36 characters; supply to make retries idempotent. Server generates one if omitted.

Response fields

200Operation

An operation with its result, available through singular reads.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseobject | nulloptional

Task-specific result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

get/api/v2/operations/{operation}:trace

Get 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 guide

Path parameters

operation

required

string

Response fields

200OperationTrace

The caller's recorded request beside the Operation's own response and error.

operationIdstringrequired
taskNamestringrequired
taskVersionstringrequired
requestobject | nulloptional

The 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 | nulloptional

The Operation's ``response``, served the same way.

errorOperationError | nulloptional

The Operation's ``error``, served the same way.

post/api/v2/operations/{operation}:wait

Block 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 guide

Path parameters

operation

required

string

Request body

WaitOperationRequest | null

Body of ``POST /api/v2/operations/{operation}:wait``.

timeoutSecsinteger | nulloptional

Seconds 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

200Operation

An operation with its result, available through singular reads.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseobject | nulloptional

Task-specific result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

get/api/v2/operations/{operation}/webhookDelivery

Get 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 guide

Path parameters

operation

required

string

Response fields

200WebhookDelivery

The callback record for one operation.

namestringrequired

`accounts/{account}/projects/{project}/operations/{operation}/webhookDelivery`.

deliveryIdstring | nulloptional

The value sent in the `webhook-id` header; absent while SCHEDULED or PUBLISH_FAILED.

webhookUrlstring | nulloptional

The accepted webhookUrl; absent once the operation's content was purged, while the delivery record itself stays.

stateSCHEDULED | PUBLISH_FAILED | PENDING | IN_FLIGHT | DELIVERED | SUPPRESSED | EXHAUSTEDrequired

SCHEDULED 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 | nulloptional

The exact event body sent, once the delivery exists.

attemptCountintegeroptional

Sends attempted so far; a claim counts before its outcome.

lastAttemptTimestring | nulloptional
lastAttemptWebhookDeliveryAttempt | nulloptional
nextAttemptTimestring | nulloptional

Scheduled time of the next attempt while PENDING.

expireTimestring | nulloptional

End of the 24-hour window.

finishTimestring | nulloptional

Set when terminal.

purgeTimestring | nulloptional

Expires 90 days after the webhook service accepted the delivery.

createTimestringrequired
updateTimestringrequired
post/api/v2/tasks:atlasChisel

Submit 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 guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

AtlasChiselRequest

Body of ``POST /api/v2/tasks:atlasChisel``.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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[]optional

Posed 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[]optional

Posed 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[]required

Pinhole cameras at 1280x720 for the views to generate, in output order, returned in `frames`. At most 32.

promptstringrequired

Text prompt describing the scene.

enhancePromptbooleanoptional

Rewrite the prompt into the structured scene caption the model trained on before inference. Set false to send the prompt as is.

voxelSizenumber | nulloptional

Voxel 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 | nulloptional

Frame 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.

modelParametersAtlasChiselModelParametersoptional

Model-specific parameters for atlasChisel.

returnDepthbooleanoptional

Return 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

201AtlasChiselResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseAtlasChiselResponse | nulloptional

``AtlasChiselResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseAtlasChiselResponse

Available after the operation finishes with done set to true.

framesPosedRGBAsset[] | nulloptional

Generated RGB frames (image + camera), one per target camera in order.

promptUsedstring | nulloptional

Final prompt supplied to inference.

requestIdstring | nulloptional

Meridian request id from servable runtime metadata.

post/api/v2/tasks:atlasGenerate

Submit the atlasGenerate task

How to use it

Generate posed views from RGBD context at explicit target cameras, with optional reconstructed output depth.

Open the guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

AtlasGenerateRequest

Body of ``POST /api/v2/tasks:atlasGenerate``.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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[]required

Posed 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[]required

Pinhole cameras for the views to generate, in output order. Generated frames are returned in `frames`, one per camera.

promptstring | nulloptional

Text prompt describing the scene, if any.

enhancePromptbooleanoptional

Enhance the prompt with the ViewGen preset before inference. With no prompt, the enhancer captions the context images.

returnDepthbooleanoptional

Return 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.

modelParametersAtlasGenerateModelParametersoptional

Model-specific parameters for atlasGenerate.

Response fields

201AtlasGenerateResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseAtlasGenerateResponse | nulloptional

``AtlasGenerateResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseAtlasGenerateResponse

Available after the operation finishes with done set to true.

framesPosedRGBAsset[] | nulloptional

Generated RGB frames (image + camera), one per target camera in order. Every frame also carries a `depth` buffer when the request set returnDepth.

promptUsedstring | nulloptional

Final prompt supplied to inference, if any.

requestIdstring | nulloptional

Meridian request id from servable runtime metadata.

post/api/v2/tasks:atlasMasked

Submit the atlasMasked task

How to use it

Complete masked regions across posed context views, keeping image, mask, depth, and camera arrays aligned.

Open the guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

AtlasMaskedRequest

Body of ``POST /api/v2/tasks:atlasMasked``.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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[]required

The 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[]required

Pinhole 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 | nulloptional

The 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.

enhancePromptbooleanoptional

Rewrite 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.

returnDepthbooleanoptional

Return 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.

modelParametersAtlasMaskedModelParametersoptional

Model-specific parameters for atlasMasked.

Response fields

201AtlasMaskedResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseAtlasMaskedResponse | nulloptional

``AtlasMaskedResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseAtlasMaskedResponse

Available after the operation finishes with done set to true.

framesPosedRGBAsset[] | nulloptional

Generated frames (image + camera): one per target camera, in order. Every frame also carries a `depth` buffer when the request set returnDepth.

promptUsedstring | nulloptional

Final prompt supplied to inference, if any.

requestIdstring | nulloptional

Meridian request id from servable runtime metadata.

post/api/v2/tasks:atlasTextToImage

Submit 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 guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

AtlasTextToImageRequest

Body of ``POST /api/v2/tasks:atlasTextToImage``.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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.

promptstringrequired

Text prompt to generate from.

aspectRatio16:9 | 9:16 | 4:3 | 3:4 | 1:1 | nulloptional

Output width-to-height ratio. Omit for the model default.

enhancePromptbooleanoptional

Whether to enhance the prompt before generation. Defaults to true.

seedinteger | nulloptional

Optional RNG seed.

numStepsinteger | nulloptional

Diffusion step count.

numSamplesinteger | nulloptional

Number of images to generate.

returnDepthbooleanoptional

Also 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

201AtlasTextToImageResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseAtlasTextToImageResponse | nulloptional

``AtlasTextToImageResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseAtlasTextToImageResponse

Available after the operation finishes with done set to true.

framesFrameRGBAsset[]required

Generated 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 | nulloptional

Final prompt supplied to inference, if any.

aspectRatio16:9 | 9:16 | 4:3 | 3:4 | 1:1 | nulloptional

Resolved width-to-height ratio used for generation.

post/api/v2/tasks:images2PosedRGBD

Submit 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 guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

Images2PosedRGBDRequest

Body of ``POST /api/v2/tasks:images2PosedRGBD``.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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.

base64Outputsbooleanoptional

When 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[]required

Ordered 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.

canonicalizeToFirstFramebooleanoptional

Place the first camera at the origin facing forward.

targetResolution[integer, integer] | nulloptional

Return 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.

refinePosesbooleanoptional

Bundle-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

201Images2PosedRGBDResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseImages2PosedRGBDResponse | nulloptional

``Images2PosedRGBDResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseImages2PosedRGBDResponse

Available after the operation finishes with done set to true.

framesImages2PosedRGBDPerImageResult[]required

One reconstructed frame per input image, in request order.

poseRefinementAcceptedboolean | nulloptional

When refinePoses was requested, whether the refined cameras were kept. False means the original reconstruction was returned; null means refinement was not requested.

post/api/v2/tasks:splats2Mesh

Submit 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 guide

Query parameters

wait

optional

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-Key

optional

string | null

Optional idempotency key.

Request body

Splats2MeshRequest

Body of a splats2Mesh request.

webhookUrlstring | nulloptional

Where 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 | nulloptional

Purge 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 | nulloptional

Cameras 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 | nulloptional

Finer control over how the splats are rendered and how the surface is extracted. Omit for the defaults.

orientedBoundingBoxSplats2MeshOrientedBoundingBox | nulloptional

Region to extract, as an oriented box in Three.js coordinates. Omit to mesh the whole scene.

targetFacesinteger | nulloptional

Decimate 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 | noneoptional

Mesh 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

textureSizeintegeroptional

Height 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.

splatAssetTaskAssetrequired

The 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

201Splats2MeshResponseOperation

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.

idstringrequired

Short operation id used in ``/operations/{operation}`` paths.

ownerIdstringrequired

Account that owns the operation.

metadataobject | nulloptional

Task information and optional progress details. Use ``metadata.task`` to interpret a generic operation response, and use ``done`` to determine completion.

donebooleanrequired

Whether the operation is terminal. When true, a non-null ``error`` indicates failure; otherwise the operation succeeded.

errorOperationError | nulloptional

Failure details when ``done`` is true and the task failed; null while running and after success.

expiresAtSecsinteger | nulloptional

Task execution deadline as Unix seconds, when one is exposed. This is not an asset URL expiration.

createdAtSecsinteger | nulloptional

Unix seconds when the operation was accepted.

responseSplats2MeshResponse | nulloptional

``Splats2MeshResponse`` result when ``done`` is true and the task succeeded; null while running and after failure.

namestringrequired

Full resource name for the operation. For project operations: ``accounts/{account}/projects/{project}/operations/{operation}``. Operation paths accept the short ``id``.

Completed operation output

operation.responseSplats2MeshResponse

Available after the operation finishes with done set to true.

meshTaskAssetrequired

The generated GLB mesh.

anchorPositions[number, number, number][] | nulloptional

Anchor 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.

metadataobjectoptional

Deprecated runtime diagnostics. Informational only -- keys are not part of the contract and may change.