---
title: "POST /api/v3/accounts/{account_id}/projects/"
method: POST
path: "/api/v3/accounts/{account_id}/projects/"
tags: ["Projects"]
---

# POST /api/v3/accounts/{account_id}/projects/

`POST /api/v3/accounts/{account_id}/projects/`

## Request

- Base URL: `https://cloud.getdbt.com`
- URL: `https://cloud.getdbt.com/api/v3/accounts/{account_id}/projects/`
- Auth: HTTP bearer

Create a new Project

## Path parameters

- `account_id` integer, required

## Request body

- ProjectRequest
  - `name` string, required: The name of the project
  - `account_id` integer, required: The account the project is associated with
  - `description` string: The description of the project
  - `connection_id` integer: The active connection
  - `repository_id` integer: The active repository
  - `semantic_layer_config_id` integer: The active semantic layer configuration
  - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
  - `dbt_project_subdirectory` string: The path in the associated repository where a dbt project can be found
  - `docs_job_id` integer: The job used for docs generation
  - `freshness_job_id` integer: The job used for source freshness generation
  - `type` 0 | 1, required: * `0` - DEFAULT * `1` - HYBRID

## Response `200`

- ProjectEnveloped
  - `data` ProjectResponse, required
    - `id` integer, required
    - `name` string: The name of the project
    - `account_id` integer: The account the project is associated with
    - `description` string: The description of the project
    - `connection_id` integer: The active connection
    - `repository_id` integer: The active repository
    - `semantic_layer_config_id` integer: The active semantic layer configuration
    - `state` integer: A value of 1 means this entity is active and a value of 2 means this entity is deleted
    - `dbt_project_subdirectory` string: The path in the associated repository where a dbt project can be found
    - `docs_job_id` integer: The job used for docs generation
    - `freshness_job_id` integer: The job used for source freshness generation
    - `type` 0 | 1: * `0` - DEFAULT * `1` - HYBRID
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `connection` BaseConnectionV3, required
      - `account_id` integer, required: The account the connection is associated with
      - `project_id` integer, required: The project the connection is associated with
      - `name` string, required: The name of the connection
      - `type` 'postgres' | 'redshift' | 'snowflake' | 'bigquery' | 'adapter', required: * `postgres` - postgres * `redshift` - redshift * `snowflake` - snowflake * `bigquery` - bigquery * `adapter` - adapter
      - `adapter_version` 'apache_spark_v0' | 'databricks_spark_v0' | 'databricks_v0' | 'trino_v0' | 'snowflake_v0' | 'bigquery_v0' | 'bigquery_v1' | 'postgres_v0' | 'redshift_v0' | 'salesforce_v0' | 'synapse_v0' | 'fabric_v0' | 'athena_v0' | 'teradata_v0' | 'clickhouse_v0': * `apache_spark_v0` - apache_spark_v0 * `databricks_spark_v0` - databricks_spark_v0 * `databricks_v0` - databricks_v0 * `trino_v0` - trino_v0 * `snowflake_v0` - snowflake_v0 * `bigquery_v0` - bigquery_v0 * `bigquery_v1` - bigquery_v1 * `postgres_v0` - postgres_v0 * `redshift_v0` - redshift_v0 * `salesforce_v0` - salesforce_v0 * `synapse_v0` - synapse_v0 * `fabric_v0` - fabric_v0 * `athena_v0` - athena_v0 * `teradata_v0` - teradata_v0 * `clickhouse_v0` - clickhouse_v0
      - `created_by_id` integer
      - `created_by_service_token_id` integer
      - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `private_link_endpoint_id` string
      - `oauth_configuration_id` integer: The OAuth Configuration associated with this connection. When set,developer credentials leveraging OAuth may be created.
    - `environments` EnvironmentV3[], required
      - `account_id` integer, required: The account the environment is associated with
      - `project_id` integer, required: The project the environment is associated with
      - `credentials_id` integer: The id of the associated credentials. Null for development environments. Must be included when updating a deployment environment or the value will be reset to null.
      - `connection_id` integer: The id of the associated connection. Must be included when updating an environment or the value will be reset to null.
      - `extended_attributes_id` integer
      - `name` string, required: The name of the environment
      - `dbt_version` string, required: The default dbt Version to use for this environment
      - `type` 'development' | 'deployment', required: * `development` - DEVELOPMENT * `deployment` - DEPLOYMENT
      - `use_custom_branch` boolean, required
      - `custom_branch` string
      - `supports_docs` boolean, required
      - `deployment_type` 'production' | 'staging': * `production` - production * `staging` - staging
      - `enable_model_query_history` boolean
      - `enable_dbt_state` boolean
      - `enable_dbt_state_model_lock` boolean, required
      - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `primary_profile_id` integer: The id of the primary profile for this environment
    - `repository` RepositoryV3, required
      - `account_id` integer, required: The account the repo is associated with
      - `project_id` integer: The project the repo is associated with
      - `full_name` string: The name of the repo⚠️ If not set to the correct values, CI jobs may not trigger and the branch link from the dbt Cloud IDE may not work.For example, if the remote URL is 'git://github.com/your_org/your_repo_name.git',the correct full_name is 'your_org/your_repo_name'.
      - `remote_backend` 'ado' | 'github' | 'managed' | 'gitlab' | 'manual_config': * `ado` - ado * `github` - github * `managed` - managed * `gitlab` - gitlab * `manual_config` - manual_config
      - `git_clone_strategy` 'azure_active_directory_app' | 'deploy_key' | 'deploy_token' | 'github_app' | 'git_token': * `azure_active_directory_app` - azure_active_directory_app * `deploy_key` - deploy_key * `deploy_token` - deploy_token * `github_app` - github_app * `git_token` - git_token
      - `deploy_key_id` integer
      - `repository_credentials_id` integer
      - `github_installation_id` integer
      - `github_webhook_id` integer
      - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `private_link_endpoint_id` string
      - `git_provider_id` integer
    - `group_permissions` GroupPermission[], required
      - `account_id` integer, required
      - `group_id` integer, required
      - `project_id` integer
      - `all_projects` boolean, required
      - `permission_set` 'account_admin' | 'account_viewer' | 'admin' | 'analyst' | 'analyst_read' | 'billing_admin' | 'cost_insights_admin' | 'cost_insights_viewer' | 'cost_management_admin' | 'cost_management_viewer' | 'database_admin' | 'developer' | 'fusion_admin' | 'git_admin' | 'job_admin' | 'job_creator' | 'job_runner' | 'job_viewer' | 'manage_marketplace_apps' | 'member' | 'metadata_only' | 'notification_manager' | 'owner' | 'project_creator' | 'readonly' | 'scim_only' | 'security_admin' | 'semantic_layer_only' | 'stakeholder' | 'team_admin' | 'webhooks_only', required: * `account_admin` - ACCOUNT_ADMIN * `account_viewer` - ACCOUNT_VIEWER * `admin` - ADMIN * `analyst` - ANALYST * `analyst_read` - ANALYST_READ * `billing_admin` - BILLING_ADMIN * `cost_insights_admin` - COST_INSIGHTS_ADMIN * `cost_insights_viewer` - COST_INSIGHTS_VIEWER * `cost_management_admin` - COST_MANAGEMENT_ADMIN * `cost_management_viewer` - COST_MANAGEMENT_VIEWER * `database_admin` - DATABASE_ADMIN * `developer` - DEVELOPER * `fusion_admin` - V2_MIGRATION_ADMIN * `git_admin` - GIT_ADMIN * `job_admin` - JOB_ADMIN * `job_creator` - JOB_CREATOR * `job_runner` - JOB_RUNNER * `job_viewer` - JOB_VIEWER * `manage_marketplace_apps` - MANAGE_MARKETPLACE_APPS * `member` - MEMBER * `metadata_only` - METADATA_ONLY * `notification_manager` - NOTIFICATION_MANAGER * `owner` - OWNER * `project_creator` - PROJECT_CREATOR * `readonly` - READONLY * `scim_only` - SCIM_ONLY * `security_admin` - SECURITY_ADMIN * `semantic_layer_only` - SEMANTIC_LAYER_ONLY * `stakeholder` - STAKEHOLDER * `team_admin` - TEAM_ADMIN * `webhooks_only` - WEBHOOKS_ONLY
      - `permission_level` integer
      - `state` integer: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `writable_environment_categories` string[], required: Environment types the permission set can write to. Allowed values: development, other, staging, production, all. `other` is shown as General in the dbt UI.
    - `docs_job` JobDefinitionV2, required
      - `environment_id` integer, required
      - `account_id` integer, required
      - `project_id` integer, required
      - `name` string, required: The name of the job
      - `description` string
      - `generate_docs` boolean, required: When true, `dbt docs generate` will be run at the end of all runs for this Job
      - `run_generate_sources` boolean, required
      - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `dbt_version` string: When set, overrides the dbt_version specified in the Job's Environment
      - `triggers` JobDefinitionTriggers
        - `github_webhook` boolean, required
        - `schedule` boolean, required
        - `git_provider_webhook` boolean
        - `on_merge` boolean
        - `custom_branch_only` boolean: (Deprecated)
      - `settings` JobDefinitionSettings, required
        - `threads` integer, required: The maximum number of models to run in parallel in a single dbt run
        - `target_name` string, required: Informational field that can be consumed in dbt project code with `{{ target.name }}`
      - `execution` JobDefinitionExecution, required
        - `timeout_seconds` integer, required
      - `schedule` JobDefinitionSchedule
        - `cron` string, required: Cron syntax schedule for the job string
        - `date` 'every_day' | 'days_of_week' | 'custom_cron' | 'interval_cron', required: * `every_day` - every_day * `days_of_week` - days_of_week * `custom_cron` - custom_cron * `interval_cron` - interval_cron
        - `time` 'every_hour' | 'at_exact_hours', required: * `every_hour` - every_hour * `at_exact_hours` - at_exact_hours
      - `execute_steps` string[]: A list of dbt commands to run
      - `job_type` 'ci' | 'scheduled' | 'other' | 'merge' | 'exposure_sync' | 'adaptive' | 'hybrid': * `ci` - ci * `scheduled` - scheduled * `other` - other * `merge` - merge * `exposure_sync` - exposure_sync * `adaptive` - adaptive * `hybrid` - hybrid
      - `triggers_on_draft_pr` boolean
      - `run_compare_changes` boolean
      - `compare_changes_flags` string: dbt syntax flags to be used for compare changes
      - `run_lint` boolean
      - `errors_on_lint_failure` boolean
      - `deferring_environment_id` integer
      - `deferring_job_definition_id` integer
      - `cost_optimization_features` string[]: List of cost optimization features to enable for this job. <br/><br/> <b>Valid values:</b> <ul> <li>"state_aware_orchestration" - Enable orchestration that adapts to state changes (Private beta, requires fusion)</li> <li>"efficient_testing" - Aggregate generic tests into a single query and reuse redundant tests (Private beta, requires fusion)</li> <li>"dbt_state" - Enable orchestration that adapts to state changes (does not require fusion)</li> <li>"inherit_environment" - Inherit this job's dbt State setting from its environment. Must be sent on its own; it cannot be combined with any other value.</li> </ul> <b>Example:</b> ["dbt_state"]
    - `freshness_job` JobDefinitionV2, required
      - `environment_id` integer, required
      - `account_id` integer, required
      - `project_id` integer, required
      - `name` string, required: The name of the job
      - `description` string
      - `generate_docs` boolean, required: When true, `dbt docs generate` will be run at the end of all runs for this Job
      - `run_generate_sources` boolean, required
      - `state` integer, required: A value of 1 means this entity is active and a value of 2 means this entity is deleted
      - `dbt_version` string: When set, overrides the dbt_version specified in the Job's Environment
      - `triggers` JobDefinitionTriggers
        - `github_webhook` boolean, required
        - `schedule` boolean, required
        - `git_provider_webhook` boolean
        - `on_merge` boolean
        - `custom_branch_only` boolean: (Deprecated)
      - `settings` JobDefinitionSettings, required
        - `threads` integer, required: The maximum number of models to run in parallel in a single dbt run
        - `target_name` string, required: Informational field that can be consumed in dbt project code with `{{ target.name }}`
      - `execution` JobDefinitionExecution, required
        - `timeout_seconds` integer, required
      - `schedule` JobDefinitionSchedule
        - `cron` string, required: Cron syntax schedule for the job string
        - `date` 'every_day' | 'days_of_week' | 'custom_cron' | 'interval_cron', required: * `every_day` - every_day * `days_of_week` - days_of_week * `custom_cron` - custom_cron * `interval_cron` - interval_cron
        - `time` 'every_hour' | 'at_exact_hours', required: * `every_hour` - every_hour * `at_exact_hours` - at_exact_hours
      - `execute_steps` string[]: A list of dbt commands to run
      - `job_type` 'ci' | 'scheduled' | 'other' | 'merge' | 'exposure_sync' | 'adaptive' | 'hybrid': * `ci` - ci * `scheduled` - scheduled * `other` - other * `merge` - merge * `exposure_sync` - exposure_sync * `adaptive` - adaptive * `hybrid` - hybrid
      - `triggers_on_draft_pr` boolean
      - `run_compare_changes` boolean
      - `compare_changes_flags` string: dbt syntax flags to be used for compare changes
      - `run_lint` boolean
      - `errors_on_lint_failure` boolean
      - `deferring_environment_id` integer
      - `deferring_job_definition_id` integer
      - `cost_optimization_features` string[]: List of cost optimization features to enable for this job. <br/><br/> <b>Valid values:</b> <ul> <li>"state_aware_orchestration" - Enable orchestration that adapts to state changes (Private beta, requires fusion)</li> <li>"efficient_testing" - Aggregate generic tests into a single query and reuse redundant tests (Private beta, requires fusion)</li> <li>"dbt_state" - Enable orchestration that adapts to state changes (does not require fusion)</li> <li>"inherit_environment" - Inherit this job's dbt State setting from its environment. Must be sent on its own; it cannot be combined with any other value.</li> </ul> <b>Example:</b> ["dbt_state"]
    - `fusion_readiness` unknown, required
    - `default_version` string, required: The default dbt version for new environments in this project. Only populated when the project is fetched directly; null when the project is included as a nested object on another resource.
  - `status` ResponseStatus, required
    - `code` integer: HTTP status code
    - `is_success` boolean, required: Whether the request was successful or not
    - `user_message` string, required: End-user friendly success or error message
    - `developer_message` string, required: Developer friendly success or error message

## Changes

- **2026-10-28** (v3) `e32fbfcdc9ec`: 1 info
  - added the required property `data/environments/items/enable_dbt_state_model_lock` to the response with the `200` status
- **2026-10-06** (v3) `7d5c1b4c8d8a`: 1 breaking
  - for the `path` request parameter `account_id`, the format changed from no format to `int64`
- **2026-09-29** (v3) `6b5199f1f0c8`: 1 warning
  - added the new `clickhouse_v0` enum value to the `data/connection/allOf[#/components/schemas/BaseConnectionV3]/adapter_version` response property for the response status `200`
- **2026-06-12** (v3) `35ed07b14344`: 1 info
  - added the optional property `data/environments/items/enable_dbt_state` to the response with the `200` status
- **2026-05-18** (v3) `c392f6ef056f`: 1 info
  - removed the `azure_active_directory` enum value from the `data/repository/allOf[#/components/schemas/RepositoryV3]/remote_backend/allOf[#/components/schemas/RemoteBackendEnum]/` response property for the response status `200`

[Operation history](https://skmtc.dev/getdbt/apis/dbt-cloud-api-v2/changes/api/v3/accounts/:account_id/projects/post.md)

---

[API](https://skmtc.dev/getdbt/apis/dbt-cloud-api-v2.md) - [All operations](https://skmtc.dev/getdbt/apis/dbt-cloud-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/getdbt/apis/dbt-cloud-api-v2/revisions/2448b375ac2f?raw)
