---
title: "Prepare World Labs media asset upload"
method: POST
path: "/v1/worlds/media-assets/prepare-upload"
tags: ["Worlds"]
---

# Prepare World Labs media asset upload

`POST /v1/worlds/media-assets/prepare-upload`

## Request

- Base URL: `https://api.tokenlab.sh`
- URL: `https://api.tokenlab.sh/v1/worlds/media-assets/prepare-upload`
- Auth: HTTP bearer

Creates a World Labs media asset record and returns a signed upload URL. Use the returned media_asset_id from native world_prompt objects with source=media_asset. Media assets can only be used by the organization that created them.

## Request body

- object
  - `file_name` string, required: File name, such as landscape.jpg.
  - `kind` 'image' | 'video', required: High-level media type.
  - `extension` string, nullable: File extension without dot, such as jpg, png, or mp4.
  - `metadata` object, nullable: Optional application metadata.

## Response `200`

Upload prepared

- object
  - `media_asset` object, required
    - `created_at` string, date-time
    - `file_name` string, required
    - `kind` 'image' | 'video'
    - `media_asset_id` string, required
    - `extension` string, nullable
    - `metadata` object, nullable
    - `updated_at` string, date-time, nullable
  - `upload_info` object, required
    - `upload_method` string
    - `upload_url` string, uri, required
    - `curl_example` string
    - `required_headers` object

## Other responses

- `401`: Unauthorized - Invalid or missing API key
- `500` (unresolved $ref)

---

[API](https://skmtc.dev/tokenlab/apis/tokenlab-ai-gateway.md) · [All operations](https://skmtc.dev/tokenlab/apis/tokenlab-ai-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/tokenlab/apis/tokenlab-ai-gateway/revisions/3208bfbcda22?raw)
