> ## Documentation Index
> Fetch the complete documentation index at: https://developers.respondent.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Project statuses

> Manage project lifecycle from draft to close

# Managing project status

Each project status PATCH endpoint updates two key fields that control what a project is doing:

* **projectStatus**: `DRAFT`, `PAID`, `ARCHIVED`, `CLOSED`
* **projectRecruitingStatus**: `RECRUITING`, `RECRUITED`, `PAUSED`

## Status transitions

| Action      | Endpoint                                         | projectStatus | projectRecruitingStatus | Requirements                                     |
| ----------- | ------------------------------------------------ | ------------- | ----------------------- | ------------------------------------------------ |
| **Publish** | [PATCH .../publish](/projects/publish-a-project) | `PAID`        | `RECRUITING`            | Must be `DRAFT`, must have 2+ screener questions |
| **Pause**   | [PATCH .../pause](/projects/pause-a-project)     | `PAID`        | `PAUSED`                | Must currently be `PAID`                         |
| **Close**   | [PATCH .../close](/projects/close-a-project)     | `CLOSED`      | `RECRUITED`             | No unpaid participants                           |

### Publish details

When published, the following fields are set automatically:

* `publishedAt` = current time
* `expireAt` = 1 month from now

### Close details

When closed, the following fields are populated:

* `closedDetails.closed` = `true`
* `closedDetails.closedMessage` = message passed in the request
* `closedDetails.closedByUserId` = current user ID
* `closedDetails.closedOnDate` = current time

<Warning>
  If your project has screener responses in `SCHEDULED` or `ATTENDED` status, you will receive a **400 error** with the message "Project has unpaid participants and cannot be closed". Ensure all participants are paid before closing.
</Warning>
