World Labs Marble API

The Marble API from World Labs — 8 operation(s) for marble.

Operations 9

GET /marble/v1/media-assets/{media_asset_id} Get Media Asset #
POST /marble/v1/media-assets:prepare_upload Prepare a media asset upload #
GET /marble/v1/operations/{operation_id} Get Operation #
POST /marble/v1/pano:depth_to_rgb Pano Depth To Rgb #
DELETE /marble/v1/worlds/{world_id} Delete World #
GET /marble/v1/worlds/{world_id} Get World #
POST /marble/v1/worlds/{world_id}:export Export World #
POST /marble/v1/worlds:generate Generate World #
POST /marble/v1/worlds:list List Worlds #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/world-labs-marble-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

world-labs-marble-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Public-facing API for the Marble platform
  summary: Marble Public API v1
  title: Public API v1 credits Marble API
  version: 1.0.0
servers:
- description: World API
  url: https://api.worldlabs.ai
security:
- ApiKeyAuth: []
tags:
- name: Marble
paths:
  /marble/v1/media-assets/{media_asset_id}:
    get:
      description: "Get a media asset by ID.\n\nRetrieves metadata for a previously created media asset.\n\nArgs:\n    media_asset_id: The media asset identifier.\n\nReturns:\n    MediaAsset object with media_asset_id, file_name, extension, kind,\n    metadata, created_at, and updated_at.\n\nRaises:\n    HTTPException: 404 if not found"
      operationId: get_media_asset_marble_v1_media_assets__media_asset_id__get
      parameters:
      - in: path
        name: media_asset_id
        required: true
        schema:
          title: Media Asset Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaAsset'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Media Asset
      tags:
      - Marble
  /marble/v1/media-assets:prepare_upload:
    post:
      description: "Prepare a media asset upload for use in world generation.\n\nThis API endpoint creates a media asset record and returns a signed upload URL.\nUse this workflow to upload images or videos that you want to reference in world\ngeneration requests.\n\n## Workflow\n\n1. **Prepare Upload** (this endpoint): Get a `media_asset_id` and `upload_url`\n2. **Upload File**: Use the signed URL to upload your file\n3. **Generate World**: Reference the `media_asset_id` in `/worlds:generate` with\n   source type \"media_asset\"\n\n## Request Parameters\n\n- `file_name`: Your file's name (e.g., \"landscape.jpg\")\n- `extension`: File extension without dot (e.g., \"jpg\", \"png\", \"mp4\")\n- `kind`: Either \"image\" or \"video\"\n- `metadata`: Optional custom metadata object\n\n## Response\n\nReturns a `MediaAssetPrepareUploadResponse` containing:\n\n- `media_asset`: Object with `media_asset_id` (use this in world generation)\n- `upload_info`: Object with `upload_url`, `required_headers`, and `curl_example`\n\n## Uploading Your File\n\nUse the returned `upload_url` and `required_headers` to upload your file:\n\n```bash\ncurl --request PUT \\\n  --url <upload_url> \\\n  --header \"Content-Type: <content-type>\" \\\n  --header \"<header-name>: <header-value>\" \\\n  --upload-file /path/to/your/file\n```\n\nReplace:\n- `<upload_url>`: The `upload_url` from the response\n- `<content-type>`: MIME type (e.g., `image/png`, `image/jpeg`, `video/mp4`)\n- `<header-name>: <header-value>`: Each header from `required_headers`\n- `/path/to/your/file`: Path to your local file\n\n## Example Usage in World Generation\n\nAfter uploading, use the `media_asset_id` in a world generation request:\n\n```json\n{\n  \"world_prompt\": {\n    \"type\": \"image\",\n    \"image_prompt\": {\n      \"source\": \"media_asset\",\n      \"media_asset_id\": \"<your-media-asset-id>\"\n    }\n  }\n}\n```"
      operationId: prepare_media_asset_upload_marble_v1_media_assets_prepare_upload_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaAssetPrepareUploadRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaAssetPrepareUploadResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Prepare a media asset upload
      tags:
      - Marble
  /marble/v1/operations/{operation_id}:
    get:
      description: "Get an operation by ID.\n\nPoll this endpoint to check the status of a long-running operation.\nWhen done=true, the response field contains the generated world.\n\nArgs:\n    operation_id: The operation identifier from /worlds:generate.\n\nReturns:\n    GetOperationResponse[World] with:\n        - operation_id: Operation identifier\n        - created_at: Creation timestamp\n        - updated_at: Last update timestamp\n        - expires_at: Expiration timestamp\n        - done: true when complete, false while in progress\n        - error: Error details if failed, null otherwise\n        - metadata: Progress information and world_id\n        - response: Generated World if done=true, null otherwise\n        - cost: Settled credit cost breakdown; populated only when the\n          operation completed successfully (done=true with no error)\n          and a public price is known for its operation type. Failed\n          or in-progress operations return null.\n\nRaises:\n    HTTPException: 401 if unauthorized\n    HTTPException: 404 if operation not found\n    HTTPException: 500 if request fails"
      operationId: get_operation_marble_v1_operations__operation_id__get
      parameters:
      - in: path
        name: operation_id
        required: true
        schema:
          title: Operation Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOperationResponse_Union_World__PanoDepthToRgbResult__ExportWorldResult__'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Operation
      tags:
      - Marble
  /marble/v1/pano:depth_to_rgb:
    post:
      description: "Generate an RGB panorama from a depth panorama.\n\nProvide a depth panorama and a text prompt\ndescribing the desired appearance. The depth map\nsupplies the scene geometry; the model synthesizes\ntextures that match that geometry and returns a\npanoramic RGB image.\n\nAccepted depth inputs:\n\n* **EXR**: float depth values. Omit\n  ``z_min`` and ``z_max``.\n* **PNG**: depth values normalized to [0, 1].\n  Provide both ``z_min`` and ``z_max`` so the\n  service can decode the PNG correctly.\n\nFor a complete PNG-based workflow, see the\n[web-chisel-depth-png example](https://github.com/worldlabsai/worldlabs-api-examples/tree/main/web-chisel-depth-png).\n\nReturns a long-running ``Operation``. Poll\n``GET /operations/{operation_id}`` until\n``done`` is ``true``, then read the generated\npanorama URL from ``response.pano_url``.\n\nRaises:\n    HTTPException: 400 if invalid request\n    HTTPException: 402 if insufficient credits\n    HTTPException: 500 if generation could not start"
      operationId: pano_depth_to_rgb_marble_v1_pano_depth_to_rgb_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PanoDepthToRgbRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation_PanoDepthToRgbResult_'
          description: Successful Response
        '402':
          content:
            application/json:
              example:
                detail: Insufficient API credits to start this request. Add credits or enable auto-refill at https://platform.worldlabs.ai/billing.
          description: The account has insufficient API credits for this request.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Pano Depth To Rgb
      tags:
      - Marble
  /marble/v1/worlds/{world_id}:
    delete:
      description: "Delete a world by ID.\n\nPermanently deletes a world and its associated assets.\nOnly the world owner can delete a world.\n\nArgs:\n    world_id: The unique identifier of the world to delete.\n\nReturns:\n    DeleteWorldResponse confirming the deletion.\n\nRaises:\n    HTTPException: 403 if user is not the world owner\n    HTTPException: 404 if world not found\n    HTTPException: 500 if deletion fails"
      operationId: delete_world_marble_v1_worlds__world_id__delete
      parameters:
      - in: path
        name: world_id
        required: true
        schema:
          title: World Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteWorldResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Delete World
      tags:
      - Marble
    get:
      description: "Get a world by ID.\n\nRetrieves a world's details including generated assets if available.\nOnly the world owner or users with access to public worlds can retrieve them.\n\nArgs:\n    world_id: The unique identifier of the world.\n\nReturns:\n    World object with world_id, display_name, tags, assets, created_at,\n    updated_at, permission, model, world_prompt, and world_marble_url.\n\nRaises:\n    HTTPException: 404 if world not found or access denied"
      operationId: get_world_marble_v1_worlds__world_id__get
      parameters:
      - in: path
        name: world_id
        required: true
        schema:
          title: World Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/World'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get World
      tags:
      - Marble
  /marble/v1/worlds/{world_id}:export:
    post:
      description: 'Export a generated world asset.


        PLY splat exports are converted synchronously, cached in GCS, and returned

        as completed operations. HQ mesh exports reuse the existing async mesh

        export service and return an in-progress operation.'
      operationId: export_world_marble_v1_worlds__world_id__export_post
      parameters:
      - in: path
        name: world_id
        required: true
        schema:
          title: World Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportWorldRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportWorldResponse'
          description: Successful Response
        '402':
          content:
            application/json:
              example:
                detail: Insufficient API credits to start this request. Add credits or enable auto-refill at https://platform.worldlabs.ai/billing.
          description: The account has insufficient API credits for this request.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Export World
      tags:
      - Marble
  /marble/v1/worlds:generate:
    post:
      description: "Start world generation.\n\nCreates a new world generation job and returns a long-running operation.\nPoll the /operations/{operation_id} endpoint to check generation status\nand retrieve the generated world when complete.\n\nArgs:\n    request: The world generation request containing world_prompt, display_name,\n        tags, model, seed, and permission settings.\n\nReturns:\n    GenerateWorldResponse with operation_id and timestamps. Use the operation_id\n    to poll for completion.\n\nRaises:\n    HTTPException: 400 if invalid request or content violates policies\n    HTTPException: 402 if insufficient credits\n    HTTPException: 500 if generation could not be started"
      operationId: generate_world_marble_v1_worlds_generate_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorldsGenerateRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateWorldResponse'
          description: Successful Response
        '402':
          content:
            application/json:
              example:
                detail: Insufficient API credits to start this request. Add credits or enable auto-refill at https://platform.worldlabs.ai/billing.
          description: The account has insufficient API credits for this request.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Generate World
      tags:
      - Marble
  /marble/v1/worlds:list:
    post:
      description: "List worlds with optional filters.\n\nReturns worlds created through the API with optional filtering and pagination.\n\nArgs:\n    request: List request with optional filters:\n        - page_size: Number of results per page (default: 10)\n        - page_token: Pagination token from previous response\n        - status: Filter by status (e.g., \"COMPLETED\")\n        - model: Filter by model name (e.g., \"marble-1.0-plus\")\n        - tags: Filter by tags (matches worlds with any tag)\n        - is_public: Filter by visibility (true=public, false=private, null=all)\n        - created_after: Filter by creation time (after timestamp)\n        - created_before: Filter by creation time (before timestamp)\n        - sort_by: Sort order (\"created_at\" or \"updated_at\")\n\nReturns:\n    ListWorldsResponse with worlds list and next_page_token for pagination.\n\nRaises:\n    HTTPException: 400 if invalid parameters\n    HTTPException: 500 if request fails"
      operationId: list_worlds_marble_v1_worlds_list_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListWorldsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWorldsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: List Worlds
      tags:
      - Marble
components:
  schemas:
    MediaAssetReference:
      description: Reference to a previously uploaded MediaAsset.
      properties:
        media_asset_id:
          description: ID of a MediaAsset resource previously created and marked READY
          title: Media Asset Id
          type: string
        source:
          const: media_asset
          default: media_asset
          title: Source
          type: string
      required:
      - media_asset_id
      title: MediaAssetReference
      type: object
    MediaAsset:
      description: 'A user-uploaded media asset stored in managed storage.


        MediaAssets can be images, videos, or binary blobs that are used

        as input to world generation.'
      properties:
        created_at:
          description: Creation timestamp
          format: date-time
          title: Created At
          type: string
        extension:
          anyOf:
          - type: string
          - type: 'null'
          description: File extension without dot
          examples:
          - mp4
          - png
          - jpg
          title: Extension
        file_name:
          description: File name
          title: File Name
          type: string
        kind:
          $ref: '#/components/schemas/MediaAssetKind'
          description: High-level media type
          examples:
          - image
          - video
        media_asset_id:
          description: Server-generated media asset identifier
          title: Media Asset Id
          type: string
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Optional application-specific metadata
          title: Metadata
        updated_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Last update timestamp
          title: Updated At
      required:
      - media_asset_id
      - file_name
      - kind
      - created_at
      title: MediaAsset
      type: object
    InpaintPanoPrompt:
      description: For models that inpaint the masked portion of a pano image.
      properties:
        pano_image:
          $ref: '#/components/schemas/Content'
        pano_mask:
          $ref: '#/components/schemas/Content'
        text_prompt:
          anyOf:
          - type: string
          - type: 'null'
          title: Text Prompt
        type:
          const: inpaint-pano
          default: inpaint-pano
          title: Type
          type: string
      required:
      - pano_image
      - pano_mask
      title: InpaintPanoPrompt
      type: object
    World:
      description: A generated world, including asset URLs.
      properties:
        assets:
          anyOf:
          - $ref: '#/components/schemas/WorldAssets'
          - type: 'null'
          description: Generated world assets
        created_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Creation timestamp
          title: Created At
        display_name:
          description: Display name
          title: Display Name
          type: string
        model:
          anyOf:
          - type: string
          - type: 'null'
          description: Model used for generation
          title: Model
        permission:
          anyOf:
          - $ref: '#/components/schemas/Permission'
          - type: 'null'
          description: Access control permissions for the world
        tags:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: Tags associated with the world
          title: Tags
        updated_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Last update timestamp
          title: Updated At
        world_id:
          description: World identifier
          title: World Id
          type: string
        world_marble_url:
          description: World Marble URL
          title: World Marble Url
          type: string
        world_prompt:
          anyOf:
          - discriminator:
              mapping:
                depth-pano: '#/components/schemas/DepthPanoPrompt'
                image: '#/components/schemas/Prompt'
                inpaint-pano: '#/components/schemas/InpaintPanoPrompt'
                multi-image: '#/components/schemas/MultiImagePrompt-Output'
                text: '#/components/schemas/WorldTextPrompt-Output'
                video: '#/components/schemas/VideoPrompt-Output'
              propertyName: type
            oneOf:
            - $ref: '#/components/schemas/WorldTextPrompt-Output'
            - $ref: '#/components/schemas/Prompt'
            - $ref: '#/components/schemas/MultiImagePrompt-Output'
            - $ref: '#/components/schemas/VideoPrompt-Output'
            - $ref: '#/components/schemas/DepthPanoPrompt'
            - $ref: '#/components/schemas/InpaintPanoPrompt'
          - type: 'null'
          description: World prompt
          title: World Prompt
      required:
      - world_id
      - display_name
      - world_marble_url
      title: World
      type: object
    MultiImagePrompt-Input:
      description: 'Multi-image-to-world generation.


        Generates a world from multiple images. text_prompt is optional.


        Recommended image formats: jpg, jpeg, png, webp.'
      properties:
        disable_recaption:
          anyOf:
          - type: boolean
          - type: 'null'
          description: If True, use text_prompt as-is without recaptioning
          title: Disable Recaption
        multi_image_prompt:
          description: List of images with optional spherical locations
          items:
            $ref: '#/components/schemas/SphericallyLocatedContent-Input'
          title: Multi Image Prompt
          type: array
        reconstruct_images:
          default: false
          description: Whether to use reconstruction mode (allows up to 8 images, otherwise 4)
          title: Reconstruct Images
          type: boolean
        text_prompt:
          anyOf:
          - type: string
          - type: 'null'
          description: Optional text guidance (auto-generated if not provided)
          title: Text Prompt
        type:
          const: multi-image
          default: multi-image
          title: Type
          type: string
      required:
      - multi_image_prompt
      title: MultiImagePrompt
      type: object
    GetOperationResponse_Union_World__PanoDepthToRgbResult__ExportWorldResult__:
      properties:
        cost:
          anyOf:
          - $ref: '#/components/schemas/OperationCost'
          - type: 'null'
          description: Settled credit cost for the operation. Populated only on successful completion.
        created_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Creation timestamp
          title: Created At
        done:
          description: True if the operation is completed
          title: Done
          type: boolean
        error:
          anyOf:
          - $ref: '#/components/schemas/OperationError'
          - type: 'null'
          description: Error information if the operation failed
        expires_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Expiration timestamp
          title: Expires At
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Service-specific metadata, such as progress percentage
          title: Metadata
        operation_id:
          description: Operation identifier
          title: Operation Id
          type: string
        response:
          anyOf:
          - $ref: '#/components/schemas/World'
          - $ref: '#/components/schemas/PanoDepthToRgbResult'
          - $ref: '#/components/schemas/ExportWorldResult'
          - type: 'null'
          description: Result payload when done=true and no error. Structure depends on operation type.
          title: Response
        updated_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Last update timestamp
          title: Updated At
      required:
      - operation_id
      - done
      title: GetOperationResponse[Union[World, PanoDepthToRgbResult, ExportWorldResult]]
      type: object
    GenerateWorldResponse:
      description: Response from world generation endpoint.
      properties:
        cost:
          anyOf:
          - $ref: '#/components/schemas/OperationCost'
          - type: 'null'
          description: Settled credit cost for the operation. Populated only on successful completion.
        created_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Creation timestamp
          title: Created At
        done:
          description: True if the operation is completed
          title: Done
          type: boolean
        error:
          anyOf:
          - $ref: '#/components/schemas/OperationError'
          - type: 'null'
          description: Error information if the operation failed
        expires_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Expiration timestamp
          title: Expires At
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Service-specific metadata, such as progress percentage
          title: Metadata
        operation_id:
          description: Operation identifier
          title: Operation Id
          type: string
        response:
          anyOf:
          - {}
          - type: 'null'
          description: Result payload when done=true and no error. Structure depends on operation type.
          title: Response
        updated_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Last update timestamp
          title: Updated At
      required:
      - operation_id
      - done
      title: GenerateWorldResponse
      type: object
    WorldsGenerateRequest:
      description: Request to generate a world from text, image, multi-image, or video input.
      examples:
      - display_name: Coastal Castle
        model: marble-1.0
        permission:
          public: false
        seed: 42
        tags:
        - fantasy
        - coastal
        world_prompt:
          text_prompt: A grand, ivy-covered castle rises from the shoreline at sunset, its reflection shimmering in the tranquil ocean waves.
          type: text
      - display_name: Greenhouse Workshop
        model: marble-1.0-draft
        world_prompt:
          image_prompt:
            source: uri
            uri: https://example.com/my-image.jpg
          text_prompt: A peaceful, sunlit greenhouse workshop filled with plants and glassware, where soft light filters through cracked windows and ivy creeps along the walls.
          type: image
      - display_name: World from an Existing Pano
        model: marble-1.1
        world_prompt:
          image_prompt:
            source: uri
            uri: https://example.com/my-equirect-pano.jpg
          is_pano: auto
          type: image
      - permission:
          public: true
        world_prompt:
          type: video
          video_prompt:
            media_asset_id: 550e8400e29b41d4a716446655440000
            source: media_asset
      - display_name: World from Multiple Images
        model: marble-1.1
        world_prompt:
          multi_image_prompt:
          - azimuth: 0
            content:
              source: uri
              uri: https://example.com/image1.jpg
          - azimuth: 180
            content:
              source: uri
              uri: https://example.com/image2.jpg
          type: multi-image
      properties:
        display_name:
          anyOf:
          - maxLength: 64
            type: string
          - type: 'null'
          description: Optional human-readable title for the world (max 64 characters). Stored as world metadata and returned in world responses; does not affect generation. If omitted, World Labs may generate a title from the prompt.
          title: Display Name
        model:
          anyOf:
          - enum:
            - marble-1.0-draft
            - marble-1.0
            - marble-1.1
            - marble-1.1-plus
            type: string
          - enum:
            - Marble 0.1-mini
            - Marble 0.1-plus
            - Marble 1.1-plus
            type: string
          default: marble-1.1
          description: The model to use for generation. marble-1.1-plus includes dynamic world sizing. Legacy names ('Marble 0.1-plus', etc.) still work but are deprecated and will be removed in a future release.
          title: Model
        permission:
          $ref: '#/components/schemas/Permission'
          default:
            allow_id_access: false
            allowed_readers: []
            allowed_writers: []
            public: false
          description: The permission for the world
        seed:
          anyOf:
          - maximum: 4294967295
            minimum: 0
            type: integer
          - type: 'null'
          description: Random seed for generation
          title: Seed
        tags:
          anyOf:
          - items:
              type: string
            maxItems: 10
            type: array
          - type: 'null'
          description: Optional tags for the world (max 10 tags, each up to 32 characters)
          title: Tags
        world_prompt:
          description: The prompt specifying how to generate the world
          discriminator:
            mapping:
              image: '#/components/schemas/ImagePrompt'
              multi-image: '#/components/schemas/MultiImagePrompt-Input'
              text: '#/components/schemas/WorldTextPrompt-Input'
              video: '#/components/schemas/VideoPrompt-Input'
            propertyName: type
          oneOf:
          - $ref: '#/components/schemas/WorldTextPrompt-Input'
          - $ref: '#/components/schemas/ImagePrompt'
          - $ref: '#/components/schemas/MultiImagePrompt-Input'
          - $ref: '#/components/schemas/VideoPrompt-Input'
          title: World Prompt
      required:
      - world_prompt
      title: WorldsGenerateRequest
      type: object
    ExportWorldResult:
      description: Downloadable exported world asset.
      properties:
        asset_type:
          description: Exported asset family
          enum:
          - splats
          - mesh
          title: Asset Type
          type: string
        format:
          description: Exported file format
          enum:
          - ply
          - glb
          title: Format
          type: string
        mesh_variant:
          anyOf:
          - enum:
            - textured
            - vertex_colored
            type: string
          - type: 'null'
          description: Mesh variant returned for this export, if applicable
          title: Mesh Variant
        resolution:
          anyOf:
          - type: string
          - type: 'null'
          description: Splat resolution used for this export, if applicable
          title: Resolution
        url:
          description: Download URL for the exported asset
          title: Url
          type: string
      required:
      - asset_type
      - format
      - url
      title: ExportWorldResult
      type: object
    ExportWorldRequest:
      description: Request to export a generated world asset.
      properties:
        asset_type:
          description: 'Asset family to export: ''splats'' or ''mesh''.'
          enum:
          - splats
          - mesh
          title: Asset Type
          type: string
        format:
          description: Requested export format.
          enum:
          - ply
          - glb
          title: Format
          type: string
        mesh_variant:
          default: textured
          description: Mesh variant to return when an HQ mesh already exists.
          enum:
          - textured
          - vertex_colored
          title: Mesh Variant
          type: string
        resolution:
          default: full_res
          description: Splat resolution to convert when exporting splats as PLY.
          enum:
          - full_res
          - 500k
          - 150k
          - 100k
          title: Resolution
          type: string
      required:
      - asset_type
      - format
      title: ExportWorldRequest
      type: object
    SplatAssets:
      description: Gaussian splat asset URLs.
      properties:
        semantics_metadata:
          anyOf:
          - $ref: '#/components/schemas/WorldSemanticsMetadata'
          - type: 'null'
          description: Semantic metadata for the world
        spz_urls:
          anyOf:
          - additionalProperties:
              type: string
            type: object
          - type: 'null'
          description: URLs for SPZ format Gaussian splat files
          title: Spz Urls
      title: SplatAssets
      type: object
    ImageryAssets:
      descriptio

# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/world-labs/refs/heads/main/openapi/world-labs-marble-api-openapi.yml