Prepare a media asset upload

Changed on

Prepare a media asset upload for use in world generation.

This API endpoint creates a media asset record and returns a signed upload URL. Use this workflow to upload images or videos that you want to reference in world generation requests.

Workflow

  1. Prepare Upload (this endpoint): Get a media_asset_id and upload_url
  2. Upload File: Use the signed URL to upload your file
  3. Generate World: Reference the media_asset_id in /worlds:generate with source type "media_asset"

Request Parameters

  • file_name: Your file's name (e.g., "landscape.jpg")
  • extension: File extension without dot (e.g., "jpg", "png", "mp4")
  • kind: Either "image" or "video"
  • metadata: Optional custom metadata object

Response

Returns a MediaAssetPrepareUploadResponse containing:

  • media_asset: Object with media_asset_id (use this in world generation)
  • upload_info: Object with upload_url, required_headers, and curl_example

Uploading Your File

Use the returned upload_url and required_headers to upload your file:

curl --request PUT \
  --url <upload_url> \
  --header "Content-Type: <content-type>" \
  --header "<header-name>: <header-value>" \
  --upload-file /path/to/your/file

Replace:

  • <upload_url>: The upload_url from the response
  • <content-type>: MIME type (e.g., image/png, image/jpeg, video/mp4)
  • <header-name>: <header-value>: Each header from required_headers
  • /path/to/your/file: Path to your local file

Example Usage in World Generation

After uploading, use the media_asset_id in a world generation request:

{
  "world_prompt": {
    "type": "image",
    "image_prompt": {
      "source": "media_asset",
      "media_asset_id": "<your-media-asset-id>"
    }
  }
}
post/marble/v1/media-assets:prepare_upload

Request

Request body

extensionstring nullable

File extension without dot

file_namestring required

File name

kind'image' | 'video' required

High-level media asset type.

metadataobject nullable

Optional application-specific metadata

Example request

{
  "extension": "mp4"
}

Response

Successful Response

Example response

{
  "media_asset": {
    "extension": "mp4"
  }
}

Changes

    • breaking

      added required request body

    • info

      api operation id prepare_media_asset_upload_marble_v1_media_assets_prepare_upload_post was added

    • info

      added the non-success response with the status

    • info

      added the success response with the status