---
title: "Create a project"
method: POST
path: "/v1/apps"
tags: ["Projects"]
deprecated: true
---

# Create a project

`POST /v1/apps`

## Request

- Base URL: `https://api.spice.ai`
- URL: `https://api.spice.ai/v1/apps`
- Auth: HTTP bearer

> **Deprecated.**

Legacy alias of `/v1/projects`. Projects were previously called apps. Creates a new project in the authenticated organization.

## Headers

- `X-Org-Name` string

## Request body

- object
  - `name` string, required: Project name (letters, numbers, hyphens only)
  - `region` 'us-east-1' | 'us-west-2': Cloud region where a managed project will be deployed (e.g. `us-east-1`). Omit this, `cname`, and `cluster_name` to create an unattached standalone project whose placement is resolved when linked.
  - `cname` string: **Deprecated.** Internal region CNAME (e.g. `us-east-1-prod-aws-data`). Use `region` instead. Accepted for backwards compatibility when `region` is omitted. Omit all region sources to create an unattached standalone project.
  - `cluster_name` string: Name of the dedicated cluster to deploy to, as listed by `GET /v1/clusters`. Provide exactly one of `region` or `cluster_name`. When set, the region/routing are derived from the cluster; if `region` is also provided it must match the cluster's region. Omit all region sources to create an unattached standalone project.
  - `description` string: Project description
  - `visibility` 'public' | 'private'
  - `default_alerts` boolean: Create default monitoring alerts for the new managed project. False skips initial setup. Manual alert creation remains available.
  - `tags` object: Key-value tags for the project
  - `update_channel` 'stable' | 'preview' | 'nightly': Update channel for a managed project deployment. A standalone project has no spicepod until linking, so configure its channel after linking.
  - `replicas` integer: Number of replicas for a managed project. Rejected for standalone projects.
  - `resources` object: Resource requests and limits for a managed project container. Rejected for standalone projects.
    - `limits` object
      - `cpu` string: Whole-number vCPU limit, or '-' for no CPU limit
      - `memory` string: Memory limit in Gi (for example, 16Gi)
      - `ephemeral-storage` string: Ephemeral storage limit in Gi (for example, 8Gi)
    - `requests` object
      - `cpu` string: CPU request. Minimum 100 millicores (for example, 100m or 0.1).
  - `executor` object: Executor container configuration for a managed project. Rejected for standalone projects.
    - `replicas` integer: Number of executor replicas
    - `resources` object: Resource requests and limits for the executor container
      - `limits` object
        - `cpu` string: Whole-number vCPU limit, or '-' for no CPU limit
        - `memory` string: Memory limit in Gi (for example, 16Gi)
        - `ephemeral-storage` string: Ephemeral storage limit in Gi (for example, 8Gi)
      - `requests` object
        - `cpu` string: CPU request. Minimum 100 millicores (for example, 100m or 0.1).

## Response `201`

Project created successfully. The response may include a `warning` field if initial configuration could not be applied.

- ProjectWithConfig
  - `id` integer: Unique identifier for the project
  - `name` string: Name of the project
  - `kind` 'managed' | 'standalone' | 'byoc': Resolved project hosting model
  - `description` string, nullable: Description of the project
  - `visibility` 'public' | 'private': Visibility setting for the project
  - `created_at` string, date-time: Timestamp when the project was created
  - `cname` string, nullable: Region identifier
  - `cluster_name` string, nullable: Resolved dedicated cluster name; null for projects not assigned to a dedicated cluster.
  - `endpoint` string, nullable: The data-plane endpoint the project connects to, or null before a standalone instance is attached.
  - `production_branch` string, nullable: Production branch for the project
  - `api_key` string: Deprecated. Use the API Keys endpoints instead.
  - `tags` object, nullable: Key-value tags for the project
  - `forked_from` object, nullable: The project this project was forked from, while that project is live in the same organization. Null for a project that was not created as a fork.
    - `id` integer, required: ID of the source project
    - `name` string, required: Name of the source project
  - `paused_at` string, date-time, nullable: Timestamp when the project was paused; null while running
  - `warning` string, nullable: Present when the project was created but initial configuration could not be applied
  - `config` object, nullable: Runtime configuration; null for an unattached standalone project.
    - `spicepod` object, nullable: Spicepod configuration
    - `registry` string, nullable: Container registry for the runtime image
    - `image_tag` string, nullable: Runtime image tag
    - `update_channel` 'stable' | 'preview' | 'nightly' | 'null', nullable: Update channel for the runtime
    - `replicas` integer: Number of replicas
    - `resources` object, nullable: Resource requests and limits for the project container
      - `limits` object
        - `cpu` string: Whole-number vCPU limit, or '-' for no CPU limit
        - `memory` string: Memory limit in Gi (for example, 16Gi)
        - `ephemeral-storage` string
      - `requests` object
        - `cpu` string: CPU request. Minimum 100 millicores (for example, 100m or 0.1).
    - `executor` object, nullable: Executor container configuration
      - `replicas` integer: Number of executor replicas
      - `resources` object: Resource requests and limits for the executor container
        - `limits` object
          - `cpu` string: Whole-number vCPU limit, or '-' for no CPU limit
          - `memory` string: Memory limit in Gi (for example, 16Gi)
          - `ephemeral-storage` string
        - `requests` object
          - `cpu` string: CPU request. Minimum 100 millicores (for example, 100m or 0.1).
    - `region` string, nullable: Cloud region code (e.g., us-east-1)
    - `node_group` string, nullable: Node group for scheduling the project runtime
    - `storage_claim_size_gb` number, nullable: Storage claim size in GB

## Other responses

- `400`: Invalid request body or invalid region
- `401`: Unauthorized
- `403`: Insufficient scope, dedicated-cluster assignment or special-org private-compute ceilings required for resource limits, or requested resources exceed dedicated-cluster capacity
- `404`: Organization not found, including an organization deleted while the project was being created
- `409`: A project with this name already exists, or the project was deleted while its initial configuration was being written (`code` is `project_deleted`)
- `429`: Too many project creation requests (rate limited)
- `500`: Project creation failed, including when the name-collision check could not be read

---

[API](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api.md) - [All operations](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api/revisions/5f3b75dd847d?raw)
