---
title: "Create a media object"
method: POST
path: "/v1/media"
tags: ["Media"]
---

# Create a media object

`POST /v1/media`

## Request

- Base URL: `https://api.samva.dev`
- URL: `https://api.samva.dev/v1/media`
- Auth: API key in header `x-api-key`

Creates the media object in the pending state and returns it with the upload instruction — URL, method, and headers — for putting its bytes into storage. Requires `messages:create`, or `email:send` for `attachment` media.

## Request body

- CreateMediaPayload
  - `filename` string, required
  - `contentType` string, required
  - `sizeBytes` integer, required
  - `purpose` 'attachment' | 'avatar' | 'review_evidence', required
  - `checksumSha256` string, nullable

## Response `201`

CreatedMedia

- CreatedMedia
  - `id` string, required
  - `organizationId` string, required
  - `status` 'pending' | 'uploading' | 'processing' | 'ready' | 'failed' | 'deleted', required
  - `filename` string, required
  - `contentType` string, required
  - `sizeBytes` number, required
  - `width` number, nullable, required
  - `height` number, nullable, required
  - `durationMs` number, nullable, required
  - `purpose` 'attachment' | 'avatar' | 'review_evidence', required
  - `checksumSha256` string, nullable, required
  - `expiresAt` string, nullable, required
  - `createdAt` string, required
  - `confirmedAt` string, nullable, required
  - `upload` MediaUploadInstruction, required
    - `url` string, required
    - `method` 'PUT', required
    - `headers` object, required
    - `expiresAt` string, required

## Other responses

- `401`: UnauthorizedError
- `403`: ForbiddenError
- `422`: ValidationError
- `500`: InternalError
- `504`: GatewayTimeoutError

---

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