---
title: "Create a new project."
method: POST
path: "/api/v1/projects"
tags: ["ProjectService"]
---

# Create a new project.

`POST /api/v1/projects`

## Request body

- ProjectProjectCreateRequest — ProjectCreateRequest defines project creation parameters.
  - `project` V1alpha1AppProject
    - `metadata` V1ObjectMeta — ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.
      - `annotations` object
      - `clusterName` string
      - `creationTimestamp` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
        - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
        - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
      - `deletionGracePeriodSeconds` string, int64
      - `deletionTimestamp` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
        - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
        - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
      - `finalizers` string[]
      - `generateName` string — GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency +optional
      - `generation` string, int64
      - `initializers` V1Initializers — Initializers tracks the progress of initialization.
        - `pending` V1Initializer[]
          - `name` string — name of the process that is responsible for initializing this object.
        - `result` V1Status — Status is a return value for calls that don't return other objects.
          - `code` integer
          - `details` V1StatusDetails — StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.
            - `causes` V1StatusCause[]
              - …
            - `group` string
            - `kind` string
            - `name` string
            - `retryAfterSeconds` integer
            - `uid` string
          - `message` string
          - `metadata` V1ListMeta — ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
            - `continue` string — continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.
            - `resourceVersion` string
            - `selfLink` string
          - `reason` string
          - `status` string
      - `labels` object
      - `managedFields` V1ManagedFieldsEntry[] — ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like "ci-cd". The set of fields is always in the version that the workflow used when modifying the object. This field is alpha and can be changed or removed without notice. +optional
        - `apiVersion` string — APIVersion defines the version of this resource that this field set applies to. The format is "group/version" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.
        - `fields` V1Fields
          - `map` object — Map stores a set of fields in a data structure like a Trie. Each key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:<name>', where <name> is the name of a field in a struct, or key in a map 'v:<value>', where <value> is the exact json formatted value of a list item 'i:<index>', where <index> is position of a item in a list 'k:<keys>', where <keys> is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set. The exact format is defined in k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal
        - `manager` string — Manager is an identifier of the workflow managing these fields.
        - `operation` string — Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.
        - `time` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
          - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
          - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
      - `name` string
      - `namespace` string — Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces +optional
      - `ownerReferences` V1OwnerReference[]
        - `apiVersion` string — API version of the referent.
        - `blockOwnerDeletion` boolean
        - `controller` boolean
        - `kind` string
        - `name` string
        - `uid` string
      - `resourceVersion` string — An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency +optional
      - `selfLink` string
      - `uid` string — UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids +optional
    - `spec` V1alpha1AppProjectSpec
      - `clusterResourceWhitelist` V1GroupKind[]
        - `group` string
        - `kind` string
      - `description` string
      - `destinations` V1alpha1ApplicationDestination[]
        - `namespace` string
        - `server` string
      - `namespaceResourceBlacklist` V1GroupKind[]
        - `group` string
        - `kind` string
      - `roles` V1alpha1ProjectRole[]
        - `description` string
        - `groups` string[]
        - `jwtTokens` V1alpha1JWTToken[]
          - `exp` string, int64
          - `iat` string, int64
        - `name` string
        - `policies` string[]
      - `sourceRepos` string[]

## Response `200`

(empty)

- V1alpha1AppProject
  - `metadata` V1ObjectMeta — ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.
    - `annotations` object
    - `clusterName` string
    - `creationTimestamp` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
      - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
      - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
    - `deletionGracePeriodSeconds` string, int64
    - `deletionTimestamp` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
      - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
      - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
    - `finalizers` string[]
    - `generateName` string — GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency +optional
    - `generation` string, int64
    - `initializers` V1Initializers — Initializers tracks the progress of initialization.
      - `pending` V1Initializer[]
        - `name` string — name of the process that is responsible for initializing this object.
      - `result` V1Status — Status is a return value for calls that don't return other objects.
        - `code` integer
        - `details` V1StatusDetails — StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.
          - `causes` V1StatusCause[]
            - `field` string — The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional. Examples: "name" - the field "name" on the current resource "items[0].name" - the field "name" on the first array entry in "items" +optional
            - `message` string
            - `reason` string
          - `group` string
          - `kind` string
          - `name` string
          - `retryAfterSeconds` integer
          - `uid` string
        - `message` string
        - `metadata` V1ListMeta — ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
          - `continue` string — continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.
          - `resourceVersion` string
          - `selfLink` string
        - `reason` string
        - `status` string
    - `labels` object
    - `managedFields` V1ManagedFieldsEntry[] — ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like "ci-cd". The set of fields is always in the version that the workflow used when modifying the object. This field is alpha and can be changed or removed without notice. +optional
      - `apiVersion` string — APIVersion defines the version of this resource that this field set applies to. The format is "group/version" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.
      - `fields` V1Fields
        - `map` object — Map stores a set of fields in a data structure like a Trie. Each key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:<name>', where <name> is the name of a field in a struct, or key in a map 'v:<value>', where <value> is the exact json formatted value of a list item 'i:<index>', where <index> is position of a item in a list 'k:<keys>', where <keys> is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set. The exact format is defined in k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal
      - `manager` string — Manager is an identifier of the workflow managing these fields.
      - `operation` string — Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.
      - `time` V1Time — Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers. +protobuf.options.marshal=false +protobuf.as=Timestamp +protobuf.options.(gogoproto.goproto_stringer)=false
        - `nanos` integer — Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.
        - `seconds` string, int64 — Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
    - `name` string
    - `namespace` string — Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces +optional
    - `ownerReferences` V1OwnerReference[]
      - `apiVersion` string — API version of the referent.
      - `blockOwnerDeletion` boolean
      - `controller` boolean
      - `kind` string
      - `name` string
      - `uid` string
    - `resourceVersion` string — An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency +optional
    - `selfLink` string
    - `uid` string — UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids +optional
  - `spec` V1alpha1AppProjectSpec
    - `clusterResourceWhitelist` V1GroupKind[]
      - `group` string
      - `kind` string
    - `description` string
    - `destinations` V1alpha1ApplicationDestination[]
      - `namespace` string
      - `server` string
    - `namespaceResourceBlacklist` V1GroupKind[]
      - `group` string
      - `kind` string
    - `roles` V1alpha1ProjectRole[]
      - `description` string
      - `groups` string[]
      - `jwtTokens` V1alpha1JWTToken[]
        - `exp` string, int64
        - `iat` string, int64
      - `name` string
      - `policies` string[]
    - `sourceRepos` string[]

---

[API](https://skmtc.net/devtron-labs/apis/consolidate-services.md) · [All operations](https://skmtc.net/devtron-labs/apis/consolidate-services/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/devtron-labs/consolidate-services/versions/778bfc291d1e/schema)
