---
title: "Create Media Upload"
method: POST
path: "/api/public/media/uploads"
tags: ["public", "media"]
---

# Create Media Upload

`POST /api/public/media/uploads`

## Request

- Base URL: `https://api.electricair.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.electricair.io/api/public/media/uploads`
- Auth: none declared

Creates a pending media row and returns its S3 upload URL.

## Request body

- MediaUploadCreateRequest
  - `deal_id` string, required
  - `file_type` string, required
  - `tag` string, required
  - `original_filename` string, nullable
  - `media_type` 'video' | 'image'
  - `caption` string, nullable
  - `file_size_bytes` integer, nullable

## Response `200`

OK

- MediaUploadCreateResponse
  - `media` MediaResponse, required
    - `id` integer, required
    - `deal_id` string, required
    - `tag` string, required
    - `s3_url` string, required
    - `s3_key` string, required
    - `upload_status` string
    - `is_playable` boolean
    - `created_at` string, required
    - `updated_at` string, required
    - `media_type` 'video' | 'image' | 'text', required
    - `caption` string, nullable
    - `original_filename` string, nullable
    - `content_type` string, nullable
    - `file_size_bytes` integer, nullable
    - `upload_error_code` string, nullable
    - `upload_error_message` string, nullable
    - `uploaded_at` string, nullable
    - `transcode_status` string
    - `transcoded_s3_key` string, nullable
    - `transcode_error_message` string, nullable
    - `playback_state` string
    - `lifecycle_state` 'pending_upload' | 'processing' | 'ready' | 'ready_degraded' | 'upload_failed' | 'canceled'
  - `presigned_url` string, required

---

[API](https://skmtc.dev/electricair/apis/electric-air-autoquote-api.md) - [All operations](https://skmtc.dev/electricair/apis/electric-air-autoquote-api/llms.txt) - [OpenAPI document](https://skmtc.dev/electricair/apis/electric-air-autoquote-api/revisions/a13d832a5676?raw)
