---
title: "Get presigned upload URL"
method: POST
path: "/v1/studies/uploads/presigned-url"
tags: ["Study File Uploads"]
---

# Get presigned upload URL

`POST /v1/studies/uploads/presigned-url`

Generate a pre-signed S3 URL for uploading study stimuli files. Use the returned URL and fields to upload the file via a multipart POST directly to S3, then include the S3 key in the create study request.

## Request body

- PresignedUrlRequest
  - `file_type` string, required — MIME type of the file. Supported types: image/*, video/*, audio/*, application/pdf, plus text/plain and DOCX as BBot question/text-stim source documents.
  - `filename` string, required

## Response `200`

OK

- PresignedUrlResponse
  - `key` string, required
  - `max_file_size` integer, required
  - `presigned_post_data` PresignedPostData, required
    - `fields` object, required
    - `url` string, required

## Other responses

- `400` — Validation error or unsupported file type
- `401` — Authentication failed
- `403` — Not authorized
- `429` — Upload rate limit exceeded

---

[API](https://skmtc.dev/viewpoints/apis/viewpoints-study-api.md) · [All operations](https://skmtc.dev/viewpoints/apis/viewpoints-study-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/viewpoints/viewpoints-study-api/revisions/0145b20e3bb0/schema)
