---
title: "Create a subproject"
method: POST
path: "/api/projects"
tags: ["Projects"]
---

# Create a subproject

`POST /api/projects`

Creates a subproject under the authenticated root project.

Creating a project is only allowed when authenticated as a top-level (root) project.
A subproject cannot itself contain subprojects, so attempting to create one while
authenticated as a subproject fails with `422 nested_subprojects_not_allowed`.

The response includes the `signing_key`. This is the only time it is returned — it
cannot be retrieved through the API afterward, so capture it from this response.

#### Permissions

The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Management_.

[Learn more about API scopes](/docs/platform/your-signalwire-api-space).

## Request body

- ProjectsCreateProjectRequest — Request body for creating a subproject.
  - `name` string, required — The name of the subproject.
  - `protect_recordings` boolean — When enabled, recordings created within the project require authentication to access.
  - `protect_message_media` boolean — When enabled, message media created within the project requires authentication to access.
  - `protect_fax_media` boolean — When enabled, fax media created within the project requires authentication to access.
  - `force_https_requests` boolean — When enabled, requests made to the project's webhooks and callbacks must use HTTPS.

## Response `201`

The request has succeeded and a new resource has been created as a result.

- ProjectsProjectWithSigningKey — A project, including its `signing_key`. The `signing_key` is only returned when creating a subproject or rotating a project's signing key. It is not retrievable afterward, so capture it from the response.
  - `id` string, uuid, required — Universal Unique Identifier.
  - `name` string, required — The name of the project.
  - `parent_project_id` string, uuid, required — Universal Unique Identifier.
  - `subproject` boolean, required — `true` when this project is a subproject.
  - `region_preference` string, required — The effective region preference for the project. Returned in all responses; it is not currently settable through this API.
  - `protect_recordings` boolean, required — When enabled, recordings created within the project require authentication to access.
  - `protect_message_media` boolean, required — When enabled, message media created within the project requires authentication to access.
  - `protect_fax_media` boolean, required — When enabled, fax media created within the project requires authentication to access.
  - `force_https_requests` boolean, required — When enabled, requests made to the project's webhooks and callbacks must use HTTPS.
  - `created_at` string, date-time, required — The date and time when the project was created.
  - `updated_at` string, date-time, required — The date and time when the project was last updated.
  - `signing_key` string, required — The project's signing key. Only returned on create and signing-key rotation responses; it cannot be retrieved through the API afterward.

## Other responses

- `401` — Access is unauthorized.
- `422` — The request could not be processed. When creating a project while authenticated as a subproject, the response includes the `nested_subprojects_not_allowed` code. A blank or overly long `name` returns a standard validation error.
- `500` — An internal server error occurred.

---

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