---
title: "Request a presigned upload URL"
method: POST
path: "/v1/biz/file-uploads/user/presign"
tags: ["file-uploads"]
---

# Request a presigned upload URL

`POST /v1/biz/file-uploads/user/presign`

## Request

- Base URL: `https://api.earnation.live` (the document declares no server; this is the origin it was published from)
- URL: `https://api.earnation.live/v1/biz/file-uploads/user/presign`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `Authorization`
- TypeScript: <https://skmtc.dev/earnation/apis/earnation-api/docs/v1/biz/file-uploads/user/presign/post.ts> (a function with typed inputs; its response is checked against the schema)

Same operation in user, business and business-user contexts (distinct paths/auth).

## Request body

- HttpPresignUploadRequest
  - `content_type` string, required
  - `file_size_bytes` integer, required
  - `filename` string, required
  - `topic_id` integer, required

## Response `200`

OK

- object

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: Not Found
- `500`: Internal Server Error

---

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