# Create

Launch stage: GA

`POST /api/2.0/postgres/projects`

Creates a new Lakebase Autoscaling Postgres database project, which contains branches and compute endpoints.

API scopes: postgres

## Query parameters

- `project_id` (string, optional)
  The ID to use for the Project. This becomes the final component of the project's resource name.
   The ID is required and must be 1-63 characters long, start with a lowercase letter, and contain only lowercase letters, numbers, and hyphens.
   For example, `my-app` becomes `projects/my-app`.

## Request body

- `project` (object, optional)
  The Project to create.
  - `name` (string, optional)
    Output only. The full resource path of the project.
     Format: projects/{project_id}
  - `uid` (string, optional)
    System-generated unique ID for the project.
  - `create_time` (string, optional)
    A timestamp indicating when the project was created.
  - `update_time` (string, optional)
    A timestamp indicating when the project was last updated.
  - `spec` (object, optional)
    The spec contains the project configuration, including display_name, pg_version (Postgres version), history_retention_duration, and default_endpoint_settings.
    - `display_name` (string, optional)
      Human-readable project name. Length should be between 1 and 256 characters.
    - `pg_version` (int32, optional)
      The major Postgres version number. The set of supported versions may vary; consult the API documentation for currently accepted values.
    - `history_retention_duration` (string, optional)
      The number of seconds to retain the shared history for point in time recovery for all branches in this project. Value should be between 172800s (2 days) and 3024000s (35 days).
    - `default_endpoint_settings` (object, optional)
      - `autoscaling_limit_min_cu` (double, optional)
        The minimum number of Compute Units. Minimum value is 0.5.
      - `autoscaling_limit_max_cu` (double, optional)
        The maximum number of Compute Units. Minimum value is 0.5.
      - `suspend_timeout_duration` (string, required)
        Duration of inactivity after which the compute endpoint is automatically suspended.
         If specified should be between 60s and 604800s (1 minute to 1 week).
         Mutually exclusive with `no_suspension`. When updating, use `spec.project_default_settings.suspension` in the update_mask.
      - `no_suspension` (boolean, required)
        When set to true, explicitly disables automatic suspension (never suspend).
         Should be set to true when provided.
         Mutually exclusive with `suspend_timeout_duration`. When updating, use `spec.project_default_settings.suspension` in the update_mask.
      - `pg_settings` (object, optional)
        A raw representation of Postgres settings.
    - `budget_policy_id` (string, optional)
      The desired budget policy to associate with the project.
       See status.budget_policy_id for the policy that is actually applied to the project.
    - `custom_tags` (array of object, optional)
      Custom tags to associate with the project. Forwarded to LBM for billing and cost tracking.
       To update tags, provide the new tag list and include "spec.custom_tags" in the update_mask.
       To clear all tags, provide an empty list and include "spec.custom_tags" in the update_mask.
       To preserve existing tags, omit this field from the update_mask (or use wildcard "*" which auto-excludes empty tags).
      - `key` (string, optional)
        The key of the custom tag.
      - `value` (string, optional)
        The value of the custom tag.
    - `enable_pg_native_login` (boolean, optional)
      Whether to enable PG native password login on all endpoints in this project. Defaults to false.
    - `default_branch` (string, optional)
      The full resource path for the default branch of the project
       Format: projects/{project_id}/branches/{branch_id}
  - `status` (object, optional)
    The current status of a Project.
    - `display_name` (string, optional)
      The effective human-readable project name.
    - `pg_version` (int32, optional)
      The effective major Postgres version number.
    - `history_retention_duration` (string, optional)
      The effective number of seconds to retain the shared history for point in time recovery.
    - `default_endpoint_settings` (object, optional)
      The effective default endpoint settings.
      - `autoscaling_limit_min_cu` (double, optional)
        The minimum number of Compute Units. Minimum value is 0.5.
      - `autoscaling_limit_max_cu` (double, optional)
        The maximum number of Compute Units. Minimum value is 0.5.
      - `suspend_timeout_duration` (string, required)
        Duration of inactivity after which the compute endpoint is automatically suspended.
         If specified should be between 60s and 604800s (1 minute to 1 week).
         Mutually exclusive with `no_suspension`. When updating, use `spec.project_default_settings.suspension` in the update_mask.
      - `no_suspension` (boolean, required)
        When set to true, explicitly disables automatic suspension (never suspend).
         Should be set to true when provided.
         Mutually exclusive with `suspend_timeout_duration`. When updating, use `spec.project_default_settings.suspension` in the update_mask.
      - `pg_settings` (object, optional)
        A raw representation of Postgres settings.
    - `branch_logical_size_limit_bytes` (int64, optional)
      The logical size limit for a branch.
    - `synthetic_storage_size_bytes` (int64, optional)
      The current space occupied by the project in storage.
    - `compute_last_active_time` (string, optional)
      The most recent time when any endpoint of this project was active.
    - `budget_policy_id` (string, optional)
      The budget policy that is applied to the project.
    - `custom_tags` (array of object, optional)
      The effective custom tags associated with the project.
      - `key` (string, optional)
        The key of the custom tag.
      - `value` (string, optional)
        The value of the custom tag.
    - `owner` (string, optional)
      The email of the project owner.
    - `enable_pg_native_login` (boolean, optional)
      Whether to enable PG native password login on all endpoints in this project.
    - `default_branch` (string, optional)
      The full resource path of the default branch of the project
    - `project_id` (string, optional)
      Part of the resource name.
  - `initial_endpoint_spec` (object, optional)
    Configuration settings for the initial Read/Write endpoint created inside the initial branch for a newly
     created project. If omitted, the initial endpoint created will have default settings, without high availability
     configured. This field does not apply to any endpoints created after project creation. Use
     spec.default_endpoint_settings to configure default settings for endpoints created after project creation.
    - `group` (object, optional)
      Settings for HA configuration of the endpoint.
      - `min` (int32, optional)
        The minimum number of computes in the endpoint group. Currently, this must be equal to max. This must be greater
         than or equal to 1.
      - `max` (int32, optional)
        The maximum number of computes in the endpoint group. Currently, this must be equal to min. Set to 1 for single
         compute endpoints, to disable HA. To manually suspend all computes in an endpoint group, set disabled to
         true on the EndpointSpec.
      - `enable_readable_secondaries` (boolean, optional)
        Whether to allow read-only connections to read-write endpoints. Only relevant for read-write endpoints where
         size.max > 1.
    - `autoscaling_limit_min_cu` (double, optional)
      The minimum number of Compute Units for the initial endpoint.
    - `autoscaling_limit_max_cu` (double, optional)
      The maximum number of Compute Units for the initial endpoint.
    - `suspend_timeout_duration` (string, required)
      Duration of inactivity after which the initial endpoint is automatically suspended.
       If specified, should be between 60s and 604800s (1 minute to 1 week).
       Mutually exclusive with `no_suspension`.
    - `no_suspension` (boolean, required)
      When set to true, explicitly disables automatic suspension (never suspend).
       Should be set to true when provided.
       Mutually exclusive with `suspend_timeout_duration`.
  - `delete_time` (string, optional, Beta)
    A timestamp indicating when the project was soft-deleted.
     Empty if the project is not deleted, otherwise set to a timestamp in the past.
  - `purge_time` (string, optional, Beta)
    A timestamp indicating when the project is scheduled for permanent deletion.
     Empty if the project is not deleted, otherwise set to a timestamp in the future.
  - `initial_branch_spec` (object, optional)
    Configuration for the initial default branch created as part of project creation.
     Allows overriding branch protection. These settings only apply at creation time
     and do not affect resources created after project creation.
    - `is_protected` (boolean, optional)
      Whether the initial default branch should be protected from deletion.
  - `project_id` (string, optional)
    The part of the name, chosen by the user when the resource was created.

## Returns

- `name` (string, optional)
  The server-assigned name, which is only unique within the same service that
   originally returns it. If you use the default HTTP mapping, the
   `name` should be a resource name ending with `operations/{unique_id}`.
- `metadata` (object, optional)
  Service-specific metadata associated with the operation.  It typically
   contains progress information and common metadata such as create time.
   Some services might not provide such metadata.
- `done` (boolean, optional)
  If the value is `false`, it means the operation is still in progress.
   If `true`, the operation is completed, and either `error` or `response` is
   available.
- `error` (object, required)
  The error result of the operation in case of failure or cancellation.
  - `error_code` (string, optional)
    Possible values: `UNKNOWN`, `INTERNAL_ERROR`, `TEMPORARILY_UNAVAILABLE`, `IO_ERROR`, `BAD_REQUEST`, `SERVICE_UNDER_MAINTENANCE`, `WORKSPACE_TEMPORARILY_UNAVAILABLE`, `DEADLINE_EXCEEDED`, `CANCELLED`, `RESOURCE_EXHAUSTED`, `ABORTED`, `NOT_FOUND`, `ALREADY_EXISTS`, `UNAUTHENTICATED`, `UNAVAILABLE`, `INVALID_PARAMETER_VALUE`, `ENDPOINT_NOT_FOUND`, `MALFORMED_REQUEST`, `INVALID_STATE`, `PERMISSION_DENIED`, `FEATURE_DISABLED`, `CUSTOMER_UNAUTHORIZED`, `REQUEST_LIMIT_EXCEEDED`, `RESOURCE_CONFLICT`, `UNPARSEABLE_HTTP_ERROR`, `NOT_IMPLEMENTED`, `DATA_LOSS`, `INVALID_STATE_TRANSITION`, `COULD_NOT_ACQUIRE_LOCK`, `RESOURCE_ALREADY_EXISTS`, `RESOURCE_DOES_NOT_EXIST`, `QUOTA_EXCEEDED`, `MAX_BLOCK_SIZE_EXCEEDED`, `MAX_READ_SIZE_EXCEEDED`, `PARTIAL_DELETE`, `MAX_LIST_SIZE_EXCEEDED`, `DRY_RUN_FAILED`, `RESOURCE_LIMIT_EXCEEDED`, `DIRECTORY_NOT_EMPTY`, `DIRECTORY_PROTECTED`, `MAX_NOTEBOOK_SIZE_EXCEEDED`, `MAX_CHILD_NODE_SIZE_EXCEEDED`, `SEARCH_QUERY_TOO_LONG`, `SEARCH_QUERY_TOO_SHORT`, `MANAGED_RESOURCE_GROUP_DOES_NOT_EXIST`, `PERMISSION_NOT_PROPAGATED`, `DEPLOYMENT_TIMEOUT`, `GIT_CONFLICT`, `GIT_UNKNOWN_REF`, `GIT_SENSITIVE_TOKEN_DETECTED`, `GIT_URL_NOT_ON_ALLOW_LIST`, `GIT_REMOTE_ERROR`, `PROJECTS_OPERATION_TIMEOUT`, `IPYNB_FILE_IN_REPO`, `INSECURE_PARTNER_RESPONSE`, `MALFORMED_PARTNER_RESPONSE`, `METASTORE_DOES_NOT_EXIST`, `DAC_DOES_NOT_EXIST`, `CATALOG_DOES_NOT_EXIST`, `SCHEMA_DOES_NOT_EXIST`, `TABLE_DOES_NOT_EXIST`, `SHARE_DOES_NOT_EXIST`, `RECIPIENT_DOES_NOT_EXIST`, `STORAGE_CREDENTIAL_DOES_NOT_EXIST`, `EXTERNAL_LOCATION_DOES_NOT_EXIST`, `PRINCIPAL_DOES_NOT_EXIST`, `PROVIDER_DOES_NOT_EXIST`, `METASTORE_ALREADY_EXISTS`, `DAC_ALREADY_EXISTS`, `CATALOG_ALREADY_EXISTS`, `SCHEMA_ALREADY_EXISTS`, `TABLE_ALREADY_EXISTS`, `SHARE_ALREADY_EXISTS`, `RECIPIENT_ALREADY_EXISTS`, `STORAGE_CREDENTIAL_ALREADY_EXISTS`, `EXTERNAL_LOCATION_ALREADY_EXISTS`, `PROVIDER_ALREADY_EXISTS`, `CATALOG_NOT_EMPTY`, `SCHEMA_NOT_EMPTY`, `METASTORE_NOT_EMPTY`, `PROVIDER_SHARE_NOT_ACCESSIBLE`
  - `message` (string, optional)
  - `stack_trace` (string, optional)
  - `details` (array of object, optional)
- `response` (object, required)
  The normal, successful response of the operation.

## Response

```json
{
  "name": "string",
  "metadata": {},
  "done": true,
  "error": {
    "error_code": "string",
    "message": "string",
    "stack_trace": "string",
    "details": [
      {}
    ]
  },
  "response": {}
}
```

