---
title: "Media Vault Upload"
method: POST
path: "/v1/{account}/media/vault"
---

# Media Vault Upload

`POST /v1/{account}/media/vault`

## Request

- Base URL: `https://creator-api.com` (the document declares no server; this is the origin it was published from)
- URL: `https://creator-api.com/v1/{account}/media/vault`
- Auth: none declared

Upload a photo or video and get back a PERSISTENT numeric vault media id (unlike
POST /media/upload, whose descriptor is single-use and must be attached to a post or
message immediately). OnlyFans only for now -- Fansly's vault model differs, follow-up.

Send either multipart form-data with a `file` field, OR a JSON body with a `file_url`
(we fetch it server-side) -- exactly one of the two. Optional multipart field / JSON
key `async`: `true` always returns 202 immediately with a polling URL; left unset, the
upload runs inline and returns 200 with the result if it finishes within ~20s (typical
for a photo), otherwise falls back to the same 202 + polling response as `async: true`
-- videos regularly need longer than that to transcode. Poll with
GET /v1/{account}/media/vault/upload-status/{job_id} for pending/processing/completed/failed.
Billed as a write (charged on job creation, refunded automatically if the job fails).

## Path parameters

- `account` string, required

## Headers

- `x-api-key` string, nullable
- `authorization` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/creator-api/apis/creatorapi.md) · [All operations](https://skmtc.dev/creator-api/apis/creatorapi/llms.txt) · [OpenAPI document](https://skmtc.dev/creator-api/apis/creatorapi/revisions/530fde3d35cf?raw)
