---
title: "Playground Browser Upload"
method: POST
path: "/v1/playground/upload"
---

# Playground Browser Upload

`POST /v1/playground/upload`

## Request

- Base URL: `https://api.empiriolabs.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.empiriolabs.ai/v1/playground/upload`
- Auth: none declared
- TypeScript: <https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/docs/v1/playground/upload/post.ts> (a function with typed inputs; its response is checked against the schema)

Browser-direct playground upload, token-authed (see
_verify_playground_upload_token). The dashboard holds the customer
session and mints the token; the browser POSTs the raw file bytes here.

This endpoint is on api.empiriolabs.ai, which is NOT behind the platform
pull zone that silently caps POST bodies near 10 MB, so large videos and
audio arrive intact (verified 2026-06-30: a 22 MB body round-trips here
while the same upload through platform.empiriolabs.ai truncated to ~10 MB).
Returns the stored path + a signed URL; the dashboard records the
playground_uploads row via its own commit route (this service holds no
Supabase credentials).

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway.md) - [All operations](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/llms.txt) - [OpenAPI document](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/revisions/94bb966b0560?raw)
