> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.prolific.com/llms.txt.
> For full documentation content, see https://docs.prolific.com/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.prolific.com/_mcp/server.

# Uploading submission feedback files

This guide explains how to use the Submission Feedback Upload API to submit feedback files for your completed studies.

## Overview

The Submission Feedback Upload API lets you upload feedback files in any schema for a pain-free experience. Uploading follows a secure two-step process:

1. Request a pre-signed upload URL.
2. Upload your file directly to the provided upload URL.

This approach enables secure and efficient file transfers while supporting a range of file formats for your research feedback, namely CSV, XLS, XLSX, JSON, TXT and PDF.

## Prerequisites

* A Prolific researcher account with API access.
* Your API token.
* The feedback file you wish to upload.

## Step 1: Request an upload URL

To begin the upload process, request a secure upload URL by sending a `GET` request to the endpoint below.

```bash
GET /api/v1/submissions/signals/upload-url/{filename}?workspace_id={id}
```

| Parameter      | In    | Description                                                                                         |
| -------------- | ----- | --------------------------------------------------------------------------------------------------- |
| `filename`     | path  | The name of the file you want to upload, including its extension (e.g. `participant_feedback.csv`). |
| `workspace_id` | query | Your Prolific workspace ID.                                                                         |

### Example request

```bash
curl -X GET \
  -H "Authorization: Token YOUR_API_TOKEN" \
  "https://api.prolific.com/api/v1/submissions/signals/upload-url/study123_feedback.csv?workspace_id=6278acb09062db3b35bcb123"
```

### Example response

```json
{
  "expires_at": "2025-05-15T11:11:14.321Z",
  "http_method": "PUT",
  "upload_url": "https://submission-signals.s3.amazonaws.com/study123_feedback.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."
}
```

The response includes a temporary, pre-signed `upload_url` that you use in the next step.

## Step 2: Upload your file

After receiving the upload URL, upload your file directly to it with an HTTP `PUT` request.

```bash
curl -X PUT \
  --upload-file "/path/to/your/participant_feedback.csv" \
  "https://submission-signals.s3.amazonaws.com/study123_feedback.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."
```

For successful uploads, you'll receive an HTTP `200 OK` response with an empty body.

The `PUT` request must **not** include an `Authorization` header. The upload URL is
already authenticated by its query-string signature; sending your API token as well
will cause the upload to fail. Your API token is only needed for Step 1.

Use the `upload_url` **exactly as returned**. Some API clients (e.g. Postman, Bruno)
re-encode query parameters, which corrupts the signature and results in an error.
If in doubt, upload with `curl` as shown above — it sends the URL verbatim.

The pre-signed `upload_url` is temporary — it is valid for **20 minutes** from when it
was issued. Upload your file before the `expires_at` time in the response, otherwise
request a new URL. Note that `expires_at` is in **UTC**, and an expired URL returns
`403 Access Denied`.

## Supported file formats

The API supports the following file formats:

* CSV
* Excel spreadsheets (XLS, XLSX)
* JSON files
* TXT files
* PDF files

If you would like to upload your feedback file in a format that isn't currently supported, please [get in touch](https://researcher-help.prolific.com/en/articles/476151-api-support).

## Best practices

1. **File naming** - use descriptive and consistent file naming conventions.
2. **File size** - there is a maximum file size limit of 5GB. For files approaching this limit, consider compressing them or splitting them into multiple smaller files where possible.
3. **Token security** - keep your API token secure and never share it in public repositories.
4. **Retries** - consider implementing retry logic with exponential backoff for transient failures (e.g. network timeouts) when uploading large files.

## Support

If you encounter any issues or have questions about the Submission Feedback Upload API, please [contact our support team](https://researcher-help.prolific.com/en/articles/476151-api-support).