---
title: "Update a project"
method: PATCH
path: "/api/v1/projects/{project_id}/"
tags: ["projects"]
---

# Update a project

`PATCH /api/v1/projects/{project_id}/`

Update a project's details.
Public projects support partial updates to `public_details`.
Once a public project has published studies, `public_details.title` can no longer be changed.

## Path parameters

- `project_id` string, required

## Headers

- `Authorization` string, required

## Request body

- UpdateProject — Partial update payload for a project. All fields are optional.
  - `title` string — Name of project
  - `description` string — What is this project used for
  - `owner` string — User id of the creator of the project.
  - `position` integer — Position of the project within a workspace.
  - `hidden` boolean — Whether the project is hidden in workspace listings.
  - `type` 'PRIVATE' | 'PUBLIC' — Project visibility type.
  - `public_details` PublicDetails
    - `status` 'ENABLED' | 'DISABLED' — Participant-facing publication status for a public project.
    - `title` string — Participant-facing title for the public project.
    - `short_description` string — Short participant-facing summary shown to participants for the public project.
    - `description` string — Additional participant-facing information shown to participants for the public project.
  - `is_sequential` boolean — Whether the project is configured as sequential.

## Response `200`

Updated project redirect link

- Project
  - `id` string, required — Project id. It is created by Prolific.
  - `title` string, required — Name of project
  - `description` string — What is this project used for
  - `owner` string — User id of the creator of the project. It is created by Prolific.
  - `type` 'PRIVATE' | 'PUBLIC', required — Project visibility type.
  - `public_details` PublicDetails
    - `status` 'ENABLED' | 'DISABLED' — Participant-facing publication status for a public project.
    - `title` string — Participant-facing title for the public project.
    - `short_description` string — Short participant-facing summary shown to participants for the public project.
    - `description` string — Additional participant-facing information shown to participants for the public project.
  - `users` WorkspaceUser[] — Data for all users who have access to this project
    - `id` string, required — Id of user
    - `name` string — Name of user
    - `email` string — email of user
    - `roles` string[] — User roles in workspace
  - `workspace` string — Id of the workspace this project is in. This is created by Prolific.
  - `naivety_distribution_rate` number, double, nullable — The rate at which the studies within this project are distributed.
  - `is_longitudinal` boolean — Whether this is a longitudinal (multi-wave) project.
  - `longitudinal` ProjectLongitudinal — Only present when `is_longitudinal` is true.
    - `config` LongitudinalConfig
      - `target_completions` integer, required — Target number of completions for the final wave.
      - `retention_rate` number, double, required — Expected retention rate between waves.
      - `filters` LongitudinalConfigFiltersItems[] — Recruitment filters applied to participants entering the first wave. Uses the same filter shapes as study creation.
        - union
          - SelectFilter
            - `filter_id` string, required — ID of the "select" type filter.
            - `selected_values` string[], required — This schema applies for filters of the `select` type, as defined in the [filter list response](\#tag/Filters/paths/~1api~1v1~1filters~1/get). Array of IDs matching the response IDs, from the `select` filter's `choices` (see response linked above). String format should match the `data_type` of the `select` filter's `choices` (see response linked above).
            - `weightings` object — Ratios to control the distribution of participants across the selected values. Integer percentages, floats, and exact quantities are valid inputs.
          - RangeFilter
            - `filter_id` string, required — ID of the "range" type filter.
            - `selected_range` RangeFilterSelectedRange, required — This schema applies for filters of the `range` type, as defined in the [filter list response](\#tag/Filters/paths/~1api~1v1~1filters~1/get). A dictionary with two possible objects, 'lower' and 'upper'. At least one must be present and a non-null value. The expected data type for these values is defined by the `range` filter's `data_type` (see response linked above). If the data_type is a date, string format should be a parseable ISO8601 date string. Date values should be provided as a string in ISO 8601 format. Leaving a value as null will result in that bound being set to the lowest or highest possible value, depending on whether it is the upper or lower bound.
              - …
            - `weightings` object — Ratios to control the distribution of participants across the selected values. Integers and exact quantities are valid inputs.
          - CompositeFilter
            - `filter_id` 'and' | 'or', required — Composite filter group operator. Use `and` when every child filter must match, or `or` when at least one child filter must match.
            - `selected_filters` CompositeFilterSelectedFiltersItems[], required — Child filters in this group. Children can be select filters, range filters, or supported nested composite groups.
              - …
    - `retention` ProjectLongitudinalRetention — Computed retention projections and actuals, keyed by wave study id.
    - `waves` string[] — Ordered list of study IDs defining the project's current wave sequence. Empty if the project has no waves yet. Set via `longitudinal.waves` on `PATCH` (see `UpdateProject`).

## Other responses

- `400` — Error

---

[API](https://skmtc.net/prolific/apis/api-reference.md) · [All operations](https://skmtc.net/prolific/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/prolific/api-reference/versions/dc6f073a9827/schema)
