---
title: "Generate signed upload/download media URLs"
method: POST
path: "/api/media/signed-url"
tags: ["media"]
---

# Generate signed upload/download media URLs

`POST /api/media/signed-url`

## Request body

- object
  - `action` 'upload' | 'download', required
  - `path` string
  - `prefix` 'templates' | 'memes'
  - `ownerToken` string
  - `contentType` string
  - `draftId` string — Optional draft lease identifier
  - `expiresInSeconds` integer

## Response `200`

Signed URL generated

## Other responses

- `201` — Signed upload URL generated
- `400` — Invalid request
- `403` — Private download signing requires a valid ownerToken

---

[API](https://skmtc.net/memesio/apis/memesio-api-contracts.md) · [All operations](https://skmtc.net/memesio/apis/memesio-api-contracts/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/memesio/memesio-api-contracts/revisions/826e6edbf294/schema)
