> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.prolific.com/api-reference/submission-feedback-upload/llms.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. ## Why share feedback? We are always keen to hear feedback on the data you collect through Prolific. We know that many customers run their own scripts, quality checks and downstream analysis once a study is complete; those assessments are some of the most valuable feedback we can receive. Sharing feedback helps us to improve data quality and the reliability of our participant pool. This API gives you a simple, secure way to send that feedback to us in a variety of formats. ## 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. > **Note** > > 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 as it > sends the URL verbatim. > **Note** > > 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). ## API Docs - Submission Feedback Upload [Request a feedback upload URL](https://docs.prolific.com/api-reference/submission-feedback-upload/get-submission-feedback-upload-url.md) ## OpenAPI Specification The raw OpenAPI 3.1 specification for this API is available at: - [OpenAPI JSON](https://docs.prolific.com/openapi.json) - [OpenAPI YAML](https://docs.prolific.com/openapi.yaml)