---
title: "Create a new project"
method: POST
path: "/v11/projects"
tags: ["projects"]
---

# Create a new project

`POST /v11/projects`

Allows to create a new project with the provided configuration. It only requires the project `name` but more configuration can be provided to override the defaults.

## Query parameters

- `teamId` string
- `slug` string

## Request body

- object
  - `enablePreviewFeedback` boolean, nullable — Opt-in to preview toolbar on the project level
  - `enableProductionFeedback` boolean, nullable — Opt-in to production toolbar on the project level
  - `previewDeploymentsDisabled` boolean, nullable — Specifies whether preview deployments are disabled for this project.
  - `previewDeploymentSuffix` string, nullable — Custom domain suffix for preview deployments. Takes precedence over team-level suffix. Must be a domain owned by the team.
  - `buildCommand` string, nullable — The build command for this project. When `null` is used this value will be automatically detected
  - `commandForIgnoringBuildStep` string, nullable
  - `devCommand` string, nullable — The dev command for this project. When `null` is used this value will be automatically detected
  - `environmentVariables` object[] — Collection of ENV Variables the Project will use
    - `key` string, required — Name of the ENV variable
    - `target` union, required — Deployment Target or Targets in which the ENV variable will be used
      - 'production' | 'preview' | 'development'
      - string[]
    - `gitBranch` string — If defined, the git branch of the environment variable (must have target=preview)
    - `type` 'system' | 'encrypted' | 'plain' | 'sensitive' — Type of the ENV variable
    - `value` string, required — Value for the ENV variable
  - `framework` unknown
  - `gitRepository` object — The Git Repository that will be connected to the project. When this is defined, any pushes to the specified connected Git Repository will be automatically deployed
    - `repo` string, required — The name of the git repository. For example: \"vercel/next.js\"
    - `type` 'github' | 'github-limited' | 'gitlab' | 'bitbucket' | 'vercel' | 'cursor-origin', required — The Git Provider of the repository
  - `installCommand` string, nullable — The install command for this project. When `null` is used this value will be automatically detected
  - `name` string, required — The desired name for the project
  - `skipGitConnectDuringLink` boolean — Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.
  - `ssoProtection` object, nullable — The Vercel Auth setting for the project (historically named \"SSO Protection\")
    - `deploymentType` 'all' | 'preview' | 'prod_deployment_urls_and_all_previews' | 'all_except_custom_domains', required
  - `outputDirectory` string, nullable — The output directory of the project. When `null` is used this value will be automatically detected
  - `publicSource` boolean, nullable — Deprecated. Accepted for backwards compatibility but ignored.
  - `rootDirectory` string, nullable — The name of a directory or relative path to the source code of your project. When `null` is used it will default to the project root
  - `serverlessFunctionRegion` string, nullable — The region to deploy Serverless Functions in this project
  - `serverlessFunctionZeroConfigFailover` boolean — Specifies whether Zero Config Failover is enabled for this project.
  - `oidcTokenConfig` object — OpenID Connect JSON Web Token generation configuration.
    - `enabled` boolean — Whether or not to generate OpenID Connect JSON Web Tokens.
    - `issuerMode` 'team' | 'global' — team: `https://oidc.vercel.com/[team_slug]` global: `https://oidc.vercel.com`
  - `enableAffectedProjectsDeployments` boolean — Opt-in to skip deployments when there are no changes to the root directory and its dependencies
  - `resourceConfig` object — Specifies resource override configuration for the project
    - `buildMachineType` 'basic' | 'enhanced' | 'turbo' | 'standard' | 'elastic'
    - `fluid` boolean
    - `functionDefaultRegions` string[] — The regions to deploy Vercel Functions to for this project
    - `functionDefaultTimeout` number
    - `functionDefaultMemoryType` 'standard_legacy' | 'standard' | 'performance' | 'performance_xl'
    - `functionZeroConfigFailover` boolean — Specifies whether Zero Config Failover is enabled for this project.
    - `elasticConcurrencyEnabled` boolean
    - `buildMachineSelection` 'elastic' | 'fixed'
    - `buildMachineElasticLastUpdated` number
    - `buildMachineElasticReason` 'oom-failure' | 'enospc-failure' | 'build-timeout-failure' | 'basic-floor' | 'high-peak-memory' | 'sustained-high-cpu' | 'high-peak-disk' | 'long-build-duration' | 'short-build-duration' | 'enterprise-floor'
    - `isNSNBDisabled` boolean
    - `buildQueue` object
      - `configuration` 'SKIP_NAMESPACE_QUEUE' | 'WAIT_FOR_NAMESPACE_QUEUE'
    - `enableFunctionsBeta` boolean

## Response `200`

The project was successfuly created

- object
  - `accountId` string, required
  - `creator` union
    - object
      - `type` 'user', required
      - `via` union, required
        - object — Set when a Vercel App or Integration acts on behalf of a {@link User}. Captures user-consented OAuth delegation that the ACL layer may inspect to evaluate scope restrictions. This is NOT for impersonation or token-exchange provenance — those live on `auth.token`, not on the principal.
          - `type` 'app', required
          - `app` object, required
            - `id` string, required
        - object — Set when a Vercel App or Integration acts on behalf of a {@link User}. Captures user-consented OAuth delegation that the ACL layer may inspect to evaluate scope restrictions. This is NOT for impersonation or token-exchange provenance — those live on `auth.token`, not on the principal.
          - `type` 'integration', required
          - `integration` object, required
            - `integrationId` string, required
            - `configurationId` string, required
      - `user` object, required
        - `id` string, required
    - object
      - `type` 'app', required
      - `app` object, required
        - `id` string, required
    - object
      - `type` 'integration', required
      - `integration` object, required
        - `integrationId` string, required
        - `configurationId` string, required
    - object
      - `type` 'system', required
  - `alias` object[], required
    - `configuredBy` 'A' | 'CNAME' | 'dns-01' | 'http' | 'null', nullable
    - `configuredChangedAt` number, nullable
    - `createdAt` number, nullable
    - `deployment` object, nullable, required
      - `id` string, required
      - `alias` string[]
      - `aliasAssigned` union
        - number
        - false | true
      - `aliasError` object, nullable
        - `code` string, required
        - `message` string, required
      - `aliasFinal` string, nullable
      - `automaticAliases` string[]
      - `branchMatcher` object
        - `type` 'endsWith' | 'equals' | 'startsWith', required — The type of matching to perform
        - `pattern` string, required — The pattern to match against branch names
      - `buildingAt` number
      - `builds` object[]
        - `use` string, required
        - `src` string
        - `dest` string
      - `checksConclusion` 'canceled' | 'failed' | 'skipped' | 'succeeded'
      - `checksState` 'completed' | 'registered' | 'running'
      - `connectBuildsEnabled` false | true
      - `connectConfigurationId` string
      - `createdAt` number, required
      - `createdIn` string, required
      - `creator` object, nullable, required
        - `email` string, required
        - `githubLogin` string
        - `gitlabLogin` string
        - `uid` string, required
        - `username` string, required
      - `deletedAt` number
      - `deploymentHostname` string, required
      - `forced` false | true
      - `name` string, required
      - `meta` object
      - `monorepoManager` string, nullable
      - `oidcTokenClaims` object
        - `iss` string, required
        - `sub` string, required
        - `scope` string, required
        - `aud` string, required
        - `owner` string, required
        - `owner_id` string, required
        - `project` string, required
        - `project_id` string, required
        - `environment` string, required
        - `custom_environment_id` string
        - `mfe_group_ids` string[]
        - `plan` string
      - `plan` 'enterprise' | 'hobby' | 'pro', required
      - `previewCommentsEnabled` false | true — Whether or not preview comments are enabled for the deployment
      - `private` false | true, required
      - `readyAt` number
      - `readyState` 'BLOCKED' | 'BUILDING' | 'CANCELED' | 'ERROR' | 'INITIALIZING' | 'QUEUED' | 'READY', required
      - `readySubstate` 'PROMOTED' | 'ROLLING' | 'STAGED'
      - `requestedAt` number
      - `target` string, nullable
      - `teamId` string, nullable
      - `type` 'LAMBDAS', required
      - `url` string, required
      - `userId` string, required
      - `withCache` false | true
    - `domain` string, required
    - `environment` 'preview' | 'production', required
    - `gitBranch` string, nullable
    - `redirect` string, nullable
    - `redirectStatusCode` 301 | 302 | 307 | 308 | null, nullable
    - `target` 'PREVIEW' | 'PRODUCTION' | 'STAGING', required
  - `analytics` object
    - `id` string, required
    - `canceledAt` number, nullable
    - `disabledAt` number, required
    - `enabledAt` number, required
    - `paidAt` number
    - `sampleRatePercent` number, nullable
    - `spendLimitInDollars` number, nullable
  - `appliedCve55182Migration` false | true
  - `speedInsights` object
    - `id` string, required
    - `enabledAt` number
    - `disabledAt` number
    - `canceledAt` number
    - `hasData` false | true
    - `paidAt` number
  - `autoExposeSystemEnvs` false | true
  - `autoAssignCustomDomains` false | true
  - `autoAssignCustomDomainsUpdatedBy` string
  - `buildCommand` string, nullable
  - `commandForIgnoringBuildStep` string, nullable
  - `connectConfigurations` object[], nullable
    - `envId` union, required
      - string
      - 'preview' | 'production'
    - `connectConfigurationId` string, required
    - `dc` string
    - `passive` false | true, required
    - `buildsEnabled` false | true, required
    - `aws` object
      - `subnetIds` string[], required
      - `securityGroupId` string
    - `createdAt` number, required
    - `updatedAt` number, required
  - `connectConfigurationId` string, nullable
  - `connectBuildsEnabled` false | true
  - `passiveConnectConfigurationId` string, nullable
  - `createdAt` number
  - `customerSupportCodeVisibility` false | true
  - `crons` object
    - `enabledAt` number, required — The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs.
    - `disabledAt` number, nullable, required — The time the feature was disabled for this project.
    - `updatedAt` number, required
    - `deploymentId` string, nullable, required — The ID of the Deployment from which the definitions originated.
    - `definitions` object[], required
      - `host` string, required — The hostname that should be used.
      - `path` string, required — The path that should be called for the cronjob.
      - `schedule` string, required — The cron expression.
      - `source` 'api' — The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json).
      - `description` string — A human-readable description of what this cron job does.
      - `hostInferred` false | true — Whether the host was inferred from the production deployment URL rather than explicitly provided.
  - `dataCache` object
    - `userDisabled` false | true, required
    - `storageSizeBytes` number, nullable
    - `unlimited` false | true
  - `deploymentExpiration` object, required — Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.
    - `expirationDays` number — Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.
    - `expirationDaysProduction` number — Number of days to keep production deployments before soft deletion.
    - `expirationDaysCanceled` number — Number of days to keep canceled deployments before soft deletion.
    - `expirationDaysErrored` number — Number of days to keep errored deployments before soft deletion.
    - `deploymentsToKeep` number — Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.
  - `expiration` union
    - object
      - `expiresAt` number, required — Unix ms timestamp when the project is scheduled to expire.
    - object
      - `lockedAt` number, required — Unix ms timestamp when the project was locked.
      - `lockedBy` string, required — userId of the actor that triggered the lock (system or admin).
  - `devCommand` string, nullable
  - `directoryListing` false | true, required
  - `installCommand` string, nullable
  - `env` object[]
    - `target` union
      - string[]
      - 'development' | 'development' | 'preview' | 'preview' | 'production'
    - `type` 'encrypted' | 'plain' | 'secret' | 'sensitive' | 'system', required
    - `sunsetSecretId` string — This is used to identify variables that have been migrated from type secret to sensitive.
    - `legacyValue` string — Legacy now-encryption ciphertext, present after migration swaps value/vsmValue
    - `decrypted` false | true
    - `value` string, required
    - `vsmValue` string
    - `id` string
    - `key` string, required
    - `configurationId` string, nullable
    - `createdAt` number
    - `updatedAt` number
    - `createdBy` string, nullable
    - `updatedBy` string, nullable
    - `gitBranch` string
    - `visibility` 'config' | 'secret' — User-facing config/secret model. When set, authoritative for new code paths when the env-var-config-secret-ui flag is enabled. Legacy rows omit this field; legacy rows omit it and callers fall back to existing `type` behavior.
    - `edgeConfigId` string, nullable
    - `edgeConfigTokenId` string, nullable
    - `contentHint` union
      - object
        - `type` 'redis-url', required
        - `storeId` string, required
      - object
        - `type` 'redis-rest-api-url', required
        - `storeId` string, required
      - object
        - `type` 'redis-rest-api-token', required
        - `storeId` string, required
      - object
        - `type` 'redis-rest-api-read-only-token', required
        - `storeId` string, required
      - object
        - `type` 'blob-read-write-token', required
        - `storeId` string, required
      - object
        - `type` 'blob-store-id', required
        - `storeId` string, required
      - object
        - `type` 'blob-webhook-public-key', required
        - `storeId` string, required
      - object
        - `type` 'postgres-url', required
        - `storeId` string, required
      - object
        - `type` 'postgres-url-non-pooling', required
        - `storeId` string, required
      - object
        - `type` 'postgres-prisma-url', required
        - `storeId` string, required
      - object
        - `type` 'postgres-user', required
        - `storeId` string, required
      - object
        - `type` 'postgres-host', required
        - `storeId` string, required
      - object
        - `type` 'postgres-password', required
        - `storeId` string, required
      - object
        - `type` 'postgres-database', required
        - `storeId` string, required
      - object
        - `type` 'postgres-url-no-ssl', required
        - `storeId` string, required
      - object
        - `type` 'integration-store-secret', required
        - `storeId` string, required
        - `integrationId` string, required
        - `integrationProductId` string, required
        - `integrationConfigurationId` string, required
      - object
        - `type` 'flags-connection-string', required
        - `projectId` string, required
    - `internalContentHint` object, nullable — Similar to `contentHints`, but should not be exposed to the user.
      - `type` 'flags-secret', required
      - `encryptedValue` string, required — Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.
    - `comment` string
    - `customEnvironmentIds` string[]
  - `customEnvironments` object[]
    - `id` string, required — Unique identifier for the custom environment (format: env_*)
    - `slug` string, required — URL-friendly name of the environment
    - `type` 'development' | 'preview' | 'production', required — The type of environment (production, preview, or development)
    - `description` string — Optional description of the environment's purpose
    - `branchMatcher` object — Configuration for matching git branches to this environment
      - `type` 'endsWith' | 'equals' | 'startsWith', required — The type of matching to perform
      - `pattern` string, required — The pattern to match against branch names
    - `domains` object[] — List of domains associated with this environment
      - `name` string, required
      - `apexName` string, required
      - `projectId` string, required
      - `redirect` string, nullable
      - `redirectStatusCode` 301 | 302 | 307 | 308 | null, nullable
      - `gitBranch` string, nullable
      - `customEnvironmentId` string, nullable
      - `updatedAt` number
      - `createdAt` number
      - `verified` false | true, required — `true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.
      - `verification` object[] — A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.
        - `type` string, required
        - `domain` string, required
        - `value` string, required
        - `reason` string, required
    - `currentDeploymentAliases` string[] — List of aliases for the current deployment
    - `createdAt` number, required — Timestamp when the environment was created
    - `updatedAt` number, required — Timestamp when the environment was last updated
  - `framework` 'actix-web' | 'angular' | 'ash' | 'astro' | 'axum' | 'blitzjs' | 'brunch' | 'bun' | 'container' | 'create-react-app' | 'django' | 'docusaurus' | 'docusaurus-2' | 'dojo' | 'eleventy' | 'elysia' | 'ember' | 'eve' | 'express' | 'fastapi' | 'fasthtml' | 'fastify' | 'flask' | 'gatsby' | 'go' | 'gridsome' | 'h3' | 'hexo' | 'hono' | 'hugo' | 'hydrogen' | 'ionic-angular' | 'ionic-react' | 'jekyll' | 'koa' | 'mastra' | 'middleman' | 'nestjs' | 'nextjs' | 'nitro' | 'node' | 'nuxtjs' | 'parcel' | 'polymer' | 'preact' | 'python' | 'react-router' | 'redwoodjs' | 'remix' | 'ruby' | 'rust' | 'saber' | 'sanity' | 'sanity-v2' | 'sapper' | 'scully' | 'services' | 'solidstart' | 'solidstart-1' | 'stencil' | 'storybook' | 'svelte' | 'sveltekit' | 'sveltekit-1' | 'tanstack-start' | 'tanstack-start-lovable' | 'umijs' | 'vite' | 'vitepress' | 'vue' | 'vuepress' | 'xmcp' | 'zola' | 'null', nullable
  - `services` object[]
    - `serviceName` string, required — Service name from the deployment (Service.name).
    - `serviceType` 'cron' | 'job' | 'web' | 'worker' — Service kind (Service.type). Omitted for schemas that do not define one.
    - `framework` 'actix-web' | 'angular' | 'ash' | 'astro' | 'axum' | 'blitzjs' | 'brunch' | 'bun' | 'container' | 'create-react-app' | 'django' | 'docusaurus' | 'docusaurus-2' | 'dojo' | 'eleventy' | 'elysia' | 'ember' | 'eve' | 'express' | 'fastapi' | 'fasthtml' | 'fastify' | 'flask' | 'gatsby' | 'go' | 'gridsome' | 'h3' | 'hexo' | 'hono' | 'hugo' | 'hydrogen' | 'ionic-angular' | 'ionic-react' | 'jekyll' | 'koa' | 'mastra' | 'middleman' | 'nestjs' | 'nextjs' | 'nitro' | 'node' | 'nuxtjs' | 'parcel' | 'polymer' | 'preact' | 'python' | 'react-router' | 'redwoodjs' | 'remix' | 'ruby' | 'rust' | 'saber' | 'sanity' | 'sanity-v2' | 'sapper' | 'scully' | 'services' | 'solidstart' | 'solidstart-1' | 'stencil' | 'storybook' | 'svelte' | 'sveltekit' | 'sveltekit-1' | 'tanstack-start' | 'tanstack-start-lovable' | 'umijs' | 'vite' | 'vitepress' | 'vue' | 'vuepress' | 'xmcp' | 'zola' — Framework slug, when the service has one (omitted otherwise).
    - `runtime` string — Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds.
  - `gitForkProtection` false | true
  - `gitLFS` false | true
  - `id` string, required
  - `ipBuckets` object[]
    - `bucket` string, required
    - `default` false | true
    - `supportUntil` number
  - `jobs` object
    - `lint` object
      - `targets` string[], required
    - `typecheck` object
      - `targets` string[], required
    - `mfe-config-present` object
      - `targets` string[], required
  - `latestDeployments` object[]
    - `id` string, required
    - `alias` string[]
    - `aliasAssigned` union
      - number
      - false | true
    - `aliasError` object, nullable
      - `code` string, required
      - `message` string, required
    - `aliasFinal` string, nullable
    - `automaticAliases` string[]
    - `branchMatcher` object
      - `type` 'endsWith' | 'equals' | 'startsWith', required — The type of matching to perform
      - `pattern` string, required — The pattern to match against branch names
    - `buildingAt` number
    - `builds` object[]
      - `use` string, required
      - `src` string
      - `dest` string
    - `checksConclusion` 'canceled' | 'failed' | 'skipped' | 'succeeded'
    - `checksState` 'completed' | 'registered' | 'running'
    - `connectBuildsEnabled` false | true
    - `connectConfigurationId` string
    - `createdAt` number, required
    - `createdIn` string, required
    - `creator` object, nullable, required
      - `email` string, required
      - `githubLogin` string
      - `gitlabLogin` string
      - `uid` string, required
      - `username` string, required
    - `deletedAt` number
    - `deploymentHostname` string, required
    - `forced` false | true
    - `name` string, required
    - `meta` object
    - `monorepoManager` string, nullable
    - `oidcTokenClaims` object
      - `iss` string, required
      - `sub` string, required
      - `scope` string, required
      - `aud` string, required
      - `owner` string, required
      - `owner_id` string, required
      - `project` string, required
      - `project_id` string, required
      - `environment` string, required
      - `custom_environment_id` string
      - `mfe_group_ids` string[]
      - `plan` string
    - `plan` 'enterprise' | 'hobby' | 'pro', required
    - `previewCommentsEnabled` false | true — Whether or not preview comments are enabled for the deployment
    - `private` false | true, required
    - `readyAt` number
    - `readyState` 'BLOCKED' | 'BUILDING' | 'CANCELED' | 'ERROR' | 'INITIALIZING' | 'QUEUED' | 'READY', required
    - `readySubstate` 'PROMOTED' | 'ROLLING' | 'STAGED'
    - `requestedAt` number
    - `target` string, nullable
    - `teamId` string, nullable
    - `type` 'LAMBDAS', required
    - `url` string, required
    - `userId` string, required
    - `withCache` false | true
  - `link` union
    - object
      - `org` string, required
      - `repoOwnerId` number — A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.
      - `repo` string
      - `repoId` number
      - `type` 'github', required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `type` 'github-limited', required
      - `repo` string
      - `repoId` number
      - `createdAt` number
      - `updatedAt` number
      - `org` string, required
      - `repoOwnerId` number — A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `org` string, required
      - `repoOwnerId` number — A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.
      - `repo` string
      - `repoId` number
      - `type` 'github-custom-host', required
      - `host` string, required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `projectId` string, required
      - `projectName` string, required
      - `projectNameWithNamespace` string, required
      - `projectNamespace` string, required
      - `projectOwnerId` number — A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).
      - `projectUrl` string, required
      - `type` 'gitlab', required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `name` string, required
      - `slug` string, required
      - `owner` string, required
      - `type` 'bitbucket', required
      - `uuid` string, required
      - `workspaceUuid` string, required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `org` string, required
      - `repo` string, required
      - `type` 'vercel', required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
    - object
      - `owner` string, required — Owner (namespace) slug, e.g. `acme`.
      - `repo` string, required
      - `repoId` string, required — Origin repository id.
      - `ownerId` string, required — Origin namespace id (`ns_…`) of the owner.
      - `type` 'cursor-origin', required
      - `createdAt` number
      - `deployHooks` object[], required
        - `createdAt` number
        - `id` string, required
        - `name` string, required
        - `ref` string, required
        - `url` string, required
      - `gitCredentialId` string, required
      - `updatedAt` number
      - `sourceless` false | true
      - `productionBranch` string, required
  - `blobs` object
    - `isDefaultApp` false | true — Marks the team-level, Vercel-managed default blob project (`vercel-blob-default-project`) that orphan blob stores are scoped to when connected without an explicit project. Set only by internal storage flows and immutable after creation — guards rely on it to protect the connected stores from being lost when the project is deleted or transferred.
  - `microfrontends` union
    - object
      - `isDefaultApp` true, required
      - `updatedAt` number, required — Timestamp when the microfrontends settings were last updated.
      - `groupIds` string[], required — The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.
      - `enabled` true, required — Whether microfrontends are enabled for this project.
      - `defaultRoute` string — A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`
      - `freeProjectForLegacyLimits` false | true — Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.
    - object
      - `isDefaultApp` false
      - `routeObservabilityToThisProject` false | true — Whether observability data should be routed to this microfrontend project or a root project.
      - `doNotRouteWithMicrofrontendsRouting` false | true — Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.
      - `updatedAt` number, required — Timestamp when the microfrontends settings were last updated.
      - `groupIds` string[], required — The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.
      - `enabled` true, required — Whether microfrontends are enabled for this project.
      - `defaultRoute` string — A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`
      - `freeProjectForLegacyLimits` false | true — Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.
    - object
      - `updatedAt` number, required
      - `groupIds` unknown[], required
        - unknown
      - `enabled` false, required
      - `freeProjectForLegacyLimits` false | true
  - `name` string, required
  - `nodeVersion` '10.x' | '12.x' | '14.x' | '16.x' | '18.x' | '20.x' | '22.x' | '24.x' | '8.10.x', required
  - `optionsAllowlist` object, nullable
    - `paths` object[], required
      - `value` string, required
  - `outputDirectory` string, nullable
  - `passwordProtection` object, nullable
  - `passport` object, nullable
    - `deploymentType` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews', required
    - `connectorId` string, required
  - `protectionConfig` object
    - `sandboxUrls` object
      - `inheritDeploymentProtection` false | true
  - `sandbox` object
    - `region` 'cle1' | 'iad1' | 'sfo1'
    - `failoverRegions` string[]
  - `productionDeploymentsFastLane` false | true
  - `resourceConfig` object, required
    - `elasticConcurrencyEnabled` false | true
    - `fluid` false | true
    - `functionDefaultRegions` string[], required
    - `functionDefaultTimeout` number
    - `functionDefaultMemoryType` 'performance' | 'performance_xl' | 'standard' | 'standard_legacy'
    - `functionZeroConfigFailover` false | true
    - `buildMachineType` 'basic' | 'enhanced' | 'standard' | 'turbo'
    - `buildMachineSelection` 'elastic' | 'fixed'
    - `buildMachineElasticLastUpdated` number
    - `buildMachineElasticReason` 'basic-floor' | 'build-timeout-failure' | 'enospc-failure' | 'enterprise-floor' | 'high-peak-disk' | 'high-peak-memory' | 'long-build-duration' | 'oom-failure' | 'short-build-duration' | 'sustained-high-cpu'
    - `isNSNBDisabled` false | true
    - `buildQueue` object
      - `configuration` 'SKIP_NAMESPACE_QUEUE' | 'WAIT_FOR_NAMESPACE_QUEUE'
    - `enableFunctionsBeta` false | true
  - `rollbackDescription` object — Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback.
    - `userId` string, required — The user who rolled back the project.
    - `username` string, required — The username of the user who rolled back the project.
    - `description` string, required — User-supplied explanation of why they rolled back the project. Limited to 250 characters.
    - `createdAt` number, required — Timestamp of when the rollback was requested.
  - `rollingRelease` object, nullable — Project-level rolling release configuration that defines how deployments should be gradually rolled out
    - `target` string, required — The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.
    - `stages` object[], nullable — An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.
      - `targetPercentage` number, required — The percentage of traffic to serve to the canary deployment (0-100)
      - `requireApproval` false | true — Whether or not this stage requires manual approval to proceed
      - `duration` number — Duration in minutes for automatic advancement to the next stage
      - `linearShift` false | true — Whether to linearly shift traffic over the duration of this stage
    - `canaryResponseHeader` false | true — Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.
    - `gate` object — Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`.
      - `enabled` false | true, required — Whether automated gating is enabled for this project's rollouts.
      - `checks` object[], required — The checks to evaluate. An empty array means nothing is evaluated.
        - `type` 'error-rate-5xx', required — The metric this check evaluates.
        - `minSampleSize` number — Minimum number of requests required in the window before the check can fail. Below this, the check is inconclusive rather than failing, so low-traffic stages don't gate on noise. Defaults to `100` when omitted.
        - `excludeStatusCodes` number[] — Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.
        - `excludePaths` string[] — Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.
        - `ingestWatermarkSeconds` number — Seconds of ingest lag to allow for: the query's upper bound is `now() - this value`, so the check never reads a window that is still filling. Defaults to `30` when omitted.
      - `failureThreshold` number — How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.
      - `windowSize` number — How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.
      - `action` 'pause' | 'rollback', required — What to do when the gate trips: pause the rollout, or roll it back.
      - `dryRun` false | true, required — When true, a tripped gate is only reported — {@link action} is not taken.
  - `defaultResourceConfig` object, required
    - `elasticConcurrencyEnabled` false | true
    - `fluid` false | true
    - `functionDefaultRegions` string[], required
    - `functionDefaultTimeout` number
    - `functionDefaultMemoryType` 'performance' | 'performance_xl' | 'standard' | 'standard_legacy'
    - `functionZeroConfigFailover` false | true
    - `buildMachineType` 'basic' | 'enhanced' | 'standard' | 'turbo'
    - `buildMachineSelection` 'elastic' | 'fixed'
    - `buildMachineElasticLastUpdated` number
    - `buildMachineElasticReason` 'basic-floor' | 'build-timeout-failure' | 'enospc-failure' | 'enterprise-floor' | 'high-peak-disk' | 'high-peak-memory' | 'long-build-duration' | 'oom-failure' | 'short-build-duration' | 'sustained-high-cpu'
    - `isNSNBDisabled` false | true
    - `buildQueue` object
      - `configuration` 'SKIP_NAMESPACE_QUEUE' | 'WAIT_FOR_NAMESPACE_QUEUE'
    - `enableFunctionsBeta` false | true
  - `rootDirectory` string, nullable
  - `serverlessFunctionZeroConfigFailover` false | true
  - `skewProtectionBoundaryAt` number
  - `skewProtectionMaxAge` number
  - `skewProtectionAllowedDomains` string[]
  - `skipGitConnectDuringLink` false | true
  - `staticIps` object
    - `builds` false | true, required
    - `enabled` false | true, required
    - `regions` string[], required
  - `sourceFilesOutsideRootDirectory` false | true
  - `enableAffectedProjectsDeployments` false | true
  - `enableExternalRewriteCaching` false | true
  - `ssoProtection` object, nullable
    - `deploymentType` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews', required
    - `cve55182MigrationAppliedFrom` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews' | 'null', nullable
    - `april2026SecurityIncidentMigrationAppliedFrom` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews' | 'null', nullable
  - `targets` object
  - `transferCompletedAt` number
  - `transferStartedAt` number
  - `transferToAccountId` string
  - `transferredFromAccountId` string
  - `updatedAt` number
  - `live` false | true
  - `enablePreviewFeedback` false | true | null, nullable
  - `enableProductionFeedback` false | true | null, nullable
  - `permissions` object
    - `oauth2Connection` ACLAction[]
    - `user` ACLAction[]
    - `userConnection` ACLAction[]
    - `userMfaConfiguration` ACLAction[]
    - `userPreference` ACLAction[]
    - `userSudo` ACLAction[]
    - `webAuthn` ACLAction[]
    - `accessGroup` ACLAction[]
    - `agent` ACLAction[]
    - `aiGatewayApiKey` ACLAction[]
    - `aiGatewayApiKeyOwnedBySelf` ACLAction[]
    - `aiGatewayApiKeySpendAttribution` ACLAction[]
    - `aiGatewayApiKeyZdrExemption` ACLAction[]
    - `aiGatewayBudget` ACLAction[]
    - `aiGatewayCredits` ACLAction[]
    - `aiGatewayPrivateModels` ACLAction[]
    - `aiGatewayGuardrails` ACLAction[]
    - `aiGatewayRules` ACLAction[]
    - `aiGatewaySettings` ACLAction[]
    - `aiGatewayUsage` ACLAction[]
    - `aiGatewayVirtualModelConfigs` ACLAction[]
    - `alerts` ACLAction[]
    - `alertRules` ACLAction[]
    - `aliasGlobal` ACLAction[]
    - `analyticsSampling` ACLAction[]
    - `analyticsUsage` ACLAction[]
    - `apiKey` ACLAction[]
    - `apiKeyAiGateway` ACLAction[]
    - `apiKeyOwnedBySelf` ACLAction[]
    - `oauth2Application` ACLAction[]
    - `vercelAppInstallation` ACLAction[]
    - `vercelAppInstallationRequest` ACLAction[]
    - `auditLog` ACLAction[]
    - `billingAddress` ACLAction[]
    - `billingInformation` ACLAction[]
    - `billingInvoice` ACLAction[]
    - `billingInvoiceEmailRecipient` ACLAction[]
    - `billingInvoiceLanguage` ACLAction[]
    - `billingPlan` ACLAction[]
    - `billingPurchaseOrder` ACLAction[]
    - `billingRefund` ACLAction[]
    - `billingTaxId` ACLAction[]
    - `blob` ACLAction[]
    - `blobStoreTokenSet` ACLAction[]
    - `budget` ACLAction[]
    - `cacheArtifact` ACLAction[]
    - `cacheArtifactUsageEvent` ACLAction[]
    - `codeChecks` ACLAction[]
    - `codeOwners` ACLAction[]
    - `ciInvocations` ACLAction[]
    - `ciLogs` ACLAction[]
    - `concurrentBuilds` ACLAction[]
    - `connect` ACLAction[]
    - `connectConfiguration` ACLAction[]
    - `connectLogs` ACLAction[]
    - `connexClient` ACLAction[]
    - `connexClientProject` ACLAction[]
    - `connexInstallation` ACLAction[]
    - `connexToken` ACLAction[]
    - `buildMachineDefault` ACLAction[]
    - `cursorOriginInstallation` ACLAction[]
    - `dataCacheBillingSettings` ACLAction[]
    - `defaultDeploymentProtection` ACLAction[]
    - `deploymentPolicy` ACLAction[]
    - `domain` ACLAction[]
    - `domainAcceptDelegation` ACLAction[]
    - `domainAuthCodes` ACLAction[]
    - `domainCertificate` ACLAction[]
    - `domainCheckConfig` ACLAction[]
    - `domainMove` ACLAction[]
    - `domainPurchase` ACLAction[]
    - `domainRecord` ACLAction[]
    - `domainTransferIn` ACLAction[]
    - `drain` ACLAction[]
    - `edgeConfig` ACLAction[]
    - `edgeConfigItem` ACLAction[]
    - `edgeConfigSchema` ACLAction[]
    - `edgeConfigToken` ACLAction[]
    - `endpointVerification` ACLAction[]
    - `event` ACLAction[]
    - `fileUpload` ACLAction[]
    - `flagsExplorerSubscription` ACLAction[]
    - `gitRepository` ACLAction[]
    - `imageOptimizationNewPrice` ACLAction[]
    - `integration` ACLAction[]
    - `integrationAccount` ACLAction[]
    - `integrationConfiguration` ACLAction[]
    - `integrationConfigurationProjects` ACLAction[]
    - `integrationConfigurationRole` ACLAction[]
    - `integrationConfigurationTransfer` ACLAction[]
    - `integrationDeploymentAction` ACLAction[]
    - `integrationEvent` ACLAction[]
    - `integrationLog` ACLAction[]
    - `integrationResource` ACLAction[]
    - `integrationResourceData` ACLAction[]
    - `integrationResourceReplCommand` ACLAction[]
    - `integrationResourceSecrets` ACLAction[]
    - `integrationSSOSession` ACLAction[]
    - `integrationStrict` ACLAction[]
    - `integrationStoreTokenSet` ACLAction[]
    - `integrationVercelConfigurationOverride` ACLAction[]
    - `integrationPullRequest` ACLAction[]
    - `ipBlocking` ACLAction[]
    - `jobGlobal` ACLAction[]
    - `kmsIssuer` ACLAction[]
    - `kmsProjectGrant` ACLAction[]
    - `logDrain` ACLAction[]
    - `marketplaceBillingData` ACLAction[]
    - `marketplaceExperimentationEdgeConfigData` ACLAction[]
    - `marketplaceExperimentationItem` ACLAction[]
    - `marketplaceFlexCommit` ACLAction[]
    - `marketplaceInstallationMember` ACLAction[]
    - `marketplaceInvoice` ACLAction[]
    - `marketplaceSettings` ACLAction[]
    - `Monitoring` ACLAction[]
    - `monitoringAlert` ACLAction[]
    - `monitoringChart` ACLAction[]
    - `monitoringQuery` ACLAction[]
    - `monitoringSettings` ACLAction[]
    - `notificationCustomerBudget` ACLAction[]
    - `notificationDeploymentFailed` ACLAction[]
    - `notificationDomainConfiguration` ACLAction[]
    - `notificationDomainExpire` ACLAction[]
    - `notificationDomainMoved` ACLAction[]
    - `notificationDomainPurchase` ACLAction[]
    - `notificationDomainRenewal` ACLAction[]
    - `notificationDomainTransfer` ACLAction[]
    - `notificationDomainUnverified` ACLAction[]
    - `NotificationMonitoringAlert` ACLAction[]
    - `notificationPaymentFailed` ACLAction[]
    - `notificationPreferences` ACLAction[]
    - `notificationStatementOfReasons` ACLAction[]
    - `notificationUsageAlert` ACLAction[]
    - `oidcFederationPolicy` ACLAction[]
    - `observabilityConfiguration` ACLAction[]
    - `observabilityFunnel` ACLAction[]
    - `observabilityNotebook` ACLAction[]
    - `openTelemetryEndpoint` ACLAction[]
    - `ownEvent` ACLAction[]
    - `organization` ACLAction[]
    - `organizationDomain` ACLAction[]
    - `organizationTeam` ACLAction[]
    - `passwordProtectionInvoiceItem` ACLAction[]
    - `paymentMethod` ACLAction[]
    - `permissions` ACLAction[]
    - `postgres` ACLAction[]
    - `postgresStoreTokenSet` ACLAction[]
    - `previewDeploymentSuffix` ACLAction[]
    - `privateCloudAccount` ACLAction[]
    - `projectTransferIn` ACLAction[]
    - `proTrialOnboarding` ACLAction[]
    - `rateLimit` ACLAction[]
    - `redis` ACLAction[]
    - `redisStoreTokenSet` ACLAction[]
    - `remoteCaching` ACLAction[]
    - `repository` ACLAction[]
    - `samlConfig` ACLAction[]
    - `secret` ACLAction[]
    - `securityConfig` ACLAction[]
    - `sensitiveEnvironmentVariablePolicy` ACLAction[]
    - `sharedEnvVars` ACLAction[]
    - `sharedEnvVarsProduction` ACLAction[]
    - `space` ACLAction[]
    - `spaceRun` ACLAction[]
    - `storeIsLocked` ACLAction[]
    - `storeTokenSetSensitive` ACLAction[]
    - `storeTransfer` ACLAction[]
    - `supportCase` ACLAction[]
    - `supportCaseComment` ACLAction[]
    - `team` ACLAction[]
    - `teamAccessRequest` ACLAction[]
    - `teamFellowMembership` ACLAction[]
    - `teamGitExclusivity` ACLAction[]
    - `teamInvite` ACLAction[]
    - `teamInviteCode` ACLAction[]
    - `teamInviteLink` ACLAction[]
    - `teamJoin` ACLAction[]
    - `teamMemberMfaStatus` ACLAction[]
    - `teamMicrofrontends` ACLAction[]
    - `teamOwnMembership` ACLAction[]
    - `teamOwnMembershipDisconnectSAML` ACLAction[]
    - `teamSudo` ACLAction[]
    - `teamTokenInvalidation` ACLAction[]
    - `token` ACLAction[]
    - `toolbarComment` ACLAction[]
    - `usage` ACLAction[]
    - `usageCycle` ACLAction[]
    - `vcrRepository` ACLAction[]
    - `vpcPeeringConnection` ACLAction[]
    - `webAnalyticsPlan` ACLAction[]
    - `webhook` ACLAction[]
    - `webhook-event` ACLAction[]
    - `aliasProject` ACLAction[]
    - `aliasProtectionBypass` ACLAction[]
    - `bulkRedirects` ACLAction[]
    - `buildMachine` ACLAction[]
    - `connectConfigurationLink` ACLAction[]
    - `dataCacheNamespace` ACLAction[]
    - `deployment` ACLAction[]
    - `deploymentBuildLogs` ACLAction[]
    - `deploymentCheck` ACLAction[]
    - `deploymentCheckPreview` ACLAction[]
    - `deploymentCheckReRunFromProductionBranch` ACLAction[]
    - `deploymentProductionGit` ACLAction[]
    - `deploymentV0` ACLAction[]
    - `deploymentPreview` ACLAction[]
    - `deploymentPrivate` ACLAction[]
    - `deploymentPromote` ACLAction[]
    - `deploymentRollback` ACLAction[]
    - `edgeCacheNamespace` ACLAction[]
    - `environments` ACLAction[]
    - `job` ACLAction[]
    - `logs` ACLAction[]
    - `logsPreset` ACLAction[]
    - `observabilityData` ACLAction[]
    - `onDemandBuild` ACLAction[]
    - `onDemandConcurrency` ACLAction[]
    - `optionsAllowlist` ACLAction[]
    - `passwordProtection` ACLAction[]
    - `privateLinkEndpoint` ACLAction[]
    - `productionAliasProtectionBypass` ACLAction[]
    - `project` ACLAction[]
    - `projectAccessGroup` ACLAction[]
    - `projectAnalyticsSampling` ACLAction[]
    - `projectAnalyticsUsage` ACLAction[]
    - `projectCheck` ACLAction[]
    - `projectCheckRun` ACLAction[]
    - `projectDeploymentExpiration` ACLAction[]
    - `projectDeploymentHook` ACLAction[]
    - `projectDeploymentProtectionStrict` ACLAction[]
    - `projectDomain` ACLAction[]
    - `projectDomainCheckConfig` ACLAction[]
    - `projectDomainMove` ACLAction[]
    - `projectDomainVerify` ACLAction[]
    - `projectEvent` ACLAction[]
    - `projectEnvVars` ACLAction[]
    - `projectEnvVarsProduction` ACLAction[]
    - `projectEnvVarsUnownedByIntegration` ACLAction[]
    - `projectFlags` ACLAction[]
    - `projectFlagsProduction` ACLAction[]
    - `projectFlagsSdkKey` ACLAction[]
    - `projectFromV0` ACLAction[]
    - `projectId` ACLAction[]
    - `projectIntegrationConfiguration` ACLAction[]
    - `projectLink` ACLAction[]
    - `projectMember` ACLAction[]
    - `projectMonitoring` ACLAction[]
    - `projectOIDCToken` ACLAction[]
    - `projectPermissions` ACLAction[]
    - `projectProductionBranch` ACLAction[]
    - `projectProtectionBypass` ACLAction[]
    - `projectRollingRelease` ACLAction[]
    - `projectRoutes` ACLAction[]
    - `projectSupportCase` ACLAction[]
    - `projectSupportCaseComment` ACLAction[]
    - `projectTier` ACLAction[]
    - `projectTransfer` ACLAction[]
    - `projectTransferOut` ACLAction[]
    - `projectUsage` ACLAction[]
    - `pageIntegrity` ACLAction[]
    - `seawallConfig` ACLAction[]
    - `securityPlusConfiguration` ACLAction[]
    - `shareableLinkStrict` ACLAction[]
    - `sharedEnvVarConnection` ACLAction[]
    - `skewProtection` ACLAction[]
    - `analytics` ACLAction[]
    - `trustedIps` ACLAction[]
    - `trustedSources` ACLAction[]
    - `v0Chat` ACLAction[]
    - `vercelRun` ACLAction[]
    - `webAnalytics` ACLAction[]
  - `lastRollbackTarget` object, nullable
  - `lastAliasRequest` object, nullable
    - `fromDeploymentId` string, nullable, required
    - `toDeploymentId` string, required
    - `fromRollingReleaseId` string — If rolling back from a rolling release, fromDeploymentId captures the "base" of that rolling release, and fromRollingReleaseId captures the "target" of that rolling release.
    - `jobStatus` 'failed' | 'in-progress' | 'pending' | 'skipped' | 'succeeded', required
    - `requestedAt` number, required
    - `type` 'promote' | 'rollback', required
  - `protectionBypass` object
  - `hasActiveBranches` false | true
  - `trustedIps` union
    - object
      - `deploymentType` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews' | 'production', required
      - `addresses` object[], required
        - `value` string, required
        - `note` string
      - `protectionMode` 'additional' | 'exclusive', required
    - object
      - `deploymentType` 'all' | 'all_except_custom_domains' | 'preview' | 'prod_deployment_urls_and_all_previews' | 'production', required
  - `trustedSources` object, nullable
    - `projects` object
    - `oidcProviders` object
  - `gitComments` object
    - `onPullRequest` false | true, required — Whether the Vercel bot should comment on PRs
    - `onCommit` false | true, required — Whether the Vercel bot should comment on commits
  - `gitProviderOptions` object
    - `createDeployments` 'disabled' | 'enabled', required — Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead
    - `disableRepositoryDispatchEvents` false | true — Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events - `true`: disable repository-dispatch events for this project (explicit override of the team setting). - `false`: enable repository-dispatch events for this project (explicit override of the team setting). - absent: inherit from `team.disableRepositoryDispatchEvents`.
    - `requireVerifiedCommits` false | true — Whether the project requires commits to be signed & verified before deployments will be created. - `true`: require verified commits for this project (explicit override of the team setting). - `false`: do not require verified commits (explicit override of the team setting). - absent: inherit from `team.requireVerifiedCommits`.
    - `gitCommitStatus` false | true — Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled.
    - `consolidatedGitCommitStatus` object — Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment.
      - `enabled` false | true, required — Whether consolidated commit status is enabled.
      - `propagateFailures` false | true, required — Whether to propagate individual deployment failures to the consolidated status.
  - `paused` false | true
  - `concurrencyBucketName` string
  - `webAnalytics` object
    - `id` string, required
    - `disabledAt` number
    - `canceledAt` number
    - `enabledAt` number
    - `hasData` true
  - `security` object
    - `attackModeEnabled` false | true
    - `attackModeUpdatedAt` number
    - `firewallEnabled` false | true
    - `firewallUpdatedAt` number
    - `attackModeActiveUntil` number, nullable
    - `firewallConfigVersion` number
    - `rulesets` object
    - `firewallSeawallEnabled` false | true
    - `ja3Enabled` false | true
    - `ja4Enabled` false | true
    - `firewallBypassIps` string[]
    - `managedRules` object, nullable
      - `vercel_ruleset` object, required
        - `active` false | true, required
        - `action` 'challenge' | 'deny' | 'log'
      - `traffic_sources` object, required
        - `active` false | true, required
        - `action` 'challenge' | 'deny' | 'log'
      - `bot_filter` object, required
        - `active` false | true, required
        - `action` 'challenge' | 'deny' | 'log'
      - `ai_bots` object, required
        - `active` false | true, required
        - `action` 'challenge' | 'deny' | 'log'
      - `owasp` object, required
        - `active` false | true, required
        - `action` 'challenge' | 'deny' | 'log'
    - `botIdEnabled` false | true
    - `log_headers` union
      - string[]
      - '*'
    - `securityPlus` false | true
    - `securityPlusMetadata` object
      - `updatedAt` number, required
      - `firstEnabledAt` number — Timestamp when the feature was first enabled. Never changes after initial enablement.
    - `pageIntegrityEnabled` false | true — Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table.
  - `oidcTokenConfig` object
    - `enabled` false | true — Whether or not to generate OpenID Connect JSON Web Tokens.
    - `issuerMode` 'global' | 'team' — - team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`
  - `deploymentPolicy` object, nullable — Project shape. `null` on a rule list clears the project's override for that rule type (fall back to team for every env); omitting is equivalent. Setting `deploymentPolicy` itself to `null` clears every override at once. Kept structurally distinct from {@link TeamDeploymentPolicy} so the two storage locations don't share a type by accident.
    - `gitSources` object[], nullable
      - `sources` union[], required
        - union
          - object — Allowlist entry for GitHub and Bitbucket, whose repos are identified by a flat `org`/`repo` (Bitbucket's workspace/owner maps to `org`, its repo slug to `repo`). Omit `repo` to match any repo in the org. Org is matched case-insensitively.
            - `provider` 'bitbucket' | 'github', required
            - `org` string, required
            - `repo` string
          - object — Allowlist entry for GitLab, which uses nested groups rather than a flat org/repo. `namespace` is the full group path (e.g. `group` or `group/subgroup`); `project` is the leaf project name. Omit `project` to match any project under the namespace. Namespace is matched case-insensitively.
            - `provider` 'gitlab', required
            - `namespace` string, required
            - `project` string
      - `enabled` false | true, required
      - `environments` union[], required
        - union
          - object
            - `type` 'system', required
            - `target` 'preview' | 'production', required
          - object
            - `type` 'custom', required
            - `environmentId` string, required
    - `deploymentSources` object[], nullable
      - `sources` string[], required
      - `enabled` false | true, required
      - `environments` union[], required
        - union
          - object
            - `type` 'system', required
            - `target` 'preview' | 'production', required
          - object
            - `type` 'custom', required
            - `environmentId` string, required
  - `tier` string
  - `usageStatus` object
    - `kind` 'flat', required — Billing mode. Always 'flat' for flat-rate projects.
    - `exceededAllowanceUntil` number — Timestamp until which the project has exceeded its CDN allowance.
    - `bypassThrottleUntil` number — Timestamp until which throttling is bypassed (project pays list rates for overage).
    - `throttled` false | true — Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint).
    - `teamThrottled` false | true — Synced from `team.billing.usageStatus.throttled`. When `true`, the team has throttled all of its projects regardless of `throttled`. The effective throttle the CDN enforces is `throttled || teamThrottled`.
  - `features` object
    - `webAnalytics` false | true
  - `v0` false | true
  - `v0Created` false | true
  - `abuse` object
    - `scanner` string
    - `history` object[], required
      - `scanner` string, required
      - `reason` string, required
      - `by` string, required
      - `byId` string, required
      - `at` number, required
    - `updatedAt` number, required
    - `block` object
      - `action` 'blocked', required
      - `reason` string, required
      - `statusCode` number, required
      - `createdAt` number, required
      - `caseId` string
      - `actor` string
      - `comment` string
      - `ineligibleForAppeal` false | true
      - `isCascading` false | true
    - `blockHistory` union[]
      - union
        - object
          - `action` 'blocked', required
          - `reason` string, required
          - `statusCode` number, required
          - `createdAt` number, required
          - `caseId` string
          - `actor` string
          - `comment` string
          - `ineligibleForAppeal` false | true
          - `isCascading` false | true
        - object
          - `action` 'unblocked', required
          - `createdAt` number, required
          - `caseId` string
          - `actor` string
          - `comment` string
          - `ineligibleForAppeal` false | true
          - `isCascading` false | true
        - object
          - `action` 'route-blocked', required
          - `route` union, required
            - object
              - …
            - object
              - …
          - `reason` string, required
          - `createdAt` number, required
          - `caseId` string
          - `actor` string
          - `comment` string
          - `ineligibleForAppeal` false | true
          - `isCascading` false | true
        - object
          - `action` 'route-unblocked', required
          - `route` union, required
            - object
              - …
            - object
              - …
          - `statusCode` number
          - `createdAt` number, required
          - `caseId` string
          - `actor` string
          - `comment` string
          - `ineligibleForAppeal` false | true
          - `isCascading` false | true
    - `interstitial` false | true
    - `interstitialHistory` object[]
      - `action` 'add-deployment-interstitial' | 'add-project-interstitial' | 'remove-deployment-interstitial' | 'remove-project-interstitial', required
      - `createdAt` number, required
      - `caseId` string
      - `reason` string
      - `actor` string
      - `comment` string
  - `internalRoutes` union[]
    - union
      - object
        - `src` string, required
        - `status` number, required
        - `expiry` number
      - object
        - `has` union[], required
          - union
            - object
              - …
            - object
              - …
        - `mitigate` object, required
          - `action` 'block_legal_cwc', required
        - `src` string
  - `hasDeployments` false | true
  - `dismissedToasts` object[]
    - `key` string, required
    - `dismissedAt` number, required
    - `action` 'accept' | 'cancel' | 'delete', required
    - `value` union, required
      - string
      - number
      - object
        - `previousValue` union, required
          - string
          - number
          - false | true
        - `currentValue` union, required
          - string
          - number
          - false | true
      - false | true
  - `protectedSourcemaps` false | true
  - `tracing` object
    - `domains` string
    - `ignorePaths` string[]
    - `samplingRules` object[]
      - `rate` number, required
      - `env` 'preview' | 'production'
      - `requestPath` string
      - `destination` 'external' | 'internal' — Which tracing destination this rule applies to. `internal` is the hidden Vercel production-tracing drain (internal delivery); `external` is any customer-configured drain. Derived from the owning drain's delivery type when project tracing is computed; absent on configs persisted before this field existed.
  - `avatar` string, nullable

## Other responses

- `400` — One of the provided values in the request body is invalid. One of the provided values in the request query is invalid. At least one environment variable failed validation The Bitbucket Webhook for the project link could not be created The Gitlab Webhook for the project link could not be created
- `401` — The request is not authorized.
- `402` — The account is missing a payment so payment method must be updated Pro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced. Deploying to Serverless Functions to multiple regions requires a plan update
- `403` — You do not have permission to access this resource.
- `404`
- `409` — A project with the provided name already exists.
- `410`
- `428` — Owner does not have protection add-on
- `429`
- `500`

---

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