{ "openapi": "3.0.3", "info": { "title": "Vercel REST API & SDK", "description": "The [`@vercel/sdk`](https://www.npmjs.com/package/@vercel/sdk) is a type-safe Typescript SDK that allows you to access the resources and methods of the Vercel REST API. Learn how to [install it](https://vercel.com/docs/rest-api/sdk#installing-vercel-sdk) and [authenticate](https://vercel.com/docs/rest-api/sdk#authentication) with a Vercel access token.", "contact": { "email": "support@vercel.com", "name": "Vercel Support", "url": "https://vercel.com/support" }, "version": "0.0.1" }, "servers": [ { "url": "https://api.vercel.com", "description": "Production API" } ], "paths": { "/v1/access-groups/{idOrName}": { "get": { "description": "Allows to read an access group", "operationId": "readAccessGroup", "security": [ { "bearerToken": [] } ], "summary": "Reads an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string", "description": "ID of the access group.", "example": "ag_123a6c5209bc3778245d011443644c8d27dc2c50" }, "createdAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was created.", "example": 1588720733602 }, "entitlements": { "items": { "type": "string", "enum": [ "v0" ] }, "type": "array" }, "isDsyncManaged": { "type": "boolean", "enum": [ false, true ] }, "membersCount": { "type": "number", "description": "Number of members in the access group.", "example": 5 }, "name": { "type": "string", "description": "The name of this access group.", "example": "my-access-group" }, "projectsCount": { "type": "number", "description": "Number of projects in the access group.", "example": 2 }, "teamId": { "type": "string", "description": "ID of the team that this access group belongs to.", "example": "team_123a6c5209bc3778245d011443644c8d27dc2c50" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Roles that the team has in the access group.", "example": [ "DEVELOPER", "BILLING" ] }, "updatedAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was last updated.", "example": 1588720733602 } }, "required": [ "accessGroupId", "createdAt", "isDsyncManaged", "membersCount", "name", "projectsCount", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "read", "get" ] }, "parameters": [ { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string" }, "x-vercel-cli": { "kind": "argument" }, "examples": { "id": { "summary": "Access group ID", "value": "ag_1a2b3c4d5e6f7g8h9i0j" }, "name": { "summary": "Access group name", "value": "My Access Group" } } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "readAccessGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.readAccessGroup({\n idOrName: \"ag_1a2b3c4d5e6f7g8h9i0j\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "readAccessGroup", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.ReadAccessGroup(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Allows to update an access group metadata", "operationId": "updateAccessGroup", "security": [ { "bearerToken": [] } ], "summary": "Update an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string", "description": "ID of the access group.", "example": "ag_123a6c5209bc3778245d011443644c8d27dc2c50" }, "createdAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was created.", "example": 1588720733602 }, "entitlements": { "items": { "type": "string", "enum": [ "v0" ] }, "type": "array" }, "membersCount": { "type": "number", "description": "Number of members in the access group.", "example": 5 }, "name": { "type": "string", "description": "The name of this access group.", "example": "my-access-group" }, "projectsCount": { "type": "number", "description": "Number of projects in the access group.", "example": 2 }, "teamId": { "type": "string", "description": "ID of the team that this access group belongs to.", "example": "team_123a6c5209bc3778245d011443644c8d27dc2c50" }, "teamPermissions": { "items": { "type": "string" }, "type": "array", "description": "Permissions that the team has in the access group.", "example": [ "CreateProject" ] }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Roles that the team has in the access group.", "example": [ "DEVELOPER", "BILLING" ] }, "updatedAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was last updated.", "example": 1588720733602 } }, "required": [ "accessGroupId", "createdAt", "entitlements", "membersCount", "name", "projectsCount", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the access group", "maxLength": 50, "pattern": "^[A-z0-9_ -]+$", "example": "My access group" }, "projects": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "role", "projectId" ], "properties": { "projectId": { "type": "string", "maxLength": 256, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the project." }, "role": { "type": "string", "example": "ADMIN", "description": "The project role that will be added to this Access Group. \"null\" will remove this project level role.", "nullable": true, "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER", null ] } } } }, "membersToAdd": { "description": "List of members to add to the access group.", "type": "array", "items": { "type": "string" }, "example": [ "usr_1a2b3c4d5e6f7g8h9i0j", "usr_2b3c4d5e6f7g8h9i0j1k" ] }, "membersToRemove": { "description": "List of members to remove from the access group.", "type": "array", "items": { "type": "string" }, "example": [ "usr_1a2b3c4d5e6f7g8h9i0j", "usr_2b3c4d5e6f7g8h9i0j1k" ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateAccessGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.updateAccessGroup({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"My access group\",\n projects: [\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n ],\n membersToAdd: [\n \"usr_1a2b3c4d5e6f7g8h9i0j\",\n \"usr_2b3c4d5e6f7g8h9i0j1k\",\n ],\n membersToRemove: [\n \"usr_1a2b3c4d5e6f7g8h9i0j\",\n \"usr_2b3c4d5e6f7g8h9i0j1k\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateAccessGroup", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.UpdateAccessGroup(ctx, \"\", nil, nil, &operations.UpdateAccessGroupRequestBody{\n Name: vercel.String(\"My access group\"),\n Projects: []operations.Projects{\n operations.Projects{\n ProjectID: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n Role: operations.RoleAdmin.ToPointer(),\n },\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Allows to delete an access group", "operationId": "deleteAccessGroup", "security": [ { "bearerToken": [] } ], "summary": "Deletes an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAccessGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.accessGroups.deleteAccessGroup({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteAccessGroup", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.DeleteAccessGroup(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/access-groups/{idOrName}/members": { "get": { "description": "List members of an access group", "operationId": "listAccessGroupMembers", "security": [ { "bearerToken": [] } ], "summary": "List members of an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "members": { "items": { "properties": { "avatar": { "type": "string" }, "createdAt": { "type": "string" }, "email": { "type": "string" }, "name": { "type": "string" }, "teamRole": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "teamRole", "uid", "username" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" } }, "required": [ "members", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the Access Group.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the Access Group.", "example": "ag_pavWOn1iLObbXLRiwVvzmPrTWyTf" } }, { "name": "limit", "description": "Limit how many access group members should be returned.", "in": "query", "required": false, "schema": { "description": "Limit how many access group members should be returned.", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "next", "description": "Continuation cursor to retrieve the next page of results.", "in": "query", "required": false, "schema": { "description": "Continuation cursor to retrieve the next page of results.", "type": "string" } }, { "name": "search", "description": "Search project members by their name, username, and email.", "in": "query", "required": false, "schema": { "description": "Search project members by their name, username, and email.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAccessGroupMembers", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.listAccessGroupMembers({\n idOrName: \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n limit: 20,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listAccessGroupMembers", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.ListAccessGroupMembers(ctx, operations.ListAccessGroupMembersRequest{\n IDOrName: \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n Limit: vercel.Int64(20),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/access-groups": { "get": { "description": "List access groups", "operationId": "listAccessGroups", "security": [ { "bearerToken": [] } ], "summary": "List access groups for a team, project or member", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "accessGroups": { "items": { "properties": { "accessGroupId": { "type": "string", "description": "ID of the access group.", "example": "ag_123a6c5209bc3778245d011443644c8d27dc2c50" }, "createdAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was created.", "example": 1588720733602 }, "entitlements": { "items": { "type": "string" }, "type": "array" }, "isDsyncManaged": { "type": "boolean", "enum": [ false, true ] }, "members": { "items": { "type": "string" }, "type": "array" }, "membersCount": { "type": "number", "description": "Number of members in the access group.", "example": 5 }, "name": { "type": "string", "description": "The name of this access group.", "example": "my-access-group" }, "projects": { "items": { "type": "string" }, "type": "array" }, "projectsCount": { "type": "number", "description": "Number of projects in the access group.", "example": 2 }, "teamId": { "type": "string", "description": "ID of the team that this access group belongs to.", "example": "team_123a6c5209bc3778245d011443644c8d27dc2c50" }, "teamPermissions": { "items": { "type": "string" }, "type": "array" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Roles that the team has in the access group.", "example": [ "DEVELOPER", "BILLING" ] }, "updatedAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was last updated.", "example": 1588720733602 } }, "required": [ "accessGroupId", "createdAt", "isDsyncManaged", "membersCount", "name", "projectsCount", "teamId", "updatedAt" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" } }, "required": [ "accessGroups", "pagination" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "list" ] }, "parameters": [ { "name": "projectId", "description": "Filter access groups by project.", "in": "query", "schema": { "description": "Filter access groups by project.", "example": "prj_pavWOn1iLObbx3RowVvzmPrTWyTf", "type": "string" } }, { "name": "search", "description": "Search for access groups by name.", "in": "query", "schema": { "description": "Search for access groups by name.", "example": "example", "type": "string" } }, { "name": "membersLimit", "description": "Number of members to include in the response.", "in": "query", "schema": { "description": "Number of members to include in the response.", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "projectsLimit", "description": "Number of projects to include in the response.", "in": "query", "schema": { "description": "Number of projects to include in the response.", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "limit", "description": "Limit how many access group should be returned.", "in": "query", "schema": { "description": "Limit how many access group should be returned.", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "next", "description": "Continuation cursor to retrieve the next page of results.", "in": "query", "schema": { "description": "Continuation cursor to retrieve the next page of results.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAccessGroups", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.listAccessGroups({\n projectId: \"prj_pavWOn1iLObbx3RowVvzmPrTWyTf\",\n search: \"example\",\n membersLimit: 20,\n projectsLimit: 20,\n limit: 20,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listAccessGroups", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.ListAccessGroups(ctx, operations.ListAccessGroupsRequest{\n ProjectID: vercel.String(\"prj_pavWOn1iLObbx3RowVvzmPrTWyTf\"),\n Search: vercel.String(\"example\"),\n MembersLimit: vercel.Int64(20),\n ProjectsLimit: vercel.Int64(20),\n Limit: vercel.Int64(20),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Allows to create an access group", "operationId": "createAccessGroup", "security": [ { "bearerToken": [] } ], "summary": "Creates an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string", "description": "ID of the access group.", "example": "ag_123a6c5209bc3778245d011443644c8d27dc2c50" }, "createdAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was created.", "example": 1588720733602 }, "entitlements": { "items": { "type": "string", "enum": [ "v0" ] }, "type": "array" }, "membersCount": { "type": "number" }, "name": { "type": "string", "description": "The name of this access group.", "example": "my-access-group" }, "projectsCount": { "type": "number" }, "teamId": { "type": "string", "description": "ID of the team that this access group belongs to.", "example": "team_123a6c5209bc3778245d011443644c8d27dc2c50" }, "teamPermissions": { "items": { "type": "string" }, "type": "array", "description": "Permissions that the team has in the access group.", "example": [ "CreateProject" ] }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Roles that the team has in the access group.", "example": [ "DEVELOPER", "BILLING" ] }, "updatedAt": { "type": "string", "description": "Timestamp in milliseconds when the access group was last updated.", "example": 1588720733602 } }, "required": [ "accessGroupId", "createdAt", "entitlements", "membersCount", "name", "projectsCount", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "name" ], "properties": { "name": { "type": "string", "description": "The name of the access group", "maxLength": 50, "pattern": "^[A-z0-9_ -]+$", "example": "My access group" }, "projects": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "role", "projectId" ], "properties": { "projectId": { "type": "string", "maxLength": 256, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the project." }, "role": { "type": "string", "example": "ADMIN", "description": "The project role that will be added to this Access Group. \"null\" will remove this project level role.", "nullable": true, "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER", null ] } } } }, "membersToAdd": { "description": "List of members to add to the access group.", "type": "array", "items": { "type": "string" }, "example": [ "usr_1a2b3c4d5e6f7g8h9i0j", "usr_2b3c4d5e6f7g8h9i0j1k" ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createAccessGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.createAccessGroup({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"My access group\",\n projects: [\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n ],\n membersToAdd: [\n \"usr_1a2b3c4d5e6f7g8h9i0j\",\n \"usr_2b3c4d5e6f7g8h9i0j1k\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createAccessGroup", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.CreateAccessGroup(ctx, nil, nil, &operations.CreateAccessGroupRequestBody{\n Name: \"My access group\",\n Projects: []operations.CreateAccessGroupProjects{\n operations.CreateAccessGroupProjects{\n ProjectID: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n Role: operations.CreateAccessGroupRoleAdmin.ToPointer(),\n },\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/access-groups/{idOrName}/projects": { "get": { "description": "List projects of an access group", "operationId": "listAccessGroupProjects", "security": [ { "bearerToken": [] } ], "summary": "List projects of an access group", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" }, "projects": { "items": { "properties": { "createdAt": { "type": "string" }, "project": { "properties": { "framework": { "nullable": true, "type": "string" }, "latestDeploymentId": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "projectId": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "project", "projectId", "role", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "projects" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the Access Group.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the Access Group.", "example": "ag_pavWOn1iLObbXLRiwVvzmPrTWyTf" } }, { "name": "limit", "description": "Limit how many access group projects should be returned.", "in": "query", "required": false, "schema": { "description": "Limit how many access group projects should be returned.", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "next", "description": "Continuation cursor to retrieve the next page of results.", "in": "query", "required": false, "schema": { "description": "Continuation cursor to retrieve the next page of results.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAccessGroupProjects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.listAccessGroupProjects({\n idOrName: \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n limit: 20,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listAccessGroupProjects", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.AccessGroups.ListAccessGroupProjects(ctx, operations.ListAccessGroupProjectsRequest{\n IDOrName: \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n Limit: vercel.Int64(20),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/access-groups/{accessGroupIdOrName}/projects": { "post": { "description": "Allows creation of an access group project", "operationId": "createAccessGroupProject", "security": [ { "bearerToken": [] } ], "summary": "Create an access group project", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string" }, "createdAt": { "type": "string" }, "projectId": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "teamId": { "type": "string" }, "updatedAt": { "type": "string" } }, "required": [ "accessGroupId", "createdAt", "projectId", "role", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "accessGroupIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "role", "projectId" ], "properties": { "projectId": { "type": "string", "maxLength": 256, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the project." }, "role": { "type": "string", "example": "ADMIN", "description": "The project role that will be added to this Access Group.", "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER" ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createAccessGroupProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.createAccessGroupProject({\n accessGroupIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/access-groups/{accessGroupIdOrName}/projects/{projectId}": { "get": { "description": "Allows reading an access group project", "operationId": "readAccessGroupProject", "security": [ { "bearerToken": [] } ], "summary": "Reads an access group project", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string" }, "createdAt": { "type": "string" }, "projectId": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "teamId": { "type": "string" }, "updatedAt": { "type": "string" } }, "required": [ "accessGroupId", "createdAt", "projectId", "role", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "accessGroupIdOrName", "in": "path", "required": true, "schema": { "type": "string" }, "examples": { "id": { "summary": "Access group ID", "value": "ag_1a2b3c4d5e6f7g8h9i0j" }, "name": { "summary": "Access group name", "value": "My Access Group" } } }, { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK" }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "readAccessGroupProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.readAccessGroupProject({\n accessGroupIdOrName: \"ag_1a2b3c4d5e6f7g8h9i0j\",\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Allows update of an access group project", "operationId": "updateAccessGroupProject", "security": [ { "bearerToken": [] } ], "summary": "Update an access group project", "tags": [ "access-groups" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accessGroupId": { "type": "string" }, "createdAt": { "type": "string" }, "projectId": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "teamId": { "type": "string" }, "updatedAt": { "type": "string" } }, "required": [ "accessGroupId", "createdAt", "projectId", "role", "teamId", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "accessGroupIdOrName", "in": "path", "required": true, "schema": { "type": "string" }, "examples": { "id": { "summary": "Access group ID", "value": "ag_1a2b3c4d5e6f7g8h9i0j" }, "name": { "summary": "Access group name", "value": "My Access Group" } } }, { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK" }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "role" ], "properties": { "role": { "type": "string", "example": "ADMIN", "description": "The project role that will be added to this Access Group.", "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER", null ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateAccessGroupProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.accessGroups.updateAccessGroupProject({\n accessGroupIdOrName: \"ag_1a2b3c4d5e6f7g8h9i0j\",\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n role: \"ADMIN\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Allows deletion of an access group project", "operationId": "deleteAccessGroupProject", "security": [ { "bearerToken": [] } ], "summary": "Delete an access group project", "tags": [ "access-groups" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "accessGroupIdOrName", "in": "path", "required": true, "schema": { "type": "string" }, "examples": { "id": { "summary": "Access group ID", "value": "ag_1a2b3c4d5e6f7g8h9i0j" }, "name": { "summary": "Access group name", "value": "My Access Group" } } }, { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK" }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAccessGroupProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.accessGroups.deleteAccessGroupProject({\n accessGroupIdOrName: \"ag_1a2b3c4d5e6f7g8h9i0j\",\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/ai-gateway/virtual-model-configs": { "post": { "description": "Create a virtual model config (VMC)", "operationId": "createAiGatewayVirtualModelConfig", "security": [ { "bearerToken": [] } ], "summary": "Create virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "createAiGatewayVirtualModelConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.createAiGatewayVirtualModelConfig({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Get a virtual model config", "operationId": "getAiGatewayVirtualModelConfig", "security": [ { "bearerToken": [] } ], "summary": "Get virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" }, { "$ref": "#/components/schemas/AiGatewayVirtualModelConfigList" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ownerId", "in": "query", "schema": { "type": "string" } }, { "name": "virtualModelSlug", "in": "query", "schema": { "type": "string" } }, { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1 } }, { "name": "cursor", "in": "query", "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getAiGatewayVirtualModelConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.getAiGatewayVirtualModelConfig({\n virtualModelSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update a virtual model config", "operationId": "updateAiGatewayVirtualModelConfig", "security": [ { "bearerToken": [] } ], "summary": "Update virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "updateAiGatewayVirtualModelConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.updateAiGatewayVirtualModelConfig({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a virtual model config (soft delete)", "operationId": "deleteAiGatewayVirtualModelConfig", "security": [ { "bearerToken": [] } ], "summary": "Delete virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ownerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "virtualModelSlug", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "updatedBy", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "actingIp", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "actingUserAgent", "in": "query", "required": false, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAiGatewayVirtualModelConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.deleteAiGatewayVirtualModelConfig({\n virtualModelSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/ai-gateway/virtual-model-configs/list": { "get": { "description": "List virtual model configs. With `ownerId`, returns all of that team's VMCs. Without it, pages through VMCs across all teams (newest-first, `limit`/`cursor`).", "operationId": "listAiGatewayVirtualModelConfigs", "security": [ { "bearerToken": [] } ], "summary": "List virtual model configs", "tags": [ "api-ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfigList" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ownerId", "in": "query", "schema": { "type": "string" } }, { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1 } }, { "name": "cursor", "in": "query", "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAiGatewayVirtualModelConfigs", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.listAiGatewayVirtualModelConfigs({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/ai-gateway/virtual-model-configs/{vmcSlug}": { "get": { "description": "Get a virtual model config by path slug", "operationId": "getAiGatewayVirtualModelConfigBySlug", "security": [ { "bearerToken": [] } ], "summary": "Get virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ownerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "vmcSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getAiGatewayVirtualModelConfigBySlug", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.getAiGatewayVirtualModelConfigBySlug({\n vmcSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update a virtual model config by path slug", "operationId": "updateAiGatewayVirtualModelConfigBySlug", "security": [ { "bearerToken": [] } ], "summary": "Update virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "vmcSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "updateAiGatewayVirtualModelConfigBySlug", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.updateAiGatewayVirtualModelConfigBySlug({\n vmcSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a virtual model config by path slug (soft delete)", "operationId": "deleteAiGatewayVirtualModelConfigBySlug", "security": [ { "bearerToken": [] } ], "summary": "Delete virtual model config", "tags": [ "api-ai-gateway" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ownerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "vmcSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "updatedBy", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "actingIp", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "actingUserAgent", "in": "query", "required": false, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAiGatewayVirtualModelConfigBySlug", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.apiAiGateway.deleteAiGatewayVirtualModelConfigBySlug({\n vmcSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/ai-gateway/rules": { "post": { "description": "Create a routing rule", "operationId": "createAiGatewayRule", "security": [ { "bearerToken": [] } ], "summary": "Create rule", "tags": [ "ai-gateway" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayRule" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "createAiGatewayRule", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aiGateway.createAiGatewayRule({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "List the authenticated team's routing rules", "operationId": "listAiGatewayRules", "security": [ { "bearerToken": [] } ], "summary": "List rules", "tags": [ "ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayRuleList" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "includeDisabled", "in": "query", "schema": { "type": "string", "enum": [ "true", "false" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAiGatewayRules", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aiGateway.listAiGatewayRules({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update a routing rule (enabled, action, or description)", "operationId": "updateAiGatewayRule", "security": [ { "bearerToken": [] } ], "summary": "Update rule", "tags": [ "ai-gateway" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AiGatewayRule" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "updateAiGatewayRule", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aiGateway.updateAiGatewayRule({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a routing rule (soft delete)", "operationId": "deleteAiGatewayRule", "security": [ { "bearerToken": [] } ], "summary": "Delete rule", "tags": [ "ai-gateway" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "ruleId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAiGatewayRule", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aiGateway.deleteAiGatewayRule({\n ruleId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v8/artifacts/events": { "post": { "description": "Records an artifacts cache usage event. The body of this request is an array of cache usage events. The supported event types are `HIT` and `MISS`. The source is either `LOCAL` the cache event was on the users filesystem cache or `REMOTE` if the cache event is for a remote cache. When the event is a `HIT` the request also accepts a number `duration` which is the time taken to generate the artifact in the cache.", "operationId": "recordEvents", "security": [ { "bearerToken": [] } ], "summary": "Record an artifacts cache usage event", "tags": [ "artifacts" ], "responses": { "200": { "description": "Success. Event recorded." }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the headers is invalid" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\nYou do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "in": "header", "description": "The continuous integration or delivery environment where this artifact is downloaded.", "schema": { "type": "string", "description": "The continuous integration or delivery environment where this artifact is downloaded.", "example": "VERCEL", "maxLength": 50 }, "name": "x-artifact-client-ci" }, { "in": "header", "description": "1 if the client is an interactive shell. Otherwise 0", "schema": { "type": "integer", "description": "1 if the client is an interactive shell. Otherwise 0", "example": 0, "minimum": 0, "maximum": 1 }, "name": "x-artifact-client-interactive" }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "sessionId", "source", "hash", "event" ], "properties": { "sessionId": { "type": "string", "description": "A UUID (universally unique identifer) for the session that generated this event." }, "source": { "type": "string", "enum": [ "LOCAL", "REMOTE" ], "description": "One of `LOCAL` or `REMOTE`. `LOCAL` specifies that the cache event was from the user's filesystem cache. `REMOTE` specifies that the cache event is from a remote cache." }, "event": { "type": "string", "enum": [ "HIT", "MISS" ], "description": "One of `HIT` or `MISS`. `HIT` specifies that a cached artifact for `hash` was found in the cache. `MISS` specifies that a cached artifact with `hash` was not found." }, "hash": { "type": "string", "example": "12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The artifact hash" }, "duration": { "type": "number", "description": "The time taken to generate the artifact. This should be sent as a body parameter on `HIT` events.", "example": 400 } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "recordEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.artifacts.recordEvents({\n xArtifactClientCi: \"VERCEL\",\n xArtifactClientInteractive: 0,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: [\n {\n sessionId: \"\",\n source: \"REMOTE\",\n event: \"MISS\",\n hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n duration: 400,\n },\n ],\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "recordEvents", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.RecordEvents(ctx, operations.RecordEventsRequest{\n XArtifactClientCi: vercel.String(\"VERCEL\"),\n XArtifactClientInteractive: vercel.Int64(0),\n RequestBody: []operations.RequestBody{\n operations.RequestBody{\n SessionID: \"\",\n Source: operations.SourceLocal,\n Event: operations.EventHit,\n Hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n Duration: vercel.Float64(400),\n },\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v8/artifacts/status": { "get": { "description": "Check the status of Remote Caching for this principal. Returns a JSON-encoded status indicating if Remote Caching is enabled, disabled, or disabled due to usage limits.", "operationId": "status", "security": [ { "bearerToken": [] } ], "summary": "Get status of Remote Caching for this principal", "tags": [ "artifacts" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "status": { "type": "string" } }, "required": [ "status" ], "type": "object" }, { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled", "over_limit", "paused" ] } }, "required": [ "status" ], "type": "object" } ] } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "status", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.artifacts.status({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "status", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.Status(ctx, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v8/artifacts/{hash}": { "put": { "description": "Uploads a cache artifact identified by the `hash` specified on the path. The cache artifact can then be downloaded with the provided `hash`.", "operationId": "uploadArtifact", "security": [ { "bearerToken": [] } ], "summary": "Upload a cache artifact", "tags": [ "artifacts" ], "responses": { "202": { "description": "File successfully uploaded", "content": { "application/json": { "schema": { "properties": { "urls": { "items": { "type": "string" }, "type": "array", "description": "Array of URLs where the artifact was updated", "example": [ "https://api.vercel.com/v2/now/artifact/12HKQaOmR5t5Uy6vdcQsNIiZgHGB" ] } }, "required": [ "urls" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid.\nOne of the provided values in the headers is invalid\nFile size is not valid" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\nYou do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "in": "header", "description": "The artifact size in bytes", "required": true, "schema": { "description": "The artifact size in bytes", "type": "number" }, "name": "Content-Length" }, { "in": "header", "description": "The time taken to generate the uploaded artifact in milliseconds.", "required": false, "schema": { "type": "number", "description": "The time taken to generate the uploaded artifact in milliseconds.", "example": 400 }, "name": "x-artifact-duration" }, { "in": "header", "description": "The continuous integration or delivery environment where this artifact was generated.", "required": false, "schema": { "type": "string", "description": "The continuous integration or delivery environment where this artifact was generated.", "example": "VERCEL", "maxLength": 50 }, "name": "x-artifact-client-ci" }, { "in": "header", "description": "1 if the client is an interactive shell. Otherwise 0", "required": false, "schema": { "type": "integer", "description": "1 if the client is an interactive shell. Otherwise 0", "example": 0, "minimum": 0, "maximum": 1 }, "name": "x-artifact-client-interactive" }, { "in": "header", "description": "The base64 encoded tag for this artifact. The value is sent back to clients when the artifact is downloaded as the header `x-artifact-tag`", "required": false, "schema": { "type": "string", "description": "The base64 encoded tag for this artifact. The value is sent back to clients when the artifact is downloaded as the header `x-artifact-tag`", "example": "Tc0BmHvJYMIYJ62/zx87YqO0Flxk+5Ovip25NY825CQ=", "maxLength": 600 }, "name": "x-artifact-tag" }, { "in": "header", "description": "The SHA of the source control revision that generated this artifact.", "required": false, "schema": { "type": "string", "description": "The SHA of the source control revision that generated this artifact.", "maxLength": 200 }, "name": "x-artifact-sha" }, { "in": "header", "description": "A hash representing uncommitted changes in the working directory when this artifact was generated.", "required": false, "schema": { "type": "string", "description": "A hash representing uncommitted changes in the working directory when this artifact was generated.", "maxLength": 200 }, "name": "x-artifact-dirty-hash" }, { "name": "hash", "description": "The artifact hash", "in": "path", "required": true, "schema": { "example": "12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The artifact hash", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } }, "required": true }, "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "uploadArtifact", "source": "import { Vercel } from \"@vercel/sdk\";\nimport { openAsBlob } from \"node:fs\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.artifacts.uploadArtifact({\n contentLength: 3848.22,\n xArtifactDuration: 400,\n xArtifactClientCi: \"VERCEL\",\n xArtifactClientInteractive: 0,\n xArtifactTag: \"Tc0BmHvJYMIYJ62/zx87YqO0Flxk+5Ovip25NY825CQ=\",\n hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: await openAsBlob(\"example.file\"),\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "uploadArtifact", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.UploadArtifact(ctx, operations.UploadArtifactRequest{\n ContentLength: 4504.13,\n XArtifactDuration: vercel.Float64(400),\n XArtifactClientCi: vercel.String(\"VERCEL\"),\n XArtifactClientInteractive: vercel.Int64(0),\n XArtifactTag: vercel.String(\"Tc0BmHvJYMIYJ62/zx87YqO0Flxk+5Ovip25NY825CQ=\"),\n Hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "get": { "description": "Downloads a cache artifact indentified by its `hash` specified on the request path. The artifact is downloaded as an octet-stream. The client should verify the content-length header and response body.", "operationId": "downloadArtifact", "security": [ { "bearerToken": [] } ], "summary": "Download a cache artifact", "tags": [ "artifacts" ], "responses": { "200": { "description": "The artifact was found and is downloaded as a stream. Content-Length should be verified.", "content": { "application/json": { "schema": { "type": "string", "format": "binary", "description": "An octet stream response that will be piped to the response stream." } } } }, "400": { "description": "One of the provided values in the request query is invalid.\nOne of the provided values in the headers is invalid" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\nYou do not have permission to access this resource." }, "404": { "description": "The artifact was not found" }, "410": { "description": "" } }, "parameters": [ { "in": "header", "description": "The continuous integration or delivery environment where this artifact is downloaded.", "schema": { "type": "string", "description": "The continuous integration or delivery environment where this artifact is downloaded.", "example": "VERCEL", "maxLength": 50 }, "name": "x-artifact-client-ci" }, { "in": "header", "description": "1 if the client is an interactive shell. Otherwise 0", "schema": { "type": "integer", "description": "1 if the client is an interactive shell. Otherwise 0", "example": 0, "minimum": 0, "maximum": 1 }, "name": "x-artifact-client-interactive" }, { "name": "hash", "description": "The artifact hash", "in": "path", "required": true, "schema": { "example": "12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The artifact hash", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "downloadArtifact", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.artifacts.downloadArtifact({\n xArtifactClientCi: \"VERCEL\",\n xArtifactClientInteractive: 0,\n hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "downloadArtifact", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.DownloadArtifact(ctx, operations.DownloadArtifactRequest{\n XArtifactClientCi: vercel.String(\"VERCEL\"),\n XArtifactClientInteractive: vercel.Int64(0),\n Hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.ResponseStream != nil {\n // handle response\n }\n}" } ] }, "head": { "description": "Check that a cache artifact with the given `hash` exists. This request returns response headers only and is equivalent to a `GET` request to this endpoint where the response contains no body.", "operationId": "artifactExists", "security": [ { "bearerToken": [] } ], "summary": "Check if a cache artifact exists", "tags": [ "artifacts" ], "responses": { "200": { "description": "The artifact was found and headers are returned" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\nYou do not have permission to access this resource." }, "404": { "description": "The artifact was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "hash", "description": "The artifact hash", "in": "path", "required": true, "schema": { "example": "12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The artifact hash", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "artifactExists", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.artifacts.artifactExists({\n hash: \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "artifactExists", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.ArtifactExists(ctx, \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v8/artifacts": { "post": { "description": "Query information about an array of artifacts.", "operationId": "artifactQuery", "security": [ { "bearerToken": [] } ], "summary": "Query information about an artifact", "tags": [ "artifacts" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "additionalProperties": { "nullable": true, "oneOf": [ { "properties": { "dirtyHash": { "type": "string" }, "sha": { "type": "string" }, "size": { "type": "number" }, "tag": { "type": "string" }, "taskDurationMs": { "type": "number" } }, "required": [ "size", "taskDurationMs" ], "type": "object" }, { "properties": { "error": { "properties": { "message": { "type": "string" } }, "required": [ "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" } ] }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\nYou do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "hashes" ], "properties": { "hashes": { "items": { "type": "string" }, "description": "artifact hashes", "type": "array", "example": [ "12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "34HKQaOmR5t5Uy6vasdasdasdasd" ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "artifactQuery", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.artifacts.artifactQuery({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n hashes: [\n \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n \"34HKQaOmR5t5Uy6vasdasdasdasd\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "artifactQuery", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Artifacts.ArtifactQuery(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Deletes all cache artifacts stored for the authenticated team or user, clearing the Remote Cache. Subsequent builds will re-populate the cache.", "operationId": "deleteAllArtifacts", "security": [ { "bearerToken": [] } ], "summary": "Delete all cache artifacts", "tags": [ "artifacts" ], "responses": { "200": { "description": "Success. All cache artifacts for the account were deleted.", "content": { "application/json": { "schema": { "properties": { "deletedCount": { "type": "number" } }, "required": [ "deletedCount" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAllArtifacts", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.artifacts.deleteAllArtifacts({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/billing/charges": { "get": { "description": "Returns the billing charge data in FOCUS v1.3 JSONL format for a specified Vercel team, within a date range specified by `from` and `to` query parameters. Supports 1-day granularity with a maximum date range of 1 year. The response is streamed as newline-delimited JSON (JSONL) and can be optionally compressed with gzip if the `Accept-Encoding: gzip` header is provided. This is only available for Owner, Member, Developer, Security, Billing, and Enterprise Viewer roles for the supplied team.", "operationId": "listBillingCharges", "security": [ { "bearerToken": [] } ], "summary": "List FOCUS billing charges", "tags": [ "billing" ], "responses": { "200": { "description": "", "content": { "application/jsonl": { "schema": { "properties": { "BilledCost": { "type": "number", "description": "Charge amount serving as the basis for invoicing" }, "BillingCurrency": { "type": "string", "enum": [ "USD" ], "description": "Currency used for billing (ISO 4217)" }, "ChargeCategory": { "type": "string", "enum": [ "Adjustment", "Credit", "Purchase", "Tax", "Usage" ], "description": "Classification of the charge" }, "ChargePeriodEnd": { "type": "string", "description": "Exclusive end of the charge period (ISO 8601 UTC) - Required in v1.3" }, "ChargePeriodStart": { "type": "string", "description": "Inclusive start of the charge period (ISO 8601 UTC)" }, "ConsumedQuantity": { "nullable": true, "type": "number", "description": "Volume of resource consumed. Null when a charge does not involve measurable consumption quantity." }, "ConsumedUnit": { "nullable": true, "type": "string", "description": "Unit of measurement for consumed quantity. Null when the charge is not measured in units." }, "EffectiveCost": { "type": "number", "description": "Amortized cost representation including discounts, pre-commitment credit purchase amount, etc." }, "PricingCategory": { "type": "string", "enum": [ "Committed", "Dynamic", "Other", "Standard" ], "description": "Pricing model used for the charge." }, "PricingCurrency": { "type": "string", "enum": [ "USD" ] }, "PricingQuantity": { "type": "number" }, "PricingUnit": { "type": "string" }, "RegionId": { "type": "string", "description": "Provider-assigned region identifier" }, "RegionName": { "type": "string", "description": "Display name for the region" }, "ServiceCategory": { "type": "string", "enum": [ "AI and Machine Learning", "Analytics", "Business Applications", "Compute", "Databases", "Developer Tools", "Identity", "Integration", "Internet of Things", "Management and Governance", "Media", "Migration", "Mobile", "Multicloud", "Networking", "Other", "Security", "Storage", "Web" ], "description": "High-level category of the service" }, "ServiceName": { "type": "string", "description": "Display name for the service/product" }, "ServiceProviderName": { "type": "string", "description": "Entity making the resource/service available for purchase (v1.3)" }, "Tags": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Charge metadata including the Vercel ProjectId and ProjectName information" } }, "required": [ "BilledCost", "BillingCurrency", "ChargeCategory", "ChargePeriodEnd", "ChargePeriodStart", "ConsumedQuantity", "ConsumedUnit", "EffectiveCost", "PricingCategory", "PricingCurrency", "PricingQuantity", "PricingUnit", "ServiceName", "ServiceProviderName", "Tags" ], "type": "object", "description": "Extension of the base schema for Focus charges. Includes pricing information for all customers." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "from", "description": "Inclusive start of the date range as an ISO 8601 date-time string in UTC.", "in": "query", "required": true, "schema": { "type": "string", "description": "Inclusive start of the date range as an ISO 8601 date-time string in UTC.", "example": "2025-01-01T00:00:00.000Z" } }, { "name": "to", "description": "Exclusive end of the date range as an ISO 8601 date-time string in UTC.", "in": "query", "required": true, "schema": { "type": "string", "description": "Exclusive end of the date range as an ISO 8601 date-time string in UTC.", "example": "2025-01-31T00:00:00.000Z" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "curl", "label": "cURL", "source": "curl -N --request GET \\\n --url 'https://api.vercel.com/v1/billing/charges?teamId=&from=&to=' \\\n --header 'Authorization: Bearer ' \\\n --header 'Accept-Encoding: gzip' \\\n --compressed\n" } ] } }, "/v1/billing/contract-commitments": { "get": { "description": "Returns commitment allocations per contract period in FOCUS v1.3 JSONL format for a specified Vercel team. The response is streamed as newline-delimited JSON (JSONL). This endpoint is only applicable to Enterprise Vercel customers. An empty response is returned for non-Enterprise (Pro/Flex) customers.", "operationId": "listContractCommitments", "security": [ { "bearerToken": [] } ], "summary": "List FOCUS contract commitments", "tags": [ "billing" ], "responses": { "200": { "description": "", "content": { "application/jsonl": { "schema": { "properties": { "BillingCurrency": { "type": "string" }, "ContractCommitmentCategory": { "type": "string", "enum": [ "Spend", "Usage" ], "description": "Highest-level classification of the contract commitment. 'Spend' for Pro ($20/month), 'Usage' for Enterprise (MIU allocation)." }, "ContractCommitmentCost": { "type": "number", "description": "Monetary value of the contract commitment (in BillingCurrency). Required when ContractCommitmentCategory is 'Spend'. For Pro: 20 (USD)" }, "ContractCommitmentDescription": { "type": "string", "description": "Self-contained summary of the contract commitment's terms" }, "ContractCommitmentId": { "type": "string", "description": "Unique identifier for a single contract term within a contract. Maps to specific commitment period or allocation ID." }, "ContractCommitmentPeriodEnd": { "type": "string", "description": "Exclusive end of the commitment term period (ISO 8601 UTC)" }, "ContractCommitmentPeriodStart": { "type": "string", "description": "Inclusive start of the commitment term period (ISO 8601 UTC)" }, "ContractCommitmentQuantity": { "type": "number", "description": "Amount associated with the commitment (in ContractCommitmentUnit). Required when ContractCommitmentCategory is 'Usage'. For Enterprise: MIU allocation amount." }, "ContractCommitmentType": { "type": "string", "description": "Service-provider-assigned name identifying the commitment type. 'Pro' or 'Enterprise' for Vercel." }, "ContractCommitmentUnit": { "type": "string", "description": "Measurement unit for ContractCommitmentQuantity. 'MIUs' for Enterprise, 'USD' for Pro spend commitments." }, "ContractId": { "type": "string", "description": "Service-provider-assigned identifier for a contract. Maps to Orb Subscription ID for Vercel." }, "ContractPeriodEnd": { "type": "string", "description": "Exclusive end of the overall contract period (ISO 8601 UTC)" }, "ContractPeriodStart": { "type": "string", "description": "Inclusive start of the overall contract period (ISO 8601 UTC)" } }, "required": [ "BillingCurrency", "ContractCommitmentCategory", "ContractCommitmentId", "ContractCommitmentPeriodEnd", "ContractCommitmentPeriodStart", "ContractCommitmentType", "ContractCommitmentUnit", "ContractId", "ContractPeriodEnd", "ContractPeriodStart" ], "type": "object", "description": "Contract commitment information describing terms within a contract. New in FOCUS v1.3 - tracks commitment terms separate from cost/usage rows. For Vercel: - Pro: $20 monthly spend commitment - Enterprise: MIU allocation per period (usage commitment)" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ] } }, "/v1/billing/buy": { "post": { "description": "Purchases credits for a Vercel team using the default payment method on file. The purchase is charged immediately via Stripe invoice. Supported credit types are `v0`, `gateway`, and `agent`. The `amount` field specifies the number of credits to purchase and must be a positive integer. An optional `source` query parameter can be provided to identify the caller. Defaults to `api` if not specified. This is only available for Owner, Member, Developer, Security, and Billing roles for the supplied team.", "operationId": "buyCredits", "security": [ { "bearerToken": [] } ], "summary": "Purchase credits", "tags": [ "billing" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "checkoutSessionId": { "type": "string" }, "checkoutSessionUrl": { "type": "string" } }, "required": [ "checkoutSessionId", "checkoutSessionUrl" ], "type": "object" }, { "properties": { "purchaseIntent": { "properties": { "configuration": { "oneOf": [ { "properties": { "options": { "properties": { "amount": { "type": "string", "description": "The amount of currency to buy" }, "currency": { "type": "string", "enum": [ "ai_credits", "ai_gateway_credits", "copper_test_units", "v0_user_credits", "vercel_agent_credits" ], "description": "The currency being purchased" }, "expirationDate": { "type": "string", "description": "The expiration date of the credits being purchased" } }, "required": [ "amount", "currency" ], "type": "object", "description": "Purchase configuration specific options" }, "output": { "nullable": true }, "type": { "type": "string", "enum": [ "credit_topup" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "items": { "items": { "properties": { "name": { "type": "string" }, "subtotal": { "type": "string", "description": "The subtotal of the domain name purchase" }, "type": { "type": "string", "enum": [ "purchase", "renewal", "transfer" ] }, "years": { "type": "number", "description": "The number of years to purchase" } }, "required": [ "name", "subtotal", "type", "years" ], "type": "object" }, "type": "array" }, "orderId": { "type": "string", "description": "The order ID of the domain name purchase" } }, "required": [ "items", "orderId" ], "type": "object" }, "output": { "nullable": true }, "type": { "type": "string", "enum": [ "domain_name" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "alignBillingWithPlanChangeDate": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to reset the billing cycle" }, "couponRedemptionCode": { "type": "string", "description": "The coupon redemption code to apply to the plan change" }, "effectiveDate": { "oneOf": [ { "type": "object", "description": "The effective date of the plan change" }, { "type": "string", "enum": [ "end_of_subscription_term", "immediate" ] } ] }, "externalPlanId": { "type": "string", "description": "The ID of the external plan to change to" }, "orbSubscriptionId": { "type": "string", "description": "The ID of the Orb subscription to change" }, "replacePrices": { "items": { "properties": { "fixedPriceQuantity": { "type": "number", "description": "The quantity for the fixed price" }, "replacesPriceId": { "type": "string", "description": "The ID of the price to replace" } }, "required": [ "fixedPriceQuantity", "replacesPriceId" ], "type": "object", "description": "The prices to replace in the subscription" }, "type": "array", "description": "The prices to replace in the subscription" } }, "required": [ "effectiveDate", "orbSubscriptionId" ], "type": "object" }, "output": { "properties": { "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change" } }, "required": [ "pendingSubscriptionChangeId" ], "type": "object" }, "type": { "type": "string", "enum": [ "orb_plan_change" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "add": { "items": {}, "type": "array", "description": "The price intervals to add to the subscription" }, "addAdjustments": { "items": {}, "type": "array", "description": "The adjustment intervals to add to the subscription" }, "allowInvoiceCreditOrVoid": { "type": "boolean", "enum": [ false, true ], "description": "Whether to allow invoice credit or void" }, "edit": { "items": {}, "type": "array", "description": "The price intervals to edit on the subscription" }, "editAdjustments": { "items": {}, "type": "array", "description": "The adjustment intervals to edit on the subscription" }, "orbSubscriptionId": { "type": "string", "description": "The ID of the Orb subscription to modify price intervals for" } }, "required": [ "orbSubscriptionId" ], "type": "object" }, "output": { "properties": { "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change" } }, "required": [ "pendingSubscriptionChangeId" ], "type": "object" }, "type": { "type": "string", "enum": [ "orb_price_interval" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "addPrices": { "items": { "oneOf": [ { "properties": { "priceId": { "type": "string", "description": "The ID of the price to add" } }, "required": [ "priceId" ], "type": "object", "description": "The prices to add to the subscription" }, { "type": "object", "description": "The prices to add to the subscription" } ] }, "type": "array", "description": "The prices to add to the subscription" }, "alignBillingWithSubscriptionStartDate": { "type": "boolean", "enum": [ false, true ], "description": "Whether to align the subscription start date with the billing subscription start date" }, "couponRedemptionCode": { "type": "string", "description": "The coupon redemption code to apply to the subscription" }, "externalPlanId": { "type": "string", "description": "The external plan ID of the Orb plan to subscribe to" }, "initialPhaseOrder": { "type": "number", "description": "The initial phase order to use for the subscription" }, "metadata": { "additionalProperties": { "nullable": true, "type": "string", "description": "Optional metadata to associate with the subscription" }, "type": "object", "description": "Optional metadata to associate with the subscription" }, "removePrices": { "items": { "properties": { "priceId": { "type": "string", "description": "The ID of the price to remove" } }, "required": [ "priceId" ], "type": "object", "description": "The prices to remove in the subscription" }, "type": "array", "description": "The prices to remove in the subscription" }, "replacePrices": { "items": { "properties": { "fixedPriceQuantity": { "type": "number", "description": "The quantity for the fixed price" }, "replacesPriceId": { "type": "string", "description": "The ID of the price to replace" } }, "required": [ "fixedPriceQuantity", "replacesPriceId" ], "type": "object", "description": "The prices to replace in the subscription" }, "type": "array", "description": "The prices to replace in the subscription" }, "startDate": { "type": "string", "description": "The start date of the subscription" } }, "required": [ "externalPlanId" ], "type": "object" }, "output": { "properties": { "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change" } }, "required": [ "pendingSubscriptionChangeId" ], "type": "object" }, "type": { "type": "string", "enum": [ "orb_subscription" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "lineItems": { "items": { "properties": { "description": { "type": "string", "description": "The description of the line item" }, "id": { "type": "string", "description": "The ID of the line item" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata for the line item" }, "name": { "type": "string", "description": "The name of the line item" }, "productAlias": { "type": "string", "description": "The alias of the product being purchased" }, "productId": { "type": "string", "description": "The ID of the product being purchased" }, "quantity": { "type": "string", "description": "The quantity of the line item" }, "refund": { "type": "string", "description": "The amount of the line item that has been refunded" }, "unitAmount": { "type": "string", "description": "The unit amount of the line item" } }, "required": [ "description", "id", "name", "productId", "quantity", "unitAmount" ], "type": "object", "description": "The line items that make up the Purchase Intent." }, "type": "array", "description": "The line items that make up the Purchase Intent." }, "orbCustomerId": { "type": "string", "description": "The ID of the Orb customer to create" }, "orbExternalCustomerId": { "type": "string", "description": "The external ID of the Orb customer to create" }, "orbExternalPlanId": { "type": "string", "description": "The external ID of the Orb plan to create" }, "orbPendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change" }, "orbPlanId": { "type": "string", "description": "The ID of the Orb plan to create" }, "orbSubscriptionId": { "type": "string", "description": "The ID of the Orb subscription to create" } }, "required": [ "orbCustomerId", "orbExternalCustomerId", "orbExternalPlanId", "orbPlanId", "orbSubscriptionId" ], "type": "object" }, "output": { "properties": { "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change" } }, "type": "object" }, "type": { "type": "string", "enum": [ "orb_subscription_intent" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" }, { "properties": { "options": { "properties": { "fromPlan": { "properties": { "currentCycleEndDate": { "type": "string", "description": "The end of the current plan billing cycle" }, "orbSubscriptionId": { "type": "string", "description": "The Orb subscription ID currently active for the owner on the source plan" }, "planId": { "type": "string", "description": "The ID of the plan currently assigned" }, "planItemQuantities": { "items": { "properties": { "planItemId": { "type": "string", "description": "The ID of the current plan item to set the quantity for" }, "quantity": { "type": "number", "description": "The nonnegative integer quantity for the current plan item" }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs associated with the current plan item quantity" } }, "required": [ "planItemId", "quantity" ], "type": "object", "description": "The current plan item quantities" }, "type": "array", "description": "The current plan item quantities" }, "rateVariantKey": { "type": "string", "description": "The rate variant currently assigned" } }, "required": [ "currentCycleEndDate", "orbSubscriptionId", "planId" ], "type": "object", "description": "The current plan being replaced by this purchase" }, "planId": { "type": "string", "description": "The ID of the plan to subscribe to" }, "planItemQuantities": { "items": { "properties": { "planItemId": { "type": "string", "description": "The ID of the plan item to set the quantity for" }, "quantity": { "type": "number", "description": "The nonnegative integer quantity for the plan item" }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs to associate with the plan item quantity" } }, "required": [ "planItemId", "quantity" ], "type": "object", "description": "The plan item quantities to set for the subscription" }, "type": "array", "description": "The plan item quantities to set for the subscription" }, "rateVariantKey": { "type": "string", "description": "The rate variant key to apply to the subscription" } }, "required": [ "planId" ], "type": "object", "description": "Purchase configuration specific options" }, "output": { "properties": { "planChangeId": { "type": "string", "description": "The committed Plan revision used to calculate the purchase price" } }, "type": "object" }, "type": { "type": "string", "enum": [ "subscription" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "The configuration for a credit purchase" } ] }, "createdAt": { "type": "string", "description": "The datetime when the Purchase Intent was created." }, "currency": { "type": "string", "enum": [ "miu", "usd" ], "description": "The currency for the purchase intent" }, "dispute": { "properties": { "amount": { "type": "string", "description": "The disputed amount." }, "createdAt": { "type": "string", "description": "When the dispute was first recorded." }, "currency": { "type": "string", "description": "The dispute currency." }, "id": { "type": "string", "description": "The unique ID of the dispute entity." }, "providerId": { "type": "string", "description": "The external provider dispute ID (e.g. Stripe dispute ID)." }, "reason": { "nullable": true, "type": "string", "description": "The dispute reason." }, "status": { "type": "string", "description": "The dispute status." }, "updatedAt": { "type": "string", "description": "When the dispute was last updated." } }, "required": [ "amount", "createdAt", "currency", "id", "providerId", "reason", "status", "updatedAt" ], "type": "object", "description": "The dispute details, if any." }, "id": { "type": "string", "description": "The unique ID of a Purchase Intent. Uses the format `pur_*`" }, "lineItems": { "items": { "properties": { "description": { "type": "string", "description": "The description of the line item" }, "id": { "type": "string", "description": "The ID of the line item" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata for the line item" }, "name": { "type": "string", "description": "The name of the line item" }, "productAlias": { "type": "string", "description": "The alias of the product being purchased" }, "productId": { "type": "string", "description": "The ID of the product being purchased" }, "quantity": { "type": "string", "description": "The quantity of the line item" }, "refund": { "type": "string", "description": "The amount of the line item that has been refunded" }, "unitAmount": { "type": "string", "description": "The unit amount of the line item" } }, "required": [ "description", "id", "name", "productId", "quantity", "unitAmount" ], "type": "object", "description": "The line items that make up the Purchase Intent." }, "type": "array", "description": "The line items that make up the Purchase Intent." }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata associated with the purchase intent" }, "ownerId": { "type": "string", "description": "The ID of the owner of the Purchase Intent." }, "provider": { "properties": { "currencyConversionRate": { "type": "string", "description": "The currency conversion rate used by the provider" }, "resourceId": { "type": "string", "description": "Provider resource id" }, "stripeSharedPaymentTokenUsed": { "type": "boolean", "enum": [ false, true ], "description": "Whether a Stripe Shared Payment Token was used for this purchase. Only applicable when type is stripe_invoice_immediate." }, "type": { "type": "string", "enum": [ "apple_in_app_purchase", "orb_ledger", "stripe_elements", "stripe_hosted", "stripe_invoice_deferred", "stripe_invoice_elements", "stripe_invoice_immediate", "tackle_aws_marketplace" ], "description": "The type of the purchase provider" } }, "required": [ "resourceId", "type" ], "type": "object" }, "refund": { "type": "string", "description": "The amount of the purchase intent that has been refunded" }, "returnUrl": { "type": "string", "description": "The URL to redirect to after the purchase is complete" }, "status": { "type": "string", "enum": [ "failed", "pending", "succeeded" ], "description": "The status of the Purchase Intent." }, "subtotal": { "type": "string", "description": "The subtotal of the Purchase Intent." }, "tax": { "type": "string", "description": "The tax due on the Purchase Intent." }, "total": { "type": "string", "description": "The total balance due on the Purchase Intent." }, "updatedAt": { "type": "string", "description": "The datetime when the Purchase Intent was last updated." } }, "required": [ "configuration", "createdAt", "currency", "id", "ownerId", "provider", "status", "subtotal", "tax", "total", "updatedAt" ], "type": "object", "description": "The created purchase intent" } }, "required": [ "purchaseIntent" ], "type": "object" }, { "properties": { "orbSubscriptionIntent": { "properties": { "configuration": { "oneOf": [ { "properties": { "options": { "properties": { "productAlias": { "type": "string", "description": "The alias of the product to set quantity for." }, "quantity": { "type": "number", "description": "The quantity to set for the plan item." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs for the plan item. Only set if SKU requires resource entitlements." } }, "required": [ "productAlias", "quantity" ], "type": "object", "description": "Configuration input options for setting plan item quantity." }, "output": { "properties": { "changedResources": { "items": { "properties": { "addedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were added." }, "effectiveAt": { "type": "string", "description": "When this resource change should take effect for downstream consumers." }, "productAlias": { "type": "string", "description": "The alias of the product that was changed." }, "productId": { "type": "string", "description": "The ID of the product that was changed." }, "quantity": { "type": "number", "description": "The resulting quantity after this change." }, "removedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were removed." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The full set of resource IDs after the change." } }, "required": [ "productAlias", "productId", "quantity" ], "type": "object", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "type": "array", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "effectiveBehavior": { "type": "string", "enum": [ "end_of_term", "immediate" ], "description": "When the subscription change should take effect." }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata associated with the intent to update the Orb subscription with." }, "orbPriceId": { "type": "string", "description": "The Orb price ID for the subscription item being modified." }, "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change if there is one." }, "pricingSource": { "type": "string", "enum": [ "copper", "orb" ], "description": "The source used as the authoritative price for this intent." }, "productId": { "type": "string", "description": "The product ID associated with this intent." } }, "required": [ "effectiveBehavior", "orbPriceId", "pricingSource", "productId" ], "type": "object", "description": "Output returned after configuring an OrbSubscriptionIntent." }, "type": { "type": "string", "enum": [ "set_plan_item_quantity" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "Configuration for the Orb subscription intent." }, { "properties": { "options": { "properties": { "productAlias": { "type": "string", "description": "The alias of the product to increase quantity for." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs to incrementally add. The quantity of the plan item will be increased by the number of resource IDs." } }, "required": [ "productAlias", "resourceIds" ], "type": "object", "description": "Configuration input options for increasing plan item quantity." }, "output": { "properties": { "changedResources": { "items": { "properties": { "addedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were added." }, "effectiveAt": { "type": "string", "description": "When this resource change should take effect for downstream consumers." }, "productAlias": { "type": "string", "description": "The alias of the product that was changed." }, "productId": { "type": "string", "description": "The ID of the product that was changed." }, "quantity": { "type": "number", "description": "The resulting quantity after this change." }, "removedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were removed." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The full set of resource IDs after the change." } }, "required": [ "productAlias", "productId", "quantity" ], "type": "object", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "type": "array", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "effectiveBehavior": { "type": "string", "enum": [ "end_of_term", "immediate" ], "description": "When the subscription change should take effect." }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata associated with the intent to update the Orb subscription with." }, "orbPriceId": { "type": "string", "description": "The Orb price ID for the subscription item being modified." }, "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change if there is one." }, "pricingSource": { "type": "string", "enum": [ "copper", "orb" ], "description": "The source used as the authoritative price for this intent." }, "productId": { "type": "string", "description": "The product ID associated with this intent." } }, "required": [ "effectiveBehavior", "orbPriceId", "pricingSource", "productId" ], "type": "object", "description": "Output returned after configuring an OrbSubscriptionIntent." }, "type": { "type": "string", "enum": [ "increase_plan_item_quantity" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "Configuration for the Orb subscription intent." }, { "properties": { "options": { "properties": { "productAlias": { "type": "string", "description": "The alias of the product to decrease quantity for." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs to decrementally remove. The quantity of the plan item will be decreased by the number of resource IDs." } }, "required": [ "productAlias", "resourceIds" ], "type": "object", "description": "Configuration input options for decreasing plan item quantity." }, "output": { "properties": { "changedResources": { "items": { "properties": { "addedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were added." }, "effectiveAt": { "type": "string", "description": "When this resource change should take effect for downstream consumers." }, "productAlias": { "type": "string", "description": "The alias of the product that was changed." }, "productId": { "type": "string", "description": "The ID of the product that was changed." }, "quantity": { "type": "number", "description": "The resulting quantity after this change." }, "removedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were removed." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The full set of resource IDs after the change." } }, "required": [ "productAlias", "productId", "quantity" ], "type": "object", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "type": "array", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "effectiveBehavior": { "type": "string", "enum": [ "end_of_term", "immediate" ], "description": "When the subscription change should take effect." }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata associated with the intent to update the Orb subscription with." }, "orbPriceId": { "type": "string", "description": "The Orb price ID for the subscription item being modified." }, "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change if there is one." }, "pricingSource": { "type": "string", "enum": [ "copper", "orb" ], "description": "The source used as the authoritative price for this intent." }, "productId": { "type": "string", "description": "The product ID associated with this intent." } }, "required": [ "effectiveBehavior", "orbPriceId", "pricingSource", "productId" ], "type": "object", "description": "Output returned after configuring an OrbSubscriptionIntent." }, "type": { "type": "string", "enum": [ "decrease_plan_item_quantity" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "Configuration for the Orb subscription intent." }, { "properties": { "options": { "properties": { "addedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs to incrementally add. The quantity of the plan item will be increased by the number of resource IDs." }, "productAlias": { "type": "string", "description": "The alias of the product to adjust quantity for." }, "removedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "The resource IDs to incrementally remove. The quantity of the plan item will be decreased by the number of resource IDs." } }, "required": [ "addedResourceIds", "productAlias", "removedResourceIds" ], "type": "object", "description": "Configuration input options for adjusting plan item quantity." }, "output": { "properties": { "changedResources": { "items": { "properties": { "addedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were added." }, "effectiveAt": { "type": "string", "description": "When this resource change should take effect for downstream consumers." }, "productAlias": { "type": "string", "description": "The alias of the product that was changed." }, "productId": { "type": "string", "description": "The ID of the product that was changed." }, "quantity": { "type": "number", "description": "The resulting quantity after this change." }, "removedResourceIds": { "items": { "type": "string" }, "type": "array", "description": "Resource IDs that were removed." }, "resourceIds": { "items": { "type": "string" }, "type": "array", "description": "The full set of resource IDs after the change." } }, "required": [ "productAlias", "productId", "quantity" ], "type": "object", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "type": "array", "description": "Resources that were changed as part of this intent. Tracks all logical changes including the primary change and any side effects." }, "effectiveBehavior": { "type": "string", "enum": [ "end_of_term", "immediate" ], "description": "When the subscription change should take effect." }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Optional metadata associated with the intent to update the Orb subscription with." }, "orbPriceId": { "type": "string", "description": "The Orb price ID for the subscription item being modified." }, "pendingSubscriptionChangeId": { "type": "string", "description": "The ID of the pending subscription change if there is one." }, "pricingSource": { "type": "string", "enum": [ "copper", "orb" ], "description": "The source used as the authoritative price for this intent." }, "productId": { "type": "string", "description": "The product ID associated with this intent." } }, "required": [ "effectiveBehavior", "orbPriceId", "pricingSource", "productId" ], "type": "object", "description": "Output returned after configuring an OrbSubscriptionIntent." }, "type": { "type": "string", "enum": [ "adjust_plan_item_quantity" ] } }, "required": [ "options", "output", "type" ], "type": "object", "description": "Configuration for the Orb subscription intent." } ] }, "createdAt": { "type": "string", "description": "The ISO 8601 date-time that the intent was created." }, "id": { "type": "string", "description": "The ID of the Orb subscription intent with the format `orbsubint_`." }, "orbSubscriptionId": { "type": "string", "description": "The Orb subscription ID this intent is associated with." }, "orbUpdate": { "oneOf": [ { "properties": { "mode": { "type": "string", "enum": [ "sync" ] } }, "required": [ "mode" ], "type": "object", "description": "How the subscription change is applied to Orb." }, { "properties": { "mode": { "type": "string", "enum": [ "async" ] }, "status": { "type": "string", "enum": [ "canceled", "failed", "pending", "running" ] } }, "required": [ "mode", "status" ], "type": "object", "description": "How the subscription change is applied to Orb." }, { "properties": { "appliedAt": { "type": "string", "description": "The ISO 8601 date-time that the subscription change was applied to Orb." }, "mode": { "type": "string", "enum": [ "async" ] }, "status": { "type": "string", "enum": [ "succeeded" ] } }, "required": [ "appliedAt", "mode", "status" ], "type": "object", "description": "How the subscription change is applied to Orb." } ] }, "ownerId": { "type": "string", "description": "The owner ID for this intent (e.g., team or user ID)." }, "purchaseIntentId": { "type": "string", "description": "Optional purchase intent ID if this is associated with a purchase." }, "status": { "type": "string", "enum": [ "failed", "pending", "succeeded" ], "description": "The status of the Orb subscription intent." }, "updatedAt": { "type": "string", "description": "The ISO 8601 date-time that the intent was last updated." } }, "required": [ "configuration", "createdAt", "id", "orbSubscriptionId", "orbUpdate", "ownerId", "status", "updatedAt" ], "type": "object" } }, "required": [ "orbSubscriptionIntent" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "source", "description": "The source of the purchase request. Defaults to `api` if not specified.", "in": "query", "schema": { "type": "string", "description": "The source of the purchase request. Defaults to `api` if not specified." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "item" ], "properties": { "item": { "type": "object", "required": [ "type", "creditType", "amount" ], "properties": { "type": { "type": "string", "enum": [ "credits" ], "description": "The type of item to purchase." }, "creditType": { "type": "string", "enum": [ "v0", "gateway", "agent" ], "description": "The type of credits to purchase." }, "amount": { "type": "integer", "minimum": 1, "description": "The amount of credits to purchase." } } } } } } } }, "x-codeSamples": [ { "lang": "curl", "label": "cURL", "source": "curl --request POST \\\n --url 'https://api.vercel.com/v1/billing/buy?teamId=' \\\n --header 'Authorization: Bearer ' \\\n --header 'Content-Type: application/json' \\\n --data '{\"item\":{\"type\":\"credits\",\"creditType\":\"v0\",\"amount\":100}}'\n" }, { "lang": "typescript", "label": "buyCredits", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.billing.buyCredits({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n item: {\n type: \"credits\",\n creditType: \"agent\",\n amount: 890808,\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/bulk-redirects": { "put": { "description": "Stages new redirects for a project and returns the new version.", "operationId": "stageRedirects", "security": [ { "bearerToken": [] } ], "summary": "Stages new redirects for a project.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "alias": { "nullable": true, "type": "string" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "alias", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "projectId", "teamId" ], "properties": { "projectId": { "type": "string" }, "teamId": { "type": "string" }, "overwrite": { "type": "boolean" }, "name": { "type": "string", "maxLength": 256 }, "redirects": { "type": "array", "default": [], "items": { "type": "object", "required": [ "source", "destination" ], "properties": { "source": { "type": "string", "maxLength": 2048 }, "destination": { "type": "string", "maxLength": 2048 }, "statusCode": { "oneOf": [ { "type": "number" }, { "type": "string" } ] }, "permanent": { "type": "boolean" }, "caseSensitive": { "type": "boolean" }, "query": { "type": "boolean" }, "preserveQueryParams": { "type": "boolean" } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "stageRedirects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.stageRedirects({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Get the version history for a project's bulk redirects", "operationId": "getRedirects", "security": [ { "bearerToken": [] } ], "summary": "Gets project-level redirects.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "additionalProperties": true }, { "properties": { "pagination": { "properties": { "numPages": { "type": "number" }, "page": { "type": "number" }, "per_page": { "type": "number" } }, "required": [ "numPages", "page", "per_page" ], "type": "object" }, "redirects": { "items": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "destination": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "preserveQueryParams": { "type": "boolean", "enum": [ false, true ] }, "query": { "type": "boolean", "enum": [ false, true ] }, "sensitive": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "pagination", "redirects" ], "type": "object" }, { "properties": { "pagination": { "properties": { "numPages": { "type": "number" }, "page": { "type": "number" }, "per_page": { "type": "number" } }, "required": [ "numPages", "page", "per_page" ], "type": "object" }, "redirects": { "items": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "destination": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "preserveQueryParams": { "type": "boolean", "enum": [ false, true ] }, "query": { "type": "boolean", "enum": [ false, true ] }, "sensitive": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "pagination", "redirects", "version" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "versionId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "q", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "diff", "in": "query", "required": false, "schema": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "only" ] } ] } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1 } }, { "name": "per_page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 10, "maximum": 250 } }, { "name": "sort_by", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "source", "destination", "statusCode" ] } }, { "name": "sort_order", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "asc", "desc" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRedirects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.getRedirects({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes the provided redirects from the latest version of the projects' bulk redirects. Stages a new change with the new redirects and returns the alias for the new version in the response.", "operationId": "deleteRedirects", "security": [ { "bearerToken": [] } ], "summary": "Delete project-level redirects.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "alias": { "type": "string" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "version" ], "type": "object" }, { "properties": { "alias": { "nullable": true }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "alias", "version" ], "type": "object" }, { "properties": { "alias": { "nullable": true, "type": "string" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "alias", "version" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 256 }, "redirects": { "description": "The redirects to delete. The source of the redirect is used to match the redirect to delete.", "type": "array", "minItems": 1, "items": { "type": "string" } } }, "required": [ "redirects" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "deleteRedirects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.deleteRedirects({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Edits a single redirect identified by its source path. Stages a new change with the modified redirect and returns the alias for the new version in the response.", "operationId": "editRedirect", "security": [ { "bearerToken": [] } ], "summary": "Edit a project-level redirect.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "alias": { "nullable": true, "type": "string" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "alias", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 256 }, "redirect": { "description": "The redirect object to edit. The source field is used to match the redirect to modify.", "type": "object", "properties": { "source": { "type": "string" }, "destination": { "type": "string" }, "statusCode": { "type": "number" }, "permanent": { "type": "boolean" }, "caseSensitive": { "type": "boolean" }, "query": { "type": "boolean" }, "preserveQueryParams": { "type": "boolean" } }, "required": [ "source" ], "additionalProperties": false }, "restore": { "description": "If true, restores the redirect from the latest production version to staging.", "type": "boolean" } }, "required": [ "redirect" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "editRedirect", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.editRedirect({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/bulk-redirects/restore": { "post": { "description": "Restores the provided redirects in the staging version to the value in the production version. If no production version exists, removes the redirects from staging.", "operationId": "restoreRedirects", "security": [ { "bearerToken": [] } ], "summary": "Restore staged project-level redirects to their production version.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "failedToRestore": { "items": { "type": "string" }, "type": "array" }, "restored": { "items": { "type": "string" }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "failedToRestore", "restored", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 256 }, "redirects": { "description": "The redirects to restore. The source of the redirect is used to match the redirect to restore.", "type": "array", "minItems": 1, "maxItems": 100, "items": { "type": "string" } } }, "required": [ "redirects" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "restoreRedirects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.restoreRedirects({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/bulk-redirects/versions": { "get": { "description": "Get the version history for a project's bulk redirects", "operationId": "getVersions", "security": [ { "bearerToken": [] } ], "summary": "Get the version history for a project's redirects.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "versions": { "items": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" }, "type": "array" } }, "required": [ "versions" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getVersions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.getVersions({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Update a version by promoting staging to production or restoring a previous production version", "operationId": "updateVersion", "security": [ { "bearerToken": [] } ], "summary": "Promote a staging version to production or restore a previous production version.", "tags": [ "bulk-redirects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "version": { "properties": { "alias": { "type": "string", "description": "The staging link for previewing redirects in this version." }, "createdBy": { "type": "string" }, "id": { "type": "string", "description": "The unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version has not been promoted to production yet and is not serving end users." }, "key": { "type": "string", "description": "The key of the version. The key may be duplicated across versions if the contents are the same as a different version." }, "lastModified": { "type": "number" }, "name": { "type": "string", "description": "Optional name for the version. If not provided, defaults to an ISO timestamp string." }, "redirectCount": { "type": "number", "description": "The number of redirects in this version." } }, "required": [ "createdBy", "id", "key", "lastModified" ], "type": "object" } }, "required": [ "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "action" ], "properties": { "id": { "type": "string" }, "action": { "type": "string", "enum": [ "promote", "restore", "discard" ] }, "name": { "type": "string", "maxLength": 256 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateVersion", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.bulkRedirects.updateVersion({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/projects/{projectIdOrName}/checks": { "get": { "description": "List all checks for a project, optionally filtered by target.", "operationId": "listProjectChecks", "security": [ { "bearerToken": [] } ], "summary": "List all checks for a project", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "checks": { "items": { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "createdAt": { "type": "number" }, "deletedAt": { "type": "number" }, "id": { "type": "string" }, "isRerequestable": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" } ] }, "sourceIntegrationConfigurationId": { "type": "string" }, "sourceKind": { "type": "string", "enum": [ "git-provider", "integration", "vercel", "webhook", "integration", "webhook", "git-provider" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" } }, "required": [ "blocks", "createdAt", "id", "isRerequestable", "name", "ownerId", "projectId", "requires", "source", "sourceKind", "targets", "timeout", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "checks" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "blocks", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "build-start", "deployment-start", "deployment-alias", "deployment-promotion", "none" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listProjectChecks", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.listProjectChecks({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Creates a new check for a project.", "operationId": "createProjectCheck", "security": [ { "bearerToken": [] } ], "summary": "Create a check", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "createdAt": { "type": "number" }, "deletedAt": { "type": "number" }, "id": { "type": "string" }, "isRerequestable": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" } ] }, "sourceIntegrationConfigurationId": { "type": "string" }, "sourceKind": { "type": "string", "enum": [ "git-provider", "integration", "vercel", "webhook", "integration", "webhook", "git-provider" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" } }, "required": [ "blocks", "createdAt", "id", "isRerequestable", "name", "ownerId", "projectId", "requires", "source", "sourceKind", "targets", "timeout", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "type": "string" }, "isRerequestable": { "type": "boolean" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ], "default": "deployment-url" }, "targets": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "blocks": { "type": "string", "enum": [ "build-start", "deployment-start", "deployment-alias", "deployment-promotion", "none" ], "default": "deployment-alias" }, "source": { "type": "object", "oneOf": [ { "properties": { "kind": { "type": "string", "default": "integration" }, "externalResourceId": { "type": "string" } } }, { "properties": { "kind": { "type": "string" }, "webhookId": { "type": "string" } }, "required": [ "kind" ] }, { "properties": { "kind": { "type": "string" }, "externalCheckName": { "type": "string" }, "provider": { "type": "string", "enum": [ "github" ] } }, "required": [ "kind", "externalCheckName", "provider" ] } ] }, "timeout": { "type": "number", "default": 300 } }, "required": [ "name", "requires" ], "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createProjectCheck", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.createProjectCheck({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/projects/{projectIdOrName}/checks/{checkId}": { "get": { "description": "Return a detailed response for a single check.", "operationId": "getProjectCheck", "security": [ { "bearerToken": [] } ], "summary": "Get a check", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "createdAt": { "type": "number" }, "deletedAt": { "type": "number" }, "id": { "type": "string" }, "isRerequestable": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" } ] }, "sourceIntegrationConfigurationId": { "type": "string" }, "sourceKind": { "type": "string", "enum": [ "git-provider", "integration", "vercel", "webhook", "integration", "webhook", "git-provider" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" } }, "required": [ "blocks", "createdAt", "id", "isRerequestable", "name", "ownerId", "projectId", "requires", "source", "sourceKind", "targets", "timeout", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkId", "description": "The ID of the resource that will be updated.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the resource that will be updated.", "example": "stf_89ha9sdhh9a9" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectCheck", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.getProjectCheck({\n projectIdOrName: \"\",\n checkId: \"stf_89ha9sdhh9a9\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update an existing check.", "operationId": "updateProjectCheck", "security": [ { "bearerToken": [] } ], "summary": "Update a check", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "createdAt": { "type": "number" }, "deletedAt": { "type": "number" }, "id": { "type": "string" }, "isRerequestable": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" } ] }, "sourceIntegrationConfigurationId": { "type": "string" }, "sourceKind": { "type": "string", "enum": [ "git-provider", "integration", "vercel", "webhook", "integration", "webhook", "git-provider" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" } }, "required": [ "blocks", "createdAt", "id", "isRerequestable", "name", "ownerId", "projectId", "requires", "source", "sourceKind", "targets", "timeout", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "type": "string" }, "isRerequestable": { "type": "boolean" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ], "default": "deployment-url" }, "targets": { "type": "array", "items": { "type": "string" } }, "blocks": { "type": "string", "enum": [ "build-start", "deployment-start", "deployment-alias", "deployment-promotion", "none" ], "default": "deployment-alias" }, "timeout": { "type": "number", "default": 300 } }, "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateProjectCheck", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.updateProjectCheck({\n projectIdOrName: \"\",\n checkId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete an existing check and all of its runs.", "operationId": "deleteProjectCheck", "security": [ { "bearerToken": [] } ], "summary": "Delete a check", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "success": { "type": "boolean", "enum": [ true ] } }, "required": [ "success" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteProjectCheck", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.deleteProjectCheck({\n projectIdOrName: \"\",\n checkId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/projects/{projectIdOrName}/checks/{checkId}/runs": { "get": { "description": "List all runs associated with a given check.", "operationId": "listCheckRuns", "security": [ { "bearerToken": [] } ], "summary": "List runs for a check", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "runs": { "items": { "oneOf": [ { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "checkId": { "type": "string" }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "api", "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-native-check" ] } }, "type": "object", "description": "Native Vercel checks — check definition and check run `source`." }, { "properties": { "origin": { "type": "string", "enum": [ "api" ] }, "selection": { "properties": { "job": { "type": "string" }, "kind": { "type": "string", "enum": [ "job" ] } }, "required": [ "job", "kind" ], "type": "object" }, "subKind": { "type": "string", "enum": [ "vercel-ci-check" ] } }, "required": [ "origin", "selection", "subKind" ], "type": "object", "description": "Project-defined CI requirement; its selection is frozen on each check run." } ] } }, "required": [ "checkId", "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Check run backed by a project-level `check` definition." }, { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "source": { "oneOf": [ { "properties": { "invocationAttempt": { "type": "number" }, "invocationId": { "type": "string" }, "jobDefinitionId": { "type": "string" }, "origin": { "type": "string", "enum": [ "config" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci" ] } }, "required": [ "invocationId", "jobDefinitionId", "origin", "subKind" ], "type": "object", "description": "Config-driven CI task — check run `source` only (no parent check)." }, { "properties": { "origin": { "type": "string", "enum": [ "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci-sentinel" ] } }, "required": [ "origin", "subKind" ], "type": "object", "description": "CI sentinel — check run `source` only (no parent check)." } ] } }, "required": [ "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Vercel CI check run without a parent `check` (no `checkId` field)." } ] }, "type": "array" } }, "required": [ "runs" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkId", "description": "The ID of the resource that will be updated.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the resource that will be updated.", "example": "ckr_89ha9sdhh9a9" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listCheckRuns", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.listCheckRuns({\n projectIdOrName: \"\",\n checkId: \"ckr_89ha9sdhh9a9\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/deployments/{deploymentId}/check-runs": { "get": { "description": "List all check runs for a deployment.", "operationId": "listDeploymentCheckRuns", "security": [ { "bearerToken": [] } ], "summary": "List check runs for a deployment", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "runs": { "items": { "oneOf": [ { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "checkId": { "type": "string" }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "api", "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-native-check" ] } }, "type": "object", "description": "Native Vercel checks — check definition and check run `source`." }, { "properties": { "origin": { "type": "string", "enum": [ "api" ] }, "selection": { "properties": { "job": { "type": "string" }, "kind": { "type": "string", "enum": [ "job" ] } }, "required": [ "job", "kind" ], "type": "object" }, "subKind": { "type": "string", "enum": [ "vercel-ci-check" ] } }, "required": [ "origin", "selection", "subKind" ], "type": "object", "description": "Project-defined CI requirement; its selection is frozen on each check run." } ] } }, "required": [ "checkId", "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Check run backed by a project-level `check` definition." }, { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "source": { "oneOf": [ { "properties": { "invocationAttempt": { "type": "number" }, "invocationId": { "type": "string" }, "jobDefinitionId": { "type": "string" }, "origin": { "type": "string", "enum": [ "config" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci" ] } }, "required": [ "invocationId", "jobDefinitionId", "origin", "subKind" ], "type": "object", "description": "Config-driven CI task — check run `source` only (no parent check)." }, { "properties": { "origin": { "type": "string", "enum": [ "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci-sentinel" ] } }, "required": [ "origin", "subKind" ], "type": "object", "description": "CI sentinel — check run `source` only (no parent check)." } ] } }, "required": [ "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Vercel CI check run without a parent `check` (no `checkId` field)." } ] }, "type": "array" } }, "required": [ "runs" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listDeploymentCheckRuns", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.listDeploymentCheckRuns({\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Creates a new check run for a deployment.", "operationId": "createDeploymentCheckRun", "security": [ { "bearerToken": [] } ], "summary": "Create a check run", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "checkId": { "type": "string" }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "api", "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-native-check" ] } }, "type": "object", "description": "Native Vercel checks — check definition and check run `source`." }, { "properties": { "origin": { "type": "string", "enum": [ "api" ] }, "selection": { "properties": { "job": { "type": "string" }, "kind": { "type": "string", "enum": [ "job" ] } }, "required": [ "job", "kind" ], "type": "object" }, "subKind": { "type": "string", "enum": [ "vercel-ci-check" ] } }, "required": [ "origin", "selection", "subKind" ], "type": "object", "description": "Project-defined CI requirement; its selection is frozen on each check run." } ] } }, "required": [ "checkId", "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Check run backed by a project-level `check` definition." }, { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "source": { "oneOf": [ { "properties": { "invocationAttempt": { "type": "number" }, "invocationId": { "type": "string" }, "jobDefinitionId": { "type": "string" }, "origin": { "type": "string", "enum": [ "config" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci" ] } }, "required": [ "invocationId", "jobDefinitionId", "origin", "subKind" ], "type": "object", "description": "Config-driven CI task — check run `source` only (no parent check)." }, { "properties": { "origin": { "type": "string", "enum": [ "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci-sentinel" ] } }, "required": [ "origin", "subKind" ], "type": "object", "description": "CI sentinel — check run `source` only (no parent check)." } ] } }, "required": [ "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Vercel CI check run without a parent `check` (no `checkId` field)." } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "checkId": { "type": "string" } }, "required": [ "checkId" ], "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createDeploymentCheckRun", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.createDeploymentCheckRun({\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/deployments/{deploymentId}/check-runs/{checkRunId}": { "get": { "description": "Return a detailed response for a single check run.", "operationId": "getDeploymentCheckRun", "security": [ { "bearerToken": [] } ], "summary": "Get a check run", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "checkId": { "type": "string" }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "api", "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-native-check" ] } }, "type": "object", "description": "Native Vercel checks — check definition and check run `source`." }, { "properties": { "origin": { "type": "string", "enum": [ "api" ] }, "selection": { "properties": { "job": { "type": "string" }, "kind": { "type": "string", "enum": [ "job" ] } }, "required": [ "job", "kind" ], "type": "object" }, "subKind": { "type": "string", "enum": [ "vercel-ci-check" ] } }, "required": [ "origin", "selection", "subKind" ], "type": "object", "description": "Project-defined CI requirement; its selection is frozen on each check run." } ] } }, "required": [ "checkId", "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Check run backed by a project-level `check` definition." }, { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "source": { "oneOf": [ { "properties": { "invocationAttempt": { "type": "number" }, "invocationId": { "type": "string" }, "jobDefinitionId": { "type": "string" }, "origin": { "type": "string", "enum": [ "config" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci" ] } }, "required": [ "invocationId", "jobDefinitionId", "origin", "subKind" ], "type": "object", "description": "Config-driven CI task — check run `source` only (no parent check)." }, { "properties": { "origin": { "type": "string", "enum": [ "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci-sentinel" ] } }, "required": [ "origin", "subKind" ], "type": "object", "description": "CI sentinel — check run `source` only (no parent check)." } ] } }, "required": [ "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Vercel CI check run without a parent `check` (no `checkId` field)." } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkRunId", "description": "The ID of the resource that will be updated.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the resource that will be updated.", "example": "ckr_89ha9sdhh9a9" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeploymentCheckRun", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.getDeploymentCheckRun({\n deploymentId: \"\",\n checkRunId: \"ckr_89ha9sdhh9a9\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update an existing check run for a deployment.", "operationId": "updateDeploymentCheckRun", "security": [ { "bearerToken": [] } ], "summary": "Update a check run", "tags": [ "checks-v2" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "checkId": { "type": "string" }, "source": { "oneOf": [ { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" }, { "properties": { "kind": { "type": "string", "enum": [ "webhook" ] }, "webhookId": { "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalCheckName": { "type": "string" }, "kind": { "type": "string", "enum": [ "git-provider" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] } }, "required": [ "externalCheckName", "kind", "provider" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "api", "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-native-check" ] } }, "type": "object", "description": "Native Vercel checks — check definition and check run `source`." }, { "properties": { "origin": { "type": "string", "enum": [ "api" ] }, "selection": { "properties": { "job": { "type": "string" }, "kind": { "type": "string", "enum": [ "job" ] } }, "required": [ "job", "kind" ], "type": "object" }, "subKind": { "type": "string", "enum": [ "vercel-ci-check" ] } }, "required": [ "origin", "selection", "subKind" ], "type": "object", "description": "Project-defined CI requirement; its selection is frozen on each check run." } ] } }, "required": [ "checkId", "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Check run backed by a project-level `check` definition." }, { "properties": { "blocks": { "type": "string", "enum": [ "build-start", "deployment-alias", "deployment-promotion", "deployment-start", "none" ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "succeeded", "timeout" ] }, "conclusionText": { "type": "string" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "externalId": { "type": "string" }, "externalUrl": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "output": { "additionalProperties": true, "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "requires": { "type": "string", "enum": [ "build-ready", "deployment-url", "none" ] }, "status": { "type": "string", "enum": [ "completed", "queued", "running" ] }, "targets": { "items": { "type": "string" }, "type": "array" }, "timeout": { "type": "number" }, "updatedAt": { "type": "number" }, "source": { "oneOf": [ { "properties": { "invocationAttempt": { "type": "number" }, "invocationId": { "type": "string" }, "jobDefinitionId": { "type": "string" }, "origin": { "type": "string", "enum": [ "config" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci" ] } }, "required": [ "invocationId", "jobDefinitionId", "origin", "subKind" ], "type": "object", "description": "Config-driven CI task — check run `source` only (no parent check)." }, { "properties": { "origin": { "type": "string", "enum": [ "platform" ] }, "subKind": { "type": "string", "enum": [ "vercel-ci-sentinel" ] } }, "required": [ "origin", "subKind" ], "type": "object", "description": "CI sentinel — check run `source` only (no parent check)." } ] } }, "required": [ "createdAt", "deploymentId", "id", "name", "ownerId", "source", "status", "timeout", "updatedAt" ], "type": "object", "description": "Vercel CI check run without a parent `check` (no `checkId` field)." } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "413": { "description": "The output provided is too large" }, "500": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "checkRunId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { "externalId": { "type": "string" }, "externalUrl": { "type": "string", "format": "uri", "pattern": "^https?://|^sso:" }, "status": { "type": "string", "enum": [ "queued", "running", "completed" ] }, "output": { "type": "object" }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "skipped", "timeout", "failed", "neutral", "succeeded" ] }, "conclusionText": { "type": "string" } }, "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateDeploymentCheckRun", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.checksV2.updateDeploymentCheckRun({\n deploymentId: \"\",\n checkRunId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/deployments/{deploymentId}/checks": { "post": { "description": "Creates a new check. This endpoint must be called with an OAuth2 or it will produce a 400 error.", "operationId": "createCheck", "security": [ { "bearerToken": [] } ], "summary": "Creates a new Check", "tags": [ "checks" ], "deprecated": true, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocking": { "type": "boolean", "enum": [ false, true ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "stale", "succeeded" ], "example": "succeeded" }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "detailsUrl": { "type": "string" }, "externalId": { "type": "string" }, "id": { "type": "string", "example": "chk_1a2b3c4d5e6f7g8h9i0j" }, "integrationId": { "type": "string" }, "name": { "type": "string", "example": "Performance Check" }, "output": { "properties": { "metrics": { "properties": { "CLS": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "FCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "LCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "TBT": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "virtualExperienceScore": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" } }, "required": [ "CLS", "FCP", "LCP", "TBT" ], "type": "object" } }, "type": "object" }, "path": { "type": "string", "example": "/api/users" }, "rerequestable": { "type": "boolean", "enum": [ false, true ] }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "completed", "registered", "running" ], "example": "completed" }, "updatedAt": { "type": "number" } }, "required": [ "blocking", "createdAt", "deploymentId", "id", "integrationId", "name", "status", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nCannot create check for finished deployment\nThe provided token is not from an OAuth2 Client" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "description": "The deployment to create the check for.", "in": "path", "required": true, "schema": { "description": "The deployment to create the check for.", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "description": "The name of the check being created", "maxLength": 100, "example": "Performance Check", "type": "string" }, "path": { "description": "Path of the page that is being checked", "type": "string", "maxLength": 255, "example": "/" }, "blocking": { "description": "Whether the check should block a deployment from succeeding", "type": "boolean", "example": true }, "detailsUrl": { "description": "URL to display for further details", "type": "string", "example": "http://example.com" }, "externalId": { "description": "An identifier that can be used as an external reference", "type": "string", "example": "1234abc" }, "rerequestable": { "description": "Whether a user should be able to request for the check to be rerun if it fails", "type": "boolean", "example": true } }, "required": [ "name", "blocking" ], "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "go", "label": "createCheck", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Checks.CreateCheck(ctx, \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\", nil, nil, &operations.CreateCheckRequestBody{\n Name: \"Performance Check\",\n Path: vercel.String(\"/\"),\n Blocking: true,\n DetailsURL: vercel.String(\"http://example.com\"),\n ExternalID: vercel.String(\"1234abc\"),\n Rerequestable: vercel.Bool(true),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "get": { "description": "List all of the checks created for a deployment.", "operationId": "getAllChecks", "security": [ { "bearerToken": [] } ], "summary": "Retrieve a list of all checks", "tags": [ "checks" ], "deprecated": true, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "checks": { "items": { "properties": { "blocking": { "type": "boolean", "enum": [ false, true ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "stale", "succeeded" ] }, "createdAt": { "type": "number" }, "detailsUrl": { "type": "string" }, "id": { "type": "string" }, "integrationId": { "type": "string" }, "name": { "type": "string" }, "output": { "properties": { "metrics": { "properties": { "CLS": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "FCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "LCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "TBT": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "virtualExperienceScore": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" } }, "required": [ "CLS", "FCP", "LCP", "TBT" ], "type": "object" } }, "type": "object" }, "path": { "type": "string" }, "rerequestable": { "type": "boolean", "enum": [ false, true ] }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "updatedAt": { "type": "number" } }, "required": [ "blocking", "createdAt", "id", "integrationId", "name", "rerequestable", "status", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "checks" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "description": "The deployment to get all checks for", "in": "path", "required": true, "schema": { "description": "The deployment to get all checks for", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "go", "label": "getAllChecks", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Checks.GetAllChecks(ctx, \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/deployments/{deploymentId}/checks/{checkId}": { "get": { "description": "Return a detailed response for a single check.", "operationId": "getCheck", "security": [ { "bearerToken": [] } ], "summary": "Get a single check", "tags": [ "checks" ], "deprecated": true, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocking": { "type": "boolean", "enum": [ false, true ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "stale", "succeeded" ] }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "detailsUrl": { "type": "string" }, "externalId": { "type": "string" }, "id": { "type": "string" }, "integrationId": { "type": "string" }, "name": { "type": "string" }, "output": { "properties": { "metrics": { "properties": { "CLS": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "FCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "LCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "TBT": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "virtualExperienceScore": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" } }, "required": [ "CLS", "FCP", "LCP", "TBT" ], "type": "object" } }, "type": "object" }, "path": { "type": "string" }, "rerequestable": { "type": "boolean", "enum": [ false, true ] }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "updatedAt": { "type": "number" } }, "required": [ "blocking", "createdAt", "deploymentId", "id", "integrationId", "name", "status", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource.\nThe provided token is not from an OAuth2 Client that created the Check" }, "404": { "description": "Check was not found\nThe deployment was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "description": "The deployment to get the check for.", "in": "path", "required": true, "schema": { "description": "The deployment to get the check for.", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "name": "checkId", "description": "The check to fetch", "in": "path", "required": true, "schema": { "description": "The check to fetch", "example": "check_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "go", "label": "getCheck", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Checks.GetCheck(ctx, \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\", \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "patch": { "description": "Update an existing check. This endpoint must be called with an OAuth2 or it will produce a 400 error.", "operationId": "updateCheck", "security": [ { "bearerToken": [] } ], "summary": "Update a check", "tags": [ "checks" ], "deprecated": true, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "blocking": { "type": "boolean", "enum": [ false, true ] }, "completedAt": { "type": "number" }, "conclusion": { "type": "string", "enum": [ "canceled", "failed", "neutral", "skipped", "stale", "succeeded" ] }, "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "detailsUrl": { "type": "string" }, "externalId": { "type": "string" }, "id": { "type": "string" }, "integrationId": { "type": "string" }, "name": { "type": "string" }, "output": { "properties": { "metrics": { "properties": { "CLS": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "FCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "LCP": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "TBT": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" }, "virtualExperienceScore": { "properties": { "previousValue": { "type": "number" }, "source": { "type": "string", "enum": [ "web-vitals" ] }, "value": { "nullable": true, "type": "number" } }, "required": [ "source", "value" ], "type": "object" } }, "required": [ "CLS", "FCP", "LCP", "TBT" ], "type": "object" } }, "type": "object" }, "path": { "type": "string" }, "rerequestable": { "type": "boolean", "enum": [ false, true ] }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "updatedAt": { "type": "number" } }, "required": [ "blocking", "createdAt", "deploymentId", "id", "integrationId", "name", "status", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe provided token is not from an OAuth2 Client" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "Check was not found\nThe deployment was not found" }, "410": { "description": "" }, "413": { "description": "The output provided is too large" } }, "parameters": [ { "name": "deploymentId", "description": "The deployment to update the check for.", "in": "path", "required": true, "schema": { "description": "The deployment to update the check for.", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "name": "checkId", "description": "The check being updated", "in": "path", "required": true, "schema": { "description": "The check being updated", "example": "check_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "description": "The name of the check being created", "maxLength": 100, "example": "Performance Check", "type": "string" }, "path": { "description": "Path of the page that is being checked", "type": "string", "maxLength": 255, "example": "/" }, "status": { "description": "The current status of the check", "enum": [ "running", "completed" ] }, "conclusion": { "description": "The result of the check being run", "enum": [ "canceled", "failed", "neutral", "succeeded", "skipped" ] }, "detailsUrl": { "description": "A URL a user may visit to see more information about the check", "type": "string", "example": "https://example.com/check/run/1234abc" }, "output": { "description": "The results of the check Run", "type": "object", "properties": { "metrics": { "type": "object", "description": "Metrics about the page", "required": [ "FCP", "LCP", "CLS", "TBT" ], "additionalProperties": false, "properties": { "FCP": { "type": "object", "required": [ "value", "source" ], "properties": { "value": { "type": "number", "example": 1200, "description": "First Contentful Paint value", "nullable": true }, "previousValue": { "type": "number", "example": 900, "description": "Previous First Contentful Paint value to display a delta" }, "source": { "type": "string", "enum": [ "web-vitals" ] } } }, "LCP": { "type": "object", "required": [ "value", "source" ], "properties": { "value": { "type": "number", "example": 1200, "description": "Largest Contentful Paint value", "nullable": true }, "previousValue": { "type": "number", "example": 1000, "description": "Previous Largest Contentful Paint value to display a delta" }, "source": { "type": "string", "enum": [ "web-vitals" ] } } }, "CLS": { "type": "object", "required": [ "value", "source" ], "properties": { "value": { "type": "number", "example": 4, "description": "Cumulative Layout Shift value", "nullable": true }, "previousValue": { "type": "number", "example": 2, "description": "Previous Cumulative Layout Shift value to display a delta" }, "source": { "type": "string", "enum": [ "web-vitals" ] } } }, "TBT": { "type": "object", "required": [ "value", "source" ], "properties": { "value": { "type": "number", "example": 3000, "description": "Total Blocking Time value", "nullable": true }, "previousValue": { "type": "number", "example": 3500, "description": "Previous Total Blocking Time value to display a delta" }, "source": { "enum": [ "web-vitals" ] } } }, "virtualExperienceScore": { "type": "object", "required": [ "value", "source" ], "properties": { "value": { "type": "integer", "maximum": 100, "minimum": 0, "example": 30, "description": "The calculated Virtual Experience Score value, between 0 and 100", "nullable": true }, "previousValue": { "type": "integer", "maximum": 100, "minimum": 0, "example": 35, "description": "A previous Virtual Experience Score value to display a delta, between 0 and 100" }, "source": { "enum": [ "web-vitals" ] } } } } } } }, "externalId": { "description": "An identifier that can be used as an external reference", "type": "string", "example": "1234abc" } }, "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "go", "label": "updateCheck", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Checks.UpdateCheck(ctx, operations.UpdateCheckRequest{\n DeploymentID: \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n CheckID: \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n RequestBody: &operations.UpdateCheckRequestBody{\n Name: vercel.String(\"Performance Check\"),\n Path: vercel.String(\"/\"),\n DetailsURL: vercel.String(\"https://example.com/check/run/1234abc\"),\n Output: &operations.Output{\n Metrics: &operations.Metrics{\n Fcp: operations.Fcp{\n Value: vercel.Float64(1200),\n PreviousValue: vercel.Float64(900),\n Source: operations.UpdateCheckSourceWebVitals,\n },\n Lcp: operations.Lcp{\n Value: vercel.Float64(1200),\n PreviousValue: vercel.Float64(1000),\n Source: operations.UpdateCheckChecksSourceWebVitals,\n },\n Cls: operations.Cls{\n Value: vercel.Float64(4),\n PreviousValue: vercel.Float64(2),\n Source: operations.UpdateCheckChecksRequestSourceWebVitals,\n },\n Tbt: operations.Tbt{\n Value: vercel.Float64(3000),\n PreviousValue: vercel.Float64(3500),\n Source: operations.UpdateCheckChecksRequestRequestBodySourceWebVitals,\n },\n VirtualExperienceScore: &operations.VirtualExperienceScore{\n Value: vercel.Int64(30),\n PreviousValue: vercel.Int64(35),\n Source: operations.UpdateCheckChecksRequestRequestBodyOutputSourceWebVitals,\n },\n },\n },\n ExternalID: vercel.String(\"1234abc\"),\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/deployments/{deploymentId}/checks/{checkId}/rerequest": { "post": { "description": "Rerequest a selected check that has failed.", "operationId": "rerequestCheck", "security": [ { "bearerToken": [] } ], "summary": "Rerequest a check", "tags": [ "checks" ], "deprecated": true, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found\nCheck was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "description": "The deployment to rerun the check for.", "in": "path", "required": true, "schema": { "description": "The deployment to rerun the check for.", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "name": "checkId", "description": "The check to rerun", "in": "path", "required": true, "schema": { "description": "The check to rerun", "example": "check_2qn7PZrx89yxY34vEZPD31Y9XVj6", "type": "string" } }, { "name": "autoUpdate", "description": "Mark the check as running", "in": "query", "required": false, "schema": { "description": "Mark the check as running", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "go", "label": "rerequestCheck", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Checks.RerequestCheck(ctx, \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\", \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/connect/networks": { "get": { "description": "Allows to list Secure Compute networks.", "operationId": "listNetworks", "security": [ { "bearerToken": [] } ], "summary": "List Secure Compute networks", "tags": [ "networking" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/Network" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "includeHostedZones", "description": "Whether to include Hosted Zones in the response", "in": "query", "schema": { "type": "boolean", "description": "Whether to include Hosted Zones in the response", "default": true } }, { "name": "includePeeringConnections", "description": "Whether to include VPC Peering connections in the response", "in": "query", "schema": { "type": "boolean", "description": "Whether to include VPC Peering connections in the response", "default": true } }, { "name": "includeProjects", "description": "Whether to include projects in the response", "in": "query", "schema": { "type": "boolean", "description": "Whether to include projects in the response", "default": true } }, { "name": "search", "description": "The query to use as a filter for returned networks", "in": "query", "schema": { "type": "string", "description": "The query to use as a filter for returned networks", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listNetworks", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.listNetworks({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Allows to create a Secure Compute network.", "operationId": "createNetwork", "security": [ { "bearerToken": [] } ], "summary": "Create a Secure Compute network", "tags": [ "networking" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "awsAvailabilityZoneIds": { "type": "array", "items": { "type": "string", "description": "An AWS Availability Zone ID to use for the network", "example": "use1-az1" }, "minItems": 2, "maxItems": 2 }, "cidr": { "type": "string", "description": "The CIDR block of the network", "example": "192.168.0.0/16" }, "name": { "type": "string", "description": "The name of the network", "maxLength": 255 }, "region": { "type": "string", "description": "The region where the network will be created", "example": "iad1" } }, "required": [ "cidr", "name", "region" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createNetwork", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.createNetwork({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n awsAvailabilityZoneIds: [\n \"use1-az1\",\n ],\n cidr: \"192.168.0.0/16\",\n name: \"\",\n region: \"iad1\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/connect/networks/{networkId}": { "delete": { "description": "Allows to delete a Secure Compute network.", "operationId": "deleteNetwork", "security": [ { "bearerToken": [] } ], "summary": "Delete a Secure Compute network", "tags": [ "networking" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "networkId", "description": "The ID of the network to delete", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the network to delete", "example": "uzrmorq7bn05z-fz" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteNetwork", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.networking.deleteNetwork({\n networkId: \"uzrmorq7bn05z-fz\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] }, "patch": { "description": "Allows to update a Secure Compute network.", "operationId": "updateNetwork", "security": [ { "bearerToken": [] } ], "summary": "Update a Secure Compute network", "tags": [ "networking" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "networkId", "description": "The unique identifier of the Secure Compute network", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the Secure Compute network", "example": "uzrmorq7bn05z-fz" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the Secure Compute network", "maxLength": 255 } }, "required": [ "name" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateNetwork", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.updateNetwork({\n networkId: \"uzrmorq7bn05z-fz\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Allows to read a Secure Compute network.", "operationId": "readNetwork", "security": [ { "bearerToken": [] } ], "summary": "Read a Secure Compute network", "tags": [ "networking" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "networkId", "description": "The unique identifier of the Secure Compute network", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the Secure Compute network", "example": "uzrmorq7bn05z-fz" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "readNetwork", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.readNetwork({\n networkId: \"uzrmorq7bn05z-fz\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/networking/privatelink/endpoints": { "post": { "description": "Creates a PrivateLink endpoint for a project.", "operationId": "createPrivateLinkEndpoint", "security": [ { "bearerToken": [] } ], "summary": "Create a PrivateLink endpoint", "tags": [ "networking" ], "responses": { "201": { "description": "The PrivateLink endpoint was created and is being provisioned.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PrivateLinkEndpoint" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "The project ID to create the PrivateLink endpoint for.", "example": "prj_a1b2c3d4e5f6g7h8" }, "name": { "type": "string", "description": "The name of the PrivateLink endpoint, used as its label in the Vercel dashboard.", "example": "payments-db", "maxLength": 255 }, "vercelRegion": { "type": "string", "description": "The Vercel region to provision the endpoint in. Advanced Networking must be enabled for the project in that region. The endpoint service itself may live in another AWS region.", "example": "iad1" }, "awsServiceName": { "type": "string", "description": "The name of the AWS VPC endpoint service to connect to. Its AWS region is read from the name; when that region differs from the one behind `vercelRegion`, the service must allow cross-region access.", "example": "com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0" }, "enablePrivateDns": { "type": "boolean", "description": "Whether to resolve the endpoint service through its private DNS names, which are then returned in `privateDnsNames`. Defaults to `false`, in which case the endpoint is reachable through the DNS names in `awsDnsEntries`.", "example": false } }, "required": [ "projectId", "name", "vercelRegion", "awsServiceName" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createPrivateLinkEndpoint", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.createPrivateLinkEndpoint({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"prj_a1b2c3d4e5f6g7h8\",\n name: \"payments-db\",\n vercelRegion: \"iad1\",\n awsServiceName: \"com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0\",\n enablePrivateDns: false,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Lists all PrivateLink endpoints for a project.", "operationId": "listPrivateLinkEndpoints", "security": [ { "bearerToken": [] } ], "summary": "List PrivateLink endpoints", "tags": [ "networking" ], "responses": { "200": { "description": "The PrivateLink endpoints of the project.", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/PrivateLinkEndpoint" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID to list PrivateLink endpoints for.", "in": "query", "required": true, "schema": { "type": "string", "description": "The project ID to list PrivateLink endpoints for.", "example": "prj_a1b2c3d4e5f6g7h8" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listPrivateLinkEndpoints", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.listPrivateLinkEndpoints({\n projectId: \"prj_a1b2c3d4e5f6g7h8\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/networking/privatelink/endpoints/{endpointId}": { "get": { "description": "Reads a single PrivateLink endpoint.", "operationId": "readPrivateLinkEndpoint", "security": [ { "bearerToken": [] } ], "summary": "Read a PrivateLink endpoint", "tags": [ "networking" ], "responses": { "200": { "description": "The requested PrivateLink endpoint.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PrivateLinkEndpoint" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID the PrivateLink endpoint belongs to.", "in": "query", "required": true, "schema": { "type": "string", "description": "The project ID the PrivateLink endpoint belongs to.", "example": "prj_a1b2c3d4e5f6g7h8" } }, { "name": "endpointId", "description": "The unique identifier of the PrivateLink endpoint.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the PrivateLink endpoint.", "example": "ple_a1b2c3d4e5f6g7h8" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "readPrivateLinkEndpoint", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.readPrivateLinkEndpoint({\n projectId: \"prj_a1b2c3d4e5f6g7h8\",\n endpointId: \"ple_a1b2c3d4e5f6g7h8\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes a PrivateLink endpoint.", "operationId": "deletePrivateLinkEndpoint", "security": [ { "bearerToken": [] } ], "summary": "Delete a PrivateLink endpoint", "tags": [ "networking" ], "responses": { "204": { "description": "The PrivateLink endpoint was deleted.", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID the PrivateLink endpoint belongs to.", "in": "query", "required": true, "schema": { "type": "string", "description": "The project ID the PrivateLink endpoint belongs to.", "example": "prj_a1b2c3d4e5f6g7h8" } }, { "name": "endpointId", "description": "The unique identifier of the PrivateLink endpoint.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the PrivateLink endpoint.", "example": "ple_a1b2c3d4e5f6g7h8" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deletePrivateLinkEndpoint", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.deletePrivateLinkEndpoint({\n projectId: \"prj_a1b2c3d4e5f6g7h8\",\n endpointId: \"ple_a1b2c3d4e5f6g7h8\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Updates a PrivateLink endpoint (name, privateDns).", "operationId": "updatePrivateLinkEndpoint", "security": [ { "bearerToken": [] } ], "summary": "Update a PrivateLink endpoint", "tags": [ "networking" ], "responses": { "200": { "description": "The updated PrivateLink endpoint.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PrivateLinkEndpoint" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID the PrivateLink endpoint belongs to.", "in": "query", "required": true, "schema": { "type": "string", "description": "The project ID the PrivateLink endpoint belongs to.", "example": "prj_a1b2c3d4e5f6g7h8" } }, { "name": "endpointId", "description": "The unique identifier of the PrivateLink endpoint.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the PrivateLink endpoint.", "example": "ple_a1b2c3d4e5f6g7h8" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "A new name for the PrivateLink endpoint. When omitted, the current name is kept.", "example": "payments-db", "maxLength": 255 }, "enablePrivateDns": { "type": "boolean", "description": "When `true`, resolves the endpoint service through its private DNS names, which are then returned in `privateDnsNames`. When `false`, clears them. When omitted, the current setting is kept. At least one of `name` or `enablePrivateDns` must be provided.", "example": false } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updatePrivateLinkEndpoint", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.updatePrivateLinkEndpoint({\n projectId: \"prj_a1b2c3d4e5f6g7h8\",\n endpointId: \"ple_a1b2c3d4e5f6g7h8\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"payments-db\",\n enablePrivateDns: false,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/connect/connectors": { "get": { "description": "List connectors that belong to a team.", "operationId": "listConnectors", "security": [ { "bearerToken": [] } ], "summary": "List connectors", "tags": [ "connect" ], "responses": { "200": { "description": "A page of connectors.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnectorList" } } } }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "limit", "description": "Maximum number of connectors to return. Defaults to 20.", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Maximum number of connectors to return. Defaults to 20." } }, { "name": "cursor", "description": "Cursor from `pagination.next` on the previous response.", "in": "query", "schema": { "type": "string", "description": "Cursor from `pagination.next` on the previous response." } }, { "name": "projectId", "description": "Return only connectors connected to this project.", "in": "query", "schema": { "type": "string", "description": "Return only connectors connected to this project." } }, { "name": "search", "description": "Search connector names, UIDs, and services.", "in": "query", "schema": { "type": "string", "maxLength": 100, "description": "Search connector names, UIDs, and services." } }, { "name": "type", "description": "Comma-separated connector types: `slack`, `discord`, `github`, `linear`, `linq`, `salesforce`, `sendblue`, `snowflake`, `snowflake-wif`, `microsoft-entra`, `api-key`, `photon`, `oauth`, or `custom`.", "in": "query", "schema": { "type": "string", "description": "Comma-separated connector types: `slack`, `discord`, `github`, `linear`, `linq`, `salesforce`, `sendblue`, `snowflake`, `snowflake-wif`, `microsoft-entra`, `api-key`, `photon`, `oauth`, or `custom`." } }, { "name": "service", "description": "Comma-separated provider or service identifiers.", "in": "query", "schema": { "type": "string", "description": "Comma-separated provider or service identifiers." } }, { "name": "sort", "description": "Sort by name in ascending order, or by creation or update time in descending order.", "in": "query", "schema": { "type": "string", "enum": [ "name", "createdAt", "updatedAt" ], "description": "Sort by name in ascending order, or by creation or update time in descending order." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listConnectors", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.listConnectors({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/connect/connectors/{connector}": { "get": { "description": "Get the connector by ID. Accepts a dashboard/team requester or a deployment's project OIDC token; project requesters may only read connectors linked to their project and environment.", "operationId": "getConnector", "security": [ { "bearerToken": [] } ], "summary": "Get a connector", "tags": [ "connect" ], "responses": { "200": { "description": "The connector.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnector" } } } }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getConnector", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.getConnector({\n connector: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a connector, its project connections, and its installation records.", "operationId": "deleteConnector", "security": [ { "bearerToken": [] } ], "summary": "Delete a connector", "tags": [ "connect" ], "responses": { "204": { "description": "The connector, its project connections, and its installation records were deleted." }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "409": { "description": "The request conflicts with the current resource state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "502": { "description": "A dependency returned an invalid or unsuccessful response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteConnector", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.connect.deleteConnector({\n connector: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/connect/connectors": { "post": { "description": "Create a connector and optionally link it to a project. Use `type` with complete provider data, or use `service` with `connectionMethod` so Connect can supply the type, endpoints, templates, and defaults.", "operationId": "createConnector", "security": [ { "bearerToken": [] } ], "summary": "Create a connector", "tags": [ "connect" ], "responses": { "201": { "description": "The connector was created.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnectorCreateResult" } } } }, "400": { "description": "One of the provided values in the request body is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "409": { "description": "The request conflicts with the current resource state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "500": { "description": "An internal error occurred.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "502": { "description": "A dependency returned an invalid or unsuccessful response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectCreateConnectorRequest" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createConnector", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.createConnector({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/connect/connectors/{connector}": { "patch": { "description": "Update a connector and return the connector with any service-side update signals that the caller must handle.", "operationId": "updateConnector", "security": [ { "bearerToken": [] } ], "summary": "Update a connector", "tags": [ "connect" ], "responses": { "200": { "description": "The updated connector and any required service-side follow-up signals.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnectorUpdateResult" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "409": { "description": "The request conflicts with the current resource state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "502": { "description": "A dependency returned an invalid or unsuccessful response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectUpdateConnectorRequest" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateConnector", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.updateConnector({\n connector: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n connectUpdateConnectorRequest: {},\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/connect/connectors/{connector}/trigger-destinations": { "patch": { "description": "Replace the full set of destinations that receive trigger requests for a connector.", "operationId": "replaceConnectorTriggerDestinations", "security": [ { "bearerToken": [] } ], "summary": "Update connector trigger destinations", "tags": [ "connect" ], "responses": { "200": { "description": "The connector with its replaced trigger destinations.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnector" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectReplaceTriggerDestinationsRequest" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "replaceConnectorTriggerDestinations", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.replaceConnectorTriggerDestinations({\n connector: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n connectReplaceTriggerDestinationsRequest: {\n destinations: [],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/connect/connectors/{connector}/projects": { "get": { "description": "List the projects connected to a connector and the environments where each connection is available.", "operationId": "listConnectorProjectConnections", "security": [ { "bearerToken": [] } ], "summary": "List projects for a connector", "tags": [ "connect" ], "responses": { "200": { "description": "A page of project connections for the connector.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectConnectorProjectConnectionList" } } } }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "422": { "description": "The request cannot be completed in the current state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "name": "limit", "description": "Maximum number of project connections to return. Defaults to 50.", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Maximum number of project connections to return. Defaults to 50." } }, { "name": "cursor", "description": "Cursor from `pagination.next` on the previous response.", "in": "query", "required": false, "schema": { "type": "string", "description": "Cursor from `pagination.next` on the previous response." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listConnectorProjectConnections", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.listConnectorProjectConnections({\n connector: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/connect/connectors/{connector}/projects/{projectId}": { "get": { "description": "Get the configuration that connects a connector to a project.", "operationId": "getConnectorProjectConnection", "security": [ { "bearerToken": [] } ], "summary": "Get a connector project connection", "tags": [ "connect" ], "responses": { "200": { "description": "The connector project connection.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectProjectConnection" } } } }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "name": "projectId", "description": "Vercel project ID.", "in": "path", "required": true, "schema": { "type": "string", "description": "Vercel project ID." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getConnectorProjectConnection", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.getConnectorProjectConnection({\n connector: \"\",\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Connect a connector to a project, or replace the environments on an existing project connection.", "operationId": "upsertConnectorProjectConnection", "security": [ { "bearerToken": [] } ], "summary": "Create or update a connector project connection", "tags": [ "connect" ], "responses": { "200": { "description": "The connector project connection was created or updated.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectProjectConnection" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "name": "projectId", "description": "Vercel project ID.", "in": "path", "required": true, "schema": { "type": "string", "description": "Vercel project ID." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectUpsertProjectConnectionRequest" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "upsertConnectorProjectConnection", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.upsertConnectorProjectConnection({\n connector: \"\",\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n connectUpsertProjectConnectionRequest: {\n environments: [\n \"\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Disconnect a connector from a project.", "operationId": "deleteConnectorProjectConnection", "security": [ { "bearerToken": [] } ], "summary": "Disconnect a connector from a project", "tags": [ "connect" ], "responses": { "204": { "description": "The connector was disconnected from the project." }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "connector", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`.", "in": "path", "required": true, "schema": { "type": "string", "description": "Stable connector ID or URL-encoded team-scoped UID. Examples: `scl_abc123` or `slack%2Fmy-bot`." } }, { "name": "projectId", "description": "Vercel project ID.", "in": "path", "required": true, "schema": { "type": "string", "description": "Vercel project ID." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteConnectorProjectConnection", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.connect.deleteConnectorProjectConnection({\n connector: \"\",\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v2/connect/projects/{projectId}/connectors": { "get": { "description": "List the connectors connected to a project and the environments where each connection is available.", "operationId": "listProjectConnectorConnections", "security": [ { "bearerToken": [] } ], "summary": "List connectors for a project", "tags": [ "connect" ], "responses": { "200": { "description": "A page of connector connections for the project.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectProjectConnectorConnectionList" } } } }, "400": { "description": "One of the provided values in the request query is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "404": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } }, "410": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnectError" } } } } }, "parameters": [ { "name": "projectId", "description": "Vercel project ID.", "in": "path", "required": true, "schema": { "type": "string", "description": "Vercel project ID." } }, { "name": "limit", "description": "Maximum number of connector connections to return. Defaults to 50.", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Maximum number of connector connections to return. Defaults to 50." } }, { "name": "cursor", "description": "Cursor from `pagination.next` on the previous response.", "in": "query", "required": false, "schema": { "type": "string", "description": "Cursor from `pagination.next` on the previous response." } }, { "description": "The team ID that scopes the request. Do not send it with slug. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The team slug that scopes the request. Do not send it with teamId. If both are omitted, Vercel uses the team associated with the token or the authenticated user's default team. The request returns 401 if no team can be selected.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listProjectConnectorConnections", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.connect.listProjectConnectorConnections({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/connect/token/{connector}": { "post": { "description": "Get an access token for a connector identified by the path parameter and scoped to the requester.", "operationId": "getConnectorToken", "security": [ { "bearerToken": [] } ], "summary": "Get a Connect token", "tags": [ "connect" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "authorizationId": { "type": "string", "description": "Stable id correlating all tokens (including refreshes) back to the original authorization." }, "claims": { "additionalProperties": true, "type": "object", "description": "Claims extracted from the provider's tokens per the connector's `ForwardedClaims` allow-list. Currently sourced from the OIDC id_token only." }, "connector": { "properties": { "id": { "type": "string" }, "type": { "type": "string" }, "uid": { "type": "string" } }, "required": [ "id", "type", "uid" ], "type": "object" }, "expiresAt": { "type": "number" }, "externalSubject": { "type": "string" }, "installationId": { "type": "string" }, "metadata": { "additionalProperties": true, "type": "object", "description": "Driver-specific metadata (e.g., botUserId for Slack)." }, "name": { "type": "string" }, "tenantId": { "type": "string" }, "token": { "type": "string" }, "tokenGroupId": { "type": "string", "description": "Stable id that groups all tokens with the same parameters across refreshes." }, "tokenId": { "type": "string" } }, "required": [ "connector", "expiresAt", "token", "tokenId" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "connector", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "anyOf": [ { "title": "type:app", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "app" ] } }, "additionalProperties": true }, { "title": "type:user", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "user" ] }, "id": { "type": "string" }, "issuer": { "type": "string" } }, "additionalProperties": true }, { "title": "type:jwt-bearer", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "jwt-bearer" ] }, "sub": { "type": "string" }, "iss": { "type": "string" }, "aud": { "type": "string" }, "additionalClaims": { "type": "object", "additionalProperties": true } }, "additionalProperties": true }, { "title": "type:token", "type": "object", "required": [ "type", "token" ], "properties": { "type": { "type": "string", "enum": [ "token" ] }, "token": { "type": "string" } }, "additionalProperties": false }, { "title": "type:other", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string" } }, "not": { "properties": { "type": { "type": "string", "enum": [ "token" ] } }, "required": [ "type" ] }, "additionalProperties": true } ] }, "installationId": { "type": "string" }, "audience": { "type": "array", "items": { "type": "string" } }, "scopes": { "type": "array", "items": { "type": "string" } }, "resources": { "type": "array", "items": { "type": "string" } }, "authorizationDetails": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" } }, "additionalProperties": true } }, "validityBufferMs": { "type": "number" } } } } } } } }, "/v1/connect/authorize/{connector}": { "post": { "description": "Create an authorization request for a connector and return the URL and verifier details needed to complete the flow.", "operationId": "createConnectorAuthorizationRequest", "security": [ { "bearerToken": [] } ], "summary": "Create a Connect authorization request", "tags": [ "connect" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "connector": { "properties": { "displayName": { "type": "string", "description": "Provider-facing display name when the connector type exposes one, falling back to the stored connector name." }, "id": { "type": "string", "description": "Client id (e.g. `scl_…`)." }, "name": { "type": "string", "description": "The connector's own name: the operator-given client name, falling back to the client type's name for legacy rows without one." }, "service": { "type": "string", "description": "Resolved service id when known (e.g. `salesforce`), following the `stored.service ?? typeDef.service ?? stored.type` convention." }, "serviceName": { "type": "string", "description": "Curated display name of the resolved service (e.g. \"Salesforce\"), present when the service is a known service. Suited for end-user surfaces like \"Sign in with {serviceName}\"." }, "type": { "type": "string", "description": "Client type (e.g. `oauth`, `salesforce`)." }, "uid": { "type": "string", "description": "Client uid (e.g. `salesforce/my-org`)." } }, "required": [ "displayName", "id", "name", "type", "uid" ], "type": "object" }, "deviceCode": { "type": "string" }, "expiresAt": { "type": "number" }, "request": { "type": "string" }, "url": { "type": "string" }, "verifier": { "type": "string" } }, "required": [ "connector", "expiresAt", "request", "url", "verifier" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "connector", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "anyOf": [ { "title": "type:app", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "app" ] } }, "additionalProperties": true }, { "title": "type:user", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "user" ] }, "id": { "type": "string" }, "issuer": { "type": "string" } }, "additionalProperties": true }, { "title": "type:jwt-bearer", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "jwt-bearer" ] }, "sub": { "type": "string" }, "iss": { "type": "string" }, "aud": { "type": "string" }, "additionalClaims": { "type": "object", "additionalProperties": true } }, "additionalProperties": true }, { "title": "type:token", "type": "object", "required": [ "type", "token" ], "properties": { "type": { "type": "string", "enum": [ "token" ] }, "token": { "type": "string" } }, "additionalProperties": false }, { "title": "type:other", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string" } }, "not": { "properties": { "type": { "type": "string", "enum": [ "token" ] } }, "required": [ "type" ] }, "additionalProperties": true } ] }, "installationId": { "type": "string" }, "audience": { "type": "array", "items": { "type": "string" } }, "scopes": { "type": "array", "items": { "type": "string" } }, "resources": { "type": "array", "items": { "type": "string" } }, "authorizationDetails": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" } }, "additionalProperties": true } }, "validityBufferMs": { "type": "number" }, "returnUrl": { "type": "string" }, "webhook": { "type": "string" }, "prompt": { "type": "string" }, "deviceCode": { "type": "boolean" }, "expiresInMs": { "type": "number" }, "additionalParams": { "type": "object", "additionalProperties": { "type": "string" } } } } } } } } }, "/v3/deployments/{idOrUrl}/events": { "get": { "description": "Get the build logs of a deployment by deployment ID and build ID. It can work as an infinite stream of logs or as a JSON endpoint depending on the input parameters.", "operationId": "getDeploymentEvents", "security": [ { "bearerToken": [] } ], "summary": "Get deployment events", "tags": [ "deployments" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "array", "items": { "oneOf": [ { "properties": { "created": { "type": "number" }, "payload": { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "proxy": { "properties": { "cacheId": { "type": "string" }, "clientIp": { "type": "string" }, "host": { "type": "string" }, "lambdaRegion": { "type": "string" }, "method": { "type": "string" }, "path": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "referer": { "type": "string" }, "region": { "type": "string" }, "responseByteSize": { "type": "number" }, "scheme": { "type": "string" }, "statusCode": { "type": "number" }, "timestamp": { "type": "number" }, "userAgent": { "items": { "type": "string" }, "type": "array" }, "vercelCache": { "type": "string", "enum": [ "BYPASS", "HIT", "MISS", "PRERENDER", "REVALIDATED", "STALE" ] }, "vercelId": { "type": "string" }, "wafAction": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit" ] }, "wafRuleId": { "type": "string" } }, "required": [ "host", "method", "timestamp" ], "type": "object" }, "requestId": { "type": "string" }, "serial": { "type": "string" }, "statusCode": { "type": "number" }, "text": { "type": "string" } }, "required": [ "date", "deploymentId", "id", "serial" ], "type": "object" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "payload", "type" ], "type": "object" }, { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "level": { "type": "string", "enum": [ "error", "warning" ] }, "serial": { "type": "string" }, "text": { "type": "string" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "date", "deploymentId", "id", "info", "serial", "type" ], "type": "object" }, { "oneOf": [ { "properties": { "created": { "type": "number" }, "payload": { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "proxy": { "properties": { "cacheId": { "type": "string" }, "clientIp": { "type": "string" }, "host": { "type": "string" }, "lambdaRegion": { "type": "string" }, "method": { "type": "string" }, "path": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "referer": { "type": "string" }, "region": { "type": "string" }, "responseByteSize": { "type": "number" }, "scheme": { "type": "string" }, "statusCode": { "type": "number" }, "timestamp": { "type": "number" }, "userAgent": { "items": { "type": "string" }, "type": "array" }, "vercelCache": { "type": "string", "enum": [ "BYPASS", "HIT", "MISS", "PRERENDER", "REVALIDATED", "STALE" ] }, "vercelId": { "type": "string" }, "wafAction": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit" ] }, "wafRuleId": { "type": "string" } }, "required": [ "host", "method", "timestamp" ], "type": "object" }, "requestId": { "type": "string" }, "serial": { "type": "string" }, "statusCode": { "type": "number" }, "text": { "type": "string" } }, "required": [ "date", "deploymentId", "id", "serial" ], "type": "object" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "payload", "type" ], "type": "object" }, { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "level": { "type": "string", "enum": [ "error", "warning" ] }, "serial": { "type": "string" }, "text": { "type": "string" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "date", "deploymentId", "id", "info", "serial", "type" ], "type": "object" }, { "properties": { "date": { "type": "number" }, "deploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "alias-assigned" ] }, "alias": { "items": { "type": "string" }, "type": "array" }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "alias", "aliasError", "aliasWarning", "date", "deploymentId", "type" ], "type": "object" } ] } ], "nullable": true }, "nullable": true } }, "application/stream+json": { "schema": { "oneOf": [ { "properties": { "created": { "type": "number" }, "payload": { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "proxy": { "properties": { "cacheId": { "type": "string" }, "clientIp": { "type": "string" }, "host": { "type": "string" }, "lambdaRegion": { "type": "string" }, "method": { "type": "string" }, "path": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "referer": { "type": "string" }, "region": { "type": "string" }, "responseByteSize": { "type": "number" }, "scheme": { "type": "string" }, "statusCode": { "type": "number" }, "timestamp": { "type": "number" }, "userAgent": { "items": { "type": "string" }, "type": "array" }, "vercelCache": { "type": "string", "enum": [ "BYPASS", "HIT", "MISS", "PRERENDER", "REVALIDATED", "STALE" ] }, "vercelId": { "type": "string" }, "wafAction": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit" ] }, "wafRuleId": { "type": "string" } }, "required": [ "host", "method", "timestamp" ], "type": "object" }, "requestId": { "type": "string" }, "serial": { "type": "string" }, "statusCode": { "type": "number" }, "text": { "type": "string" } }, "required": [ "date", "deploymentId", "id", "serial" ], "type": "object" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "payload", "type" ], "type": "object" }, { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "level": { "type": "string", "enum": [ "error", "warning" ] }, "serial": { "type": "string" }, "text": { "type": "string" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "date", "deploymentId", "id", "info", "serial", "type" ], "type": "object" }, { "oneOf": [ { "properties": { "created": { "type": "number" }, "payload": { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "proxy": { "properties": { "cacheId": { "type": "string" }, "clientIp": { "type": "string" }, "host": { "type": "string" }, "lambdaRegion": { "type": "string" }, "method": { "type": "string" }, "path": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "referer": { "type": "string" }, "region": { "type": "string" }, "responseByteSize": { "type": "number" }, "scheme": { "type": "string" }, "statusCode": { "type": "number" }, "timestamp": { "type": "number" }, "userAgent": { "items": { "type": "string" }, "type": "array" }, "vercelCache": { "type": "string", "enum": [ "BYPASS", "HIT", "MISS", "PRERENDER", "REVALIDATED", "STALE" ] }, "vercelId": { "type": "string" }, "wafAction": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit" ] }, "wafRuleId": { "type": "string" } }, "required": [ "host", "method", "timestamp" ], "type": "object" }, "requestId": { "type": "string" }, "serial": { "type": "string" }, "statusCode": { "type": "number" }, "text": { "type": "string" } }, "required": [ "date", "deploymentId", "id", "serial" ], "type": "object" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "payload", "type" ], "type": "object" }, { "properties": { "created": { "type": "number" }, "date": { "type": "number" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "info": { "properties": { "entrypoint": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "readyState": { "type": "string" }, "serviceName": { "type": "string" }, "step": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "level": { "type": "string", "enum": [ "error", "warning" ] }, "serial": { "type": "string" }, "text": { "type": "string" }, "type": { "type": "string", "enum": [ "command", "delimiter", "deployment-state", "edge-function-invocation", "exit", "fatal", "metric", "middleware", "middleware-invocation", "report", "stderr", "stdout" ] } }, "required": [ "created", "date", "deploymentId", "id", "info", "serial", "type" ], "type": "object" }, { "properties": { "date": { "type": "number" }, "deploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "alias-assigned" ] }, "alias": { "items": { "type": "string" }, "type": "array" }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "alias", "aliasError", "aliasWarning", "date", "deploymentId", "type" ], "type": "object" } ] } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrUrl", "description": "The unique identifier or hostname of the deployment.", "in": "path", "required": true, "schema": { "type": "string", "example": "dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd", "description": "The unique identifier or hostname of the deployment." } }, { "name": "direction", "description": "Order of the returned events based on the timestamp.", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "backward", "forward" ], "default": "forward", "example": "backward", "description": "Order of the returned events based on the timestamp." } }, { "name": "follow", "description": "When enabled, this endpoint will return live events as they happen.", "in": "query", "required": false, "schema": { "type": "number", "enum": [ 0, 1 ], "example": 1, "description": "When enabled, this endpoint will return live events as they happen." } }, { "name": "limit", "description": "Maximum number of events to return. Provide `-1` to return all available logs.", "in": "query", "required": false, "schema": { "type": "number", "example": 100, "description": "Maximum number of events to return. Provide `-1` to return all available logs." } }, { "name": "name", "description": "Deployment build ID.", "in": "query", "required": false, "schema": { "type": "string", "example": "bld_cotnkcr76", "description": "Deployment build ID." } }, { "name": "since", "description": "Timestamp for when build logs should be pulled from.", "in": "query", "required": false, "schema": { "type": "number", "example": 1540095775941, "description": "Timestamp for when build logs should be pulled from." } }, { "name": "until", "description": "Timestamp for when the build logs should be pulled up until.", "in": "query", "required": false, "schema": { "type": "number", "example": 1540106318643, "description": "Timestamp for when the build logs should be pulled up until." } }, { "name": "statusCode", "description": "HTTP status code range to filter events by.", "in": "query", "required": false, "schema": { "example": "5xx", "description": "HTTP status code range to filter events by.", "oneOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "delimiter", "in": "query", "required": false, "schema": { "type": "number", "enum": [ 0, 1 ], "example": 1 } }, { "name": "builds", "in": "query", "required": false, "schema": { "type": "number", "enum": [ 0, 1 ], "example": 1 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeploymentEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.getDeploymentEvents({\n idOrUrl: \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n direction: \"backward\",\n follow: 1,\n limit: 100,\n name: \"bld_cotnkcr76\",\n since: 1540095775941,\n until: 1540106318643,\n statusCode: \"5xx\",\n delimiter: 1,\n builds: 1,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getDeploymentEvents", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.GetDeploymentEvents(ctx, operations.GetDeploymentEventsRequest{\n IDOrURL: \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n Direction: operations.DirectionBackward.ToPointer(),\n Follow: vercel.Float64(1),\n Limit: vercel.Float64(100),\n Name: vercel.String(\"bld_cotnkcr76\"),\n Since: vercel.Float64(1540095775941),\n Until: vercel.Float64(1540106318643),\n StatusCode: vercel.Pointer(operations.CreateStatusCodeStr(\n \"5xx\",\n )),\n Delimiter: vercel.Float64(1),\n Builds: vercel.Float64(1),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}": { "patch": { "description": "Updates the deployment integration action for the specified integration installation", "operationId": "update-integration-deployment-action", "security": [ { "bearerToken": [] } ], "summary": "Update deployment integration action", "tags": [ "deployments", "integrations" ], "responses": { "202": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "action", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "enum": [ "running", "succeeded", "failed" ] }, "statusText": { "type": "string" }, "statusUrl": { "type": "string", "format": "uri", "pattern": "^https?://|^sso:" }, "outcomes": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "kind": { "type": "string" }, "secrets": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "additionalProperties": false } } }, "required": [ "kind", "secrets" ], "additionalProperties": false } ] } } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "update-integration-deployment-action", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.deployments.updateIntegrationDeploymentAction({\n deploymentId: \"\",\n integrationConfigurationId: \"\",\n resourceId: \"\",\n action: \"\",\n });\n\n\n}\n\nrun();" }, { "lang": "typescript", "label": "update-integration-deployment-action", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.integrations.updateIntegrationDeploymentAction({\n deploymentId: \"\",\n integrationConfigurationId: \"\",\n resourceId: \"\",\n action: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v13/deployments/{idOrUrl}": { "get": { "description": "Retrieves information for a deployment either by supplying its ID (`id` property) or Hostname (`url` property). Additional details will be included when the authenticated user or team is an owner of the deployment.", "operationId": "getDeployment", "security": [ { "bearerToken": [] } ], "summary": "Get a deployment by ID or URL", "tags": [ "deployments" ], "responses": { "200": { "description": "Returns a reduced view of the deployment with public information only. Private fields are omitted when the requester is not the deployment owner.\nReturns the deployment object for the authenticated owner, including private fields such as environment variables, build log URLs, and internal metadata.\nReturns the reduced deployment view for anonymous (`vcn_`) callers. Pool-team details are withheld.", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "errorCode": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null } }, "required": [ "aliasAssigned", "id", "readyState" ], "type": "object", "description": "Returns the reduced deployment view for anonymous (`vcn_`) callers. Pool-team details are withheld." }, { "properties": { "alias": { "items": { "type": "string" }, "type": "array", "description": "A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation", "example": [] }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ], "description": "A boolean that will be true when the aliases from the alias property were assigned successfully", "example": true }, "aliasAssignedAt": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasFinal": { "nullable": true, "type": "string" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "alwaysRefuseToBuild": { "type": "boolean", "enum": [ false, true ] }, "atproto": { "oneOf": [ { "properties": { "enabled": { "type": "boolean", "enum": [ false ] } }, "required": [ "enabled" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ true ] }, "subscription": { "properties": { "collections": { "items": { "type": "string" }, "type": "array" }, "dids": { "items": { "type": "string" }, "type": "array" }, "kinds": { "items": { "type": "string", "enum": [ "account", "commit", "identity", "sync" ] }, "type": "array" }, "path": { "type": "string" } }, "required": [ "collections", "path" ], "type": "object" } }, "required": [ "enabled", "subscription" ], "type": "object" } ] }, "attribution": { "properties": { "commitMeta": { "properties": { "email": { "type": "string", "description": "Email from git commit author" }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Whether the commit was signed/verified (GitHub only, others return undefined)" }, "name": { "type": "string", "description": "Name from git commit author" } }, "type": "object", "description": "Commit metadata from the git commit author" }, "gitUser": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "login": { "type": "string", "description": "Git provider username/login" }, "provider": { "type": "string", "description": "The git provider (github, gitlab, bitbucket)" }, "type": { "type": "string", "description": "User type" } }, "required": [ "id", "login" ], "type": "object", "description": "Git provider user associated with the commit author email (only set if resolved)" }, "vercelUser": { "properties": { "id": { "type": "string", "description": "Vercel user ID" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Team roles at time of deployment" }, "username": { "type": "string", "description": "Vercel username" } }, "required": [ "id", "username" ], "type": "object", "description": "Vercel user linked to the git provider account (only set if resolved)" } }, "type": "object", "description": "Attribution metadata for the deployment, linking commit author to git and Vercel users. Only populated when the `enable-deployment-attribution` flag is enabled." }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ], "description": "applies to custom domains only, defaults to `true`" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "bootedAt": { "type": "number" }, "build": { "properties": { "env": { "items": { "type": "string" }, "type": "array" } }, "required": [ "env" ], "type": "object" }, "buildArtifactUrls": { "items": { "type": "string" }, "type": "array" }, "buildContainerFinishedAt": { "type": "number", "description": "Since April 2025 it necessary for On-Demand Concurrency Minutes calculation" }, "buildErrorAt": { "type": "number" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "buildSkipped": { "type": "boolean", "enum": [ false, true ] }, "canceledAt": { "type": "number" }, "checks": { "properties": { "deployment-alias": { "properties": { "completedAt": { "type": "number" }, "startedAt": { "type": "number" }, "state": { "type": "string", "enum": [ "failed", "pending", "succeeded" ] } }, "required": [ "startedAt", "state" ], "type": "object", "description": "Condensed check data. Retrieve individual check and check run data using api-checks v2 routes." } }, "required": [ "deployment-alias" ], "type": "object" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "config": { "properties": { "functionMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionTimeout": { "nullable": true, "type": "number" }, "functionType": { "type": "string", "enum": [ "fluid", "standard" ] }, "isUsingActiveCPU": { "type": "boolean", "enum": [ false, true ] }, "resourceConfig": { "properties": { "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ], "description": "Build resource configuration snapshot for this deployment." } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "elasticConcurrency": { "type": "string", "enum": [ "PROJECT_SETTING", "SKIP_QUEUE", "TEAM_SETTING" ], "description": "When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues" }, "buildMachine": { "properties": { "purchaseType": { "nullable": true, "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo", null ], "description": "Machine type that was used for the build." } }, "type": "object" } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "secureComputeFallbackRegion": { "nullable": true, "type": "string" }, "secureComputePrimaryRegion": { "nullable": true, "type": "string" }, "version": { "type": "number" } }, "required": [ "functionMemoryType", "functionTimeout", "functionType", "secureComputeFallbackRegion", "secureComputePrimaryRegion" ], "type": "object", "description": "Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "createdIn": { "type": "string" }, "creator": { "properties": { "avatar": { "type": "string", "description": "The avatar of the user that created the deployment" }, "type": { "type": "string", "enum": [ "app", "integration", "system", "user" ], "description": "Principal type of the deployment creator." }, "uid": { "type": "string", "description": "Stable creator id across principal types (user id, app id, integration configuration id, or `system`).", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "The username of the user that created the deployment", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information about the deployment creator" }, "crons": { "items": { "properties": { "path": { "type": "string" }, "schedule": { "type": "string" } }, "required": [ "path", "schedule" ], "type": "object" }, "type": "array" }, "customEnvironment": { "oneOf": [ { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." }, { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." } ] }, "defaultRoute": { "type": "string", "description": "Computed field that is only available for deployments with a microfrontend configuration." }, "deletedAt": { "nullable": true, "type": "number", "description": "A number containing the date when the deployment was deleted at milliseconds", "example": 1540257589405 }, "env": { "items": { "type": "string" }, "type": "array" }, "errorCode": { "type": "string" }, "errorLink": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "errorStep": { "type": "string" }, "flags": { "oneOf": [ { "properties": { "definitions": { "additionalProperties": { "properties": { "description": { "type": "string" }, "options": { "items": { "properties": { "label": { "type": "string" }, "value": { "$ref": "#/components/schemas/FlagJSONValue" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "url": { "type": "string" } }, "type": "object" }, "type": "object" } }, "required": [ "definitions" ], "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, { "items": { "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, "type": "array", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." } ] }, "functions": { "nullable": true, "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "gitRepo": { "nullable": true, "oneOf": [ { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "namespace": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "number" }, "type": { "type": "string", "enum": [ "gitlab" ] }, "url": { "type": "string" } }, "required": [ "defaultBranch", "name", "namespace", "ownerType", "path", "private", "projectId", "type", "url" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "repoId", "repoOwnerId", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repoUuid": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repoUuid", "slug", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug." }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repo", "repoId", "type" ], "type": "object" } ] }, "gitSource": { "oneOf": [ { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "repoId", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "projectId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "repoUuid", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] } }, "required": [ "owner", "slug", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug." }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "gitUrl": { "type": "string" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "gitUrl", "ref", "sha", "type" ], "type": "object", "description": "Allows custom git sources (local folder mounted to the container) in test mode" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "number" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "ref", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "ref", "repoUuid", "sha", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "org", "ref", "repo", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "owner", "ref", "repo", "repoId", "sha", "type" ], "type": "object" } ] }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "images": { "properties": { "contentDispositionType": { "type": "string", "enum": [ "attachment", "inline" ] }, "contentSecurityPolicy": { "type": "string" }, "dangerouslyAllowSVG": { "type": "boolean", "enum": [ false, true ] }, "domains": { "items": { "type": "string" }, "type": "array" }, "formats": { "items": { "type": "string", "enum": [ "image/avif", "image/webp" ] }, "type": "array" }, "localPatterns": { "items": { "properties": { "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "type": "object" }, "type": "array" }, "minimumCacheTTL": { "type": "number" }, "qualities": { "items": { "type": "number" }, "type": "array" }, "remotePatterns": { "items": { "properties": { "hostname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains." }, "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "port": { "type": "string", "description": "Can be literal port such as `8080` or empty string meaning no port." }, "protocol": { "type": "string", "enum": [ "http", "https" ], "description": "Must be `http` or `https`." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "required": [ "hostname" ], "type": "object" }, "type": "array" }, "sizes": { "items": { "type": "number" }, "type": "array" } }, "type": "object" }, "initReadyAt": { "type": "number" }, "inspectorUrl": { "nullable": true, "type": "string" }, "integrations": { "properties": { "claimedAt": { "type": "number" }, "completedAt": { "type": "number" }, "skippedAt": { "type": "number" }, "skippedBy": { "type": "string" }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "error", "pending", "ready", "skipped", "timeout" ] } }, "required": [ "startedAt", "status" ], "type": "object" }, "isFirstBranchDeployment": { "type": "boolean", "enum": [ false, true ] }, "isInConcurrentBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "isInstantStatic": { "type": "boolean", "enum": [ false, true ], "description": "Whether this deployment completed through the instant static fast path." }, "isInSystemBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "lambdas": { "items": { "properties": { "createdAt": { "type": "number" }, "entrypoint": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "readyState": { "type": "string", "enum": [ "BUILDING", "ERROR", "INITIALIZING", "READY" ] }, "readyStateAt": { "type": "number" }, "output": { "items": { "properties": { "functionName": { "type": "string" }, "path": { "type": "string" } }, "required": [ "functionName", "path" ], "type": "object" }, "type": "array" } }, "required": [ "id", "output" ], "type": "object", "description": "A partial representation of a Build used by the deployment endpoint." }, "type": "array" }, "manualProvisioning": { "properties": { "completedAt": { "type": "number", "description": "Timestamp when manual provisioning completed" }, "state": { "type": "string", "enum": [ "COMPLETE", "PENDING", "TIMEOUT" ], "description": "Current provisioning state" } }, "required": [ "state" ], "type": "object", "description": "Present when deployment was created with manual provisioning enabled, either explicitly or via the experimental BYOC git flow. The deployment stays in INITIALIZING until /continue is called." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "microfrontends": { "oneOf": [ { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] } }, "required": [ "defaultAppProjectName", "groupIds" ], "type": "object" }, { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "mfeConfigUploadState": { "type": "string", "enum": [ "no_config", "success", "waiting_on_build" ], "description": "The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create." } }, "required": [ "defaultAppProjectName", "groupIds", "isDefaultApp" ], "type": "object" } ] }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ], "description": "If set it overrides the `projectSettings.nodeVersion` for this deployment." }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "oomReport": { "type": "string", "enum": [ "out-of-memory" ] }, "originCacheRegion": { "type": "string" }, "ownerId": { "type": "string" }, "passiveConnectConfigurationId": { "type": "string", "description": "Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)" }, "passiveRegions": { "items": { "type": "string" }, "type": "array", "description": "Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "platform": { "properties": { "creator": { "properties": { "avatar": { "type": "string", "description": "URL of the platform user's avatar image." }, "name": { "type": "string", "description": "Display name of the platform user." } }, "required": [ "name" ], "type": "object", "description": "The user on the external platform who triggered the deployment." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Arbitrary key-value metadata provided by the platform." }, "origin": { "properties": { "type": { "type": "string", "enum": [ "id", "url" ], "description": "Whether the value is an opaque identifier or a URL." }, "value": { "type": "string", "description": "The identifier or URL pointing to the originating entity." } }, "required": [ "type", "value" ], "type": "object", "description": "Reference back to the entity on the platform that initiated the deployment." }, "source": { "properties": { "name": { "type": "string", "description": "Display name of the platform." } }, "required": [ "name" ], "type": "object", "description": "The external platform that created the deployment (e.g. its display name)." } }, "required": [ "creator", "origin", "source" ], "type": "object", "description": "Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)" }, "prebuilt": { "type": "boolean", "enum": [ false, true ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "project": { "properties": { "framework": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object", "description": "The public project information associated with the deployment." }, "projectId": { "type": "string" }, "projectSettings": { "properties": { "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "devCommand": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "installCommand": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "outputDirectory": { "nullable": true, "type": "string" }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "type": "object" }, "public": { "type": "boolean", "enum": [ false, true ], "description": "A boolean representing if the deployment is public or not. By default this is `false`", "example": false }, "ready": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateReason": { "type": "string" }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ], "description": "Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic" }, "regions": { "items": { "type": "string" }, "type": "array", "description": "The regions the deployment exists in", "example": [ "sfo1" ] }, "resourceConfig": { "properties": { "buildMachine": { "properties": { "cores": { "type": "number", "description": "Number of cores the build machine ran with. Set at dispatch time once the build lands on a hive." }, "defaultPurchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard" ], "description": "The default plan type for the build machine — what the customer is *paying* for on their plan. For most customers, this is standard, but some customers have an entitlement for enhanced builds." }, "machineSelectionType": { "type": "string", "enum": [ "elastic", "fixed" ], "description": "Whether the build ran on a fixed or elastic machine. Used to drive billing for the build." }, "memory": { "type": "number", "description": "Memory, in MiB, the build machine ran with. Set at dispatch time once the build lands on a hive." }, "purchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ], "description": "Machine type which was purchased/selected for this build. `basic` is the 2vCPU tier, recorded on the deployment so the build pipeline can detect a basic build without consulting the project." }, "selectionSource": { "type": "string", "enum": [ "deployment-override", "elastic-algorithm", "plan-default", "project-setting", "team-entitlement", "team-setting" ], "description": "The setting which selected the build machine when the deployment was created. Frozen here so later project or team changes do not rewrite its history." } }, "type": "object", "description": "Build machine configuration recorded for this deployment's build. See {@link DeploymentBuildMachine}. Distinct from the team/user `resourceConfig.buildMachine`, which only carries `default`." } }, "type": "object" }, "routes": { "nullable": true, "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" }, { "properties": { "continue": { "type": "boolean", "enum": [ false, true ] }, "middleware": { "type": "number", "enum": [ 0 ] }, "src": { "type": "string" } }, "required": [ "continue", "middleware", "src" ], "type": "object" } ] }, "type": "array" }, "seatBlock": { "properties": { "blockCode": { "type": "string", "enum": [ "COMMIT_AUTHOR_REQUIRED", "TEAM_ACCESS_REQUIRED" ], "description": "The NSNB decision code for the seat block. TODO: We should consolidate block types." }, "gitProvider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ], "description": "The git provider type associated with gitUserId." }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Determines if the user was verified during the block. In the git integration case, the commit sender was the author." }, "userId": { "type": "string", "description": "The blocked vercel user ID." } }, "required": [ "blockCode" ], "type": "object", "description": "NSNB Blocked metadata" }, "services": { "items": { "oneOf": [ { "properties": { "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "entrypoint": { "type": "string" }, "env": { "additionalProperties": { "properties": { "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service-ref" ] } }, "required": [ "service", "type" ], "type": "object" }, "type": "object" }, "framework": { "type": "string" }, "group": { "type": "string" }, "handlerFunction": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "preDeployCommand": { "type": "string" }, "routePrefix": { "type": "string" }, "routePrefixSource": { "type": "string", "enum": [ "configured", "generated" ] }, "runtime": { "type": "string" }, "schedule": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "schema": { "type": "string", "enum": [ "experimentalServices" ] }, "subdomain": { "type": "string" }, "topics": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "properties": { "initialDelaySeconds": { "type": "number" }, "retryAfterSeconds": { "type": "number" }, "topic": { "type": "string" } }, "required": [ "topic" ], "type": "object" }, "type": "array" } ] }, "trigger": { "type": "string", "enum": [ "queue", "schedule", "workflow" ] }, "type": { "type": "string", "enum": [ "cron", "job", "web", "worker" ] }, "workspace": { "type": "string" } }, "required": [ "builder", "name", "schema", "type", "workspace" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, { "properties": { "bindings": { "items": { "properties": { "env": { "type": "string", "description": "Environment variable name that will store the generated value" }, "format": { "type": "string", "enum": [ "url" ], "description": "Generated value shape, must be `\"url\"`." }, "service": { "type": "string", "description": "Target service name from `services`." }, "type": { "type": "string", "enum": [ "service" ], "description": "If present, must be `\"service\"` for Service-to-Service HTTP bindings." } }, "required": [ "env", "format", "service" ], "type": "object", "description": "Caller-side bindings to other services." }, "type": "array", "description": "Caller-side bindings to other services." }, "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object", "description": "Builder selected by the resolver." }, "cleanUrls": { "type": "boolean", "enum": [ false, true ] }, "command": { "items": { "type": "string" }, "type": "array", "description": "Command override for `runtime: \"container\"` services." }, "devCommand": { "type": "string" }, "entrypoint": { "type": "string", "description": "Resolved entrypoint, relative to the service root." }, "framework": { "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Function configuration scoped to this service." }, "type": "object", "description": "Function configuration scoped to this service." }, "headers": { "items": { "properties": { "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "items": { "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "required": [ "key", "value" ], "type": "object" }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "source": { "type": "string" } }, "required": [ "headers", "source" ], "type": "object" }, "type": "array" }, "ignoreCommand": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "outputDirectory": { "type": "string" }, "redirects": { "items": { "properties": { "destination": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "rewrites": { "items": { "properties": { "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" }, "transforms": { "items": { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "root": { "type": "string", "description": "Path to the service root, relative to the project root." }, "routes": { "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" } ] }, "type": "array" }, "runtime": { "type": "string" }, "schema": { "type": "string", "enum": [ "experimentalServicesV2" ] }, "trailingSlash": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "builder", "name", "root", "schema" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." } ] }, "type": "array", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, "softDeletedByRetention": { "type": "boolean", "enum": [ false, true ], "description": "flag to indicate if the deployment was deleted by retention policy", "example": "true" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "status": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "team": { "properties": { "avatar": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object", "description": "The team that owns the deployment if any" }, "ttyBuildLogs": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "undeletedAt": { "type": "number", "description": "A number containing the date when the deployment was undeleted at milliseconds", "example": 1540257589405 }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" }, "userAliases": { "items": { "type": "string" }, "type": "array", "description": "An array of domains that were provided by the user when creating the Deployment.", "example": [ "sub1.example.com", "sub2.example.com" ] }, "userConfiguredDeploymentId": { "type": "string", "description": "Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.", "example": "abc123" }, "version": { "type": "number", "enum": [ 2 ], "description": "The platform version that was used to create the deployment.", "example": 2 } }, "required": [ "aliasAssigned", "bootedAt", "build", "buildSkipped", "buildingAt", "createdAt", "createdIn", "creator", "env", "id", "inspectorUrl", "isInConcurrentBuildsQueue", "isInSystemBuildsQueue", "meta", "name", "ownerId", "plan", "projectId", "projectSettings", "public", "readyState", "regions", "routes", "status", "type", "url", "version" ], "type": "object", "description": "Returns the deployment object for the authenticated owner, including private fields such as environment variables, build log URLs, and internal metadata." }, { "properties": { "alias": { "items": { "type": "string" }, "type": "array", "description": "A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation", "example": [] }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ], "description": "A boolean that will be true when the aliases from the alias property were assigned successfully", "example": true }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasFinal": { "nullable": true, "type": "string" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ], "description": "applies to custom domains only, defaults to `true`" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "bootedAt": { "type": "number" }, "buildContainerFinishedAt": { "type": "number", "description": "Since April 2025 it necessary for On-Demand Concurrency Minutes calculation" }, "buildErrorAt": { "type": "number" }, "buildingAt": { "type": "number" }, "buildSkipped": { "type": "boolean", "enum": [ false, true ] }, "canceledAt": { "type": "number" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "creator": { "properties": { "avatar": { "type": "string", "description": "The avatar of the user that created the deployment" }, "type": { "type": "string", "enum": [ "app", "integration", "system", "user" ], "description": "Principal type of the deployment creator." }, "uid": { "type": "string", "description": "Stable creator id across principal types (user id, app id, integration configuration id, or `system`).", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "The username of the user that created the deployment", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information about the deployment creator" }, "customEnvironment": { "oneOf": [ { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." }, { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." } ] }, "defaultRoute": { "type": "string", "description": "Computed field that is only available for deployments with a microfrontend configuration." }, "deletedAt": { "nullable": true, "type": "number", "description": "A number containing the date when the deployment was deleted at milliseconds", "example": 1540257589405 }, "errorCode": { "type": "string" }, "errorLink": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "errorStep": { "type": "string" }, "gitSource": { "oneOf": [ { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "repoId", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "projectId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "repoUuid", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] } }, "required": [ "owner", "slug", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug." }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "gitUrl": { "type": "string" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "gitUrl", "ref", "sha", "type" ], "type": "object", "description": "Allows custom git sources (local folder mounted to the container) in test mode" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "number" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "ref", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "ref", "repoUuid", "sha", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "org", "ref", "repo", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "owner", "ref", "repo", "repoId", "sha", "type" ], "type": "object" } ] }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "initReadyAt": { "type": "number" }, "isFirstBranchDeployment": { "type": "boolean", "enum": [ false, true ] }, "lambdas": { "items": { "properties": { "createdAt": { "type": "number" }, "entrypoint": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "readyState": { "type": "string", "enum": [ "BUILDING", "ERROR", "INITIALIZING", "READY" ] }, "readyStateAt": { "type": "number" }, "output": { "items": { "properties": { "functionName": { "type": "string" }, "path": { "type": "string" } }, "required": [ "functionName", "path" ], "type": "object" }, "type": "array" } }, "required": [ "id", "output" ], "type": "object", "description": "A partial representation of a Build used by the deployment endpoint." }, "type": "array" }, "manualProvisioning": { "properties": { "completedAt": { "type": "number", "description": "Timestamp when manual provisioning completed" }, "state": { "type": "string", "enum": [ "COMPLETE", "PENDING", "TIMEOUT" ], "description": "Current provisioning state" } }, "required": [ "state" ], "type": "object", "description": "Present when deployment was created with manual provisioning enabled, either explicitly or via the experimental BYOC git flow. The deployment stays in INITIALIZING until /continue is called." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ], "description": "If set it overrides the `projectSettings.nodeVersion` for this deployment." }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "oomReport": { "type": "string", "enum": [ "out-of-memory" ] }, "originCacheRegion": { "type": "string" }, "passiveRegions": { "items": { "type": "string" }, "type": "array", "description": "Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service" }, "prebuilt": { "type": "boolean", "enum": [ false, true ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "project": { "properties": { "framework": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object", "description": "The public project information associated with the deployment." }, "public": { "type": "boolean", "enum": [ false, true ], "description": "A boolean representing if the deployment is public or not. By default this is `false`", "example": false }, "ready": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateReason": { "type": "string" }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ], "description": "Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic" }, "regions": { "items": { "type": "string" }, "type": "array", "description": "The regions the deployment exists in", "example": [ "sfo1" ] }, "softDeletedByRetention": { "type": "boolean", "enum": [ false, true ], "description": "flag to indicate if the deployment was deleted by retention policy", "example": "true" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "status": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "team": { "properties": { "avatar": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object", "description": "The team that owns the deployment if any" }, "ttyBuildLogs": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "undeletedAt": { "type": "number", "description": "A number containing the date when the deployment was undeleted at milliseconds", "example": 1540257589405 }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" }, "userAliases": { "items": { "type": "string" }, "type": "array", "description": "An array of domains that were provided by the user when creating the Deployment.", "example": [ "sub1.example.com", "sub2.example.com" ] }, "userConfiguredDeploymentId": { "type": "string", "description": "Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.", "example": "abc123" }, "version": { "type": "number", "enum": [ 2 ], "description": "The platform version that was used to create the deployment.", "example": 2 } }, "required": [ "aliasAssigned", "bootedAt", "buildSkipped", "buildingAt", "createdAt", "creator", "id", "meta", "name", "public", "readyState", "regions", "status", "type", "url", "version" ], "type": "object", "description": "Returns a reduced view of the deployment with public information only. Private fields are omitted when the requester is not the deployment owner." } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found" }, "410": { "description": "" }, "429": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "inspect", "get" ] }, "parameters": [ { "name": "idOrUrl", "description": "The unique identifier or hostname of the deployment.", "in": "path", "required": true, "schema": { "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ", "description": "The unique identifier or hostname of the deployment.", "type": "string" } }, { "name": "withGitRepoInfo", "description": "When `true`, the response includes the `gitSource` object with the commit SHA, branch name, and connected repository metadata. Defaults to `false`.", "in": "query", "required": false, "schema": { "description": "When `true`, the response includes the `gitSource` object with the commit SHA, branch name, and connected repository metadata. Defaults to `false`.", "type": "string", "example": "true" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeployment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.getDeployment({\n idOrUrl: \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\",\n withGitRepoInfo: \"true\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getDeployment", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.GetDeployment(ctx, \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\", vercel.String(\"true\"), nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v13/deployments": { "post": { "description": "Creates a new deployment for the authenticated team or user. For non-git deployments, upload files first via the file upload API, then reference them here by SHA — or inline small files directly in the request body. To redeploy an existing deployment, provide its `deploymentId`; all settings are inherited unless explicitly overridden. The deployment begins building immediately and transitions through `QUEUED` → `INITIALIZING` → `BUILDING` before reaching `READY` or `ERROR`.", "operationId": "createDeployment", "security": [ { "bearerToken": [] } ], "summary": "Create a new deployment", "tags": [ "deployments" ], "responses": { "200": { "description": "Returns the newly created deployment object. Poll `readyState` to track build progress. See https://vercel.com/docs/deployments/deployment-states for possible states.\nReturns the reduced deployment view for anonymous (`vcn_`) callers. Pool-team details are withheld.", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "errorCode": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null } }, "required": [ "aliasAssigned", "id", "readyState" ], "type": "object", "description": "Returns the reduced deployment view for anonymous (`vcn_`) callers. Pool-team details are withheld." }, { "properties": { "alias": { "items": { "type": "string" }, "type": "array", "description": "A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation", "example": [] }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ], "description": "A boolean that will be true when the aliases from the alias property were assigned successfully", "example": true }, "aliasAssignedAt": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasFinal": { "nullable": true, "type": "string" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "alwaysRefuseToBuild": { "type": "boolean", "enum": [ false, true ] }, "atproto": { "oneOf": [ { "properties": { "enabled": { "type": "boolean", "enum": [ false ] } }, "required": [ "enabled" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ true ] }, "subscription": { "properties": { "collections": { "items": { "type": "string" }, "type": "array" }, "dids": { "items": { "type": "string" }, "type": "array" }, "kinds": { "items": { "type": "string", "enum": [ "account", "commit", "identity", "sync" ] }, "type": "array" }, "path": { "type": "string" } }, "required": [ "collections", "path" ], "type": "object" } }, "required": [ "enabled", "subscription" ], "type": "object" } ] }, "attribution": { "properties": { "commitMeta": { "properties": { "email": { "type": "string", "description": "Email from git commit author" }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Whether the commit was signed/verified (GitHub only, others return undefined)" }, "name": { "type": "string", "description": "Name from git commit author" } }, "type": "object", "description": "Commit metadata from the git commit author" }, "gitUser": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "login": { "type": "string", "description": "Git provider username/login" }, "provider": { "type": "string", "description": "The git provider (github, gitlab, bitbucket)" }, "type": { "type": "string", "description": "User type" } }, "required": [ "id", "login" ], "type": "object", "description": "Git provider user associated with the commit author email (only set if resolved)" }, "vercelUser": { "properties": { "id": { "type": "string", "description": "Vercel user ID" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Team roles at time of deployment" }, "username": { "type": "string", "description": "Vercel username" } }, "required": [ "id", "username" ], "type": "object", "description": "Vercel user linked to the git provider account (only set if resolved)" } }, "type": "object", "description": "Attribution metadata for the deployment, linking commit author to git and Vercel users. Only populated when the `enable-deployment-attribution` flag is enabled." }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ], "description": "applies to custom domains only, defaults to `true`" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "bootedAt": { "type": "number" }, "build": { "properties": { "env": { "items": { "type": "string" }, "type": "array" } }, "required": [ "env" ], "type": "object" }, "buildArtifactUrls": { "items": { "type": "string" }, "type": "array" }, "buildContainerFinishedAt": { "type": "number", "description": "Since April 2025 it necessary for On-Demand Concurrency Minutes calculation" }, "buildErrorAt": { "type": "number" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "buildSkipped": { "type": "boolean", "enum": [ false, true ] }, "canceledAt": { "type": "number" }, "checks": { "properties": { "deployment-alias": { "properties": { "completedAt": { "type": "number" }, "startedAt": { "type": "number" }, "state": { "type": "string", "enum": [ "failed", "pending", "succeeded" ] } }, "required": [ "startedAt", "state" ], "type": "object", "description": "Condensed check data. Retrieve individual check and check run data using api-checks v2 routes." } }, "required": [ "deployment-alias" ], "type": "object" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "config": { "properties": { "functionMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionTimeout": { "nullable": true, "type": "number" }, "functionType": { "type": "string", "enum": [ "fluid", "standard" ] }, "isUsingActiveCPU": { "type": "boolean", "enum": [ false, true ] }, "resourceConfig": { "properties": { "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ], "description": "Build resource configuration snapshot for this deployment." } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "elasticConcurrency": { "type": "string", "enum": [ "PROJECT_SETTING", "SKIP_QUEUE", "TEAM_SETTING" ], "description": "When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues" }, "buildMachine": { "properties": { "purchaseType": { "nullable": true, "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo", null ], "description": "Machine type that was used for the build." } }, "type": "object" } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "secureComputeFallbackRegion": { "nullable": true, "type": "string" }, "secureComputePrimaryRegion": { "nullable": true, "type": "string" }, "version": { "type": "number" } }, "required": [ "functionMemoryType", "functionTimeout", "functionType", "secureComputeFallbackRegion", "secureComputePrimaryRegion" ], "type": "object", "description": "Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "createdIn": { "type": "string" }, "creator": { "properties": { "avatar": { "type": "string", "description": "The avatar of the user that created the deployment" }, "type": { "type": "string", "enum": [ "app", "integration", "system", "user" ], "description": "Principal type of the deployment creator." }, "uid": { "type": "string", "description": "Stable creator id across principal types (user id, app id, integration configuration id, or `system`).", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "The username of the user that created the deployment", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information about the deployment creator" }, "crons": { "items": { "properties": { "path": { "type": "string" }, "schedule": { "type": "string" } }, "required": [ "path", "schedule" ], "type": "object" }, "type": "array" }, "customEnvironment": { "oneOf": [ { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." }, { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." } ] }, "defaultRoute": { "type": "string", "description": "Computed field that is only available for deployments with a microfrontend configuration." }, "deletedAt": { "nullable": true, "type": "number", "description": "A number containing the date when the deployment was deleted at milliseconds", "example": 1540257589405 }, "env": { "items": { "type": "string" }, "type": "array" }, "errorCode": { "type": "string" }, "errorLink": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "errorStep": { "type": "string" }, "flags": { "oneOf": [ { "properties": { "definitions": { "additionalProperties": { "properties": { "description": { "type": "string" }, "options": { "items": { "properties": { "label": { "type": "string" }, "value": { "$ref": "#/components/schemas/FlagJSONValue" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "url": { "type": "string" } }, "type": "object" }, "type": "object" } }, "required": [ "definitions" ], "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, { "items": { "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, "type": "array", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." } ] }, "functions": { "nullable": true, "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "gitRepo": { "nullable": true, "oneOf": [ { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "namespace": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "number" }, "type": { "type": "string", "enum": [ "gitlab" ] }, "url": { "type": "string" } }, "required": [ "defaultBranch", "name", "namespace", "ownerType", "path", "private", "projectId", "type", "url" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "repoId", "repoOwnerId", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repoUuid": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repoUuid", "slug", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug." }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repo", "repoId", "type" ], "type": "object" } ] }, "gitSource": { "oneOf": [ { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "repoId", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "projectId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "repoUuid", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] } }, "required": [ "owner", "slug", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug." }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "gitUrl": { "type": "string" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "gitUrl", "ref", "sha", "type" ], "type": "object", "description": "Allows custom git sources (local folder mounted to the container) in test mode" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "number" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "ref", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "ref", "repoUuid", "sha", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "org", "ref", "repo", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "owner", "ref", "repo", "repoId", "sha", "type" ], "type": "object" } ] }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "images": { "properties": { "contentDispositionType": { "type": "string", "enum": [ "attachment", "inline" ] }, "contentSecurityPolicy": { "type": "string" }, "dangerouslyAllowSVG": { "type": "boolean", "enum": [ false, true ] }, "domains": { "items": { "type": "string" }, "type": "array" }, "formats": { "items": { "type": "string", "enum": [ "image/avif", "image/webp" ] }, "type": "array" }, "localPatterns": { "items": { "properties": { "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "type": "object" }, "type": "array" }, "minimumCacheTTL": { "type": "number" }, "qualities": { "items": { "type": "number" }, "type": "array" }, "remotePatterns": { "items": { "properties": { "hostname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains." }, "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "port": { "type": "string", "description": "Can be literal port such as `8080` or empty string meaning no port." }, "protocol": { "type": "string", "enum": [ "http", "https" ], "description": "Must be `http` or `https`." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "required": [ "hostname" ], "type": "object" }, "type": "array" }, "sizes": { "items": { "type": "number" }, "type": "array" } }, "type": "object" }, "initReadyAt": { "type": "number" }, "inspectorUrl": { "nullable": true, "type": "string" }, "integrations": { "properties": { "claimedAt": { "type": "number" }, "completedAt": { "type": "number" }, "skippedAt": { "type": "number" }, "skippedBy": { "type": "string" }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "error", "pending", "ready", "skipped", "timeout" ] } }, "required": [ "startedAt", "status" ], "type": "object" }, "isFirstBranchDeployment": { "type": "boolean", "enum": [ false, true ] }, "isInConcurrentBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "isInstantStatic": { "type": "boolean", "enum": [ false, true ], "description": "Whether this deployment completed through the instant static fast path." }, "isInSystemBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "lambdas": { "items": { "properties": { "createdAt": { "type": "number" }, "entrypoint": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "readyState": { "type": "string", "enum": [ "BUILDING", "ERROR", "INITIALIZING", "READY" ] }, "readyStateAt": { "type": "number" }, "output": { "items": { "properties": { "functionName": { "type": "string" }, "path": { "type": "string" } }, "required": [ "functionName", "path" ], "type": "object" }, "type": "array" } }, "required": [ "id", "output" ], "type": "object", "description": "A partial representation of a Build used by the deployment endpoint." }, "type": "array" }, "manualProvisioning": { "properties": { "completedAt": { "type": "number", "description": "Timestamp when manual provisioning completed" }, "state": { "type": "string", "enum": [ "COMPLETE", "PENDING", "TIMEOUT" ], "description": "Current provisioning state" } }, "required": [ "state" ], "type": "object", "description": "Present when deployment was created with manual provisioning enabled, either explicitly or via the experimental BYOC git flow. The deployment stays in INITIALIZING until /continue is called." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "microfrontends": { "oneOf": [ { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] } }, "required": [ "defaultAppProjectName", "groupIds" ], "type": "object" }, { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "mfeConfigUploadState": { "type": "string", "enum": [ "no_config", "success", "waiting_on_build" ], "description": "The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create." } }, "required": [ "defaultAppProjectName", "groupIds", "isDefaultApp" ], "type": "object" } ] }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ], "description": "If set it overrides the `projectSettings.nodeVersion` for this deployment." }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "oomReport": { "type": "string", "enum": [ "out-of-memory" ] }, "originCacheRegion": { "type": "string" }, "ownerId": { "type": "string" }, "passiveConnectConfigurationId": { "type": "string", "description": "Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)" }, "passiveRegions": { "items": { "type": "string" }, "type": "array", "description": "Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "platform": { "properties": { "creator": { "properties": { "avatar": { "type": "string", "description": "URL of the platform user's avatar image." }, "name": { "type": "string", "description": "Display name of the platform user." } }, "required": [ "name" ], "type": "object", "description": "The user on the external platform who triggered the deployment." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Arbitrary key-value metadata provided by the platform." }, "origin": { "properties": { "type": { "type": "string", "enum": [ "id", "url" ], "description": "Whether the value is an opaque identifier or a URL." }, "value": { "type": "string", "description": "The identifier or URL pointing to the originating entity." } }, "required": [ "type", "value" ], "type": "object", "description": "Reference back to the entity on the platform that initiated the deployment." }, "source": { "properties": { "name": { "type": "string", "description": "Display name of the platform." } }, "required": [ "name" ], "type": "object", "description": "The external platform that created the deployment (e.g. its display name)." } }, "required": [ "creator", "origin", "source" ], "type": "object", "description": "Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)" }, "prebuilt": { "type": "boolean", "enum": [ false, true ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "project": { "properties": { "framework": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object", "description": "The public project information associated with the deployment." }, "projectId": { "type": "string" }, "projectSettings": { "properties": { "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "devCommand": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "installCommand": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "outputDirectory": { "nullable": true, "type": "string" }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "type": "object" }, "public": { "type": "boolean", "enum": [ false, true ], "description": "A boolean representing if the deployment is public or not. By default this is `false`", "example": false }, "ready": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateReason": { "type": "string" }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ], "description": "Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic" }, "regions": { "items": { "type": "string" }, "type": "array", "description": "The regions the deployment exists in", "example": [ "sfo1" ] }, "resourceConfig": { "properties": { "buildMachine": { "properties": { "cores": { "type": "number", "description": "Number of cores the build machine ran with. Set at dispatch time once the build lands on a hive." }, "defaultPurchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard" ], "description": "The default plan type for the build machine — what the customer is *paying* for on their plan. For most customers, this is standard, but some customers have an entitlement for enhanced builds." }, "machineSelectionType": { "type": "string", "enum": [ "elastic", "fixed" ], "description": "Whether the build ran on a fixed or elastic machine. Used to drive billing for the build." }, "memory": { "type": "number", "description": "Memory, in MiB, the build machine ran with. Set at dispatch time once the build lands on a hive." }, "purchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ], "description": "Machine type which was purchased/selected for this build. `basic` is the 2vCPU tier, recorded on the deployment so the build pipeline can detect a basic build without consulting the project." }, "selectionSource": { "type": "string", "enum": [ "deployment-override", "elastic-algorithm", "plan-default", "project-setting", "team-entitlement", "team-setting" ], "description": "The setting which selected the build machine when the deployment was created. Frozen here so later project or team changes do not rewrite its history." } }, "type": "object", "description": "Build machine configuration recorded for this deployment's build. See {@link DeploymentBuildMachine}. Distinct from the team/user `resourceConfig.buildMachine`, which only carries `default`." } }, "type": "object" }, "routes": { "nullable": true, "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" }, { "properties": { "continue": { "type": "boolean", "enum": [ false, true ] }, "middleware": { "type": "number", "enum": [ 0 ] }, "src": { "type": "string" } }, "required": [ "continue", "middleware", "src" ], "type": "object" } ] }, "type": "array" }, "seatBlock": { "properties": { "blockCode": { "type": "string", "enum": [ "COMMIT_AUTHOR_REQUIRED", "TEAM_ACCESS_REQUIRED" ], "description": "The NSNB decision code for the seat block. TODO: We should consolidate block types." }, "gitProvider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ], "description": "The git provider type associated with gitUserId." }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Determines if the user was verified during the block. In the git integration case, the commit sender was the author." }, "userId": { "type": "string", "description": "The blocked vercel user ID." } }, "required": [ "blockCode" ], "type": "object", "description": "NSNB Blocked metadata" }, "services": { "items": { "oneOf": [ { "properties": { "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "entrypoint": { "type": "string" }, "env": { "additionalProperties": { "properties": { "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service-ref" ] } }, "required": [ "service", "type" ], "type": "object" }, "type": "object" }, "framework": { "type": "string" }, "group": { "type": "string" }, "handlerFunction": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "preDeployCommand": { "type": "string" }, "routePrefix": { "type": "string" }, "routePrefixSource": { "type": "string", "enum": [ "configured", "generated" ] }, "runtime": { "type": "string" }, "schedule": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "schema": { "type": "string", "enum": [ "experimentalServices" ] }, "subdomain": { "type": "string" }, "topics": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "properties": { "initialDelaySeconds": { "type": "number" }, "retryAfterSeconds": { "type": "number" }, "topic": { "type": "string" } }, "required": [ "topic" ], "type": "object" }, "type": "array" } ] }, "trigger": { "type": "string", "enum": [ "queue", "schedule", "workflow" ] }, "type": { "type": "string", "enum": [ "cron", "job", "web", "worker" ] }, "workspace": { "type": "string" } }, "required": [ "builder", "name", "schema", "type", "workspace" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, { "properties": { "bindings": { "items": { "properties": { "env": { "type": "string", "description": "Environment variable name that will store the generated value" }, "format": { "type": "string", "enum": [ "url" ], "description": "Generated value shape, must be `\"url\"`." }, "service": { "type": "string", "description": "Target service name from `services`." }, "type": { "type": "string", "enum": [ "service" ], "description": "If present, must be `\"service\"` for Service-to-Service HTTP bindings." } }, "required": [ "env", "format", "service" ], "type": "object", "description": "Caller-side bindings to other services." }, "type": "array", "description": "Caller-side bindings to other services." }, "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object", "description": "Builder selected by the resolver." }, "cleanUrls": { "type": "boolean", "enum": [ false, true ] }, "command": { "items": { "type": "string" }, "type": "array", "description": "Command override for `runtime: \"container\"` services." }, "devCommand": { "type": "string" }, "entrypoint": { "type": "string", "description": "Resolved entrypoint, relative to the service root." }, "framework": { "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Function configuration scoped to this service." }, "type": "object", "description": "Function configuration scoped to this service." }, "headers": { "items": { "properties": { "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "items": { "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "required": [ "key", "value" ], "type": "object" }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "source": { "type": "string" } }, "required": [ "headers", "source" ], "type": "object" }, "type": "array" }, "ignoreCommand": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "outputDirectory": { "type": "string" }, "redirects": { "items": { "properties": { "destination": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "rewrites": { "items": { "properties": { "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" }, "transforms": { "items": { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "root": { "type": "string", "description": "Path to the service root, relative to the project root." }, "routes": { "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" } ] }, "type": "array" }, "runtime": { "type": "string" }, "schema": { "type": "string", "enum": [ "experimentalServicesV2" ] }, "trailingSlash": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "builder", "name", "root", "schema" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." } ] }, "type": "array", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, "softDeletedByRetention": { "type": "boolean", "enum": [ false, true ], "description": "flag to indicate if the deployment was deleted by retention policy", "example": "true" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "status": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "team": { "properties": { "avatar": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object", "description": "The team that owns the deployment if any" }, "ttyBuildLogs": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "undeletedAt": { "type": "number", "description": "A number containing the date when the deployment was undeleted at milliseconds", "example": 1540257589405 }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" }, "userAliases": { "items": { "type": "string" }, "type": "array", "description": "An array of domains that were provided by the user when creating the Deployment.", "example": [ "sub1.example.com", "sub2.example.com" ] }, "userConfiguredDeploymentId": { "type": "string", "description": "Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.", "example": "abc123" }, "version": { "type": "number", "enum": [ 2 ], "description": "The platform version that was used to create the deployment.", "example": 2 } }, "required": [ "aliasAssigned", "bootedAt", "build", "buildSkipped", "buildingAt", "createdAt", "createdIn", "creator", "env", "id", "inspectorUrl", "isInConcurrentBuildsQueue", "isInSystemBuildsQueue", "meta", "name", "ownerId", "plan", "projectId", "projectSettings", "public", "readyState", "regions", "routes", "status", "type", "url", "version" ], "type": "object", "description": "Returns the newly created deployment object. Poll `readyState` to track build progress. See https://vercel.com/docs/deployments/deployment-states for possible states." } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\nDeploying to Serverless Functions to multiple regions requires a plan update" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The deployment project is being transferred" }, "410": { "description": "" }, "426": { "description": "" }, "429": { "description": "" }, "500": { "description": "" }, "503": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "forceNew", "description": "Forces a new deployment even if there is a previous similar deployment. Set to `1` to bypass deployment deduplication and always trigger a fresh build.", "in": "query", "schema": { "description": "Forces a new deployment even if there is a previous similar deployment. Set to `1` to bypass deployment deduplication and always trigger a fresh build.", "enum": [ "0", "1" ], "example": "1" } }, { "name": "skipAutoDetectionConfirmation", "description": "Set to `1` to skip framework auto-detection and proceed without confirmation. By default, if Vercel detects a framework that differs from the project setting, the API returns a `400` asking you to confirm. Use this to suppress that check in automated pipelines.", "in": "query", "schema": { "description": "Set to `1` to skip framework auto-detection and proceed without confirmation. By default, if Vercel detects a framework that differs from the project setting, the API returns a `400` asking you to confirm. Use this to suppress that check in automated pipelines.", "enum": [ "0", "1" ], "example": "1" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { "buildMachine": { "description": "Selects a custom build machine for this deployment without changing project settings.", "enum": [ "turbo" ], "type": "string" }, "customEnvironmentSlugOrId": { "description": "The slug or ID of a custom environment to deploy to, overriding the default target environment. When omitted, the deployment targets the environment inferred from the branch (production or preview).", "type": "string", "example": "staging" }, "deploymentId": { "description": "The ID of an existing deployment to redeploy. All project settings and environment variables are inherited from the original unless explicitly overridden in this request. The redeployment gets a new ID, URL, and build.", "type": "string", "example": "dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6" }, "files": { "description": "The files to include in the deployment. Each entry is either an inlined file (with `data` and `encoding`) or a reference to a previously uploaded file (with `sha` and `size`). Required for non-git deployments. Cannot be used together with `gitSource`.", "items": { "oneOf": [ { "additionalProperties": false, "description": "Used in the case you want to inline a file inside the request", "properties": { "data": { "description": "The file content, it could be either a `base64` (useful for images, etc.) of the files or the plain content for source code", "type": "string" }, "encoding": { "description": "The file content encoding, it could be either a base64 (useful for images, etc.) of the files or the plain text for source code.", "enum": [ "base64", "utf-8" ] }, "file": { "description": "The file name including the whole path", "example": "folder/file.js", "type": "string" } }, "required": [ "file", "data" ], "title": "InlinedFile", "type": "object" }, { "additionalProperties": false, "description": "Used in the case you want to reference a file that was already uploaded", "properties": { "file": { "description": "The file path relative to the project root", "example": "folder/file.js", "type": "string" }, "sha": { "description": "The file contents hashed with SHA1, used to check the integrity", "type": "string" }, "size": { "description": "The file size in bytes", "type": "integer" } }, "required": [ "file" ], "title": "UploadedFile", "type": "object" } ] }, "type": "array" }, "gitAccessToken": { "description": "Available only to Vercel platform accounts. A read-only GitHub access token scoped to the requested repository. Use a token with a lifetime of 24 hours or less that remains valid until source retrieval completes.", "maxLength": 1024, "type": "string", "writeOnly": true }, "gitMetadata": { "description": "Populates initial git metadata for different git providers.", "additionalProperties": false, "type": "object", "properties": { "remoteUrl": { "type": "string", "description": "The git repository's remote origin url", "example": "https://github.com/vercel/next.js" }, "commitAuthorName": { "type": "string", "description": "The name of the author of the commit", "example": "kyliau" }, "commitAuthorEmail": { "type": "string", "description": "The email of the author of the commit", "example": "kyliau@example.com" }, "commitMessage": { "type": "string", "description": "The commit message", "example": "add method to measure Interaction to Next Paint (INP) (#36490)" }, "commitRef": { "type": "string", "description": "The branch on which the commit was made", "example": "main" }, "commitSha": { "type": "string", "description": "The hash of the commit", "example": "dc36199b2234c6586ebe05ec94078a895c707e29" }, "dirty": { "type": "boolean", "description": "Whether or not there have been modifications to the working tree since the latest commit", "example": true }, "ci": { "type": "boolean", "description": "True if process.env.CI was set when deploying", "example": true }, "ciType": { "type": "string", "description": "The type of CI system used", "example": "github-actions" }, "ciGitProviderUsername": { "type": "string", "description": "The username used for the Git Provider (e.g. GitHub) if their CI (e.g. GitHub Actions) was used, if available", "example": "rauchg" }, "ciGitRepoVisibility": { "type": "string", "description": "The visibility of the Git repository if their CI (e.g. GitHub Actions) was used, if available", "example": "private" }, "rootDirectory": { "type": "string", "description": "Path of the deployed directory relative to the detected git repository root. Empty string when deploying from the repository root.", "example": "apps/web" } } }, "gitSource": { "description": "Defines the Git Repository source to be deployed. This property can not be used in combination with `files`.", "anyOf": [ { "properties": { "type": { "enum": [ "vercel" ], "type": "string" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" } }, "required": [ "type", "sha" ], "type": "object" }, { "properties": { "ref": { "type": "string", "example": "main" }, "repoId": { "oneOf": [ { "type": "number" }, { "type": "string" } ], "example": 123456789 }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "github" ], "type": "string" } }, "required": [ "type", "ref", "repoId" ], "type": "object" }, { "properties": { "org": { "type": "string", "example": "vercel" }, "ref": { "type": "string", "example": "main" }, "repo": { "type": "string", "example": "next.js" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "github" ], "type": "string" } }, "required": [ "type", "ref", "org", "repo" ], "type": "object" }, { "properties": { "ref": { "type": "string", "example": "main" }, "repoId": { "oneOf": [ { "type": "number" }, { "type": "string" } ], "example": 123456789 }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "github-limited" ], "type": "string" } }, "required": [ "type", "ref", "repoId" ], "type": "object" }, { "properties": { "org": { "type": "string", "example": "vercel" }, "ref": { "type": "string", "example": "main" }, "repo": { "type": "string", "example": "next.js" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "github-limited" ], "type": "string" } }, "required": [ "type", "ref", "org", "repo" ], "type": "object" }, { "properties": { "projectId": { "oneOf": [ { "type": "number" }, { "type": "string" } ], "example": 987654321 }, "ref": { "type": "string", "example": "main" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "gitlab" ], "type": "string" } }, "required": [ "type", "ref", "projectId" ], "type": "object" }, { "properties": { "ref": { "type": "string", "example": "main" }, "repoUuid": { "type": "string", "example": "123e4567-e89b-12d3-a456-426614174000" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "bitbucket" ], "type": "string" }, "workspaceUuid": { "type": "string", "example": "987e6543-e21b-12d3-a456-426614174000" } }, "required": [ "type", "ref", "repoUuid" ], "type": "object" }, { "properties": { "owner": { "type": "string", "example": "bitbucket_user" }, "ref": { "type": "string", "example": "main" }, "sha": { "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "slug": { "type": "string", "example": "my-awesome-project" }, "type": { "enum": [ "bitbucket" ], "type": "string" } }, "required": [ "type", "ref", "owner", "slug" ], "type": "object" }, { "description": "Deploys from the Cursor Origin repository linked to the target project. The repository ID must match the linked repository; Vercel resolves the owner and repository name from the project link.", "properties": { "owner": { "description": "The Origin workspace slug. Optional because Vercel resolves it from the linked project.", "type": "string", "example": "bitbucket_user" }, "ref": { "description": "The branch or Git reference to deploy.", "type": "string", "example": "main" }, "repo": { "description": "The Origin repository name. Optional because Vercel resolves it from the linked project.", "type": "string", "example": "next.js" }, "repoId": { "description": "The stable Origin repository ID. Read it from the `link.repoId` field returned by the project API.", "type": "string", "example": 123456789 }, "sha": { "description": "The commit SHA to deploy. When omitted, Vercel resolves the latest commit on `ref`.", "type": "string", "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0" }, "type": { "enum": [ "cursor-origin" ], "type": "string" } }, "required": [ "type", "ref", "repoId" ], "type": "object" } ] }, "meta": { "additionalProperties": { "maxLength": 65536, "type": "string" }, "description": "An object containing the deployment's metadata. Multiple key-value pairs can be attached to a deployment. For deployments created with a Cursor Origin `gitSource`, Vercel automatically adds `cursorOriginDeployment`, `cursorOriginCommitSha`, `cursorOriginCommitRef`, `cursorOriginCommitMessage`, `cursorOriginCommitAuthorName`, `cursorOriginCommitAuthorEmail` when available, `cursorOriginOwner`, `cursorOriginRepo`, `cursorOriginRepoId`, and `cursorOriginPrId` for pull request deployments.", "example": { "foo": "bar" }, "maxProperties": 100, "type": "object" }, "monorepoManager": { "description": "The monorepo manager that is being used for this deployment. When `null` is used no monorepo manager is selected", "type": "string", "nullable": true }, "name": { "description": "A string with the project name used in the deployment URL", "example": "my-instant-deployment", "type": "string" }, "project": { "description": "The target project identifier in which the deployment will be created. When defined, this parameter overrides name", "example": "my-deployment-project", "type": "string" }, "projectSettings": { "additionalProperties": false, "description": "Project settings that will be applied to the deployment. It is required for the first deployment of a project and will be saved for any following deployments", "properties": { "buildCommand": { "description": "The build command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true, "example": "next build" }, "commandForIgnoringBuildStep": { "maxLength": 256, "type": "string", "nullable": true }, "devCommand": { "description": "The dev command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "framework": { "description": "The framework that is being used for this project. When `null` is used no framework is selected", "type": "string", "enum": [ null, "services", "container", "blitzjs", "nextjs", "gatsby", "remix", "react-router", "astro", "hexo", "eleventy", "docusaurus-2", "docusaurus", "preact", "solidstart-1", "solidstart", "dojo", "ember", "vue", "scully", "ionic-angular", "angular", "polymer", "svelte", "sveltekit", "sveltekit-1", "ionic-react", "create-react-app", "gridsome", "umijs", "sapper", "saber", "stencil", "nuxtjs", "redwoodjs", "hugo", "jekyll", "brunch", "middleman", "zola", "hydrogen", "vite", "tanstack-start", "tanstack-start-lovable", "vitepress", "vuepress", "parcel", "fastapi", "flask", "fasthtml", "django", "ash", "factory-eve", "eve", "sanity", "sanity-v2", "storybook", "nitro", "hono", "express", "h3", "koa", "nestjs", "elysia", "fastify", "xmcp", "python", "ruby", "rust", "axum", "actix-web", "bun", "node", "go", "mastra" ], "nullable": true }, "installCommand": { "description": "The install command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true, "example": "pnpm install" }, "nodeVersion": { "description": "Override the Node.js version that should be used for this deployment", "enum": [ "24.x", "22.x", "20.x", "18.x", "16.x", "14.x", "12.x", "10.x", "8.10.x" ], "type": "string" }, "outputDirectory": { "description": "The output directory of the project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "rootDirectory": { "description": "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", "maxLength": 256, "type": "string", "nullable": true }, "serverlessFunctionRegion": { "description": "The region to deploy Serverless Functions in this project", "maxLength": 4, "type": "string", "nullable": true }, "skipGitConnectDuringLink": { "description": "Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.", "type": "boolean", "deprecated": true }, "sourceFilesOutsideRootDirectory": { "description": "Indicates if there are source files outside of the root directory, typically used for monorepos", "type": "boolean" } }, "type": "object" }, "target": { "description": "Either not defined, `staging`, `production`, or a custom environment identifier. If `staging`, a staging alias in the format `-.vercel.app` will be assigned. If `production`, any aliases defined in `alias` will be assigned. If omitted, the target will be `preview`.", "type": "string", "example": "production" }, "withLatestCommit": { "description": "When `true` and `deploymentId` is passed in, the sha from the previous deployment's `gitSource` is removed forcing the latest commit to be used.", "type": "boolean" } }, "required": [ "name" ], "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createDeployment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.createDeployment({\n forceNew: \"1\",\n skipAutoDetectionConfirmation: \"1\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n customEnvironmentSlugOrId: \"staging\",\n deploymentId: \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n files: [\n {\n file: \"folder/file.js\",\n },\n ],\n gitMetadata: {\n remoteUrl: \"https://github.com/vercel/next.js\",\n commitAuthorName: \"kyliau\",\n commitAuthorEmail: \"kyliau@example.com\",\n commitMessage: \"add method to measure Interaction to Next Paint (INP) (#36490)\",\n commitRef: \"main\",\n commitSha: \"dc36199b2234c6586ebe05ec94078a895c707e29\",\n dirty: true,\n ci: true,\n ciType: \"github-actions\",\n ciGitProviderUsername: \"rauchg\",\n ciGitRepoVisibility: \"private\",\n rootDirectory: \"apps/web\",\n },\n gitSource: {\n org: \"vercel\",\n ref: \"main\",\n repo: \"next.js\",\n sha: \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\",\n type: \"github\",\n },\n meta: {\n \"foo\": \"bar\",\n },\n name: \"my-instant-deployment\",\n project: \"my-deployment-project\",\n projectSettings: {\n buildCommand: \"next build\",\n installCommand: \"pnpm install\",\n },\n target: \"production\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createDeployment", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.CreateDeployment(ctx, operations.CreateDeploymentRequest{\n RequestBody: &operations.CreateDeploymentRequestBody{\n Files: []operations.Files{\n operations.CreateFilesUploadedFile(\n operations.UploadedFile{\n File: \"folder/file.js\",\n },\n ),\n operations.CreateFilesUploadedFile(\n operations.UploadedFile{\n File: \"folder/file.js\",\n },\n ),\n },\n GitMetadata: &operations.GitMetadata{\n RemoteURL: vercel.String(\"https://github.com/vercel/next.js\"),\n CommitAuthorName: vercel.String(\"kyliau\"),\n CommitMessage: vercel.String(\"add method to measure Interaction to Next Paint (INP) (#36490)\"),\n CommitRef: vercel.String(\"main\"),\n CommitSha: vercel.String(\"dc36199b2234c6586ebe05ec94078a895c707e29\"),\n Dirty: vercel.Bool(true),\n },\n Meta: map[string]string{\n \"foo\": \"bar\",\n },\n Name: \"my-instant-deployment\",\n Project: vercel.String(\"my-deployment-project\"),\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v12/deployments/{id}/cancel": { "patch": { "description": "Cancels a deployment that is currently in progress, stopping the build before it completes. Use this to recover quickly from accidental deploys, wrong-branch pushes, or builds with known errors — without waiting for them to finish. Returns 400 if the deployment is no longer cancelable (already `READY`, `ERROR`, or `CANCELED`). Returns the updated deployment object with `readyState: 'CANCELED'` on success.", "operationId": "cancelDeployment", "security": [ { "bearerToken": [] } ], "summary": "Cancel a deployment", "tags": [ "deployments" ], "responses": { "200": { "description": "Returns the updated deployment object with `readyState` set to `CANCELED`. The build has been stopped and this action is irreversible.", "content": { "application/json": { "schema": { "properties": { "alias": { "items": { "type": "string" }, "type": "array", "description": "A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation", "example": [] }, "aliasAssigned": { "type": "boolean", "enum": [ false, true ], "description": "A boolean that will be true when the aliases from the alias property were assigned successfully", "example": true }, "aliasAssignedAt": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`", "example": null }, "aliasFinal": { "nullable": true, "type": "string" }, "aliasWarning": { "nullable": true, "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "alwaysRefuseToBuild": { "type": "boolean", "enum": [ false, true ] }, "atproto": { "oneOf": [ { "properties": { "enabled": { "type": "boolean", "enum": [ false ] } }, "required": [ "enabled" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ true ] }, "subscription": { "properties": { "collections": { "items": { "type": "string" }, "type": "array" }, "dids": { "items": { "type": "string" }, "type": "array" }, "kinds": { "items": { "type": "string", "enum": [ "account", "commit", "identity", "sync" ] }, "type": "array" }, "path": { "type": "string" } }, "required": [ "collections", "path" ], "type": "object" } }, "required": [ "enabled", "subscription" ], "type": "object" } ] }, "attribution": { "properties": { "commitMeta": { "properties": { "email": { "type": "string", "description": "Email from git commit author" }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Whether the commit was signed/verified (GitHub only, others return undefined)" }, "name": { "type": "string", "description": "Name from git commit author" } }, "type": "object", "description": "Commit metadata from the git commit author" }, "gitUser": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "login": { "type": "string", "description": "Git provider username/login" }, "provider": { "type": "string", "description": "The git provider (github, gitlab, bitbucket)" }, "type": { "type": "string", "description": "User type" } }, "required": [ "id", "login" ], "type": "object", "description": "Git provider user associated with the commit author email (only set if resolved)" }, "vercelUser": { "properties": { "id": { "type": "string", "description": "Vercel user ID" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Team roles at time of deployment" }, "username": { "type": "string", "description": "Vercel username" } }, "required": [ "id", "username" ], "type": "object", "description": "Vercel user linked to the git provider account (only set if resolved)" } }, "type": "object", "description": "Attribution metadata for the deployment, linking commit author to git and Vercel users. Only populated when the `enable-deployment-attribution` flag is enabled." }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ], "description": "applies to custom domains only, defaults to `true`" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "bootedAt": { "type": "number" }, "build": { "properties": { "env": { "items": { "type": "string" }, "type": "array" } }, "required": [ "env" ], "type": "object" }, "buildArtifactUrls": { "items": { "type": "string" }, "type": "array" }, "buildContainerFinishedAt": { "type": "number", "description": "Since April 2025 it necessary for On-Demand Concurrency Minutes calculation" }, "buildErrorAt": { "type": "number" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "buildSkipped": { "type": "boolean", "enum": [ false, true ] }, "canceledAt": { "type": "number" }, "checks": { "properties": { "deployment-alias": { "properties": { "completedAt": { "type": "number" }, "startedAt": { "type": "number" }, "state": { "type": "string", "enum": [ "failed", "pending", "succeeded" ] } }, "required": [ "startedAt", "state" ], "type": "object", "description": "Condensed check data. Retrieve individual check and check run data using api-checks v2 routes." } }, "required": [ "deployment-alias" ], "type": "object" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "config": { "properties": { "functionMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionTimeout": { "nullable": true, "type": "number" }, "functionType": { "type": "string", "enum": [ "fluid", "standard" ] }, "isUsingActiveCPU": { "type": "boolean", "enum": [ false, true ] }, "resourceConfig": { "properties": { "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ], "description": "Build resource configuration snapshot for this deployment." } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "elasticConcurrency": { "type": "string", "enum": [ "PROJECT_SETTING", "SKIP_QUEUE", "TEAM_SETTING" ], "description": "When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues" }, "buildMachine": { "properties": { "purchaseType": { "nullable": true, "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo", null ], "description": "Machine type that was used for the build." } }, "type": "object" } }, "type": "object", "description": "Build resource configuration snapshot for this deployment." }, "secureComputeFallbackRegion": { "nullable": true, "type": "string" }, "secureComputePrimaryRegion": { "nullable": true, "type": "string" }, "version": { "type": "number" } }, "required": [ "functionMemoryType", "functionTimeout", "functionType", "secureComputeFallbackRegion", "secureComputePrimaryRegion" ], "type": "object", "description": "Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "createdIn": { "type": "string" }, "creator": { "properties": { "avatar": { "type": "string", "description": "The avatar of the user that created the deployment" }, "type": { "type": "string", "enum": [ "app", "integration", "system", "user" ], "description": "Principal type of the deployment creator." }, "uid": { "type": "string", "description": "Stable creator id across principal types (user id, app id, integration configuration id, or `system`).", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "The username of the user that created the deployment", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information about the deployment creator" }, "crons": { "items": { "properties": { "path": { "type": "string" }, "schedule": { "type": "string" } }, "required": [ "path", "schedule" ], "type": "object" }, "type": "array" }, "customEnvironment": { "oneOf": [ { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." }, { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "If the deployment was created using a Custom Environment, then this property contains information regarding the environment used." } ] }, "defaultRoute": { "type": "string", "description": "Computed field that is only available for deployments with a microfrontend configuration." }, "deletedAt": { "nullable": true, "type": "number", "description": "A number containing the date when the deployment was deleted at milliseconds", "example": 1540257589405 }, "env": { "items": { "type": "string" }, "type": "array" }, "errorCode": { "type": "string" }, "errorLink": { "type": "string" }, "errorMessage": { "nullable": true, "type": "string" }, "errorStep": { "type": "string" }, "flags": { "oneOf": [ { "properties": { "definitions": { "additionalProperties": { "properties": { "description": { "type": "string" }, "options": { "items": { "properties": { "label": { "type": "string" }, "value": { "$ref": "#/components/schemas/FlagJSONValue" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "url": { "type": "string" } }, "type": "object" }, "type": "object" } }, "required": [ "definitions" ], "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, { "items": { "type": "object", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." }, "type": "array", "description": "Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags." } ] }, "functions": { "nullable": true, "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "gitRepo": { "nullable": true, "oneOf": [ { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "namespace": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "number" }, "type": { "type": "string", "enum": [ "gitlab" ] }, "url": { "type": "string" } }, "required": [ "defaultBranch", "name", "namespace", "ownerType", "path", "private", "projectId", "type", "url" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "repoId", "repoOwnerId", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repoUuid": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repoUuid", "slug", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "org": { "type": "string" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "defaultBranch", "name", "org", "ownerType", "path", "private", "repo", "type" ], "type": "object" }, { "properties": { "defaultBranch": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug." }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "path": { "type": "string" }, "private": { "type": "boolean", "enum": [ false, true ] }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "defaultBranch", "name", "owner", "ownerType", "path", "private", "repo", "repoId", "type" ], "type": "object" } ] }, "gitSource": { "oneOf": [ { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "repoId", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "org", "repo", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "projectId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "repoUuid", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] } }, "required": [ "owner", "slug", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug." }, "prId": { "nullable": true, "type": "number" }, "ref": { "nullable": true, "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "repoId", "type" ], "type": "object" }, { "properties": { "gitUrl": { "type": "string" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "gitUrl", "ref", "sha", "type" ], "type": "object", "description": "Allows custom git sources (local folder mounted to the container) in test mode" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-custom-host" ] } }, "required": [ "host", "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "github-limited" ] } }, "required": [ "ref", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "number" }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "projectId", "ref", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "ref", "repoUuid", "sha", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "type": "number" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "vercel" ] } }, "required": [ "org", "ref", "repo", "sha", "type" ], "type": "object" }, { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin" ] } }, "required": [ "owner", "ref", "repo", "repoId", "sha", "type" ], "type": "object" } ] }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "images": { "properties": { "contentDispositionType": { "type": "string", "enum": [ "attachment", "inline" ] }, "contentSecurityPolicy": { "type": "string" }, "dangerouslyAllowSVG": { "type": "boolean", "enum": [ false, true ] }, "domains": { "items": { "type": "string" }, "type": "array" }, "formats": { "items": { "type": "string", "enum": [ "image/avif", "image/webp" ] }, "type": "array" }, "localPatterns": { "items": { "properties": { "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "type": "object" }, "type": "array" }, "minimumCacheTTL": { "type": "number" }, "qualities": { "items": { "type": "number" }, "type": "array" }, "remotePatterns": { "items": { "properties": { "hostname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains." }, "pathname": { "type": "string", "description": "Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments." }, "port": { "type": "string", "description": "Can be literal port such as `8080` or empty string meaning no port." }, "protocol": { "type": "string", "enum": [ "http", "https" ], "description": "Must be `http` or `https`." }, "search": { "type": "string", "description": "Can be literal query string such as `?v=1` or empty string meaning no query string." } }, "required": [ "hostname" ], "type": "object" }, "type": "array" }, "sizes": { "items": { "type": "number" }, "type": "array" } }, "type": "object" }, "initReadyAt": { "type": "number" }, "inspectorUrl": { "nullable": true, "type": "string" }, "integrations": { "properties": { "claimedAt": { "type": "number" }, "completedAt": { "type": "number" }, "skippedAt": { "type": "number" }, "skippedBy": { "type": "string" }, "startedAt": { "type": "number" }, "status": { "type": "string", "enum": [ "error", "pending", "ready", "skipped", "timeout" ] } }, "required": [ "startedAt", "status" ], "type": "object" }, "isFirstBranchDeployment": { "type": "boolean", "enum": [ false, true ] }, "isInConcurrentBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "isInstantStatic": { "type": "boolean", "enum": [ false, true ], "description": "Whether this deployment completed through the instant static fast path." }, "isInSystemBuildsQueue": { "type": "boolean", "enum": [ false, true ] }, "lambdas": { "items": { "properties": { "createdAt": { "type": "number" }, "entrypoint": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "readyState": { "type": "string", "enum": [ "BUILDING", "ERROR", "INITIALIZING", "READY" ] }, "readyStateAt": { "type": "number" }, "output": { "items": { "properties": { "functionName": { "type": "string" }, "path": { "type": "string" } }, "required": [ "functionName", "path" ], "type": "object" }, "type": "array" } }, "required": [ "id", "output" ], "type": "object", "description": "A partial representation of a Build used by the deployment endpoint." }, "type": "array" }, "manualProvisioning": { "properties": { "completedAt": { "type": "number", "description": "Timestamp when manual provisioning completed" }, "state": { "type": "string", "enum": [ "COMPLETE", "PENDING", "TIMEOUT" ], "description": "Current provisioning state" } }, "required": [ "state" ], "type": "object", "description": "Present when deployment was created with manual provisioning enabled, either explicitly or via the experimental BYOC git flow. The deployment stays in INITIALIZING until /continue is called." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "microfrontends": { "oneOf": [ { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] } }, "required": [ "defaultAppProjectName", "groupIds" ], "type": "object" }, { "properties": { "defaultAppProjectName": { "type": "string", "description": "The project name of the default app of this deployment's microfrontends group." }, "defaultRoute": { "type": "string", "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "The group 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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "mfeConfigUploadState": { "type": "string", "enum": [ "no_config", "success", "waiting_on_build" ], "description": "The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create." } }, "required": [ "defaultAppProjectName", "groupIds", "isDefaultApp" ], "type": "object" } ] }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ], "description": "If set it overrides the `projectSettings.nodeVersion` for this deployment." }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "oomReport": { "type": "string", "enum": [ "out-of-memory" ] }, "originCacheRegion": { "type": "string" }, "ownerId": { "type": "string" }, "passiveConnectConfigurationId": { "type": "string", "description": "Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)" }, "passiveRegions": { "items": { "type": "string" }, "type": "array", "description": "Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "platform": { "properties": { "creator": { "properties": { "avatar": { "type": "string", "description": "URL of the platform user's avatar image." }, "name": { "type": "string", "description": "Display name of the platform user." } }, "required": [ "name" ], "type": "object", "description": "The user on the external platform who triggered the deployment." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Arbitrary key-value metadata provided by the platform." }, "origin": { "properties": { "type": { "type": "string", "enum": [ "id", "url" ], "description": "Whether the value is an opaque identifier or a URL." }, "value": { "type": "string", "description": "The identifier or URL pointing to the originating entity." } }, "required": [ "type", "value" ], "type": "object", "description": "Reference back to the entity on the platform that initiated the deployment." }, "source": { "properties": { "name": { "type": "string", "description": "Display name of the platform." } }, "required": [ "name" ], "type": "object", "description": "The external platform that created the deployment (e.g. its display name)." } }, "required": [ "creator", "origin", "source" ], "type": "object", "description": "Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)" }, "prebuilt": { "type": "boolean", "enum": [ false, true ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "project": { "properties": { "framework": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object", "description": "The public project information associated with the deployment." }, "projectId": { "type": "string" }, "projectSettings": { "properties": { "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "devCommand": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "installCommand": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "outputDirectory": { "nullable": true, "type": "string" }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "type": "object" }, "public": { "type": "boolean", "enum": [ false, true ], "description": "A boolean representing if the deployment is public or not. By default this is `false`", "example": false }, "ready": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateReason": { "type": "string" }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ], "description": "Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic" }, "regions": { "items": { "type": "string" }, "type": "array", "description": "The regions the deployment exists in", "example": [ "sfo1" ] }, "resourceConfig": { "properties": { "buildMachine": { "properties": { "cores": { "type": "number", "description": "Number of cores the build machine ran with. Set at dispatch time once the build lands on a hive." }, "defaultPurchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard" ], "description": "The default plan type for the build machine — what the customer is *paying* for on their plan. For most customers, this is standard, but some customers have an entitlement for enhanced builds." }, "machineSelectionType": { "type": "string", "enum": [ "elastic", "fixed" ], "description": "Whether the build ran on a fixed or elastic machine. Used to drive billing for the build." }, "memory": { "type": "number", "description": "Memory, in MiB, the build machine ran with. Set at dispatch time once the build lands on a hive." }, "purchaseType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ], "description": "Machine type which was purchased/selected for this build. `basic` is the 2vCPU tier, recorded on the deployment so the build pipeline can detect a basic build without consulting the project." }, "selectionSource": { "type": "string", "enum": [ "deployment-override", "elastic-algorithm", "plan-default", "project-setting", "team-entitlement", "team-setting" ], "description": "The setting which selected the build machine when the deployment was created. Frozen here so later project or team changes do not rewrite its history." } }, "type": "object", "description": "Build machine configuration recorded for this deployment's build. See {@link DeploymentBuildMachine}. Distinct from the team/user `resourceConfig.buildMachine`, which only carries `default`." } }, "type": "object" }, "routes": { "nullable": true, "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" }, { "properties": { "continue": { "type": "boolean", "enum": [ false, true ] }, "middleware": { "type": "number", "enum": [ 0 ] }, "src": { "type": "string" } }, "required": [ "continue", "middleware", "src" ], "type": "object" } ] }, "type": "array" }, "seatBlock": { "properties": { "blockCode": { "type": "string", "enum": [ "COMMIT_AUTHOR_REQUIRED", "TEAM_ACCESS_REQUIRED" ], "description": "The NSNB decision code for the seat block. TODO: We should consolidate block types." }, "gitProvider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ], "description": "The git provider type associated with gitUserId." }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Determines if the user was verified during the block. In the git integration case, the commit sender was the author." }, "userId": { "type": "string", "description": "The blocked vercel user ID." } }, "required": [ "blockCode" ], "type": "object", "description": "NSNB Blocked metadata" }, "services": { "items": { "oneOf": [ { "properties": { "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "entrypoint": { "type": "string" }, "env": { "additionalProperties": { "properties": { "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service-ref" ] } }, "required": [ "service", "type" ], "type": "object" }, "type": "object" }, "framework": { "type": "string" }, "group": { "type": "string" }, "handlerFunction": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "preDeployCommand": { "type": "string" }, "routePrefix": { "type": "string" }, "routePrefixSource": { "type": "string", "enum": [ "configured", "generated" ] }, "runtime": { "type": "string" }, "schedule": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "schema": { "type": "string", "enum": [ "experimentalServices" ] }, "subdomain": { "type": "string" }, "topics": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "properties": { "initialDelaySeconds": { "type": "number" }, "retryAfterSeconds": { "type": "number" }, "topic": { "type": "string" } }, "required": [ "topic" ], "type": "object" }, "type": "array" } ] }, "trigger": { "type": "string", "enum": [ "queue", "schedule", "workflow" ] }, "type": { "type": "string", "enum": [ "cron", "job", "web", "worker" ] }, "workspace": { "type": "string" } }, "required": [ "builder", "name", "schema", "type", "workspace" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, { "properties": { "bindings": { "items": { "properties": { "env": { "type": "string", "description": "Environment variable name that will store the generated value" }, "format": { "type": "string", "enum": [ "url" ], "description": "Generated value shape, must be `\"url\"`." }, "service": { "type": "string", "description": "Target service name from `services`." }, "type": { "type": "string", "enum": [ "service" ], "description": "If present, must be `\"service\"` for Service-to-Service HTTP bindings." } }, "required": [ "env", "format", "service" ], "type": "object", "description": "Caller-side bindings to other services." }, "type": "array", "description": "Caller-side bindings to other services." }, "buildCommand": { "type": "string" }, "builder": { "properties": { "config": { "properties": { "buildCommand": { "type": "string" }, "bundle": { "type": "boolean", "enum": [ false, true ] }, "bunVersion": { "type": "string" }, "debug": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "type": "string" }, "excludeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "framework": { "nullable": true, "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "type": "object" }, "helpers": { "type": "boolean", "enum": [ false, true ] }, "import": { "additionalProperties": { "type": "string" }, "type": "object" }, "includeFiles": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "installCommand": { "type": "string" }, "ldsflags": { "type": "string" }, "maxLambdaSize": { "type": "string" }, "middleware": { "type": "boolean", "enum": [ false, true ] }, "middlewareMatcher": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array", "description": "Matcher supplied outside of the middleware source module." } ] }, "middlewareRuntime": { "type": "string", "enum": [ "nodejs" ], "description": "Enforced runtime for explicitly configured Routing Middleware." }, "nodeVersion": { "type": "string" }, "outputDirectory": { "type": "string" }, "projectSettings": { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "framework": { "nullable": true, "type": "string" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "monorepoManager": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string" }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "rust": { "type": "string" }, "serviceName": { "type": "string", "description": "Owning service name; scopes per-function config such as the v2beta consumer." }, "zeroConfig": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object", "description": "Builder selected by the resolver." }, "cleanUrls": { "type": "boolean", "enum": [ false, true ] }, "command": { "items": { "type": "string" }, "type": "array", "description": "Command override for `runtime: \"container\"` services." }, "devCommand": { "type": "string" }, "entrypoint": { "type": "string", "description": "Resolved entrypoint, relative to the service root." }, "framework": { "type": "string" }, "functions": { "additionalProperties": { "properties": { "affinity": { "properties": { "mode": { "type": "string", "enum": [ "strict" ] } }, "required": [ "mode" ], "type": "object" }, "architecture": { "type": "string", "enum": [ "arm64", "x86_64" ] }, "excludeFiles": { "type": "string" }, "experimentalTriggers": { "items": { "oneOf": [ { "properties": { "consumer": { "type": "string", "description": "Name of the consumer group for this trigger (REQUIRED)" }, "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v1beta" ], "description": "Event type - must be \"queue/v1beta\" (REQUIRED)" } }, "required": [ "consumer", "topic", "type" ], "type": "object", "description": "Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name." }, { "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration." }, "maxConcurrency": { "type": "number", "description": "Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "maxDeliveries": { "type": "number", "description": "Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration." }, "retryAfterSeconds": { "type": "number", "description": "Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration." }, "topic": { "type": "string", "description": "Name of the queue topic to consume from (REQUIRED)" }, "type": { "type": "string", "enum": [ "queue/v2beta" ], "description": "Event type - must be \"queue/v2beta\" (REQUIRED)" } }, "required": [ "topic", "type" ], "type": "object", "description": "Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed." }, { "properties": { "type": { "type": "string", "enum": [ "schedule/v1beta" ], "description": "Event type - must be \"schedule/v1beta\" (REQUIRED)" } }, "required": [ "type" ], "type": "object" } ] }, "type": "array" }, "functionFailoverRegions": { "items": { "type": "string" }, "type": "array" }, "includeFiles": { "type": "string" }, "maxConcurrency": { "type": "number" }, "maxDuration": { "oneOf": [ { "type": "number" }, { "type": "string", "enum": [ "max" ] } ] }, "memory": { "type": "number" }, "regions": { "items": { "type": "string" }, "type": "array" }, "runtime": { "type": "string" }, "supportsCancellation": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Function configuration scoped to this service." }, "type": "object", "description": "Function configuration scoped to this service." }, "headers": { "items": { "properties": { "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "items": { "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "required": [ "key", "value" ], "type": "object" }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "source": { "type": "string" } }, "required": [ "headers", "source" ], "type": "object" }, "type": "array" }, "ignoreCommand": { "type": "string" }, "installCommand": { "type": "string" }, "name": { "type": "string" }, "outputDirectory": { "type": "string" }, "redirects": { "items": { "properties": { "destination": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "rewrites": { "items": { "properties": { "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "statusCode": { "type": "number" }, "transforms": { "items": { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "destination", "source" ], "type": "object" }, "type": "array" }, "root": { "type": "string", "description": "Path to the service root, relative to the project root." }, "routes": { "items": { "oneOf": [ { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object" }, { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "error", "filesystem", "hit", "miss", "resource", "rewrite" ] }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "handle" ], "type": "object" } ] }, "type": "array" }, "runtime": { "type": "string" }, "schema": { "type": "string", "enum": [ "experimentalServicesV2" ] }, "trailingSlash": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "builder", "name", "root", "schema" ], "type": "object", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." } ] }, "type": "array", "description": "Services detected during build from vercel.json experimentalServices or auto-detected from project structure. Used to inject service URLs as environment variables at runtime." }, "softDeletedByRetention": { "type": "boolean", "enum": [ false, true ], "description": "flag to indicate if the deployment was deleted by retention policy", "example": "true" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "status": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "team": { "properties": { "avatar": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object", "description": "The team that owns the deployment if any" }, "ttyBuildLogs": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "undeletedAt": { "type": "number", "description": "A number containing the date when the deployment was undeleted at milliseconds", "example": 1540257589405 }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" }, "userAliases": { "items": { "type": "string" }, "type": "array", "description": "An array of domains that were provided by the user when creating the Deployment.", "example": [ "sub1.example.com", "sub2.example.com" ] }, "userConfiguredDeploymentId": { "type": "string", "description": "Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.", "example": "abc123" }, "version": { "type": "number", "enum": [ 2 ], "description": "The platform version that was used to create the deployment.", "example": 2 } }, "required": [ "aliasAssigned", "bootedAt", "build", "buildSkipped", "buildingAt", "createdAt", "createdIn", "creator", "env", "id", "inspectorUrl", "isInConcurrentBuildsQueue", "isInSystemBuildsQueue", "meta", "name", "ownerId", "plan", "projectId", "projectSettings", "public", "readyState", "regions", "routes", "status", "type", "url", "version" ], "type": "object", "description": "Returns the updated deployment object with `readyState` set to `CANCELED`. The build has been stopped and this action is irreversible." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "id", "description": "The unique identifier of the deployment.", "in": "path", "required": true, "schema": { "type": "string", "example": "dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd", "description": "The unique identifier of the deployment." }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "cancelDeployment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.cancelDeployment({\n id: \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "cancelDeployment", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.CancelDeployment(ctx, \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v5/domains/{domain}/records": { "get": { "description": "Retrieves a list of DNS records created for a domain name. By default it returns 20 records if no limit is provided. The rest can be retrieved using the pagination options.", "operationId": "getRecords", "security": [ { "bearerToken": [] } ], "summary": "List existing DNS records", "tags": [ "dns" ], "responses": { "200": { "description": "Successful response retrieving a list of paginated DNS records.", "content": { "application/json": { "schema": { "oneOf": [ { "type": "string" }, { "properties": { "records": { "items": { "properties": { "comment": { "type": "string" }, "created": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "creator": { "type": "string" }, "id": { "type": "string" }, "mxPriority": { "type": "number" }, "name": { "type": "string" }, "priority": { "type": "number" }, "slug": { "type": "string" }, "ttl": { "type": "number" }, "type": { "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "NS", "SRV", "TXT" ] }, "updated": { "nullable": true, "type": "number" }, "updatedAt": { "nullable": true, "type": "number" }, "value": { "type": "string" } }, "required": [ "created", "createdAt", "creator", "id", "name", "slug", "type", "updated", "updatedAt", "value" ], "type": "object" }, "type": "array" } }, "required": [ "records" ], "type": "object" }, { "properties": { "pagination": { "$ref": "#/components/schemas/Pagination" }, "records": { "items": { "properties": { "comment": { "type": "string" }, "created": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "creator": { "type": "string" }, "id": { "type": "string" }, "mxPriority": { "type": "number" }, "name": { "type": "string" }, "priority": { "type": "number" }, "slug": { "type": "string" }, "ttl": { "type": "number" }, "type": { "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "NS", "SRV", "TXT" ] }, "updated": { "nullable": true, "type": "number" }, "updatedAt": { "nullable": true, "type": "number" }, "value": { "type": "string" } }, "required": [ "created", "createdAt", "creator", "id", "name", "slug", "type", "updated", "updatedAt", "value" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "records" ], "type": "object", "description": "Successful response retrieving a list of paginated DNS records." } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "domain", "in": "path", "required": true, "schema": { "type": "string", "example": "example.com" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "limit", "description": "Maximum number of records to list from a request.", "in": "query", "required": false, "schema": { "description": "Maximum number of records to list from a request.", "type": "string", "example": 20 } }, { "name": "since", "description": "Get records created after this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get records created after this JavaScript timestamp.", "type": "string", "example": 1609499532000 } }, { "name": "until", "description": "Get records created before this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get records created before this JavaScript timestamp.", "type": "string", "example": 1612264332000 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRecords", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.dns.getRecords({\n domain: \"example.com\",\n limit: \"20\",\n since: \"1609499532000\",\n until: \"1612264332000\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/domains/{domain}/records": { "post": { "description": "Creates a DNS record for a domain.", "operationId": "createRecord", "security": [ { "bearerToken": [] } ], "summary": "Create a DNS record", "tags": [ "dns" ], "responses": { "200": { "description": "Successful response showing the uid of the newly created DNS record.", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "uid": { "type": "string" }, "updated": { "type": "number" } }, "required": [ "updated" ], "type": "object" }, { "properties": { "uid": { "type": "string", "description": "The id of the newly created DNS record", "example": "rec_V0fra8eEgQwEpFhYG2vTzC3K" } }, "required": [ "uid" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "bodyArguments": [ "name", "type", "value" ] }, "parameters": [ { "name": "domain", "description": "The domain used to create the DNS record.", "in": "path", "required": true, "schema": { "description": "The domain used to create the DNS record.", "type": "string", "example": "example.com" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "required": [ "type" ], "properties": { "type": { "description": "The type of record, it could be one of the valid DNS records.", "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "SRV", "TXT", "NS" ] } }, "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `A`.", "type": "string", "enum": [ "A" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "The record value must be a valid IPv4 address.", "type": "string", "format": "ipv4", "example": "192.0.2.42" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `AAAA`.", "type": "string", "enum": [ "AAAA" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "An AAAA record pointing to an IPv6 address.", "type": "string", "format": "ipv6", "example": "2001:DB8::42" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `ALIAS`.", "type": "string", "enum": [ "ALIAS" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "An ALIAS virtual record pointing to a hostname resolved to an A record on server side.", "type": "string", "example": "cname.vercel-dns.com" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `CAA`.", "type": "string", "enum": [ "CAA" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "A CAA record to specify which Certificate Authorities (CAs) are allowed to issue certificates for the domain.", "type": "string", "example": "0 issue \"letsencrypt.org\"" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "name" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `CNAME`.", "type": "string", "enum": [ "CNAME" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "A CNAME record mapping to another domain name.", "type": "string", "example": "cname.vercel-dns.com" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name", "mxPriority" ], "properties": { "name": { "description": "A subdomain name or an empty string for the root domain.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `MX`.", "type": "string", "enum": [ "MX" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "An MX record specifying the mail server responsible for accepting messages on behalf of the domain name.", "type": "string", "example": "10 mail.example.com." }, "mxPriority": { "type": "number", "minimum": 0, "maximum": 65535, "example": 10 }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "name", "srv" ], "properties": { "type": { "description": "Must be of type `SRV`.", "type": "string", "enum": [ "SRV" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "srv": { "type": "object", "additionalProperties": false, "required": [ "weight", "port", "priority", "target" ], "properties": { "priority": { "anyOf": [ { "type": "number", "minimum": 0, "maximum": 65535, "example": 10 } ], "nullable": true }, "weight": { "anyOf": [ { "type": "number", "minimum": 0, "maximum": 65535, "example": 10 } ], "nullable": true }, "port": { "anyOf": [ { "type": "number", "minimum": 0, "maximum": 65535, "example": 5000 } ], "nullable": true }, "target": { "type": "string", "example": "host.example.com" } } }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "value", "name" ], "properties": { "type": { "description": "Must be of type `TXT`.", "type": "string", "enum": [ "TXT" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "A TXT record containing arbitrary text.", "type": "string", "example": "hello" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "name" ], "properties": { "name": { "description": "A subdomain name.", "type": "string", "example": "subdomain" }, "type": { "description": "Must be of type `NS`.", "type": "string", "enum": [ "NS" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "value": { "description": "An NS domain value.", "type": "string", "example": "ns1.example.com" }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "name", "https" ], "properties": { "type": { "description": "Must be of type `HTTPS`.", "type": "string", "enum": [ "HTTPS" ] }, "ttl": { "description": "The TTL value. Must be a number between 60 and 2147483647. Default value is 60.", "type": "number", "minimum": 60, "maximum": 2.147483647e+09, "example": 60 }, "https": { "type": "object", "additionalProperties": false, "required": [ "priority", "target" ], "properties": { "priority": { "anyOf": [ { "type": "number", "minimum": 0, "maximum": 65535, "example": 10 } ], "nullable": true }, "target": { "type": "string", "example": "host.example.com" }, "params": { "type": "string", "example": "alpn=h2,h3" } } }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } } } ] } } }, "required": true }, "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "createRecord", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.dns.createRecord({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n type: \"NS\",\n ttl: 60,\n srv: {\n priority: 10,\n weight: 10,\n port: 5000,\n target: \"host.example.com\",\n },\n comment: \"used to verify ownership of domain\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createRecord", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.DNS.CreateRecord(ctx, \"example.com\", nil, nil, vercel.Pointer(operations.CreateCreateRecordRequestBodyTen(\n operations.Ten{\n Type: operations.CreateRecordRequestBodyDNSRequest10TypeCname,\n TTL: vercel.Float64(60),\n HTTPS: operations.RequestBodyHTTPS{\n Priority: vercel.Float64(10),\n Target: \"host.example.com\",\n Params: vercel.String(\"alpn=h2,h3\"),\n },\n Comment: vercel.String(\"used to verify ownership of domain\"),\n },\n )))\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/domains/records/{recordId}": { "patch": { "description": "Updates an existing DNS record for a domain name.", "operationId": "updateRecord", "security": [ { "bearerToken": [] } ], "summary": "Update an existing DNS record", "tags": [ "dns" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "comment": { "type": "string" }, "createdAt": { "nullable": true, "type": "number" }, "creator": { "type": "string" }, "domain": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "recordType": { "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "NS", "SRV", "TXT" ] }, "ttl": { "type": "number" }, "type": { "type": "string", "enum": [ "record", "record-sys" ] }, "value": { "type": "string" } }, "required": [ "creator", "domain", "id", "name", "recordType", "type", "value" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "recordId", "description": "The id of the DNS record", "in": "path", "required": true, "schema": { "description": "The id of the DNS record", "example": "rec_2qn7pzrx89yxy34vezpd31y9", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the DNS record", "example": "example-1", "nullable": true }, "value": { "type": "string", "description": "The value of the DNS record", "example": "google.com", "nullable": true }, "type": { "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "SRV", "TXT", "NS", null ], "type": "string", "description": "The type of the DNS record", "example": "A", "maxLength": 255, "nullable": true }, "ttl": { "type": "integer", "description": "The Time to live (TTL) value of the DNS record", "example": "60", "minimum": 60, "maximum": 2.147483647e+09, "nullable": true }, "mxPriority": { "type": "integer", "description": "The MX priority value of the DNS record", "nullable": true }, "srv": { "additionalProperties": false, "required": [ "target", "weight", "port", "priority" ], "properties": { "target": { "type": "string", "description": "", "example": "example2.com.", "maxLength": 255, "nullable": true }, "weight": { "description": "", "type": "integer", "nullable": true }, "port": { "description": "", "type": "integer", "nullable": true }, "priority": { "description": "", "type": "integer", "nullable": true } }, "type": "object", "nullable": true }, "https": { "additionalProperties": false, "required": [ "priority", "target" ], "properties": { "priority": { "description": "", "type": "integer", "nullable": true }, "target": { "type": "string", "description": "", "example": "example2.com.", "maxLength": 255, "nullable": true }, "params": { "description": "", "type": "string", "nullable": true } }, "type": "object", "nullable": true }, "comment": { "type": "string", "description": "A comment to add context on what this DNS record is for", "example": "used to verify ownership of domain", "maxLength": 500 } }, "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateRecord", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.dns.updateRecord({\n recordId: \"rec_2qn7pzrx89yxy34vezpd31y9\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"example-1\",\n value: \"google.com\",\n type: \"A\",\n ttl: 60,\n srv: null,\n https: null,\n comment: \"used to verify ownership of domain\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateRecord", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.DNS.UpdateRecord(ctx, \"rec_2qn7pzrx89yxy34vezpd31y9\", nil, nil, &operations.UpdateRecordRequestBody{\n Name: vercel.String(\"example-1\"),\n Value: vercel.String(\"google.com\"),\n Type: operations.UpdateRecordTypeA.ToPointer(),\n TTL: vercel.Int64(60),\n Srv: &operations.Srv{\n Target: vercel.String(\"example2.com.\"),\n Weight: vercel.Int64(97604),\n Port: vercel.Int64(570172),\n Priority: vercel.Int64(199524),\n },\n HTTPS: &operations.HTTPS{\n Priority: vercel.Int64(35000),\n Target: vercel.String(\"example2.com.\"),\n },\n Comment: vercel.String(\"used to verify ownership of domain\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/domains/{domain}/records": { "put": { "description": "", "operationId": "replaceDomainsByDomainRecords", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "recordIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "recordIds" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "415": { "description": "" } }, "parameters": [ { "name": "domain", "description": "The domain name", "in": "path", "required": true, "schema": { "type": "string", "description": "The domain name", "example": "example.com" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "replaceDomainsByDomainRecords", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.replaceDomainsByDomainRecords({\n domain: \"example.com\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/domains/records/{recordId}": { "get": { "description": "", "operationId": "getDomainsRecordsByRecordId", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "comment": { "type": "string" }, "createdAt": { "nullable": true, "type": "number" }, "creator": { "type": "string" }, "domain": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "recordType": { "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "NS", "SRV", "TXT" ] }, "ttl": { "type": "number" }, "type": { "type": "string", "enum": [ "A", "AAAA", "ALIAS", "CAA", "CNAME", "HTTPS", "MX", "NS", "SRV", "TXT" ] }, "value": { "type": "string" } }, "required": [ "creator", "domain", "id", "name", "recordType", "type", "value" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "recordId", "description": "The unique ID of the DNS record", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique ID of the DNS record" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomainsRecordsByRecordId", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.getDomainsRecordsByRecordId({\n recordId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/domains/{domain}/records/{recordId}": { "delete": { "description": "Removes an existing DNS record from a domain name.", "operationId": "removeRecord", "security": [ { "bearerToken": [] } ], "summary": "Delete a DNS record", "tags": [ "dns" ], "responses": { "200": { "description": "Successful response by removing the specified DNS record.", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "domain", "in": "path", "required": true, "schema": { "type": "string", "example": "example.com" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "recordId", "in": "path", "required": true, "schema": { "type": "string", "example": "rec_V0fra8eEgQwEpFhYG2vTzC3K" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "removeRecord", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.dns.removeRecord({\n domain: \"example.com\",\n recordId: \"rec_V0fra8eEgQwEpFhYG2vTzC3K\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "removeRecord", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.DNS.RemoveRecord(ctx, \"example.com\", \"rec_V0fra8eEgQwEpFhYG2vTzC3K\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/registrar/tlds/supported": { "get": { "tags": [ "domains-registrar" ], "operationId": "getSupportedTlds", "parameters": [ { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "A list of the TLDs supported by Vercel.", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TldName" }, "description": "A list of the TLDs supported by Vercel." } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get a list of TLDs supported by Vercel", "summary": "Get supported TLDs", "x-codeSamples": [ { "lang": "typescript", "label": "getSupportedTlds", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getSupportedTlds({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/tlds/{tld}": { "get": { "tags": [ "domains-registrar" ], "operationId": "getTld", "parameters": [ { "name": "tld", "in": "path", "schema": { "$ref": "#/components/schemas/TldName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "supportedLanguageCodes" ], "properties": { "supportedLanguageCodes": { "type": "object", "properties": {}, "additionalProperties": { "type": "string" }, "description": "The language codes that are supported for the TLD. The key is the language code, and the value is the name of the language." } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get the metadata for a specific TLD.", "summary": "Get TLD", "x-codeSamples": [ { "lang": "typescript", "label": "getTld", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getTld({\n tld: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/tlds/{tld}/price": { "get": { "tags": [ "domains-registrar" ], "operationId": "getTldPrice", "parameters": [ { "name": "tld", "in": "path", "schema": { "$ref": "#/components/schemas/TldName" }, "required": true }, { "name": "years", "in": "query", "schema": { "type": "string", "description": "The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used." }, "required": false, "description": "The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used." }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "years", "purchasePrice", "renewalPrice", "transferPrice" ], "properties": { "years": { "type": "number", "description": "The number of years the returned price is for." }, "purchasePrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "renewalPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "transferPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get price data for a specific TLD. This only reflects base prices for the given TLD. Premium domains may have different prices. Use the [Get price data for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-price-data-for-a-domain) endpoint to get the price data for a specific domain.", "summary": "Get TLD price data", "x-codeSamples": [ { "lang": "typescript", "label": "getTldPrice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getTldPrice({\n tld: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/availability": { "get": { "tags": [ "domains-registrar" ], "operationId": "getDomainAvailability", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "available" ], "properties": { "available": { "type": "boolean" } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "404": { "description": "NotFound", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get availability for a specific domain. If the domain is available, it can be purchased using the [Buy a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-a-domain) endpoint or the [Buy multiple domains](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-multiple-domains) endpoint.", "summary": "Get availability for a domain", "x-codeSamples": [ { "lang": "typescript", "label": "getDomainAvailability", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getDomainAvailability({\n domain: \"hungry-birdbath.info\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/price": { "get": { "tags": [ "domains-registrar" ], "operationId": "getDomainPrice", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "years", "in": "query", "schema": { "type": "string", "description": "The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used." }, "required": false, "description": "The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used." }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "years", "purchasePrice", "renewalPrice", "transferPrice" ], "properties": { "years": { "type": "number" }, "purchasePrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "renewalPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "transferPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BadRequest" }, { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get price data for a specific domain", "summary": "Get price data for a domain", "x-codeSamples": [ { "lang": "typescript", "label": "getDomainPrice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getDomainPrice({\n domain: \"excited-dwell.org\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/price": { "post": { "tags": [ "domains-registrar" ], "operationId": "getBulkPrice", "parameters": [ { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "results" ], "properties": { "results": { "type": "array", "items": { "type": "object", "required": [ "domain", "years", "purchasePrice", "renewalPrice", "transferPrice" ], "properties": { "domain": { "$ref": "#/components/schemas/DomainName" }, "years": { "type": "number" }, "purchasePrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "renewalPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] }, "transferPrice": { "anyOf": [ { "type": "number", "minimum": 0.01 }, { "type": "string" } ] } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BadRequest" }, { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get price data for multiple domains in a single request.", "summary": "Get price data for multiple domains", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "domains" ], "properties": { "domains": { "type": "array", "minItems": 1, "items": { "$ref": "#/components/schemas/DomainName" }, "description": "an array of at most 50 item(s)", "title": "maxItems(50)", "maxItems": 50 }, "years": { "type": "number", "description": "The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used." } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "getBulkPrice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getBulkPrice({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n domains: [\n \"\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/availability": { "post": { "tags": [ "domains-registrar" ], "operationId": "getBulkAvailability", "parameters": [ { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "results" ], "properties": { "results": { "type": "array", "items": { "type": "object", "required": [ "domain", "available" ], "properties": { "domain": { "$ref": "#/components/schemas/DomainName" }, "available": { "type": "boolean" } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get availability for multiple domains. If the domains are available, they can be purchased using the [Buy a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-a-domain) endpoint or the [Buy multiple domains](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-multiple-domains) endpoint.", "summary": "Get availability for multiple domains", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "domains" ], "properties": { "domains": { "type": "array", "minItems": 1, "items": { "$ref": "#/components/schemas/DomainName" }, "description": "an array of at most 50 item(s)", "title": "maxItems(50)", "maxItems": 50 } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "getBulkAvailability", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getBulkAvailability({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n domains: [\n \"\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/search": { "post": { "tags": [ "domains-registrar" ], "operationId": "searchDomains", "parameters": [ { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "results" ], "properties": { "results": { "type": "array", "items": { "anyOf": [ { "type": "object", "required": [ "domain", "available" ], "properties": { "domain": { "$ref": "#/components/schemas/DomainName" }, "available": { "type": "boolean", "enum": [ false ], "description": "`false` means the domain is unavailable or its availability could not be confirmed." } }, "additionalProperties": false }, { "type": "object", "required": [ "domain", "available", "years", "price", "renewalPrice", "premium" ], "properties": { "domain": { "$ref": "#/components/schemas/DomainName" }, "available": { "type": "boolean", "enum": [ true ] }, "years": { "type": "number" }, "price": { "type": "number" }, "renewalPrice": { "type": "number" }, "premium": { "type": "boolean" } }, "additionalProperties": false } ] } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Check registration availability for 1–200 exact domain names, such as `example.com`. Returns results in input order, with registration and renewal prices in USD for available domains. No authentication required.", "summary": "Check domain availability and pricing", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "domains" ], "properties": { "domains": { "type": "array", "minItems": 1, "items": { "$ref": "#/components/schemas/DomainName" }, "description": "an array of at most 200 item(s)", "title": "maxItems(200)", "maxItems": 200 } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "searchDomains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.searchDomains({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n domains: [\n \"\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/contact-info/schema": { "get": { "tags": [ "domains-registrar" ], "operationId": "getContactInfoSchema", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": {} } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BadRequest" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotAuthorizedForScope" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Some TLDs require additional contact information. Use this endpoint to get the schema for the tld-specific contact information for a domain.", "summary": "Get contact info schema", "x-codeSamples": [ { "lang": "typescript", "label": "getContactInfoSchema", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getContactInfoSchema({\n domain: \"tricky-issue.name\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/auth-code": { "get": { "tags": [ "domains-registrar" ], "operationId": "getDomainAuthCode", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "authCode" ], "properties": { "authCode": { "type": "string" } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/DomainNotRegistered" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "The domain was not found in our system.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainNotFound" } } } }, "409": { "description": "The domain cannot be transfered out until the specified date.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainCannotBeTransferedOutUntil" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get the auth code for a domain. This is required to transfer a domain from Vercel to another registrar.", "summary": "Get the auth code for a domain", "x-codeSamples": [ { "lang": "typescript", "label": "getDomainAuthCode", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getDomainAuthCode({\n domain: \"ruddy-coil.org\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/buy": { "post": { "tags": [ "domains-registrar" ], "operationId": "buySingleDomain", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId", "_links" ], "properties": { "orderId": { "$ref": "#/components/schemas/OrderId" }, "_links": { "type": "object", "additionalProperties": { "type": "object", "required": [ "href", "method" ], "properties": { "href": { "type": "string" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH" ] } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/OrderTooExpensive" }, { "$ref": "#/components/schemas/InvalidAdditionalContactInfo" }, { "$ref": "#/components/schemas/AdditionalContactInfoRequired" }, { "$ref": "#/components/schemas/ExpectedPriceMismatch" }, { "$ref": "#/components/schemas/DomainNotAvailable" }, { "$ref": "#/components/schemas/EmojiTldNotSupported" }, { "$ref": "#/components/schemas/LanguageCodeRequired" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Buy a domain", "summary": "Buy a domain", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "autoRenew", "years", "expectedPrice", "contactInformation" ], "properties": { "autoRenew": { "type": "boolean", "description": "Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint." }, "years": { "type": "number", "description": "The number of years to purchase the domain for." }, "expectedPrice": { "type": "number", "minimum": 0.01 }, "contactInformation": { "type": "object", "required": [ "firstName", "lastName", "email", "phone", "address1", "city", "state", "zip", "country" ], "properties": { "firstName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "lastName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "email": { "$ref": "#/components/schemas/EmailAddress" }, "phone": { "$ref": "#/components/schemas/E164PhoneNumber" }, "address1": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "address2": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "city": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "state": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "zip": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "country": { "$ref": "#/components/schemas/CountryCode" }, "companyName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "fax": { "$ref": "#/components/schemas/E164PhoneNumber" }, "additional": { "type": "object", "properties": {} } }, "additionalProperties": false, "description": "The contact information for the domain. Some TLDs require additional contact information. Use the [Get contact info schema](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-contact-info-schema) endpoint to retrieve the required fields." }, "languageCode": { "type": "string", "description": "The language code for the domain. For punycode domains, this must be provided. The list of supported language codes for a TLD can be retrieved from the [Get TLD](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-tld) endpoint." } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "buySingleDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.buySingleDomain({\n domain: \"metallic-simple.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n autoRenew: false,\n years: 7602.67,\n expectedPrice: 7390.34,\n contactInformation: {\n firstName: \"Lexie\",\n lastName: \"Lemke\",\n email: \"Lionel21@gmail.com\",\n phone: \"550.220.6330 x258\",\n address1: \"\",\n city: \"Spencerport\",\n state: \"West Virginia\",\n zip: \"46432\",\n country: \"MM\",\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/buy": { "post": { "tags": [ "domains-registrar" ], "operationId": "buyDomains", "parameters": [ { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId", "_links" ], "properties": { "orderId": { "$ref": "#/components/schemas/OrderId" }, "_links": { "type": "object", "additionalProperties": { "type": "object", "required": [ "href", "method" ], "properties": { "href": { "type": "string" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH" ] } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/OrderTooExpensive" }, { "$ref": "#/components/schemas/TooManyDomains" }, { "$ref": "#/components/schemas/InvalidAdditionalContactInfo" }, { "$ref": "#/components/schemas/AdditionalContactInfoRequired" }, { "$ref": "#/components/schemas/DuplicateDomains" }, { "$ref": "#/components/schemas/ExpectedPriceMismatch" }, { "$ref": "#/components/schemas/DomainNotAvailable" }, { "$ref": "#/components/schemas/EmojiTldNotSupported" }, { "$ref": "#/components/schemas/LanguageCodeRequired" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Buy multiple domains at once", "summary": "Buy multiple domains", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "domains", "contactInformation" ], "properties": { "domains": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "domainName", "autoRenew", "years", "expectedPrice" ], "properties": { "domainName": { "$ref": "#/components/schemas/DomainName" }, "autoRenew": { "type": "boolean", "description": "Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint." }, "years": { "type": "number", "description": "The number of years to purchase the domain for." }, "expectedPrice": { "type": "number", "minimum": 0.01 }, "languageCode": { "type": "string", "description": "The language code for the domain. For punycode domains, this must be provided. The list of supported language codes for a TLD can be retrieved from the [Get TLD](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-tld) endpoint." } }, "additionalProperties": false } }, "contactInformation": { "type": "object", "required": [ "firstName", "lastName", "email", "phone", "address1", "city", "state", "zip", "country" ], "properties": { "firstName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "lastName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "email": { "$ref": "#/components/schemas/EmailAddress" }, "phone": { "$ref": "#/components/schemas/E164PhoneNumber" }, "address1": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "address2": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "city": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "state": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "zip": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "country": { "$ref": "#/components/schemas/CountryCode" }, "companyName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "fax": { "$ref": "#/components/schemas/E164PhoneNumber" }, "additional": { "type": "object", "properties": {} } }, "additionalProperties": false, "description": "The contact information for the domain. Some TLDs require additional contact information. Use the [Get contact info schema](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-contact-info-schema) endpoint to retrieve the required fields." } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "buyDomains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.buyDomains({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n domains: [],\n contactInformation: {\n firstName: \"Leonie\",\n lastName: \"Johnston\",\n email: \"Anna_Fisher13@hotmail.com\",\n phone: \"(688) 699-0656\",\n address1: \"\",\n city: \"Rennerland\",\n state: \"New Jersey\",\n zip: \"70054\",\n country: \"GF\",\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/transfer": { "post": { "tags": [ "domains-registrar" ], "operationId": "transferInDomain", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId", "_links" ], "properties": { "orderId": { "$ref": "#/components/schemas/OrderId" }, "_links": { "type": "object", "additionalProperties": { "type": "object", "required": [ "href", "method" ], "properties": { "href": { "type": "string" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH" ] } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BadRequest" }, { "$ref": "#/components/schemas/DomainAlreadyOwned" }, { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/DNSSECEnabled" }, { "$ref": "#/components/schemas/ExpectedPriceMismatch" }, { "$ref": "#/components/schemas/DomainNotAvailable" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Transfer a domain in from another registrar", "summary": "Transfer-in a domain", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "authCode", "autoRenew", "years", "expectedPrice", "contactInformation" ], "properties": { "authCode": { "type": "string", "description": "The auth code for the domain. You must obtain this code from the losing registrar." }, "autoRenew": { "type": "boolean", "description": "Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint." }, "years": { "type": "number", "description": "The number of years to renew the domain for once it is transferred in. This must be a valid number of transfer years for the TLD." }, "expectedPrice": { "type": "number", "minimum": 0.01 }, "contactInformation": { "type": "object", "required": [ "firstName", "lastName", "email", "phone", "address1", "city", "state", "zip", "country" ], "properties": { "firstName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "lastName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "email": { "$ref": "#/components/schemas/EmailAddress" }, "phone": { "$ref": "#/components/schemas/E164PhoneNumber" }, "address1": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "address2": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "city": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "state": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "zip": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "country": { "$ref": "#/components/schemas/CountryCode" }, "companyName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "fax": { "$ref": "#/components/schemas/E164PhoneNumber" } }, "additionalProperties": false } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "transferInDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.transferInDomain({\n domain: \"silky-fund.org\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n authCode: \"\",\n autoRenew: true,\n years: 298.08,\n expectedPrice: 5092.5,\n contactInformation: {\n firstName: \"Gabrielle\",\n lastName: \"Hackett\",\n email: \"Keshawn99@yahoo.com\",\n phone: \"(758) 385-1802 x13762\",\n address1: \"\",\n city: \"Pattiestead\",\n state: \"Idaho\",\n zip: \"64653-9022\",\n country: \"JO\",\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "tags": [ "domains-registrar" ], "operationId": "getDomainTransferIn", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "status" ], "properties": { "status": { "type": "string", "enum": [ "canceled", "canceled_pending_refund", "completed", "created", "failed", "pending", "pending_insert", "pending_new_auth_code", "pending_transfer", "pending_unlock", "pending_registry_unlock", "rejected", "submitting_transfer" ] } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "NotFound", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get the transfer status for a domain", "summary": "Get a domain's transfer status", "x-codeSamples": [ { "lang": "typescript", "label": "getDomainTransferIn", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getDomainTransferIn({\n domain: \"unsung-antelope.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/renew": { "post": { "tags": [ "domains-registrar" ], "operationId": "renewDomain", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId", "_links" ], "properties": { "orderId": { "$ref": "#/components/schemas/OrderId" }, "_links": { "type": "object", "additionalProperties": { "type": "object", "required": [ "href", "method" ], "properties": { "href": { "type": "string" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH" ] } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BadRequest" }, { "$ref": "#/components/schemas/DomainTooShort" }, { "$ref": "#/components/schemas/DomainNotRegistered" }, { "$ref": "#/components/schemas/ExpectedPriceMismatch" }, { "$ref": "#/components/schemas/DomainNotAvailable" }, { "$ref": "#/components/schemas/TldNotSupported" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "The domain was not found in our system.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainNotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Renew a domain", "summary": "Renew a domain", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "years", "expectedPrice" ], "properties": { "years": { "type": "number", "description": "The number of years to renew the domain for." }, "expectedPrice": { "type": "number", "minimum": 0.01 }, "contactInformation": { "type": "object", "required": [ "firstName", "lastName", "email", "phone", "address1", "city", "state", "zip", "country" ], "properties": { "firstName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "lastName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "email": { "$ref": "#/components/schemas/EmailAddress" }, "phone": { "$ref": "#/components/schemas/E164PhoneNumber" }, "address1": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "address2": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "city": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "state": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "zip": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "country": { "$ref": "#/components/schemas/CountryCode" }, "companyName": { "$ref": "#/components/schemas/NonEmptyTrimmedString" }, "fax": { "$ref": "#/components/schemas/E164PhoneNumber" } }, "additionalProperties": false } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "renewDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.renewDomain({\n domain: \"scaly-daughter.biz\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n years: 1981.72,\n expectedPrice: 7096.16,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/auto-renew": { "patch": { "tags": [ "domains-registrar" ], "operationId": "updateDomainAutoRenew", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "204": { "description": "Success" }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/DomainAlreadyRenewing" }, { "$ref": "#/components/schemas/DomainNotRenewable" }, { "$ref": "#/components/schemas/DomainNotRegistered" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "The domain was not found in our system.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainNotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Update the auto-renew setting for a domain", "summary": "Update auto-renew for a domain", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "autoRenew" ], "properties": { "autoRenew": { "type": "boolean" } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateDomainAutoRenew", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.domainsRegistrar.updateDomainAutoRenew({\n domain: \"worthwhile-dwell.net\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n autoRenew: true,\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/nameservers": { "patch": { "tags": [ "domains-registrar" ], "operationId": "updateDomainNameservers", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "204": { "description": "Success" }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/DomainNotRegistered" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "The domain was not found in our system.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainNotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Update the nameservers for a domain. Pass an empty array to use Vercel's default nameservers.", "summary": "Update nameservers for a domain", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "nameservers" ], "properties": { "nameservers": { "type": "array", "items": { "$ref": "#/components/schemas/Nameserver" } } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateDomainNameservers", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.domainsRegistrar.updateDomainNameservers({\n domain: \"unique-formula.biz\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n nameservers: [\n \"\",\n ],\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/registrar/domains/{domain}/contact-verification": { "get": { "tags": [ "domains-registrar" ], "operationId": "getDomainContactVerification", "parameters": [ { "name": "domain", "in": "path", "schema": { "$ref": "#/components/schemas/DomainName" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "The registrant contact has been verified.", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/ContactVerified" }, { "$ref": "#/components/schemas/ContactPendingVerification" } ] } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/BoughtTooRecently" }, { "$ref": "#/components/schemas/DomainNotRegistered" }, { "$ref": "#/components/schemas/HttpApiDecodeError" } ] } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/Forbidden" }, { "$ref": "#/components/schemas/NotAuthorizedForScope" } ] } } } }, "404": { "description": "The domain was not found in our system.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DomainNotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get the registrant contact verification status for a domain. Use this after purchasing a domain to determine whether the contact has been verified. Note that a bought_too_recently error will be returned if the domain was bought less than 30 minutes before the request.", "summary": "Get contact verification status for a domain", "x-codeSamples": [ { "lang": "typescript", "label": "getDomainContactVerification", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getDomainContactVerification({\n domain: \"impolite-guide.org\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/registrar/orders/{orderId}": { "get": { "tags": [ "domains-registrar" ], "operationId": "getOrder", "parameters": [ { "name": "orderId", "in": "path", "schema": { "$ref": "#/components/schemas/OrderId" }, "required": true }, { "name": "teamId", "in": "query", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": false } ], "security": [ { "bearerToken": [] } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId", "domains", "status" ], "properties": { "orderId": { "$ref": "#/components/schemas/OrderId" }, "domains": { "type": "array", "items": { "anyOf": [ { "type": "object", "required": [ "purchaseType", "autoRenew", "years", "domainName", "status", "price" ], "properties": { "purchaseType": { "type": "string", "enum": [ "purchase" ] }, "autoRenew": { "type": "boolean" }, "years": { "type": "number", "description": "The number of years the domain is being purchased for." }, "domainName": { "$ref": "#/components/schemas/DomainName" }, "status": { "type": "string", "enum": [ "pending", "completed", "failed", "refunded", "refund-failed" ] }, "price": { "type": "number", "minimum": 0.01 }, "error": { "anyOf": [ { "anyOf": [ { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "unsupported-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "client-transfer-prohibited" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-auth-code" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "claims-notice-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "cannot-transfer-in-until" ] }, "details": { "type": "object", "required": [ "numDaysUntilTransferrable" ], "properties": { "numDaysUntilTransferrable": { "type": "number" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "account-transfer-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "price-change" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "unavailable-legal" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "invalid-contact" ] }, "details": { "type": "object", "properties": { "invalidField": { "type": "string", "enum": [ "firstName", "lastName", "email", "phone", "address1", "address2", "city", "state", "zip", "country", "companyName", "fax" ] } }, "additionalProperties": false } }, "additionalProperties": false } ] }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "details": { "title": "unknown" } }, "additionalProperties": false } ] } }, "additionalProperties": false }, { "type": "object", "required": [ "purchaseType", "years", "domainName", "status", "price" ], "properties": { "purchaseType": { "type": "string", "enum": [ "renewal" ] }, "years": { "type": "number", "description": "The number of years the domain is being renewed for." }, "domainName": { "$ref": "#/components/schemas/DomainName" }, "status": { "type": "string", "enum": [ "pending", "completed", "failed", "refunded", "refund-failed" ] }, "price": { "type": "number", "minimum": 0.01 }, "error": { "anyOf": [ { "anyOf": [ { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "unsupported-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "client-transfer-prohibited" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-auth-code" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "claims-notice-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "cannot-transfer-in-until" ] }, "details": { "type": "object", "required": [ "numDaysUntilTransferrable" ], "properties": { "numDaysUntilTransferrable": { "type": "number" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "account-transfer-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "price-change" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "unavailable-legal" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "invalid-contact" ] }, "details": { "type": "object", "properties": { "invalidField": { "type": "string", "enum": [ "firstName", "lastName", "email", "phone", "address1", "address2", "city", "state", "zip", "country", "companyName", "fax" ] } }, "additionalProperties": false } }, "additionalProperties": false } ] }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "details": { "title": "unknown" } }, "additionalProperties": false } ] } }, "additionalProperties": false }, { "type": "object", "required": [ "purchaseType", "autoRenew", "years", "domainName", "status", "price" ], "properties": { "purchaseType": { "type": "string", "enum": [ "transfer" ] }, "autoRenew": { "type": "boolean" }, "years": { "type": "number", "description": "The number of years the domain is being transferred for." }, "domainName": { "$ref": "#/components/schemas/DomainName" }, "status": { "type": "string", "enum": [ "pending", "completed", "failed", "refunded", "refund-failed" ] }, "price": { "type": "number", "minimum": 0.01 }, "error": { "anyOf": [ { "anyOf": [ { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "unsupported-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-language-code" ] }, "details": { "type": "object", "required": [ "detectedLanguageCode" ], "properties": { "detectedLanguageCode": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "client-transfer-prohibited" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "incorrect-auth-code" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "claims-notice-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "cannot-transfer-in-until" ] }, "details": { "type": "object", "required": [ "numDaysUntilTransferrable" ], "properties": { "numDaysUntilTransferrable": { "type": "number" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "account-transfer-required" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "price-change" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "unavailable-legal" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "invalid-contact" ] }, "details": { "type": "object", "properties": { "invalidField": { "type": "string", "enum": [ "firstName", "lastName", "email", "phone", "address1", "address2", "city", "state", "zip", "country", "companyName", "fax" ] } }, "additionalProperties": false } }, "additionalProperties": false } ] }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "details": { "title": "unknown" } }, "additionalProperties": false } ] } }, "additionalProperties": false } ] } }, "status": { "type": "string", "enum": [ "draft", "purchasing", "completed", "failed" ] }, "error": { "anyOf": [ { "anyOf": [ { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "payment-failed" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "tld-outage" ] }, "details": { "type": "object", "required": [ "tlds" ], "properties": { "tlds": { "type": "array", "items": { "type": "object", "required": [ "tldName", "endsAt" ], "properties": { "tldName": { "type": "string" }, "endsAt": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "price-mismatch" ] }, "details": { "type": "object", "required": [ "expectedPrice" ], "properties": { "expectedPrice": { "type": "number" }, "actualPrice": { "type": "number" } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "unexpected-error" ] } }, "additionalProperties": false }, { "type": "object", "required": [ "code", "details" ], "properties": { "code": { "type": "string", "enum": [ "claims-required" ] }, "details": { "type": "object", "required": [ "message", "domainNames" ], "properties": { "message": { "type": "string" }, "domainNames": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } }, "additionalProperties": false }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "enum": [ "domain-mismatch" ] } }, "additionalProperties": false } ] }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "details": { "title": "unknown" } }, "additionalProperties": false } ] } }, "additionalProperties": false } } } }, "400": { "description": "There was something wrong with the request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpApiDecodeError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "NotAuthorizedForScope", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/NotAuthorizedForScope" }, { "$ref": "#/components/schemas/Forbidden" } ] } } } }, "404": { "description": "NotFound", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NotFound" } } } }, "429": { "description": "TooManyRequests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "500": { "description": "InternalServerError", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InternalServerError" } } } } }, "description": "Get information about a domain order by its ID", "summary": "Get a domain order", "x-codeSamples": [ { "lang": "typescript", "label": "getOrder", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domainsRegistrar.getOrder({\n orderId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v6/domains/{domain}/config": { "get": { "description": "Get a Domain's configuration.", "operationId": "getDomainConfig", "security": [ { "bearerToken": [] } ], "summary": "Get a Domain's configuration", "tags": [ "domains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "acceptedChallenges": { "items": { "type": "string", "enum": [ "dns-01", "http-01" ], "description": "Which challenge types the domain can use for issuing certs." }, "type": "array", "description": "Which challenge types the domain can use for issuing certs." }, "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ], "description": "How we see the domain's configuration. - `CNAME`: Domain has a CNAME pointing to Vercel. - `A`: Domain's A record is resolving to Vercel. - `http`: Domain is resolving to Vercel but may be behind a Proxy. - `dns-01`: Domain is not resolving to Vercel but dns-01 challenge is enabled. - `null`: Domain is not resolving to Vercel." }, "recommendedCNAME": { "items": { "properties": { "rank": { "type": "number" }, "value": { "type": "string" } }, "required": [ "rank", "value" ], "type": "object", "description": "Recommended CNAMEs for the domain. rank=1 is the preferred value to use." }, "type": "array", "description": "Recommended CNAMEs for the domain. rank=1 is the preferred value to use." }, "recommendedIPv4": { "items": { "properties": { "rank": { "type": "number" }, "value": { "items": { "type": "string" }, "type": "array" } }, "required": [ "rank", "value" ], "type": "object", "description": "Recommended IPv4s for the domain. rank=1 is the preferred value(s) to use. Only using 1 ip value is acceptable." }, "type": "array", "description": "Recommended IPv4s for the domain. rank=1 is the preferred value(s) to use. Only using 1 ip value is acceptable." }, "misconfigured": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not the domain is configured AND we can automatically generate a TLS certificate." } }, "required": [ "acceptedChallenges", "configuredBy", "misconfigured", "recommendedCNAME", "recommendedIPv4" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "domain", "description": "The name of the domain.", "in": "path", "required": true, "schema": { "description": "The name of the domain.", "type": "string", "example": "example.com" } }, { "name": "projectIdOrName", "description": "The project id or name that will be associated with the domain. Use this when the domain is not yet associated with a project.", "in": "query", "required": false, "schema": { "description": "The project id or name that will be associated with the domain. Use this when the domain is not yet associated with a project.", "type": "string" } }, { "name": "strict", "description": "When true, the response will only include the nameservers assigned directly to the specified domain. When false and there are no nameservers assigned directly to the specified domain, the response will include the nameservers of the domain's parent zone.", "in": "query", "required": false, "schema": { "enum": [ "true", "false" ], "description": "When true, the response will only include the nameservers assigned directly to the specified domain. When false and there are no nameservers assigned directly to the specified domain, the response will include the nameservers of the domain's parent zone." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomainConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.getDomainConfig({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getDomainConfig", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Domains.GetDomainConfig(ctx, \"example.com\", nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v9/domains/{domain}/verification": { "get": { "description": "Get the TXT verification record needed to claim ownership of a domain for the authenticated team. The caller must add this TXT record to `_vercel.{domain}` in their DNS configuration, then call POST /domains/:domain/claim to complete the ownership transfer.", "operationId": "getDomainVerificationRecord", "security": [ { "bearerToken": [] } ], "summary": "Get Domain Verification Record", "tags": [ "domains" ], "responses": { "200": { "description": "Returns the TXT record needed to verify domain ownership.", "content": { "application/json": { "schema": { "properties": { "txtRecord": { "type": "string" }, "verificationDomain": { "type": "string" } }, "required": [ "txtRecord", "verificationDomain" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "domain", "description": "The domain name to get the verification record for", "in": "path", "required": true, "schema": { "description": "The domain name to get the verification record for", "type": "string", "example": "example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomainVerificationRecord", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.getDomainVerificationRecord({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/domains/{domain}/claim": { "post": { "description": "Claim ownership of a domain for the authenticated team by verifying a TXT record. The caller must first add a TXT record to `_vercel.{domain}` (obtained from GET /domains/:domain/verification), then call this endpoint to complete the ownership transfer. If the TXT record is verified, the domain ownership will be transferred to the caller's team, even if the domain is currently owned by another user or team.", "operationId": "claimDomainOwnership", "security": [ { "bearerToken": [] } ], "summary": "Claim Domain Ownership", "tags": [ "domains" ], "responses": { "200": { "description": "Domain ownership successfully claimed.", "content": { "application/json": { "schema": { "properties": { "domain": { "properties": { "boughtAt": { "nullable": true, "type": "number", "description": "If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.", "example": 1613602938882 }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when the domain was created in the registry.", "example": 1613602938882 }, "creator": { "properties": { "customerId": { "nullable": true, "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "isDomainReseller": { "type": "boolean", "enum": [ false, true ] }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object", "description": "An object containing information of the domain creator, including the user's id, username, and email.", "example": { "id": "ZspSRT4ljIEEmMHgoDwKWDei", "username": "vercel_user", "email": "demo@example.com" } }, "customNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ], "description": "Whether the domain is enrolled in Encrypted Client Hello. `auto` leaves the decision to Vercel, `enabled` always enrolls, and `disabled` never enrolls and opts out of automatic enrollment.", "example": "auto" }, "expiresAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain is set to expire. null if not bought with Vercel." }, "id": { "type": "string", "description": "The unique identifier of the domain.", "example": "EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1" }, "intendedNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the intended nameservers for the domain to point to Vercel DNS.", "example": [ "ns1.vercel-dns.com", "ns2.vercel-dns.com" ] }, "name": { "type": "string", "description": "The domain name.", "example": "example.com" }, "nameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the current nameservers of the domain.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "renew": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the domain is set to automatically renew.", "example": true }, "serviceType": { "type": "string", "enum": [ "external", "na", "zeit.world" ], "description": "The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.", "example": "zeit.world" }, "teamId": { "nullable": true, "type": "string" }, "transferredAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.", "example": 1613602938882 }, "transferStartedAt": { "type": "number", "description": "If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.", "example": 1613602938882 }, "userId": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "If the domain has the ownership verified.", "example": true } }, "required": [ "boughtAt", "createdAt", "creator", "echMode", "expiresAt", "id", "intendedNameservers", "name", "nameservers", "serviceType", "teamId", "userId", "verified" ], "type": "object" } }, "required": [ "domain" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "domain", "description": "The domain name to claim ownership of", "in": "path", "required": true, "schema": { "description": "The domain name to claim ownership of", "type": "string", "example": "example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "claimDomainOwnership", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.claimDomainOwnership({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/domains/{domain}/project-domains": { "get": { "description": "List all project domains associated with an apex domain owned by the authenticated account.", "operationId": "getDomainProjectDomains", "security": [ { "bearerToken": [] } ], "summary": "List Project Domains by Apex Domain", "tags": [ "domains" ], "responses": { "200": { "description": "Successful response retrieving project domains for an apex domain.", "content": { "application/json": { "schema": { "properties": { "pagination": { "$ref": "#/components/schemas/Pagination" }, "projectDomains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "projectDomains" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "domain", "description": "The apex domain name.", "in": "path", "required": true, "schema": { "description": "The apex domain name.", "type": "string", "example": "example.com" } }, { "name": "limit", "description": "Maximum number of project domains to list from a request.", "in": "query", "required": false, "schema": { "description": "Maximum number of project domains to list from a request.", "type": "number", "example": 20 } }, { "name": "since", "description": "Get project domains created after this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get project domains created after this JavaScript timestamp.", "type": "number", "example": 1609499532000 } }, { "name": "until", "description": "Get project domains created before this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get project domains created before this JavaScript timestamp.", "type": "number", "example": 1612264332000 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomainProjectDomains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.getDomainProjectDomains({\n domain: \"example.com\",\n limit: 20,\n since: 1609499532000,\n until: 1612264332000,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v5/domains/{domain}": { "get": { "description": "Get information for a single domain in an account or team.", "operationId": "getDomain", "security": [ { "bearerToken": [] } ], "summary": "Get Information for a Single Domain", "tags": [ "domains" ], "responses": { "200": { "description": "Successful response retrieving an information for a specific domains.", "content": { "application/json": { "schema": { "properties": { "domain": { "properties": { "boughtAt": { "nullable": true, "type": "number", "description": "If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.", "example": 1613602938882 }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when the domain was created in the registry.", "example": 1613602938882 }, "creator": { "properties": { "customerId": { "nullable": true, "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "isDomainReseller": { "type": "boolean", "enum": [ false, true ] }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object", "description": "An object containing information of the domain creator, including the user's id, username, and email.", "example": { "id": "ZspSRT4ljIEEmMHgoDwKWDei", "username": "vercel_user", "email": "demo@example.com" } }, "customNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ], "description": "Whether the domain is enrolled in Encrypted Client Hello. `auto` leaves the decision to Vercel, `enabled` always enrolls, and `disabled` never enrolls and opts out of automatic enrollment.", "example": "auto" }, "expiresAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain is set to expire. null if not bought with Vercel." }, "id": { "type": "string", "description": "The unique identifier of the domain.", "example": "EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1" }, "intendedNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the intended nameservers for the domain to point to Vercel DNS.", "example": [ "ns1.vercel-dns.com", "ns2.vercel-dns.com" ] }, "name": { "type": "string", "description": "The domain name.", "example": "example.com" }, "nameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the current nameservers of the domain.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "renew": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the domain is set to automatically renew.", "example": true }, "serviceType": { "type": "string", "enum": [ "external", "na", "zeit.world" ], "description": "The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.", "example": "zeit.world" }, "suffix": { "type": "boolean", "enum": [ false, true ] }, "teamId": { "nullable": true, "type": "string" }, "transferredAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.", "example": 1613602938882 }, "transferStartedAt": { "type": "number", "description": "If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.", "example": 1613602938882 }, "userId": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "If the domain has the ownership verified.", "example": true } }, "required": [ "boughtAt", "createdAt", "creator", "echMode", "expiresAt", "id", "intendedNameservers", "name", "nameservers", "serviceType", "suffix", "teamId", "userId", "verified" ], "type": "object" } }, "required": [ "domain" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "domain", "description": "The name of the domain.", "in": "path", "required": true, "schema": { "description": "The name of the domain.", "type": "string", "example": "example.com" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.getDomain({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Domains.GetDomain(ctx, \"example.com\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v5/domains": { "get": { "description": "Retrieves a list of domains registered for the authenticated user or team. By default it returns the last 20 domains if no limit is provided.", "operationId": "getDomains", "security": [ { "bearerToken": [] } ], "summary": "List all the domains", "tags": [ "domains" ], "responses": { "200": { "description": "Successful response retrieving a list of domains.", "content": { "application/json": { "schema": { "properties": { "domains": { "items": { "properties": { "boughtAt": { "nullable": true, "type": "number", "description": "If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.", "example": 1613602938882 }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when the domain was created in the registry.", "example": 1613602938882 }, "creator": { "properties": { "customerId": { "nullable": true, "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "isDomainReseller": { "type": "boolean", "enum": [ false, true ] }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object", "description": "An object containing information of the domain creator, including the user's id, username, and email.", "example": { "id": "ZspSRT4ljIEEmMHgoDwKWDei", "username": "vercel_user", "email": "demo@example.com" } }, "customNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ], "description": "Whether the domain is enrolled in Encrypted Client Hello. `auto` leaves the decision to Vercel, `enabled` always enrolls, and `disabled` never enrolls and opts out of automatic enrollment.", "example": "auto" }, "expiresAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain is set to expire. null if not bought with Vercel." }, "id": { "type": "string", "description": "The unique identifier of the domain.", "example": "EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1" }, "intendedNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the intended nameservers for the domain to point to Vercel DNS.", "example": [ "ns1.vercel-dns.com", "ns2.vercel-dns.com" ] }, "name": { "type": "string", "description": "The domain name.", "example": "example.com" }, "nameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the current nameservers of the domain.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "renew": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the domain is set to automatically renew.", "example": true }, "serviceType": { "type": "string", "enum": [ "external", "na", "zeit.world" ], "description": "The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.", "example": "zeit.world" }, "teamId": { "nullable": true, "type": "string" }, "transferredAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.", "example": 1613602938882 }, "transferStartedAt": { "type": "number", "description": "If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.", "example": 1613602938882 }, "userId": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "If the domain has the ownership verified.", "example": true } }, "required": [ "boughtAt", "createdAt", "creator", "echMode", "expiresAt", "id", "intendedNameservers", "name", "nameservers", "serviceType", "teamId", "userId", "verified" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "domains", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "limit", "description": "Maximum number of domains to list from a request.", "in": "query", "schema": { "description": "Maximum number of domains to list from a request.", "type": "number", "example": 20 } }, { "name": "since", "description": "Get domains created after this JavaScript timestamp.", "in": "query", "schema": { "description": "Get domains created after this JavaScript timestamp.", "type": "number", "example": 1609499532000 } }, { "name": "until", "description": "Get domains created before this JavaScript timestamp.", "in": "query", "schema": { "description": "Get domains created before this JavaScript timestamp.", "type": "number", "example": 1612264332000 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDomains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.getDomains({\n limit: 20,\n since: 1609499532000,\n until: 1612264332000,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getDomains", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Domains.GetDomains(ctx, operations.GetDomainsRequest{\n Limit: vercel.Float64(20),\n Since: vercel.Float64(1609499532000),\n Until: vercel.Float64(1612264332000),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v7/domains": { "post": { "description": "This endpoint is used for adding a new apex domain name with Vercel for the authenticating user. Note: This endpoint is no longer used for initiating domain transfers from external registrars to Vercel. For this, please use the endpoint [Transfer-in a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/transfer-in-a-domain).", "operationId": "createOrTransferDomain", "security": [ { "bearerToken": [] } ], "summary": "Add an existing domain to the Vercel platform", "tags": [ "domains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "domain": { "properties": { "boughtAt": { "nullable": true, "type": "number", "description": "If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.", "example": 1613602938882 }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when the domain was created in the registry.", "example": 1613602938882 }, "creator": { "properties": { "customerId": { "nullable": true, "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "isDomainReseller": { "type": "boolean", "enum": [ false, true ] }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object", "description": "An object containing information of the domain creator, including the user's id, username, and email.", "example": { "id": "ZspSRT4ljIEEmMHgoDwKWDei", "username": "vercel_user", "email": "demo@example.com" } }, "customNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ], "description": "Whether the domain is enrolled in Encrypted Client Hello. `auto` leaves the decision to Vercel, `enabled` always enrolls, and `disabled` never enrolls and opts out of automatic enrollment.", "example": "auto" }, "expiresAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain is set to expire. null if not bought with Vercel." }, "id": { "type": "string", "description": "The unique identifier of the domain.", "example": "EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1" }, "intendedNameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the intended nameservers for the domain to point to Vercel DNS.", "example": [ "ns1.vercel-dns.com", "ns2.vercel-dns.com" ] }, "name": { "type": "string", "description": "The domain name.", "example": "example.com" }, "nameservers": { "items": { "type": "string" }, "type": "array", "description": "A list of the current nameservers of the domain.", "example": [ "ns1.nameserver.net", "ns2.nameserver.net" ] }, "renew": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the domain is set to automatically renew.", "example": true }, "serviceType": { "type": "string", "enum": [ "external", "na", "zeit.world" ], "description": "The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.", "example": "zeit.world" }, "teamId": { "nullable": true, "type": "string" }, "transferredAt": { "nullable": true, "type": "number", "description": "Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.", "example": 1613602938882 }, "transferStartedAt": { "type": "number", "description": "If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.", "example": 1613602938882 }, "userId": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "If the domain has the ownership verified.", "example": true } }, "required": [ "boughtAt", "createdAt", "creator", "echMode", "expiresAt", "id", "intendedNameservers", "name", "nameservers", "serviceType", "teamId", "userId", "verified" ], "type": "object" } }, "required": [ "domain" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The domain is not allowed to be used" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "bodyArguments": [ "name" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "method": { "description": "The domain operation to perform. It can be either `add` or `move-in`.", "type": "string", "example": "add" } }, "oneOf": [ { "additionalProperties": false, "type": "object", "description": "add", "required": [ "name" ], "properties": { "name": { "description": "The domain name you want to add.", "type": "string", "example": "example.com" }, "cdnEnabled": { "description": "Whether the domain has the Vercel CDN enabled or not.", "type": "boolean", "example": true }, "zone": { "description": "Whether to create a DNS zone on Vercel. Set `true` if using Vercel nameservers.", "type": "boolean" }, "method": { "description": "The domain operation to perform.", "type": "string", "example": "add" } } }, { "additionalProperties": false, "type": "object", "description": "move-in", "required": [ "method", "name" ], "properties": { "name": { "description": "The domain name you want to add.", "type": "string", "example": "example.com" }, "method": { "description": "The domain operation to perform.", "type": "string", "example": "move-in" }, "token": { "description": "The move-in token from Move Requested email.", "type": "string", "example": "fdhfr820ad#@FAdlj$$" } } } ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createOrTransferDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.createOrTransferDomain({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"example.com\",\n method: \"transfer-in\",\n token: \"fdhfr820ad#@FAdlj$$\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v3/domains/{domain}": { "patch": { "description": "Update or move apex domain. Note: This endpoint is no longer used for updating auto-renew or nameservers. For this, please use the endpoints [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) and [Update nameservers for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-nameservers-for-a-domain).", "operationId": "patchDomain", "security": [ { "bearerToken": [] } ], "summary": "Update or move apex domain", "tags": [ "domains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "moved": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "moved" ], "type": "object" }, { "properties": { "moved": { "type": "boolean", "enum": [ false, true ] }, "token": { "type": "string" } }, "required": [ "moved", "token" ], "type": "object" }, { "properties": { "customNameservers": { "items": { "type": "string" }, "type": "array" }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ] }, "renew": { "type": "boolean", "enum": [ false, true ] }, "zone": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "echMode" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "domain", "in": "path", "schema": { "type": "string" }, "required": true }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "description": "update", "additionalProperties": false, "properties": { "op": { "example": "update", "type": "string" }, "renew": { "description": "This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/auto-renew instead.", "type": "boolean", "deprecated": true }, "customNameservers": { "description": "This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/nameservers instead.", "items": { "type": "string" }, "maxItems": 4, "minItems": 0, "type": "array", "uniqueItems": true, "deprecated": true }, "zone": { "description": "Specifies whether this is a DNS zone that intends to use Vercel's nameservers.", "type": "boolean" }, "echMode": { "description": "Encrypted Client Hello enrollment. 'auto' leaves it to Vercel, 'disabled' never enrolls and opts out of automatic enrollment.", "type": "string", "enum": [ "auto", "disabled" ] } } }, { "type": "object", "description": "move-out", "additionalProperties": false, "properties": { "op": { "example": "move-out", "type": "string" }, "destination": { "description": "User or team to move domain to", "type": "string" } } } ] } } }, "required": true }, "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "patchDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.patchDomain({\n domain: \"flimsy-napkin.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n op: \"update\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "patchDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Domains.PatchDomain(ctx, \"tight-secrecy.info\", nil, nil, vercel.Pointer(operations.CreatePatchDomainRequestBodyPatchDomainRequestBody1(\n operations.PatchDomainRequestBody1{\n Op: vercel.String(\"update\"),\n },\n )))\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v6/domains/{domain}": { "delete": { "description": "Delete a previously registered domain name from Vercel. Deleting a domain will automatically remove any associated aliases.", "operationId": "deleteDomain", "security": [ { "bearerToken": [] } ], "summary": "Remove a domain by name", "tags": [ "domains" ], "responses": { "200": { "description": "Successful response removing a domain.", "content": { "application/json": { "schema": { "properties": { "uid": { "type": "string" } }, "required": [ "uid" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "domain", "description": "The name of the domain.", "in": "path", "required": true, "schema": { "description": "The name of the domain.", "type": "string", "example": "example.com" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.domains.deleteDomain({\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Domains.DeleteDomain(ctx, \"example.com\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/log-drains/{id}": { "get": { "description": "Retrieves a Configurable Log Drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated team can be accessed.", "operationId": "getConfigurableLogDrain", "security": [ { "bearerToken": [] } ], "summary": "Retrieves a Configurable Log Drain (deprecated)", "tags": [ "logDrains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { "clientId": { "type": "string" }, "configurationId": { "type": "string" }, "createdFrom": { "type": "string" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectsMetadata": { "nullable": true, "items": { "properties": { "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" } }, "required": [ "createdFrom" ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getConfigurableLogDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logDrains.getConfigurableLogDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getConfigurableLogDrain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.GetConfigurableLogDrain(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Deletes a Configurable Log Drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated team can be deleted.", "operationId": "deleteConfigurableLogDrain", "security": [ { "bearerToken": [] } ], "summary": "Deletes a Configurable Log Drain (deprecated)", "tags": [ "logDrains" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteConfigurableLogDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.logDrains.deleteConfigurableLogDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteConfigurableLogDrain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.DeleteConfigurableLogDrain(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/log-drains": { "get": { "description": "Retrieves a list of all the Log Drains owned by the account. This endpoint must be called with an account AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated account can be accessed.", "operationId": "getAllLogDrains", "security": [ { "bearerToken": [] } ], "summary": "Retrieves a list of all the Log Drains (deprecated)", "tags": [ "logDrains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "items": { "type": "object", "properties": { "clientId": { "type": "string" }, "configurationId": { "type": "string" }, "createdFrom": { "type": "string" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectsMetadata": { "nullable": true, "items": { "properties": { "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" } }, "required": [ "createdFrom" ] }, "type": "array" }, { "properties": { "drains": { "oneOf": [ { "items": { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, "type": "array" }, { "items": { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectAccess": { "oneOf": [ { "properties": { "access": { "type": "string", "enum": [ "all" ] }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy" ], "type": "object" }, { "properties": { "access": { "type": "string", "enum": [ "some" ] }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy", "projectIds" ], "type": "object" } ] } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, "type": "array" } ] } }, "required": [ "drains" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "schema": { "pattern": "^[a-zA-z0-9_]+$", "type": "string" } }, { "name": "projectIdOrName", "in": "query", "schema": { "type": "string" } }, { "name": "includeMetadata", "in": "query", "schema": { "type": "boolean", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getAllLogDrains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logDrains.getAllLogDrains({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getAllLogDrains", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.GetAllLogDrains(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.ResponseBodies != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Creates a configurable log drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed)", "operationId": "createConfigurableLogDrain", "security": [ { "bearerToken": [] } ], "summary": "Creates a Configurable Log Drain (deprecated)", "tags": [ "logDrains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "deliveryFormat", "url", "sources" ], "properties": { "deliveryFormat": { "description": "The delivery log format", "example": "json", "enum": [ "json", "ndjson" ] }, "url": { "description": "The log drain url", "format": "uri", "pattern": "^(http|https)?://", "type": "string" }, "headers": { "description": "Headers to be sent together with the request", "type": "object", "additionalProperties": { "type": "string" } }, "projectIds": { "minItems": 1, "maxItems": 50, "type": "array", "items": { "pattern": "^[a-zA-z0-9_]+$", "type": "string" } }, "sources": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "static", "lambda", "build", "edge", "external", "firewall" ] }, "minItems": 1 }, "environments": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "preview", "production" ] }, "minItems": 1 }, "secret": { "description": "Custom secret of log drain", "type": "string" }, "samplingRate": { "type": "number", "description": "The sampling rate for this log drain. It should be a percentage rate between 0 and 100. With max 2 decimal points", "minimum": 0.01, "maximum": 1, "multipleOf": 0.01 }, "name": { "type": "string", "description": "The custom name of this log drain." } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createConfigurableLogDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logDrains.createConfigurableLogDrain({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n deliveryFormat: \"json\",\n url: \"https://wavy-meander.net\",\n sources: [],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createConfigurableLogDrain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.CreateConfigurableLogDrain(ctx, nil, nil, &operations.CreateConfigurableLogDrainRequestBody{\n DeliveryFormat: operations.CreateConfigurableLogDrainDeliveryFormatJSON,\n URL: \"https://sugary-technician.name\",\n Sources: []operations.CreateConfigurableLogDrainSources{\n operations.CreateConfigurableLogDrainSourcesExternal,\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/drains": { "post": { "description": "Create a new Drain with the provided configuration.", "operationId": "createDrain", "security": [ { "bearerToken": [] } ], "summary": "Create a new Drain", "tags": [ "drains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectAccess": { "oneOf": [ { "properties": { "access": { "type": "string", "enum": [ "all" ] }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy" ], "type": "object" }, { "properties": { "access": { "type": "string", "enum": [ "some" ] }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy", "projectIds" ], "type": "object" } ] } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "name", "projects", "schemas" ], "properties": { "name": { "type": "string" }, "projects": { "type": "string", "enum": [ "some", "all" ] }, "projectIds": { "type": "array", "items": { "type": "string" } }, "filter": { "type": "object", "additionalProperties": false, "required": [ "version", "filter" ], "properties": { "version": { "type": "string" }, "filter": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "type" ], "properties": { "type": { "type": "string" }, "project": { "type": "object", "additionalProperties": false, "properties": { "ids": { "type": "array", "items": { "type": "string" } } } }, "log": { "type": "object", "additionalProperties": false, "properties": { "sources": { "type": "array", "items": { "type": "string", "enum": [ "build", "edge", "lambda", "static", "external", "firewall", "redirect" ] } } } }, "deployment": { "type": "object", "additionalProperties": false, "properties": { "environments": { "type": "array", "items": { "type": "string", "enum": [ "production", "preview" ] } } } } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "text" ], "properties": { "type": { "type": "string" }, "text": { "type": "string" } } } ] } } }, "schemas": { "type": "object", "additionalProperties": { "type": "object", "required": [ "version" ], "properties": { "version": { "type": "string" } } } }, "delivery": { "type": "object", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "traces" ], "properties": { "traces": { "type": "string" } } } ] }, "encoding": { "type": "string", "enum": [ "proto", "json" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "compression", "fileStructure", "roleArn", "region" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "compression": { "type": "string", "enum": [ "none" ] }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "roleArn": { "type": "string" }, "region": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ], "default": "AES256" }, "objectAcl": { "type": "string", "enum": [ "private", "bucket-owner-read", "bucket-owner-full-control" ] } } } ] }, "sampling": { "type": "array", "maxItems": 10, "items": { "type": "object", "additionalProperties": false, "required": [ "type", "rate" ], "properties": { "type": { "type": "string" }, "rate": { "type": "number", "minimum": 0, "maximum": 1, "description": "Sampling rate from 0 to 1 (e.g., 0.1 for 10%)" }, "env": { "type": "string", "enum": [ "production", "preview" ], "description": "Environment to apply sampling to" }, "requestPath": { "type": "string", "description": "Request path prefix to apply the sampling rule to" } } } }, "transforms": { "type": "array", "items": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" } } } }, "source": { "type": "object", "oneOf": [ { "oneOf": [ { "properties": { "kind": { "type": "string", "default": "integration" }, "externalResourceId": { "type": "string" } }, "additionalProperties": false, "required": [ "externalResourceId" ] }, { "properties": { "kind": { "type": "string", "default": "integration" }, "resourceId": { "type": "string" } }, "additionalProperties": false, "required": [ "resourceId" ] }, { "properties": { "kind": { "type": "string", "default": "integration" } }, "additionalProperties": false, "required": [ "kind" ] } ] }, { "properties": { "kind": { "type": "string", "default": "self-served" } }, "additionalProperties": false, "required": [ "kind" ] } ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.drains.createDrain({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Allows to retrieve the list of Drains of the authenticated team.", "operationId": "getDrains", "security": [ { "bearerToken": [] } ], "summary": "Retrieve a list of all Drains", "tags": [ "drains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "drains": { "oneOf": [ { "items": { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, "type": "array" }, { "items": { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectAccess": { "oneOf": [ { "properties": { "access": { "type": "string", "enum": [ "all" ] }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy" ], "type": "object" }, { "properties": { "access": { "type": "string", "enum": [ "some" ] }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy", "projectIds" ], "type": "object" } ] } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, "type": "array" } ] } }, "required": [ "drains" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "schema": { "type": "string" } }, { "name": "includeMetadata", "in": "query", "schema": { "type": "boolean", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDrains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.drains.getDrains({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/drains/{id}": { "delete": { "description": "Delete a specific Drain by passing the drain id in the URL.", "operationId": "deleteDrain", "security": [ { "bearerToken": [] } ], "summary": "Delete a drain", "tags": [ "drains" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.drains.deleteDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] }, "get": { "description": "Get the information for a specific Drain by passing the drain id in the URL.", "operationId": "getDrain", "security": [ { "bearerToken": [] } ], "summary": "Find a Drain by id", "tags": [ "drains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectAccess": { "oneOf": [ { "properties": { "access": { "type": "string", "enum": [ "all" ] }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy" ], "type": "object" }, { "properties": { "access": { "type": "string", "enum": [ "some" ] }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy", "projectIds" ], "type": "object" } ] } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.drains.getDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update the configuration of an existing drain.", "operationId": "updateDrain", "security": [ { "bearerToken": [] } ], "summary": "Update an existing Drain", "tags": [ "drains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "delivery": { "oneOf": [ { "properties": { "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "http" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "encoding": { "type": "string", "enum": [ "json", "proto" ] }, "endpoint": { "properties": { "traces": { "type": "string" } }, "required": [ "traces" ], "type": "object" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "secret": { "oneOf": [ { "type": "string" }, { "properties": { "kind": { "type": "string", "enum": [ "INTEGRATION_SECRET" ] } }, "required": [ "kind" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "otlphttp" ] } }, "required": [ "encoding", "endpoint", "headers", "type" ], "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "table": { "type": "string" }, "type": { "type": "string", "enum": [ "clickhouse" ] } }, "required": [ "endpoint", "table", "type" ], "type": "object" }, { "properties": { "compression": { "type": "string", "enum": [ "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "endpoint": { "type": "string" }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "objectAcl": { "type": "string", "enum": [ "authenticated-read", "aws-exec-read", "bucket-owner-full-control", "bucket-owner-read", "private", "public-read", "public-read-write" ] }, "region": { "type": "string" }, "roleArn": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ] }, "type": { "type": "string", "enum": [ "s3" ] } }, "required": [ "compression", "encoding", "endpoint", "fileStructure", "region", "roleArn", "type" ], "type": "object" }, { "properties": { "target": { "type": "string", "enum": [ "vercel-otel-traces-db" ] }, "type": { "type": "string", "enum": [ "internal" ] } }, "required": [ "target", "type" ], "type": "object" } ] }, "disabledAt": { "type": "number" }, "disabledBy": { "type": "string" }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "limits-exceeded" ] }, "firstErrorTimestamp": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" }, "schemas": { "properties": { "ai_gateway": { "type": "object" }, "analytics": { "type": "object" }, "audit_log": { "type": "object" }, "connect": { "type": "object" }, "log": { "type": "object" }, "speed_insights": { "type": "object" }, "trace": { "type": "object" } }, "type": "object" }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "status": { "type": "string", "enum": [ "disabled", "enabled", "errored" ] }, "teamId": { "nullable": true, "type": "string" }, "updatedAt": { "type": "number" }, "filterV2": { "properties": { "filter": { "oneOf": [ { "properties": { "deployment": { "properties": { "environments": { "items": { "type": "string", "enum": [ "preview", "production" ] }, "type": "array" } }, "type": "object" }, "log": { "properties": { "legacy_excludeCachedStaticAssetLogs": { "type": "boolean", "enum": [ false, true ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ] }, "type": "array" } }, "type": "object" }, "project": { "properties": { "ids": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": { "type": "string", "enum": [ "basic" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "text": { "type": "string" }, "type": { "type": "string", "enum": [ "odata" ] } }, "required": [ "text", "type" ], "type": "object" } ] }, "version": { "type": "string", "enum": [ "v2" ] } }, "required": [ "filter", "version" ], "type": "object" }, "integrationConfigurationUri": { "type": "string" }, "integrationIcon": { "type": "string" }, "integrationWebsite": { "type": "string" }, "projectAccess": { "oneOf": [ { "properties": { "access": { "type": "string", "enum": [ "all" ] }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy" ], "type": "object" }, { "properties": { "access": { "type": "string", "enum": [ "some" ] }, "projectIds": { "items": { "type": "string" }, "type": "array" }, "managedBy": { "type": "string", "enum": [ "drain", "integration" ] } }, "required": [ "access", "managedBy", "projectIds" ], "type": "object" } ] } }, "required": [ "createdAt", "delivery", "id", "name", "ownerId", "schemas", "source", "updatedAt" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string" }, "projects": { "type": "string", "enum": [ "some", "all" ] }, "projectIds": { "type": "array", "items": { "type": "string" }, "nullable": true }, "filter": { "oneOf": [ { "type": "string" }, { "type": "object", "additionalProperties": false, "required": [ "version", "filter" ], "properties": { "version": { "type": "string" }, "filter": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "type" ], "properties": { "type": { "type": "string" }, "project": { "type": "object", "additionalProperties": false, "properties": { "ids": { "type": "array", "items": { "type": "string" } } } }, "log": { "type": "object", "additionalProperties": false, "properties": { "sources": { "type": "array", "items": { "type": "string", "enum": [ "build", "edge", "lambda", "static", "external", "firewall", "redirect" ] } } } }, "deployment": { "type": "object", "additionalProperties": false, "properties": { "environments": { "type": "array", "items": { "type": "string", "enum": [ "production", "preview" ] } } } } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "text" ], "properties": { "type": { "type": "string" }, "text": { "type": "string" } } } ] } } } ] }, "schemas": { "type": "object", "additionalProperties": { "type": "object", "required": [ "version" ], "properties": { "version": { "type": "string" } } } }, "delivery": { "type": "object", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "traces" ], "properties": { "traces": { "type": "string" } } } ] }, "encoding": { "type": "string", "enum": [ "proto", "json" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "compression", "fileStructure", "roleArn", "region" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "compression": { "type": "string", "enum": [ "none" ] }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "roleArn": { "type": "string" }, "region": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ], "default": "AES256" }, "objectAcl": { "type": "string", "enum": [ "private", "bucket-owner-read", "bucket-owner-full-control" ] } } } ] }, "sampling": { "type": "array", "maxItems": 10, "items": { "type": "object", "additionalProperties": false, "required": [ "type", "rate" ], "properties": { "type": { "type": "string" }, "rate": { "type": "number", "minimum": 0, "maximum": 1, "description": "Sampling rate from 0 to 1 (e.g., 0.1 for 10%)" }, "env": { "type": "string", "enum": [ "production", "preview" ], "description": "Environment to apply sampling to" }, "requestPath": { "type": "string", "description": "Request path prefix to apply the sampling rule to" } } }, "nullable": true }, "transforms": { "type": "array", "items": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" } } }, "nullable": true }, "status": { "type": "string", "enum": [ "enabled", "disabled" ] }, "source": { "type": "object", "oneOf": [ { "oneOf": [ { "properties": { "kind": { "type": "string", "default": "integration" }, "externalResourceId": { "type": "string" } }, "additionalProperties": false, "required": [ "externalResourceId" ] }, { "properties": { "kind": { "type": "string", "default": "integration" }, "resourceId": { "type": "string" } }, "additionalProperties": false, "required": [ "resourceId" ] }, { "properties": { "kind": { "type": "string", "default": "integration" } }, "additionalProperties": false, "required": [ "kind" ] } ] }, { "properties": { "kind": { "type": "string", "default": "self-served" } }, "additionalProperties": false, "required": [ "kind" ] } ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.drains.updateDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/drains/test": { "post": { "description": "Validate the delivery configuration of a Drain using sample events.", "operationId": "testDrain", "security": [ { "bearerToken": [] } ], "summary": "Validate Drain delivery configuration", "tags": [ "drains" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "endpoint": { "type": "string" }, "error": { "type": "string" }, "status": { "type": "string" } }, "required": [ "endpoint", "error", "status" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "schemas", "delivery" ], "properties": { "schemas": { "type": "object", "additionalProperties": { "type": "object", "required": [ "version" ], "properties": { "version": { "type": "string" } } } }, "delivery": { "type": "object", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "compression": { "type": "string", "enum": [ "gzip", "none" ] }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "headers" ], "properties": { "type": { "type": "string" }, "endpoint": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "traces" ], "properties": { "traces": { "type": "string" } } } ] }, "encoding": { "type": "string", "enum": [ "proto", "json" ] }, "headers": { "type": "object", "additionalProperties": { "type": "string" } }, "secret": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "endpoint", "encoding", "compression", "fileStructure", "roleArn", "region" ], "properties": { "type": { "type": "string" }, "endpoint": { "type": "string" }, "encoding": { "type": "string", "enum": [ "json", "ndjson" ] }, "compression": { "type": "string", "enum": [ "none" ] }, "fileStructure": { "type": "string", "enum": [ "hive" ] }, "roleArn": { "type": "string" }, "region": { "type": "string" }, "serverSideEncryption": { "type": "string", "enum": [ "AES256", "aws:kms", "aws:kms:dsse" ], "default": "AES256" }, "objectAcl": { "type": "string", "enum": [ "private", "bucket-owner-read", "bucket-owner-full-control" ] } } } ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "testDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.drains.testDrain({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/edge-cache/invalidate-by-tags": { "post": { "description": "Marks a cache tag as stale, causing cache entries associated with that tag to be revalidated in the background on the next request.", "operationId": "invalidateByTags", "security": [ { "bearerToken": [] } ], "summary": "Invalidate by tag", "tags": [ "edge-cache" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "type": "object", "required": [ "tags" ], "properties": { "tags": { "oneOf": [ { "items": { "maxLength": 256, "type": "string" }, "maxItems": 16, "minItems": 1, "type": "array" }, { "maxLength": 8196, "type": "string" } ] }, "target": { "enum": [ "production", "preview" ], "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "invalidateByTags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.edgeCache.invalidateByTags({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/edge-cache/dangerously-delete-by-tags": { "post": { "description": "Marks a cache tag as deleted, causing cache entries associated with that tag to be revalidated in the foreground on the next request. Use this method with caution because one tag can be associated with many paths and deleting the cache can cause many concurrent requests to the origin leading to cache stampede problem. This method is for advanced use cases and is not recommended; prefer using `invalidateByTag` instead.", "operationId": "dangerouslyDeleteByTags", "security": [ { "bearerToken": [] } ], "summary": "Dangerously delete by tag", "tags": [ "edge-cache" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "type": "object", "required": [ "tags" ], "properties": { "revalidationDeadlineSeconds": { "minimum": 0, "maximum": 3.1536e+07, "type": "integer" }, "tags": { "oneOf": [ { "items": { "maxLength": 256, "type": "string" }, "maxItems": 16, "minItems": 1, "type": "array" }, { "maxLength": 8196, "type": "string" } ] }, "target": { "enum": [ "production", "preview" ], "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "dangerouslyDeleteByTags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.edgeCache.dangerouslyDeleteByTags({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/edge-cache/invalidate-by-src-images": { "post": { "description": "Marks a source image as stale, causing its corresponding transformed images to be revalidated in the background on the next request.", "operationId": "invalidateBySrcImages", "security": [ { "bearerToken": [] } ], "summary": "Invalidate by source image", "tags": [ "edge-cache" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "type": "object", "required": [ "srcImages" ], "properties": { "srcImages": { "items": { "type": "string" }, "maxItems": 8, "minItems": 1, "type": "array" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "invalidateBySrcImages", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.edgeCache.invalidateBySrcImages({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/edge-cache/dangerously-delete-by-src-images": { "post": { "description": "Marks a source image as deleted, causing cache entries associated with that source image to be revalidated in the foreground on the next request. Use this method with caution because one source image can be associated with many paths and deleting the cache can cause many concurrent requests to the origin leading to cache stampede problem. This method is for advanced use cases and is not recommended; prefer using `invalidateBySrcImage` instead.", "operationId": "dangerouslyDeleteBySrcImages", "security": [ { "bearerToken": [] } ], "summary": "Dangerously delete by source image", "tags": [ "edge-cache" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "type": "object", "required": [ "srcImages" ], "properties": { "revalidationDeadlineSeconds": { "minimum": 0, "maximum": 3.1536e+07, "type": "integer" }, "srcImages": { "items": { "type": "string" }, "maxItems": 8, "minItems": 1, "type": "array" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "dangerouslyDeleteBySrcImages", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.edgeCache.dangerouslyDeleteBySrcImages({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/global-config": { "get": { "description": "Returns all Global Configs.", "operationId": "getEdgeConfigs", "security": [ { "bearerToken": [] } ], "summary": "Get Global Configs", "tags": [ "global-config" ], "responses": { "200": { "description": "List of all global configs.", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string", "description": "The ID of the user who created the Global Config, optional because it is not always set." }, "deletedAt": { "nullable": true, "type": "number" }, "digest": { "type": "string" }, "id": { "type": "string" }, "ownerId": { "type": "string" }, "purpose": { "oneOf": [ { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "resourceId": { "type": "string" }, "type": { "type": "string", "enum": [ "experimentation" ] } }, "required": [ "resourceId", "type" ], "type": "object" } ] }, "schema": { "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "syncedToDynamoAt": { "type": "number", "description": "Timestamp of when the Global Config was synced to DynamoDB initially. It is only set when syncing the entire Global Config, not when updating." }, "transfer": { "properties": { "doneAt": { "nullable": true, "type": "number" }, "fromAccountId": { "type": "string" }, "startedAt": { "type": "number" } }, "required": [ "doneAt", "fromAccountId", "startedAt" ], "type": "object", "description": "Keeps track of the current state of the Global Config while it gets transferred." }, "updatedAt": { "type": "number" }, "itemCount": { "type": "number" }, "sizeInBytes": { "type": "number" } }, "required": [ "createdAt", "digest", "id", "itemCount", "ownerId", "sizeInBytes", "slug", "updatedAt" ], "type": "object", "description": "List of all global configs." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigs", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigs({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Creates a Global Config.", "operationId": "createEdgeConfig", "security": [ { "bearerToken": [] } ], "summary": "Create a Global Config", "tags": [ "global-config" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string", "description": "The ID of the user who created the Global Config, optional because it is not always set." }, "deletedAt": { "nullable": true, "type": "number" }, "digest": { "type": "string" }, "id": { "type": "string" }, "ownerId": { "type": "string" }, "purpose": { "oneOf": [ { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "resourceId": { "type": "string" }, "type": { "type": "string", "enum": [ "experimentation" ] } }, "required": [ "resourceId", "type" ], "type": "object" } ] }, "schema": { "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "syncedToDynamoAt": { "type": "number", "description": "Timestamp of when the Global Config was synced to DynamoDB initially. It is only set when syncing the entire Global Config, not when updating." }, "transfer": { "properties": { "doneAt": { "nullable": true, "type": "number" }, "fromAccountId": { "type": "string" }, "startedAt": { "type": "number" } }, "required": [ "doneAt", "fromAccountId", "startedAt" ], "type": "object", "description": "Keeps track of the current state of the Global Config while it gets transferred." }, "updatedAt": { "type": "number" }, "itemCount": { "type": "number" }, "sizeInBytes": { "type": "number" } }, "required": [ "createdAt", "digest", "id", "itemCount", "ownerId", "sizeInBytes", "slug", "updatedAt" ], "type": "object", "description": "A Global Config" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "slug" ], "properties": { "slug": { "maxLength": 64, "pattern": "^[\\w-]+$", "type": "string" }, "items": { "type": "object", "additionalProperties": {} } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createEdgeConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.createEdgeConfig({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n slug: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}": { "get": { "description": "Returns a Global Config.", "operationId": "getEdgeConfig", "security": [ { "bearerToken": [] } ], "summary": "Get a Global Config", "tags": [ "global-config" ], "responses": { "200": { "description": "The Global Config.", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string", "description": "The ID of the user who created the Global Config, optional because it is not always set." }, "deletedAt": { "nullable": true, "type": "number" }, "digest": { "type": "string" }, "id": { "type": "string" }, "ownerId": { "type": "string" }, "purpose": { "oneOf": [ { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "resourceId": { "type": "string" }, "type": { "type": "string", "enum": [ "experimentation" ] } }, "required": [ "resourceId", "type" ], "type": "object" } ] }, "schema": { "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "syncedToDynamoAt": { "type": "number", "description": "Timestamp of when the Global Config was synced to DynamoDB initially. It is only set when syncing the entire Global Config, not when updating." }, "transfer": { "properties": { "doneAt": { "nullable": true, "type": "number" }, "fromAccountId": { "type": "string" }, "startedAt": { "type": "number" } }, "required": [ "doneAt", "fromAccountId", "startedAt" ], "type": "object", "description": "Keeps track of the current state of the Global Config while it gets transferred." }, "updatedAt": { "type": "number" }, "itemCount": { "type": "number" }, "sizeInBytes": { "type": "number" } }, "required": [ "createdAt", "digest", "id", "itemCount", "ownerId", "sizeInBytes", "slug", "updatedAt" ], "type": "object", "description": "The Global Config." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfig({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Updates a Global Config.", "operationId": "updateEdgeConfig", "security": [ { "bearerToken": [] } ], "summary": "Update a Global Config", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string", "description": "The ID of the user who created the Global Config, optional because it is not always set." }, "deletedAt": { "nullable": true, "type": "number" }, "digest": { "type": "string" }, "id": { "type": "string" }, "ownerId": { "type": "string" }, "purpose": { "oneOf": [ { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags" ] } }, "required": [ "projectId", "type" ], "type": "object" }, { "properties": { "resourceId": { "type": "string" }, "type": { "type": "string", "enum": [ "experimentation" ] } }, "required": [ "resourceId", "type" ], "type": "object" } ] }, "schema": { "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "syncedToDynamoAt": { "type": "number", "description": "Timestamp of when the Global Config was synced to DynamoDB initially. It is only set when syncing the entire Global Config, not when updating." }, "transfer": { "properties": { "doneAt": { "nullable": true, "type": "number" }, "fromAccountId": { "type": "string" }, "startedAt": { "type": "number" } }, "required": [ "doneAt", "fromAccountId", "startedAt" ], "type": "object", "description": "Keeps track of the current state of the Global Config while it gets transferred." }, "updatedAt": { "type": "number" }, "itemCount": { "type": "number" }, "sizeInBytes": { "type": "number" } }, "required": [ "createdAt", "digest", "id", "itemCount", "ownerId", "sizeInBytes", "slug", "updatedAt" ], "type": "object", "description": "A Global Config" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "slug" ], "properties": { "slug": { "maxLength": 64, "pattern": "^[\\w-]+$", "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateEdgeConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.updateEdgeConfig({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n slug: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a Global Config by id.", "operationId": "deleteEdgeConfig", "security": [ { "bearerToken": [] } ], "summary": "Delete a Global Config", "tags": [ "global-config" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteEdgeConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.globalConfig.deleteEdgeConfig({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/items": { "get": { "description": "Returns all items of a Global Config.", "operationId": "getEdgeConfigItems", "security": [ { "bearerToken": [] } ], "summary": "Get Global Config items", "tags": [ "global-config" ], "responses": { "200": { "description": "List of all Global Config items.", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/GlobalConfigItem" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigItems", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigItems({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update multiple Global Config Items in batch.", "operationId": "patchEdgeConfigItems", "security": [ { "bearerToken": [] } ], "summary": "Update Global Config items in batch", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "status": { "type": "string" } }, "required": [ "status" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "412": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "items" ], "properties": { "items": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "operation": { "enum": [ "create", "update", "upsert", "delete" ] }, "key": { "maxLength": 256, "pattern": "^[\\w-]+$", "type": "string" }, "value": {}, "description": { "oneOf": [ { "type": "string", "maxLength": 512 }, { "type": "string" } ] } }, "anyOf": [ { "properties": { "operation": {} }, "required": [ "operation", "key", "value" ] }, { "properties": { "operation": { "enum": [ "update", "upsert" ] } }, "required": [ "operation", "key", "value" ] }, { "properties": { "operation": { "enum": [ "update", "upsert" ] } }, "required": [ "operation", "key", "description" ] }, { "properties": { "operation": {} }, "required": [ "operation", "key" ], "not": { "required": [ "value", "description" ] } } ] } ] } } } } } } } } }, "/v1/global-config/{edgeConfigId}/schema": { "get": { "description": "Returns the schema of a Global Config.", "operationId": "getEdgeConfigSchema", "security": [ { "bearerToken": [] } ], "summary": "Get Global Config schema", "tags": [ "global-config" ], "responses": { "200": { "description": "The Global Config.", "content": { "application/json": { "schema": { "nullable": true, "type": "object", "description": "The Global Config." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigSchema", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigSchema({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Update a Global Config's schema.", "operationId": "patchEdgeConfigSchema", "security": [ { "bearerToken": [] } ], "summary": "Update Global Config schema", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "nullable": true, "type": "object", "description": "The JSON schema uploaded by the user" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "dryRun", "in": "query", "required": false, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "definition" ], "properties": { "definition": {} } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "patchEdgeConfigSchema", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.patchEdgeConfigSchema({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n definition: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes the schema of existing Global Config.", "operationId": "deleteEdgeConfigSchema", "security": [ { "bearerToken": [] } ], "summary": "Delete a Global Config's schema", "tags": [ "global-config" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteEdgeConfigSchema", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.globalConfig.deleteEdgeConfigSchema({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/item/{edgeConfigItemKey}": { "get": { "description": "Returns a specific Global Config Item.", "operationId": "getEdgeConfigItem", "security": [ { "bearerToken": [] } ], "summary": "Get a Global Config item", "tags": [ "global-config" ], "responses": { "200": { "description": "The Global Config.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GlobalConfigItem" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "name": "edgeConfigItemKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigItem", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigItem({\n edgeConfigId: \"\",\n edgeConfigItemKey: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/tokens": { "get": { "description": "Returns all tokens of a Global Config.", "operationId": "getEdgeConfigTokens", "security": [ { "bearerToken": [] } ], "summary": "Get all tokens of a Global Config", "tags": [ "global-config" ], "responses": { "200": { "description": "The Global Config.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GlobalConfigToken" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigTokens", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigTokens({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes one or more tokens of an existing Global Config.", "operationId": "deleteEdgeConfigTokens", "security": [ { "bearerToken": [] } ], "summary": "Delete one or more Global Config tokens", "tags": [ "global-config" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "tokens": { "type": "array", "minItems": 1, "items": { "type": "string" } }, "ids": { "type": "array", "minItems": 1, "items": { "type": "string" } } }, "anyOf": [ { "required": [ "tokens" ] }, { "required": [ "ids" ] } ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "deleteEdgeConfigTokens", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.globalConfig.deleteEdgeConfigTokens({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n tokens: [\n \"\",\n \"\",\n \"\",\n ],\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/token/{token}": { "get": { "description": "Return meta data about a Global Config token.", "operationId": "getEdgeConfigToken", "security": [ { "bearerToken": [] } ], "summary": "Get Global Config token meta data", "tags": [ "global-config" ], "responses": { "200": { "description": "The Global Config.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GlobalConfigToken" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigToken({\n edgeConfigId: \"\",\n token: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/token": { "post": { "description": "Adds a token to an existing Global Config.", "operationId": "createEdgeConfigToken", "security": [ { "bearerToken": [] } ], "summary": "Create a Global Config token", "tags": [ "global-config" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string" }, "token": { "type": "string" } }, "required": [ "id", "token" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "label" ], "properties": { "label": { "maxLength": 52, "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createEdgeConfigToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.createEdgeConfigToken({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n label: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/backups/{edgeConfigBackupVersionId}": { "get": { "description": "Retrieves a specific version of a Global Config from backup storage.", "operationId": "getEdgeConfigBackup", "security": [ { "bearerToken": [] } ], "summary": "Get Global Config backup", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "backup": { "properties": { "digest": { "type": "string" }, "items": { "additionalProperties": { "properties": { "createdAt": { "type": "number" }, "description": { "type": "string" }, "updatedAt": { "type": "number" }, "value": { "$ref": "#/components/schemas/GlobalConfigItemValue" } }, "required": [ "createdAt", "updatedAt", "value" ], "type": "object" }, "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "updatedAt": { "type": "number" } }, "required": [ "digest", "items", "slug", "updatedAt" ], "type": "object" }, "id": { "type": "string" }, "lastModified": { "type": "number" }, "metadata": { "properties": { "itemsBytes": { "type": "number" }, "itemsCount": { "type": "number" }, "updatedAt": { "type": "string" }, "updatedBy": { "type": "string" } }, "type": "object" }, "user": { "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object" } }, "required": [ "backup", "id", "lastModified", "metadata" ], "type": "object", "description": "The object the API responds with when requesting a Global Config backup" }, { "properties": { "backup": { "properties": { "digest": { "type": "string" }, "items": { "additionalProperties": { "properties": { "createdAt": { "type": "number" }, "description": { "type": "string" }, "updatedAt": { "type": "number" }, "value": { "$ref": "#/components/schemas/GlobalConfigItemValue" } }, "required": [ "createdAt", "updatedAt", "value" ], "type": "object" }, "type": "object" }, "slug": { "type": "string", "description": "Name for the Global Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores)." }, "updatedAt": { "type": "number" } }, "required": [ "digest", "items", "slug", "updatedAt" ], "type": "object" }, "id": { "type": "string" }, "lastModified": { "type": "number" }, "metadata": { "properties": { "itemsBytes": { "type": "number" }, "itemsCount": { "type": "number" }, "updatedAt": { "type": "string" }, "updatedBy": { "type": "string" } }, "type": "object" }, "user": { "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "id", "username" ], "type": "object" } }, "required": [ "backup", "id", "lastModified", "metadata", "user" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "edgeConfigBackupVersionId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigBackup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigBackup({\n edgeConfigId: \"\",\n edgeConfigBackupVersionId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/backups/{edgeConfigBackupVersionId}/restore": { "post": { "description": "Restores a Global Config backup.", "operationId": "restoreEdgeConfigBackup", "security": [ { "bearerToken": [] } ], "summary": "Restore Global Config backup", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "digest": { "type": "string" }, "previousDigest": { "type": "string" }, "restoredFrom": { "type": "string" }, "status": { "type": "string", "enum": [ "ok" ] } }, "required": [ "digest", "previousDigest", "restoredFrom", "status" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "412": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^ecfg_" } }, { "name": "edgeConfigBackupVersionId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "restoreEdgeConfigBackup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.restoreEdgeConfigBackup({\n edgeConfigId: \"\",\n edgeConfigBackupVersionId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/global-config/{edgeConfigId}/backups": { "get": { "description": "Returns backups of a Global Config.", "operationId": "getEdgeConfigBackups", "security": [ { "bearerToken": [] } ], "summary": "Get Global Config backups", "tags": [ "global-config" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "backups": { "items": { "properties": { "metadata": { "properties": { "itemsBytes": { "type": "number" }, "itemsCount": { "type": "number" }, "updatedAt": { "type": "string" }, "updatedBy": { "type": "string" } }, "type": "object" }, "id": { "type": "string" }, "lastModified": { "type": "number" } }, "required": [ "id", "lastModified" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "hasNext": { "type": "boolean", "enum": [ false, true ] }, "next": { "type": "string" } }, "required": [ "hasNext" ], "type": "object" } }, "required": [ "backups", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "edgeConfigId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "next", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "number", "minimum": 0, "maximum": 50 } }, { "name": "metadata", "in": "query", "required": false, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getEdgeConfigBackups", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.globalConfig.getEdgeConfigBackups({\n edgeConfigId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/env": { "post": { "description": "Creates shared environment variable(s) for a team.", "operationId": "createSharedEnvVariable", "security": [ { "bearerToken": [] } ], "summary": "Create one or more shared environment variables", "tags": [ "environment" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "created": { "items": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "type": "object" }, "type": "array" }, "failed": { "items": { "properties": { "error": { "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "envVarId": { "type": "string" }, "envVarKey": { "type": "string" }, "gitBranch": { "type": "string" }, "key": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" }, "project": { "type": "string" }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "value": { "oneOf": [ { "type": "string" }, { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" } ] } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, "type": "array" } }, "required": [ "created", "failed" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "evs" ], "anyOf": [ { "required": [ "target" ] }, { "required": [ "applyToAllCustomEnvironments" ] }, { "required": [ "customEnvironmentIds" ] } ], "properties": { "evs": { "type": "array", "maximum": 50, "minimum": 1, "items": { "type": "object", "required": [ "key", "value" ], "properties": { "key": { "description": "The name of the Shared Environment Variable", "type": "string", "example": "API_URL" }, "value": { "description": "The value of the Shared Environment Variable", "type": "string", "example": "https://api.vercel.com" }, "comment": { "type": "string", "description": "A comment to add context on what this Shared Environment Variable is for", "example": "database connection string for production", "maxLength": 500 } } } }, "type": { "description": "The type of environment variable", "type": "string", "enum": [ "encrypted", "sensitive" ], "example": "encrypted" }, "target": { "description": "The target environment of the Shared Environment Variable", "type": "array", "items": { "enum": [ "production", "preview", "development" ] }, "example": [ "production", "preview" ] }, "projectId": { "description": "Associate a Shared Environment Variable to projects.", "type": "array", "items": { "type": "string" }, "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrHRCRV" ], "deprecated": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSharedEnvVariable", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.createSharedEnvVariable({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n evs: [],\n type: \"encrypted\",\n target: [\n \"production\",\n \"preview\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Lists all Shared Environment Variables for a team, taking into account optional filters.", "operationId": "listSharedEnvVariable", "security": [ { "bearerToken": [] } ], "summary": "Lists all Shared Environment Variables for a team", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "items": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "securityIssues": { "items": { "type": "string", "enum": [ "flags-secret-needs-split", "readable-secret" ] }, "type": "array" }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "required": [ "created", "decrypted", "id", "key", "securityIssues" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "data", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "search", "in": "query", "schema": { "type": "string" } }, { "name": "projectId", "description": "Filter SharedEnvVariables that belong to a project", "in": "query", "schema": { "description": "Filter SharedEnvVariables that belong to a project", "type": "string", "example": "prj_2WjyKQmM8ZnGcJsPWMrHRHrE" } }, { "name": "ids", "description": "Filter SharedEnvVariables based on comma separated ids", "in": "query", "schema": { "description": "Filter SharedEnvVariables based on comma separated ids", "type": "string", "example": "env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV" } }, { "name": "exclude_ids", "description": "Filter SharedEnvVariables based on comma separated ids", "in": "query", "schema": { "description": "Filter SharedEnvVariables based on comma separated ids", "type": "string", "example": "env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV" } }, { "name": "exclude-ids", "description": "Filter SharedEnvVariables based on comma separated ids", "in": "query", "schema": { "description": "Filter SharedEnvVariables based on comma separated ids", "type": "string", "example": "env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV" } }, { "name": "exclude_projectId", "description": "Filter SharedEnvVariables that belong to a project", "in": "query", "schema": { "description": "Filter SharedEnvVariables that belong to a project", "type": "string", "example": "prj_2WjyKQmM8ZnGcJsPWMrHRHrE" } }, { "name": "exclude-projectId", "description": "Filter SharedEnvVariables that belong to a project", "in": "query", "schema": { "description": "Filter SharedEnvVariables that belong to a project", "type": "string", "example": "prj_2WjyKQmM8ZnGcJsPWMrHRHrE" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listSharedEnvVariable", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.listSharedEnvVariable({\n projectId: \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n ids: \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\",\n excludeIdsQueryParameter: \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\",\n excludeIdsQueryParameter1: \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\",\n excludeProjectIdQueryParameter: \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n excludeProjectIdQueryParameter1: \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Updates a given Shared Environment Variable for a Team.", "operationId": "updateSharedEnvVariable", "security": [ { "bearerToken": [] } ], "summary": "Updates one or more shared environment variables", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "failed": { "items": { "properties": { "error": { "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "envVarId": { "type": "string" }, "envVarKey": { "type": "string" }, "gitBranch": { "type": "string" }, "key": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" }, "project": { "type": "string" }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "value": { "oneOf": [ { "type": "string" }, { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" } ] } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, "type": "array" }, "updated": { "items": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "type": "object" }, "type": "array" } }, "required": [ "failed", "updated" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "type": "object", "required": [ "updates" ], "properties": { "updates": { "description": "An object where each key is an environment variable ID (not the key name) and the value is the update to apply", "type": "object", "example": { "env_2WjyKQmM8ZnGcJsPWMrHRHrE": { "key": "API_URL", "value": "https://api.vercel.com", "target": [ "production", "preview" ], "projectIdUpdates": { "link": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE" ] } } }, "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "The name of the Shared Environment Variable", "type": "string", "example": "API_URL" }, "value": { "description": "The value of the Shared Environment Variable", "type": "string", "example": "https://api.vercel.com" }, "target": { "description": "The target environment of the Shared Environment Variable", "type": "array", "items": { "enum": [ "production", "preview", "development" ] }, "example": [ "production", "preview" ] }, "projectId": { "description": "Associate a Shared Environment Variable to projects.", "type": "array", "items": { "type": "string" }, "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrHRCRV" ] }, "projectIdUpdates": { "description": "Incrementally update project linking without specifying the full list", "type": "object", "additionalProperties": false, "properties": { "link": { "description": "Project IDs to add to this environment variable", "type": "array", "items": { "type": "string" }, "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE" ] }, "unlink": { "description": "Project IDs to remove from this environment variable", "type": "array", "items": { "type": "string" }, "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRCRV" ] } } }, "type": { "description": "The new type of the Shared Environment Variable", "type": "string", "enum": [ "encrypted", "sensitive" ], "example": "encrypted" }, "comment": { "type": "string", "description": "A comment to add context on what this Shared Environment Variable is for", "example": "database connection string for production", "maxLength": 500 } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateSharedEnvVariable", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.updateSharedEnvVariable({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n updates: {\n \"env_2WjyKQmM8ZnGcJsPWMrHRHrE\": {\n key: \"API_URL\",\n value: \"https://api.vercel.com\",\n target: [\n \"production\",\n \"preview\",\n ],\n projectIdUpdates: {\n link: [\n \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n ],\n },\n },\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes one or many Shared Environment Variables for a given team.", "operationId": "deleteSharedEnvVariable", "security": [ { "bearerToken": [] } ], "summary": "Delete one or more Env Var", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "deleted": { "items": { "type": "string" }, "type": "array" }, "failed": { "items": { "properties": { "error": { "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "envVarId": { "type": "string" }, "envVarKey": { "type": "string" }, "gitBranch": { "type": "string" }, "key": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" }, "project": { "type": "string" }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "value": { "oneOf": [ { "type": "string" }, { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" } ] } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, "type": "array" } }, "required": [ "deleted", "failed" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "ids" ], "properties": { "ids": { "description": "IDs of the Shared Environment Variables to delete", "minimum": 1, "maximum": 50, "type": "array", "items": { "type": "string" }, "example": [ "env_abc123", "env_abc124" ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "deleteSharedEnvVariable", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.deleteSharedEnvVariable({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n ids: [\n \"env_abc123\",\n \"env_abc124\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/env/{id}": { "get": { "description": "Retrieve the decrypted value of a Shared Environment Variable by id.", "operationId": "getSharedEnvVar", "security": [ { "bearerToken": [] } ], "summary": "Retrieve the decrypted value of a Shared Environment Variable by id.", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "id", "description": "The unique ID for the Shared Environment Variable to get the decrypted value.", "in": "path", "required": true, "schema": { "description": "The unique ID for the Shared Environment Variable to get the decrypted value.", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSharedEnvVar", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.getSharedEnvVar({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/env/{id}/unlink/{projectId}": { "patch": { "description": "Disconnects a shared environment variable for a given project", "operationId": "unlinkSharedEnvVariable", "security": [ { "bearerToken": [] } ], "summary": "Disconnects a shared environment variable for a given project", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "The unique ID for the Shared Environment Variable to unlink from the project.", "in": "path", "required": true, "schema": { "description": "The unique ID for the Shared Environment Variable to unlink from the project.", "type": "string" } }, { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "unlinkSharedEnvVariable", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.unlinkSharedEnvVariable({\n id: \"\",\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v3/events": { "get": { "description": "Retrieves a list of \"events\" generated by the User on Vercel. Events are generated when the User performs a particular action, such as logging in, creating a deployment, and joining a Team (just to name a few). When the `teamId` parameter is supplied, then the events that are returned will be in relation to the Team that was specified.", "operationId": "listUserEvents", "security": [ { "bearerToken": [] } ], "summary": "List User Events", "tags": [ "user" ], "responses": { "200": { "description": "Successful response.", "content": { "application/json": { "schema": { "properties": { "events": { "items": { "$ref": "#/components/schemas/UserEvent" }, "type": "array", "description": "Array of events generated by the User." } }, "required": [ "events" ], "type": "object", "description": "Successful response." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "events" ] }, "parameters": [ { "name": "limit", "description": "Maximum number of items which may be returned.", "in": "query", "schema": { "description": "Maximum number of items which may be returned.", "example": 20, "type": "number" } }, { "name": "since", "description": "Timestamp to only include items created since then.", "in": "query", "schema": { "description": "Timestamp to only include items created since then.", "example": "2019-12-08T10:00:38.976Z", "type": "string" } }, { "name": "until", "description": "Timestamp to only include items created until then.", "in": "query", "schema": { "description": "Timestamp to only include items created until then.", "example": "2019-12-09T23:00:38.976Z", "type": "string" } }, { "name": "types", "description": "Comma-delimited list of event \"types\" to filter the results by.", "in": "query", "schema": { "description": "Comma-delimited list of event \"types\" to filter the results by.", "example": "login,team-member-join,domain-buy", "type": "string" } }, { "name": "userId", "description": "Deprecated. Use `principalId` instead. If `principalId` and `userId` both exist, `principalId` will be used.", "in": "query", "schema": { "description": "Deprecated. Use `principalId` instead. If `principalId` and `userId` both exist, `principalId` will be used.", "example": "aeIInYVk59zbFF2SxfyxxmuO", "type": "string" } }, { "name": "principalId", "description": "When retrieving events for a Team, the `principalId` parameter may be specified to filter events generated by a specific principal.", "in": "query", "schema": { "description": "When retrieving events for a Team, the `principalId` parameter may be specified to filter events generated by a specific principal.", "example": "aeIInYVk59zbFF2SxfyxxmuO", "type": "string" } }, { "name": "projectIds", "description": "Comma-delimited list of project IDs to filter the results by.", "in": "query", "schema": { "description": "Comma-delimited list of project IDs to filter the results by.", "example": "aeIInYVk59zbFF2SxfyxxmuO", "type": "string" } }, { "name": "entityId", "description": "Filters events to those associated with a specific entity (matched against `payload.id`). For example, a connector ID.", "in": "query", "schema": { "description": "Filters events to those associated with a specific entity (matched against `payload.id`). For example, a connector ID.", "example": "scl_123", "type": "string" } }, { "name": "withPayload", "description": "When set to `true`, the response will include the `payload` field for each event.", "in": "query", "schema": { "description": "When set to `true`, the response will include the `payload` field for each event.", "example": "true", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listUserEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.user.listUserEvents({\n limit: 20,\n since: \"2019-12-08T10:00:38.976Z\",\n until: \"2019-12-09T23:00:38.976Z\",\n types: \"login,team-member-join,domain-buy\",\n userId: \"aeIInYVk59zbFF2SxfyxxmuO\",\n principalId: \"aeIInYVk59zbFF2SxfyxxmuO\",\n projectIds: \"aeIInYVk59zbFF2SxfyxxmuO\",\n entityId: \"scl_123\",\n withPayload: \"true\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listUserEvents", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.User.ListUserEvents(ctx, operations.ListUserEventsRequest{\n Limit: vercel.Float64(20),\n Since: vercel.String(\"2019-12-08T10:00:38.976Z\"),\n Until: vercel.String(\"2019-12-09T23:00:38.976Z\"),\n Types: vercel.String(\"login,team-member-join,domain-buy\"),\n UserID: vercel.String(\"aeIInYVk59zbFF2SxfyxxmuO\"),\n WithPayload: vercel.String(\"true\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/events/types": { "get": { "description": "Returns the list of user-facing event types with descriptions.", "operationId": "listEventTypes", "security": [ { "bearerToken": [] } ], "summary": "List Event Types", "tags": [ "user" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListEventTypesResponse" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listEventTypes", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.user.listEventTypes({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/projects/{projectIdOrName}/feature-flags/flags": { "get": { "description": "Retrieve feature flags for a project. Returns an opaque cursor for pagination.", "operationId": "listFlagsV2", "security": [ { "bearerToken": [] } ], "summary": "List flags", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "properties": { "next": { "nullable": true, "type": "string" } }, "required": [ "next" ], "type": "object" }, "data": { "items": { "oneOf": [ { "$ref": "#/components/schemas/Flag" }, { "$ref": "#/components/schemas/MarketplaceFlag" } ] }, "type": "array" } }, "required": [ "data", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "state", "description": "The state of the flags to retrieve. Defaults to `active`.", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "active", "archived" ], "description": "The state of the flags to retrieve. Defaults to `active`." } }, { "name": "limit", "description": "Maximum number of flags to return.", "in": "query", "required": false, "schema": { "description": "Maximum number of flags to return.", "type": "integer", "minimum": 1, "maximum": 100, "default": 25 } }, { "name": "cursor", "description": "Pagination cursor to continue from.", "in": "query", "required": false, "schema": { "description": "Pagination cursor to continue from.", "type": "string" } }, { "name": "search", "description": "Search flags by their slug or description. Case-insensitive.", "in": "query", "required": false, "schema": { "description": "Search flags by their slug or description. Case-insensitive.", "type": "string", "maxLength": 256 } }, { "name": "tags", "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "in": "query", "required": false, "schema": { "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "type": "array", "items": { "type": "string" } } }, { "name": "createdBy", "description": "Filter flags by the id of the entity that created them (a user or team id).", "in": "query", "required": false, "schema": { "description": "Filter flags by the id of the entity that created them (a user or team id).", "type": "string", "maxLength": 256 } }, { "name": "maintainerIds", "description": "Filter flags by maintainer user id. Repeat the parameter for multiple maintainers (any may match).", "in": "query", "required": false, "schema": { "description": "Filter flags by maintainer user id. Repeat the parameter for multiple maintainers (any may match).", "type": "array", "items": { "type": "string", "maxLength": 24 }, "maxItems": 25 } }, { "name": "includeMarketplaceFlags", "description": "Whether to include Marketplace experimentation items in the paginated response. Defaults to false.", "in": "query", "required": false, "schema": { "description": "Whether to include Marketplace experimentation items in the paginated response. Defaults to false.", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listFlagsV2", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listFlagsV2({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/flags": { "get": { "description": "Retrieve feature flags for a project. The list can be filtered by state and supports pagination.", "operationId": "listFlags", "security": [ { "bearerToken": [] } ], "summary": "List flags", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/Flag" }, "type": "array" }, "pagination": { "properties": { "next": { "nullable": true, "type": "string" } }, "required": [ "next" ], "type": "object" } }, "required": [ "data", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "state", "description": "The state of the flags to retrieve. Defaults to `active`.", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "active", "archived" ], "description": "The state of the flags to retrieve. Defaults to `active`." } }, { "name": "withMetadata", "description": "Deprecated. Whether to include creator metadata in each flag in the response. Resolve creator identity client-side (e.g. via the team members endpoint) instead; this parameter will be removed in a future release. Use `GET /v1/projects/:id/feature-flags/flags/:flagIdOrSlug?withMetadata=true` for single-flag lookups that need creator metadata.", "in": "query", "required": false, "schema": { "description": "Deprecated. Whether to include creator metadata in each flag in the response. Resolve creator identity client-side (e.g. via the team members endpoint) instead; this parameter will be removed in a future release. Use `GET /v1/projects/:id/feature-flags/flags/:flagIdOrSlug?withMetadata=true` for single-flag lookups that need creator metadata.", "type": "boolean", "deprecated": true } }, { "name": "limit", "description": "Maximum number of flags to return. When not set, all flags are returned.", "in": "query", "required": false, "schema": { "description": "Maximum number of flags to return. When not set, all flags are returned.", "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "cursor", "description": "Pagination cursor to continue from.", "in": "query", "required": false, "schema": { "description": "Pagination cursor to continue from.", "type": "string" } }, { "name": "search", "description": "Search flags by their slug or description. Case-insensitive.", "in": "query", "required": false, "schema": { "description": "Search flags by their slug or description. Case-insensitive.", "type": "string", "maxLength": 256 } }, { "name": "tags", "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "in": "query", "required": false, "schema": { "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "type": "array", "items": { "type": "string" } } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listFlags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listFlags({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Create a new feature flag for a project. The flag must have a unique slug within the project and specify its kind (boolean, string, number, or json).", "operationId": "createFlag", "security": [ { "bearerToken": [] } ], "summary": "Create a flag", "tags": [ "feature-flags" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "description": { "type": "string" }, "environments": { "additionalProperties": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "fallthrough": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] }, "pausedOutcome": { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, "reuse": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "environment": { "type": "string" } }, "required": [ "active", "environment" ], "type": "object" }, "revision": { "type": "number" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" }, "targets": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "type": "object" } }, "required": [ "active", "fallthrough", "pausedOutcome", "rules" ], "type": "object" }, "type": "object" }, "id": { "type": "string" }, "kind": { "type": "string", "enum": [ "boolean", "json", "number", "string" ] }, "maintainerIds": { "items": { "type": "string" }, "type": "array" }, "ownerId": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "revision": { "type": "number" }, "seed": { "type": "number" }, "slug": { "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "tags": { "items": { "type": "string" }, "type": "array" }, "typeName": { "type": "string", "enum": [ "flag" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "type": "string" }, "variants": { "items": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "additionalProperties": true, "type": "object" }, { "items": {}, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "id", "value" ], "type": "object" }, "type": "array" } }, "required": [ "createdAt", "createdBy", "environments", "id", "kind", "ownerId", "projectId", "revision", "seed", "slug", "state", "typeName", "updatedAt", "variants" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "slug": { "description": "A unique (per project) key for the flag, composed of letters, numbers, dashes, and underscores", "type": "string", "pattern": "^[a-zA-Z0-9_-]{1,512}$" }, "kind": { "description": "The kind of flag", "enum": [ "boolean", "string", "number", "json" ] }, "variants": { "type": "array", "description": "The variants of the flag", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "description": "The id of the variant", "type": "string" }, "label": { "description": "A label for the variant", "type": "string" }, "description": { "description": "A description of the variant", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "type": "object" }, { "type": "array", "items": {} }, { "type": "string" } ] } }, "required": [ "id", "value" ] } }, "environments": { "type": "object", "description": "The configuration for the flag in different environments", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "active": { "type": "boolean" }, "reuse": { "type": "object", "description": "Allows linking this environment to another environment so this flag will be evaluated with the other flag's configuration", "additionalProperties": false, "required": [ "active", "environment" ], "properties": { "active": { "type": "boolean", "description": "Whether the reuse is active or not" }, "environment": { "type": "string", "description": "The environment to link to" } } }, "targets": { "type": "object", "description": "Allows assigning targets to variants while bypassing the flag's rules", "additionalProperties": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } } }, "pausedOutcome": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, "rules": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string" }, "conditions": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "lhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] } ] }, "cmp": { "type": "string", "enum": [ "eq", "!eq", "oneOf", "!oneOf", "containsAllOf", "containsAnyOf", "containsNoneOf", "startsWith", "!startsWith", "endsWith", "!endsWith", "contains", "!contains", "ex", "!ex", "gt", "gte", "lt", "lte", "regex", "!regex", "before", "after" ] }, "rhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "list/inline", "list" ] }, "items": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] } ] }, "maxItems": 10000 } }, "required": [ "type", "items" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "pattern": { "type": "string" }, "flags": { "type": "string" } }, "required": [ "type", "pattern", "flags" ] }, { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "cmpOptions": { "type": "object", "additionalProperties": false, "properties": { "ignoreCase": { "type": "boolean" } } } }, "required": [ "lhs", "cmp" ] } }, "outcome": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "weights": { "type": "object", "additionalProperties": { "type": "number" }, "description": "The distribution for each variant" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" } }, "required": [ "type", "base", "weights", "defaultVariantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "startTimestamp": { "type": "number", "description": "Epoch ms when the rollout begins" }, "rollFromVariantId": { "type": "string", "description": "The variant to roll away from" }, "rollToVariantId": { "type": "string", "description": "The variant to roll towards" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" }, "slots": { "type": "array", "description": "Each slot defines a promille and how long it is served for. After all slots expire, 100% is served indefinitely. The final implicit 100% slot does not need to be listed. Example: [[5_000, 21_600_000], [10_000, 28_800_000]] means 5‰ for 6h, then 10‰ for 8h, then 100% indefinitely.", "items": { "type": "object", "additionalProperties": false, "properties": { "promille": { "type": "number", "minimum": 0, "maximum": 100000, "description": "Promille of traffic for rollToVariant (0-100_000, where 1_000 = 1%)" }, "durationMs": { "type": "number", "minimum": 0, "description": "How long this promille is served in ms before moving to the next slot." } }, "required": [ "promille", "durationMs" ] }, "minItems": 1 } }, "required": [ "type", "base", "startTimestamp", "rollFromVariantId", "rollToVariantId", "defaultVariantId", "slots" ] } ] } }, "required": [ "id", "conditions", "outcome" ] }, "maxItems": 10000 }, "fallthrough": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "weights": { "type": "object", "additionalProperties": { "type": "number" }, "description": "The distribution for each variant" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" } }, "required": [ "type", "base", "weights", "defaultVariantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "startTimestamp": { "type": "number", "description": "Epoch ms when the rollout begins" }, "rollFromVariantId": { "type": "string", "description": "The variant to roll away from" }, "rollToVariantId": { "type": "string", "description": "The variant to roll towards" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" }, "slots": { "type": "array", "description": "Each slot defines a promille and how long it is served for. After all slots expire, 100% is served indefinitely. The final implicit 100% slot does not need to be listed. Example: [[5_000, 21_600_000], [10_000, 28_800_000]] means 5‰ for 6h, then 10‰ for 8h, then 100% indefinitely.", "items": { "type": "object", "additionalProperties": false, "properties": { "promille": { "type": "number", "minimum": 0, "maximum": 100000, "description": "Promille of traffic for rollToVariant (0-100_000, where 1_000 = 1%)" }, "durationMs": { "type": "number", "minimum": 0, "description": "How long this promille is served in ms before moving to the next slot." } }, "required": [ "promille", "durationMs" ] }, "minItems": 1 } }, "required": [ "type", "base", "startTimestamp", "rollFromVariantId", "rollToVariantId", "defaultVariantId", "slots" ] } ] }, "revision": { "type": "number", "description": "The revision of the environment config" } }, "required": [ "active", "pausedOutcome", "rules", "fallthrough" ] }, "maxProperties": 10 }, "seed": { "type": "number", "minimum": 0, "maximum": 100000, "description": "A random seed to prevent split points in different flags from having the same targets" }, "description": { "description": "A description of the flag", "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "maintainerIds": { "description": "The user ids of the maintainers of the flag", "type": "array", "items": { "type": "string", "maxLength": 24 }, "maxItems": 5 }, "permanent": { "description": "Whether this flag is marked as permanent, indicating it should not be removed", "type": "boolean" }, "tags": { "description": "Tags for categorizing the flag", "type": "array", "items": { "type": "string", "maxLength": 64 }, "maxItems": 20, "uniqueItems": true } }, "required": [ "slug", "kind", "environments" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createFlag", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.createFlag({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}": { "get": { "description": "Retrieve a specific feature flag by its ID or slug.", "operationId": "getFlag", "security": [ { "bearerToken": [] } ], "summary": "Get a flag", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Flag" } } } }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "flagIdOrSlug", "description": "The flag id or name", "in": "path", "required": true, "schema": { "description": "The flag id or name", "type": "string" } }, { "name": "ifMatch", "description": "Etag to match, can be used interchangeably with the `if-match` header", "in": "query", "required": false, "schema": { "description": "Etag to match, can be used interchangeably with the `if-match` header", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata in the response", "in": "query", "required": false, "schema": { "description": "Whether to include metadata in the response", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getFlag", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.getFlag({\n projectIdOrName: \"\",\n flagIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update an existing feature flag. This endpoint supports partial updates, allowing you to modify specific properties like variants, environments, or state without providing the full flag configuration.", "operationId": "updateFlag", "security": [ { "bearerToken": [] } ], "summary": "Update a flag", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "description": { "type": "string" }, "environments": { "additionalProperties": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "fallthrough": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] }, "pausedOutcome": { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, "reuse": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "environment": { "type": "string" } }, "required": [ "active", "environment" ], "type": "object" }, "revision": { "type": "number" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" }, "targets": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "type": "object" } }, "required": [ "active", "fallthrough", "pausedOutcome", "rules" ], "type": "object" }, "type": "object" }, "id": { "type": "string" }, "kind": { "type": "string", "enum": [ "boolean", "json", "number", "string" ] }, "maintainerIds": { "items": { "type": "string" }, "type": "array" }, "ownerId": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "revision": { "type": "number" }, "seed": { "type": "number" }, "slug": { "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "tags": { "items": { "type": "string" }, "type": "array" }, "typeName": { "type": "string", "enum": [ "flag" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "type": "string" }, "variants": { "items": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "additionalProperties": true, "type": "object" }, { "items": {}, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "id", "value" ], "type": "object" }, "type": "array" } }, "required": [ "createdAt", "createdBy", "environments", "id", "kind", "ownerId", "projectId", "revision", "seed", "slug", "state", "typeName", "updatedAt", "variants" ], "type": "object" }, { "$ref": "#/components/schemas/Flag" } ] } } } }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "flagIdOrSlug", "description": "The flag id or name", "in": "path", "required": true, "schema": { "description": "The flag id or name", "type": "string" } }, { "name": "ifMatch", "description": "Etag to match, can be used interchangeably with the `if-match` header", "in": "query", "required": false, "schema": { "description": "Etag to match, can be used interchangeably with the `if-match` header", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata in the response", "in": "query", "required": false, "schema": { "description": "Whether to include metadata in the response", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "createdBy": { "description": "The user who created this patch", "type": "string" }, "message": { "description": "Additional message for this version", "type": "string" }, "variants": { "type": "array", "description": "The variants of the flag", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "description": "The id of the variant", "type": "string" }, "label": { "description": "A label for the variant", "type": "string" }, "description": { "description": "A description of the variant", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "type": "object" }, { "type": "array", "items": {} }, { "type": "string" } ] } }, "required": [ "id", "value" ] } }, "environments": { "type": "object", "description": "The configuration for the flag in different environments", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "active": { "type": "boolean" }, "reuse": { "type": "object", "description": "Allows linking this environment to another environment so this flag will be evaluated with the other flag's configuration", "additionalProperties": false, "required": [ "active", "environment" ], "properties": { "active": { "type": "boolean", "description": "Whether the reuse is active or not" }, "environment": { "type": "string", "description": "The environment to link to" } } }, "targets": { "type": "object", "description": "Allows assigning targets to variants while bypassing the flag's rules", "additionalProperties": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } } }, "pausedOutcome": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, "rules": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string" }, "conditions": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "lhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] } ] }, "cmp": { "type": "string", "enum": [ "eq", "!eq", "oneOf", "!oneOf", "containsAllOf", "containsAnyOf", "containsNoneOf", "startsWith", "!startsWith", "endsWith", "!endsWith", "contains", "!contains", "ex", "!ex", "gt", "gte", "lt", "lte", "regex", "!regex", "before", "after" ] }, "rhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "list/inline", "list" ] }, "items": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] } ] }, "maxItems": 10000 } }, "required": [ "type", "items" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "pattern": { "type": "string" }, "flags": { "type": "string" } }, "required": [ "type", "pattern", "flags" ] }, { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "cmpOptions": { "type": "object", "additionalProperties": false, "properties": { "ignoreCase": { "type": "boolean" } } } }, "required": [ "lhs", "cmp" ] } }, "outcome": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "weights": { "type": "object", "additionalProperties": { "type": "number" }, "description": "The distribution for each variant" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" } }, "required": [ "type", "base", "weights", "defaultVariantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "startTimestamp": { "type": "number", "description": "Epoch ms when the rollout begins" }, "rollFromVariantId": { "type": "string", "description": "The variant to roll away from" }, "rollToVariantId": { "type": "string", "description": "The variant to roll towards" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" }, "slots": { "type": "array", "description": "Each slot defines a promille and how long it is served for. After all slots expire, 100% is served indefinitely. The final implicit 100% slot does not need to be listed. Example: [[5_000, 21_600_000], [10_000, 28_800_000]] means 5‰ for 6h, then 10‰ for 8h, then 100% indefinitely.", "items": { "type": "object", "additionalProperties": false, "properties": { "promille": { "type": "number", "minimum": 0, "maximum": 100000, "description": "Promille of traffic for rollToVariant (0-100_000, where 1_000 = 1%)" }, "durationMs": { "type": "number", "minimum": 0, "description": "How long this promille is served in ms before moving to the next slot." } }, "required": [ "promille", "durationMs" ] }, "minItems": 1 } }, "required": [ "type", "base", "startTimestamp", "rollFromVariantId", "rollToVariantId", "defaultVariantId", "slots" ] } ] } }, "required": [ "id", "conditions", "outcome" ] }, "maxItems": 10000 }, "fallthrough": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {}, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "weights": { "type": "object", "additionalProperties": { "type": "number" }, "description": "The distribution for each variant" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" } }, "required": [ "type", "base", "weights", "defaultVariantId" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "startTimestamp": { "type": "number", "description": "Epoch ms when the rollout begins" }, "rollFromVariantId": { "type": "string", "description": "The variant to roll away from" }, "rollToVariantId": { "type": "string", "description": "The variant to roll towards" }, "defaultVariantId": { "type": "string", "description": "This variant will be used when the base attribute does not exist" }, "slots": { "type": "array", "description": "Each slot defines a promille and how long it is served for. After all slots expire, 100% is served indefinitely. The final implicit 100% slot does not need to be listed. Example: [[5_000, 21_600_000], [10_000, 28_800_000]] means 5‰ for 6h, then 10‰ for 8h, then 100% indefinitely.", "items": { "type": "object", "additionalProperties": false, "properties": { "promille": { "type": "number", "minimum": 0, "maximum": 100000, "description": "Promille of traffic for rollToVariant (0-100_000, where 1_000 = 1%)" }, "durationMs": { "type": "number", "minimum": 0, "description": "How long this promille is served in ms before moving to the next slot." } }, "required": [ "promille", "durationMs" ] }, "minItems": 1 } }, "required": [ "type", "base", "startTimestamp", "rollFromVariantId", "rollToVariantId", "defaultVariantId", "slots" ] } ] }, "revision": { "type": "number", "description": "The revision of the environment config" } }, "required": [ "active", "pausedOutcome", "rules", "fallthrough" ] }, "maxProperties": 10 }, "seed": { "type": "number", "minimum": 0, "maximum": 100000, "description": "A random seed to prevent split points in different flags from having the same targets" }, "description": { "description": "A description of the flag", "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "maintainerIds": { "description": "The user ids of the maintainers of the flag", "type": "array", "items": { "type": "string", "maxLength": 24 }, "maxItems": 5 }, "permanent": { "description": "Whether this flag is marked as permanent, indicating it should not be removed", "type": "boolean" }, "tags": { "description": "Tags for categorizing the flag", "type": "array", "items": { "type": "string", "maxLength": 64 }, "maxItems": 20, "uniqueItems": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateFlag", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.updateFlag({\n projectIdOrName: \"\",\n flagIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Permanently delete a feature flag from the project. This action cannot be undone. Consider archiving the flag instead if you may need it in the future.", "operationId": "deleteFlag", "security": [ { "bearerToken": [] } ], "summary": "Delete a flag", "tags": [ "feature-flags" ], "responses": { "204": { "description": "" }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "flagIdOrSlug", "description": "The flag id or name", "in": "path", "required": true, "schema": { "description": "The flag id or name", "type": "string" } }, { "name": "ifMatch", "description": "Etag to match, can be used interchangeably with the `if-match` header", "in": "query", "required": false, "schema": { "description": "Etag to match, can be used interchangeably with the `if-match` header", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata in the response", "in": "query", "required": false, "schema": { "description": "Whether to include metadata in the response", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteFlag", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.featureFlags.deleteFlag({\n projectIdOrName: \"\",\n flagIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}/versions": { "get": { "description": "Lists flag versions for a given flag.", "operationId": "listFlagVersions", "security": [ { "bearerToken": [] } ], "summary": "List flag versions", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "type": "object" }, "versions": { "items": { "properties": { "changedEnvironments": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "flagId": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "revision": { "type": "number" }, "data": { "properties": { "description": { "type": "string" }, "environments": { "additionalProperties": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "fallthrough": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] }, "pausedOutcome": { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, "reuse": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "environment": { "type": "string" } }, "required": [ "active", "environment" ], "type": "object" }, "revision": { "type": "number" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" }, "targets": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "type": "object" } }, "required": [ "active", "fallthrough", "pausedOutcome", "rules" ], "type": "object" }, "type": "object" }, "maintainerIds": { "items": { "type": "string" }, "type": "array" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "seed": { "type": "number" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "tags": { "items": { "type": "string" }, "type": "array" }, "variants": { "items": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "additionalProperties": true, "type": "object" }, { "items": {}, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "id", "value" ], "type": "object" }, "type": "array" } }, "required": [ "environments", "seed", "state", "variants" ], "type": "object" }, "metadata": { "properties": { "creator": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "type": "object" } }, "required": [ "changedEnvironments", "createdAt", "data", "flagId", "id", "revision" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "versions" ], "type": "object" } } } }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "flagIdOrSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "number", "minimum": 1, "maximum": 100, "default": 20 } }, { "name": "cursor", "description": "Pagination cursor", "in": "query", "required": false, "schema": { "type": "string", "description": "Pagination cursor" } }, { "name": "environment", "description": "Environment to filter by", "in": "query", "required": false, "schema": { "type": "string", "description": "Environment to filter by" } }, { "name": "withMetadata", "description": "Whether to include metadata", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Whether to include metadata", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listFlagVersions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listFlagVersions({\n projectIdOrName: \"\",\n flagIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/settings": { "get": { "description": "Retrieve feature flag settings for a project.", "operationId": "getFlagSettings", "security": [ { "bearerToken": [] } ], "summary": "Get project flag settings", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "entities": { "items": { "properties": { "attributes": { "items": { "properties": { "key": { "type": "string" }, "labels": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "type": { "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "type": "array" }, "kind": { "type": "string" }, "label": { "type": "string" } }, "required": [ "attributes", "kind", "label" ], "type": "object" }, "type": "array" }, "environments": { "items": { "type": "string" }, "type": "array" }, "metadata": { "properties": { "activeFlagCount": { "type": "number" }, "archivedFlagCount": { "type": "number" }, "configUpdatedAt": { "type": "number" }, "packRevision": { "type": "number" }, "packSizeInBytes": { "type": "number" }, "segmentCount": { "type": "number" } }, "required": [ "activeFlagCount", "archivedFlagCount", "packSizeInBytes", "segmentCount" ], "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "typeName": { "type": "string", "enum": [ "settings" ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "entities", "environments", "metadata", "projectId", "typeName" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getFlagSettings", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.getFlagSettings({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update feature flag settings for a project.", "operationId": "updateFlagSettings", "security": [ { "bearerToken": [] } ], "summary": "Update project flag settings", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "entities": { "items": { "properties": { "attributes": { "items": { "properties": { "key": { "type": "string" }, "labels": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "type": { "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "type": "array" }, "kind": { "type": "string" }, "label": { "type": "string" } }, "required": [ "attributes", "kind", "label" ], "type": "object" }, "type": "array" }, "environments": { "items": { "type": "string" }, "type": "array" }, "metadata": { "properties": { "activeFlagCount": { "type": "number" }, "archivedFlagCount": { "type": "number" }, "configUpdatedAt": { "type": "number" }, "packRevision": { "type": "number" }, "packSizeInBytes": { "type": "number" }, "segmentCount": { "type": "number" } }, "required": [ "activeFlagCount", "archivedFlagCount", "packSizeInBytes", "segmentCount" ], "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "typeName": { "type": "string", "enum": [ "settings" ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "entities", "environments", "metadata", "projectId", "typeName" ], "type": "object" } } } }, "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "entities": { "items": { "properties": { "attributes": { "items": { "properties": { "key": { "type": "string" }, "labels": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "type": { "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "type": "array" }, "kind": { "type": "string" }, "label": { "type": "string" } }, "required": [ "attributes", "kind", "label" ], "type": "object" }, "type": "array" }, "environments": { "items": { "type": "string" }, "type": "array" }, "metadata": { "properties": { "activeFlagCount": { "type": "number" }, "archivedFlagCount": { "type": "number" }, "configUpdatedAt": { "type": "number" }, "packRevision": { "type": "number" }, "packSizeInBytes": { "type": "number" }, "segmentCount": { "type": "number" } }, "required": [ "activeFlagCount", "archivedFlagCount", "packSizeInBytes", "segmentCount" ], "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "typeName": { "type": "string", "enum": [ "settings" ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "entities", "environments", "metadata", "projectId", "typeName" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "entities": { "type": "array", "maxItems": 32, "items": { "type": "object", "additionalProperties": false, "required": [ "kind", "label", "attributes" ], "properties": { "kind": { "type": "string", "maxLength": 128 }, "label": { "type": "string", "maxLength": 128 }, "attributes": { "type": "array", "maxItems": 32, "items": { "type": "object", "additionalProperties": false, "required": [ "key", "type" ], "properties": { "key": { "type": "string", "maxLength": 128 }, "type": { "type": "string", "maxLength": 128 }, "labels": { "type": "array", "maxItems": 256, "items": { "type": "object", "additionalProperties": false, "required": [ "label", "value" ], "properties": { "label": { "type": "string", "maxLength": 128 }, "value": { "type": "string", "maxLength": 128 } } } } } } } } } }, "environments": { "description": "The environments to sync", "type": "array", "items": { "type": "string" } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateFlagSettings", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.updateFlagSettings({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/teams/{teamId}/feature-flags/settings": { "get": { "description": "Retrieve feature flag settings for projects in a team.", "operationId": "listTeamFlagSettings", "security": [ { "bearerToken": [] } ], "summary": "List team project flag settings", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "data": { "items": { "properties": { "createdAt": { "type": "number" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "entities": { "items": { "properties": { "attributes": { "items": { "properties": { "key": { "type": "string" }, "labels": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "type": { "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "type": "array" }, "kind": { "type": "string" }, "label": { "type": "string" } }, "required": [ "attributes", "kind", "label" ], "type": "object" }, "type": "array" }, "environments": { "items": { "type": "string" }, "type": "array" }, "metadata": { "properties": { "activeFlagCount": { "type": "number" }, "archivedFlagCount": { "type": "number" }, "configUpdatedAt": { "type": "number" }, "packRevision": { "type": "number" }, "packSizeInBytes": { "type": "number" }, "segmentCount": { "type": "number" } }, "required": [ "activeFlagCount", "archivedFlagCount", "packSizeInBytes", "segmentCount" ], "type": "object" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "typeName": { "type": "string", "enum": [ "settings" ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "entities", "environments", "metadata", "projectId", "typeName" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "next": { "nullable": true, "type": "string" } }, "required": [ "next" ], "type": "object" } }, "required": [ "data", "pagination" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "limit", "description": "Maximum number of settings to return.", "in": "query", "required": false, "schema": { "description": "Maximum number of settings to return.", "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }, { "name": "cursor", "description": "Pagination cursor to continue from.", "in": "query", "required": false, "schema": { "description": "Pagination cursor to continue from.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listTeamFlagSettings", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listTeamFlagSettings({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/teams/{teamId}/feature-flags/flags": { "get": { "description": "Retrieve all feature flags for a team across all projects. Returns an opaque cursor for pagination.", "operationId": "listTeamFlagsV2", "security": [ { "bearerToken": [] } ], "summary": "List all flags for a team", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "properties": { "next": { "nullable": true, "type": "string" } }, "required": [ "next" ], "type": "object" }, "data": { "items": { "oneOf": [ { "$ref": "#/components/schemas/Flag" }, { "$ref": "#/components/schemas/MarketplaceFlag" } ] }, "type": "array" } }, "required": [ "data", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "state", "description": "The state of the flags to retrieve. Defaults to `active`.", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "active", "archived" ], "description": "The state of the flags to retrieve. Defaults to `active`." } }, { "name": "limit", "description": "Maximum number of flags to return.", "in": "query", "required": false, "schema": { "description": "Maximum number of flags to return.", "type": "integer", "minimum": 1, "maximum": 100, "default": 25 } }, { "name": "cursor", "description": "Pagination cursor to continue from.", "in": "query", "required": false, "schema": { "description": "Pagination cursor to continue from.", "type": "string" } }, { "name": "search", "description": "Search flags by their slug or description. Case-insensitive.", "in": "query", "required": false, "schema": { "description": "Search flags by their slug or description. Case-insensitive.", "type": "string", "maxLength": 256 } }, { "name": "kind", "description": "The kind of flags to retrieve.", "in": "query", "required": false, "schema": { "description": "The kind of flags to retrieve.", "type": "string", "enum": [ "boolean", "string", "number", "json" ] } }, { "name": "tags", "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "in": "query", "required": false, "schema": { "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "type": "array", "items": { "type": "string" } } }, { "name": "createdBy", "description": "Filter flags by the id of the entity that created them (a user or team id).", "in": "query", "required": false, "schema": { "description": "Filter flags by the id of the entity that created them (a user or team id).", "type": "string", "maxLength": 256 } }, { "name": "maintainerIds", "description": "Filter flags by maintainer user id. Repeat the parameter for multiple maintainers (any may match).", "in": "query", "required": false, "schema": { "description": "Filter flags by maintainer user id. Repeat the parameter for multiple maintainers (any may match).", "type": "array", "items": { "type": "string", "maxLength": 24 }, "maxItems": 25 } }, { "name": "includeMarketplaceFlags", "description": "Whether to include Marketplace experimentation items in the paginated response. Defaults to false.", "in": "query", "required": false, "schema": { "description": "Whether to include Marketplace experimentation items in the paginated response. Defaults to false.", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listTeamFlagsV2", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listTeamFlagsV2({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/teams/{teamId}/feature-flags/flags": { "get": { "description": "Retrieve all feature flags for a team across all projects. The list can be filtered by state and supports pagination.", "operationId": "listTeamFlags", "security": [ { "bearerToken": [] } ], "summary": "List all flags for a team", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/Flag" }, "type": "array" }, "pagination": { "properties": { "next": { "nullable": true, "type": "string" } }, "required": [ "next" ], "type": "object" } }, "required": [ "data", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "state", "description": "The state of the flags to retrieve. Defaults to `active`.", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "active", "archived" ], "description": "The state of the flags to retrieve. Defaults to `active`." } }, { "name": "withMetadata", "description": "Deprecated. Whether to include creator metadata in each flag in the response. Resolve creator identity client-side (e.g. via the team members endpoint) instead; this parameter will be removed in a future release.", "in": "query", "required": false, "schema": { "description": "Deprecated. Whether to include creator metadata in each flag in the response. Resolve creator identity client-side (e.g. via the team members endpoint) instead; this parameter will be removed in a future release.", "type": "boolean", "deprecated": true } }, { "name": "limit", "description": "Maximum number of flags to return.", "in": "query", "required": false, "schema": { "description": "Maximum number of flags to return.", "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }, { "name": "cursor", "description": "Pagination cursor to continue from.", "in": "query", "required": false, "schema": { "description": "Pagination cursor to continue from.", "type": "string" } }, { "name": "search", "description": "Search flags by their slug or description. Case-insensitive.", "in": "query", "required": false, "schema": { "description": "Search flags by their slug or description. Case-insensitive.", "type": "string", "maxLength": 256 } }, { "name": "kind", "description": "The kind of flags to retrieve.", "in": "query", "required": false, "schema": { "description": "The kind of flags to retrieve.", "type": "string", "enum": [ "boolean", "string", "number", "json" ] } }, { "name": "tags", "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "in": "query", "required": false, "schema": { "description": "Filter flags by tag. Repeat the parameter for multiple tags (all must match).", "type": "array", "items": { "type": "string" } } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listTeamFlags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listTeamFlags({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/segments": { "put": { "description": "Create a new feature flag segment.", "operationId": "createFlagSegment", "security": [ { "bearerToken": [] } ], "summary": "Create a segment", "tags": [ "feature-flags" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "data": { "properties": { "exclude": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "include": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "all" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "passPromille": { "type": "number" }, "type": { "type": "string", "enum": [ "split" ] } }, "required": [ "base", "passPromille", "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" } }, "type": "object" }, "description": { "type": "string" }, "hint": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "projectId": { "type": "string" }, "slug": { "type": "string" }, "typeName": { "type": "string", "enum": [ "segment" ] }, "updatedAt": { "type": "number" }, "usedByFlags": { "items": { "type": "string" }, "type": "array" }, "usedBySegments": { "items": { "type": "string" }, "type": "array" } }, "required": [ "createdAt", "data", "hint", "id", "label", "projectId", "slug", "typeName", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "slug": { "type": "string" }, "createdBy": { "description": "The entity who created the segment", "type": "string" }, "label": { "type": "string" }, "description": { "type": "string" }, "data": { "type": "object", "additionalProperties": false, "description": "The data of the segment", "properties": { "rules": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string" }, "conditions": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "lhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] } ] }, "cmp": { "type": "string", "enum": [ "eq", "!eq", "oneOf", "!oneOf", "containsAllOf", "containsAnyOf", "containsNoneOf", "startsWith", "!startsWith", "endsWith", "!endsWith", "contains", "!contains", "ex", "!ex", "gt", "gte", "lt", "lte", "regex", "!regex", "before", "after" ] }, "rhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "list/inline", "list" ] }, "items": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] } ] }, "maxItems": 10000 } }, "required": [ "type", "items" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "pattern": { "type": "string" }, "flags": { "type": "string" } }, "required": [ "type", "pattern", "flags" ] }, { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "cmpOptions": { "type": "object", "additionalProperties": false, "properties": { "ignoreCase": { "type": "boolean" } } } }, "required": [ "lhs", "cmp" ] } }, "outcome": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "passPromille": { "type": "number" } }, "required": [ "type", "base", "passPromille" ] } ] } }, "required": [ "conditions", "outcome", "id" ] }, "maxItems": 10000 }, "include": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } }, "exclude": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } } } }, "hint": { "type": "string" } }, "required": [ "slug", "label", "data", "hint" ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createFlagSegment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.createFlagSegment({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "List all feature flag segments for a project.", "operationId": "listFlagSegments", "security": [ { "bearerToken": [] } ], "summary": "List segments", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/Segment" }, "type": "array" } }, "required": [ "data" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Whether to include metadata", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listFlagSegments", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.listFlagSegments({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}": { "get": { "description": "Retrieve a feature flag segment by ID or slug.", "operationId": "getFlagSegment", "security": [ { "bearerToken": [] } ], "summary": "Get a segment", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Segment" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "segmentIdOrSlug", "description": "The segment slug", "in": "path", "required": true, "schema": { "description": "The segment slug", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Whether to include metadata", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getFlagSegment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.getFlagSegment({\n projectIdOrName: \"\",\n segmentIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a feature flag segment.", "operationId": "deleteFlagSegment", "security": [ { "bearerToken": [] } ], "summary": "Delete a segment", "tags": [ "feature-flags" ], "responses": { "204": { "description": "" }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "segmentIdOrSlug", "description": "The segment slug", "in": "path", "required": true, "schema": { "description": "The segment slug", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Whether to include metadata", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteFlagSegment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.featureFlags.deleteFlagSegment({\n projectIdOrName: \"\",\n segmentIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] }, "patch": { "description": "Update an existing feature flag segment.", "operationId": "updateFlagSegment", "security": [ { "bearerToken": [] } ], "summary": "Update a segment", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Segment" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "name": "segmentIdOrSlug", "description": "The segment slug", "in": "path", "required": true, "schema": { "description": "The segment slug", "type": "string" } }, { "name": "withMetadata", "description": "Whether to include metadata", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Whether to include metadata", "default": false } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "operations": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "action": { "type": "string", "enum": [ "add", "remove" ] }, "field": { "type": "string", "enum": [ "include", "exclude" ] }, "entity": { "type": "string" }, "attribute": { "type": "string" }, "value": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] } }, "required": [ "action", "field", "entity", "attribute", "value" ] } }, "label": { "type": "string" }, "description": { "type": "string" }, "data": { "type": "object", "additionalProperties": false, "description": "The data of the segment", "properties": { "rules": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string" }, "conditions": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "lhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] } ] }, "cmp": { "type": "string", "enum": [ "eq", "!eq", "oneOf", "!oneOf", "containsAllOf", "containsAnyOf", "containsNoneOf", "startsWith", "!startsWith", "endsWith", "!endsWith", "contains", "!contains", "ex", "!ex", "gt", "gte", "lt", "lte", "regex", "!regex", "before", "after" ] }, "rhs": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "list/inline", "list" ] }, "items": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] } ] }, "maxItems": 10000 } }, "required": [ "type", "items" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "pattern": { "type": "string" }, "flags": { "type": "string" } }, "required": [ "type", "pattern", "flags" ] }, { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "cmpOptions": { "type": "object", "additionalProperties": false, "properties": { "ignoreCase": { "type": "boolean" } } } }, "required": [ "lhs", "cmp" ] } }, "outcome": { "anyOf": [ { "type": "object", "additionalProperties": false, "properties": { "type": {} }, "required": [ "type" ] }, { "type": "object", "additionalProperties": false, "properties": { "type": {}, "base": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "kind": { "type": "string" }, "attribute": { "type": "string" } }, "required": [ "type", "kind", "attribute" ] }, "passPromille": { "type": "number" } }, "required": [ "type", "base", "passPromille" ] } ] } }, "required": [ "conditions", "outcome", "id" ] }, "maxItems": 10000 }, "include": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } }, "exclude": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ] }, "maxItems": 10000 } } } } }, "hint": { "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateFlagSegment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.updateFlagSegment({\n projectIdOrName: \"\",\n segmentIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/deployments/{deploymentId}/feature-flags": { "get": { "description": "Retrieve the feature flags of a deployment.", "operationId": "getDeploymentFeatureFlags", "security": [ { "bearerToken": [] } ], "summary": "Retrieve the feature flags of a deployment", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "flags": { "items": { "type": "object" }, "type": "array" }, "status": { "nullable": true, "properties": { "createdAt": { "type": "number" }, "deploymentId": { "type": "string" }, "flagCount": { "type": "number", "description": "The number of flag definitions returned by the flags discovery endpoint." }, "projectId": { "type": "string" }, "responseStatus": { "type": "number", "description": "The HTTP status code from the flags discovery endpoint." } }, "required": [ "createdAt", "deploymentId", "flagCount", "projectId", "responseStatus" ], "type": "object" } }, "required": [ "flags", "status" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeploymentFeatureFlags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.getDeploymentFeatureFlags({\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/sdk-keys": { "get": { "description": "Gets all SDK keys for a project.", "operationId": "getSdkKeys", "security": [ { "bearerToken": [] } ], "summary": "Get all SDK keys", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "items": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "deletedAt": { "type": "number" }, "environment": { "type": "string" }, "hashKey": { "type": "string" }, "label": { "type": "string" }, "partialKeyValue": { "type": "string", "description": "Partially-masked representation of the SDK key value, safe to display in UIs. The value is the `vf__` prefix followed by the first 3 characters of the secret portion and a fixed 8-character `*` mask (e.g. `vf_server_abc********`)." }, "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "client", "mobile", "server" ] }, "updatedAt": { "type": "number" } }, "required": [ "createdAt", "createdBy", "environment", "hashKey", "partialKeyValue", "projectId", "type", "updatedAt" ], "type": "object", "description": "Shared metadata for a Flags SDK key, safe to return on both LIST and CREATE. Never contains cleartext secrets." }, "type": "array" } }, "required": [ "data" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSdkKeys", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.getSDKKeys({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Creates an SDK key.", "operationId": "createSdkKey", "security": [ { "bearerToken": [] } ], "summary": "Create an SDK key", "tags": [ "feature-flags" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FlagsSdkKeyWithSecrets" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "description": "The project id or name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "sdkKeyType", "environment" ], "properties": { "sdkKeyType": { "type": "string", "enum": [ "server", "mobile", "client" ] }, "environment": { "type": "string" }, "label": { "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSdkKey", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.featureFlags.createSDKKey({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectIdOrName}/feature-flags/sdk-keys/{hashKey}": { "delete": { "description": "Deletes an SDK key.", "operationId": "deleteSdkKey", "security": [ { "bearerToken": [] } ], "summary": "Delete an SDK key", "tags": [ "feature-flags" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The project id or name", "in": "path", "required": true, "schema": { "type": "string", "description": "The project id or name" } }, { "name": "hashKey", "description": "The SDK key hash key to delete", "in": "path", "required": true, "schema": { "type": "string", "description": "The SDK key hash key to delete" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteSdkKey", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.featureFlags.deleteSDKKey({\n projectIdOrName: \"\",\n hashKey: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/integrations/git-namespaces": { "get": { "description": "Lists git namespaces for a supported provider. Supported providers are `github`, `gitlab` and `bitbucket`. If the provider is not provided, it will try to obtain it from the user that authenticated the request.", "operationId": "gitNamespaces", "security": [ { "bearerToken": [] } ], "summary": "List git namespaces by provider", "tags": [ "integrations" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "items": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "installationId": { "type": "number" }, "isAccessRestricted": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "ownerType": { "type": "string" }, "provider": { "type": "string" }, "requireReauth": { "type": "boolean", "enum": [ false, true ] }, "slug": { "type": "string" }, "viewer": { "properties": { "canCreateApp": { "type": "boolean", "enum": [ false, true ] }, "role": { "oneOf": [ { "type": "string" }, { "type": "number" } ] } }, "type": "object" } }, "required": [ "id", "ownerType", "provider", "slug" ], "type": "object" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "host", "description": "The custom Git host if using a custom Git provider, like GitHub Enterprise Server", "in": "query", "schema": { "description": "The custom Git host if using a custom Git provider, like GitHub Enterprise Server", "type": "string", "example": "ghes-test.now.systems" } }, { "name": "provider", "in": "query", "schema": { "enum": [ "github", "github-limited", "github-custom-host", "gitlab", "bitbucket" ] } }, { "name": "viewerMetadata", "description": "When true, includes the viewer object for each namespace.", "in": "query", "schema": { "description": "When true, includes the viewer object for each namespace.", "type": "boolean" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "gitNamespaces", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.gitNamespaces({\n host: \"ghes-test.now.systems\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "gitNamespaces", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Integrations.GitNamespaces(ctx, vercel.String(\"ghes-test.now.systems\"), nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.ResponseBodies != nil {\n // handle response\n }\n}" } ] } }, "/v1/integrations/search-repo": { "get": { "description": "Lists git repositories linked to a namespace `id` for a supported provider. A specific namespace `id` can be obtained via the `git-namespaces` endpoint. Supported providers are `github`, `gitlab` and `bitbucket`. If the provider or namespace is not provided, it will try to obtain it from the user that authenticated the request.", "operationId": "searchRepo", "security": [ { "bearerToken": [] } ], "summary": "List git repositories linked to namespace by provider", "tags": [ "integrations" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "error": { "properties": { "code": { "type": "string", "enum": [ "installation_not_found" ] }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, { "properties": { "gitAccount": { "properties": { "namespaceId": { "nullable": true, "type": "string" }, "provider": { "type": "string" } }, "required": [ "namespaceId", "provider" ], "type": "object" }, "repos": { "items": { "properties": { "defaultBranch": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "namespace": { "type": "string" }, "owner": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "private": { "type": "boolean", "enum": [ false, true ] }, "provider": { "type": "string", "enum": [ "cursor-origin" ] }, "slug": { "type": "string" }, "updatedAt": { "type": "number" }, "url": { "type": "string" } }, "required": [ "defaultBranch", "id", "name", "namespace", "owner", "ownerType", "private", "provider", "slug", "updatedAt", "url" ], "type": "object" }, "type": "array" } }, "required": [ "gitAccount", "repos" ], "type": "object" }, { "properties": { "gitAccount": { "properties": { "namespaceId": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "provider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "vercel" ] } }, "required": [ "namespaceId", "provider" ], "type": "object" }, "repos": { "items": { "properties": { "defaultBranch": { "type": "string" }, "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "name": { "type": "string" }, "namespace": { "type": "string" }, "owner": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "ownerType": { "type": "string", "enum": [ "team", "user" ] }, "private": { "type": "boolean", "enum": [ false, true ] }, "provider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "vercel" ] }, "slug": { "type": "string" }, "updatedAt": { "type": "number" }, "url": { "type": "string" } }, "required": [ "defaultBranch", "id", "name", "namespace", "owner", "ownerType", "private", "provider", "slug", "updatedAt", "url" ], "type": "object" }, "type": "array" } }, "required": [ "gitAccount", "repos" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "name": "query", "in": "query", "schema": { "type": "string" } }, { "name": "namespaceId", "in": "query", "schema": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] } }, { "name": "provider", "in": "query", "schema": { "enum": [ "github", "github-limited", "github-custom-host", "gitlab", "bitbucket", "cursor-origin" ] } }, { "name": "installationId", "in": "query", "schema": { "type": "string" } }, { "name": "host", "description": "The custom Git host if using a custom Git provider, like GitHub Enterprise Server", "in": "query", "schema": { "description": "The custom Git host if using a custom Git provider, like GitHub Enterprise Server", "type": "string", "example": "ghes-test.now.systems" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "searchRepo", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.searchRepo({\n host: \"ghes-test.now.systems\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "searchRepo", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Integrations.SearchRepo(ctx, operations.SearchRepoRequest{\n Host: vercel.String(\"ghes-test.now.systems\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/integrations/integration/{integrationIdOrSlug}/products/{productIdOrSlug}/plans": { "get": { "description": "Get a list of billing plans for an integration and product.", "operationId": "getBillingPlans", "security": [ { "bearerToken": [] } ], "summary": "List integration billing plans", "tags": [ "integrations" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "plans": { "items": { "properties": { "cost": { "type": "string" }, "description": { "type": "string" }, "details": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "type": "object" }, "type": "array" }, "disabled": { "type": "boolean", "enum": [ false, true ] }, "effectiveDate": { "type": "string" }, "highlightedDetails": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "initialCharge": { "type": "string" }, "maximumAmount": { "type": "string" }, "maximumAmountAutoPurchasePerPeriod": { "type": "string" }, "minimumAmount": { "type": "string" }, "name": { "type": "string" }, "paymentMethodRequired": { "type": "boolean", "enum": [ false, true ] }, "preauthorizationAmount": { "type": "number" }, "quote": { "items": { "properties": { "amount": { "type": "string" }, "line": { "type": "string" } }, "required": [ "amount", "line" ], "type": "object" }, "type": "array" }, "scope": { "type": "string", "enum": [ "installation", "resource" ] }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] } }, "required": [ "description", "id", "name", "paymentMethodRequired", "scope", "type" ], "type": "object" }, "type": "array" } }, "required": [ "plans" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationIdOrSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "integrationConfigurationId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "productIdOrSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "metadata", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "source", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "marketplace", "deploy-button", "external", "v0", "resource-claims", "cli", "oauth", "backoffice", "import-recommended-integrations", "organization" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getBillingPlans", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.getBillingPlans({\n integrationIdOrSlug: \"\",\n productIdOrSlug: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/integrations/installations/{integrationConfigurationId}/resources/{resourceId}/connections": { "post": { "description": "Connects an integration resource to a Vercel project. This endpoint establishes a connection between a provisioned integration resource (from storage APIs like `POST /v1/storage/stores/integration/direct`) and a specific Vercel project.", "operationId": "connectIntegrationResourceToProject", "security": [ { "bearerToken": [] } ], "summary": "Connect integration resource to project", "tags": [ "integrations" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "projectId" ], "properties": { "projectId": { "type": "string" }, "envVarEnvironments": { "type": "array", "items": { "type": "string", "title": "EnvVarEnvironmentsTarget", "anyOf": [ { "type": "string", "enum": [ "production", "preview", "development" ], "x-speakeasy-name-override": "env_var_environments" }, { "type": "string" } ] } }, "makeEnvVarsSensitive": { "type": "boolean" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "connectIntegrationResourceToProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.integrations.connectIntegrationResourceToProject({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}": { "patch": { "description": "This endpoint updates an integration installation.", "operationId": "update-installation", "security": [ { "bearerToken": [] } ], "summary": "Update Installation", "tags": [ "marketplace" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "enum": [ "ready", "pending", "onboarding", "suspended", "resumed", "uninstalled", "error" ] }, "externalId": { "type": "string" }, "billingPlan": { "type": "object", "required": [ "id", "type", "name" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] }, "name": { "type": "string" }, "description": { "type": "string" }, "paymentMethodRequired": { "type": "boolean" }, "cost": { "type": "string" }, "details": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "highlightedDetails": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "effectiveDate": { "type": "string" } }, "additionalProperties": true }, "notification": { "oneOf": [ { "type": "object", "required": [ "level", "title" ], "properties": { "level": { "type": "string", "enum": [ "info", "warn", "error" ] }, "title": { "type": "string" }, "message": { "type": "string" }, "href": { "type": "string", "format": "uri", "pattern": "^https?://|^sso:" } } }, { "type": "string" } ], "description": "A notification to display to your customer. Send `null` to clear the current notification." } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "update-installation", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.updateInstallation({\n integrationConfigurationId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/account": { "get": { "description": "Fetches the best account or user’s contact info", "operationId": "get-account-info", "security": [ { "bearerToken": [] } ], "summary": "Get Account Information", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "contact": { "nullable": true, "properties": { "email": { "type": "string" }, "name": { "type": "string" } }, "required": [ "email" ], "type": "object", "description": "The best contact for the integration, which can change as team members and their roles change." }, "name": { "type": "string", "description": "The name of the team the installation is tied to." }, "url": { "type": "string", "description": "A URL linking to the installation in the Vercel Dashboard." } }, "required": [ "contact", "url" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "get-account-info", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getAccountInfo({\n integrationConfigurationId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/member/{memberId}": { "get": { "description": "Returns the member role and other information for a given member ID (\"user_id\" claim in the SSO OIDC token).", "operationId": "get-member", "security": [ { "bearerToken": [] } ], "summary": "Get Member Information", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "globalUserId": { "type": "string" }, "id": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "USER" ], "description": "\"The `ADMIN` role, by default, is provided to users capable of installing integrations, while the `USER` role can be granted to Vercel users with the Vercel `Billing` or Vercel `Viewer` role, which are considered to be Read-Only roles.\"" }, "userEmail": { "type": "string" } }, "required": [ "id", "role" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "memberId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "get-member", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getMember({\n integrationConfigurationId: \"\",\n memberId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/credentials/rotate": { "post": { "description": "Issues a replacement access token for an installation, so a partner can rotate a credential it believes is compromised without the customer having to reinstall. Authenticated by the credential being replaced plus the integration's client secret: a leaked access token on its own cannot rotate itself, which would otherwise let an attacker take over the installation and lock the partner out. The previous credential intentionally stays valid so in-flight requests keep working. Retiring it is a separate, explicit operation — a partner is never left mid-rotation without a working credential.", "operationId": "rotate-installation-credential", "security": [ { "bearerToken": [] } ], "summary": "Rotate Installation Credential", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "number" }, "scope": { "type": "string" }, "token_type": { "type": "string", "enum": [ "oauth2-token" ] } }, "required": [ "access_token", "expires_in", "scope", "token_type" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "client_secret" ], "properties": { "client_secret": { "type": "string", "maxLength": 512 }, "client_id": { "type": "string" } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "rotate-installation-credential", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.rotateInstallationCredential({\n integrationConfigurationId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/credentials/revoke": { "post": { "description": "Retires a superseded installation credential, so a partner can complete a rotation it started with `POST /credentials/rotate` — the leaked credential stops working without the customer having to reinstall. Authenticated by a live installation credential plus the integration's client secret. The credential to retire is named in the body rather than being the one that authenticates, so the ordinary flow is: rotate, store the replacement, then authenticate with the replacement and revoke the old one. Refuses to retire an installation's last live credential. Rotation exists so remediation is not customer-visible; revoking the only credential would undo that and leave the install needing a reinstall.", "operationId": "revoke-installation-credential", "security": [ { "bearerToken": [] } ], "summary": "Revoke Installation Credential", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "already_revoked": { "type": "boolean", "enum": [ false, true ] }, "revoked": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "already_revoked", "revoked" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "token", "client_secret" ], "properties": { "token": { "type": "string", "maxLength": 512 }, "client_secret": { "type": "string", "maxLength": 512 }, "client_id": { "type": "string" } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "revoke-installation-credential", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.revokeInstallationCredential({\n integrationConfigurationId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/events": { "post": { "description": "Partner notifies Vercel of any changes made to an Installation or a Resource. Vercel is expected to use `list-resources` and other read APIs to get the new state.

`resource.updated` event should be dispatched when any state of a resource linked to Vercel is modified by the partner.
`installation.updated` event should be dispatched when an installation's billing plan is changed via the provider instead of Vercel.

Resource update use cases:

- The user renames a database in the partner’s application. The partner should dispatch a `resource.updated` event to notify Vercel to update the resource in Vercel’s datastores.
- A resource has been suspended due to a lack of use. The partner should dispatch a `resource.updated` event to notify Vercel to update the resource's status in Vercel's datastores.
", "operationId": "create-event", "security": [ { "bearerToken": [] } ], "summary": "Create Event", "tags": [ "marketplace" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "event" ], "properties": { "event": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "installation.updated" ] }, "billingPlanId": { "type": "string", "description": "The installation-level billing plan ID" } }, "required": [ "type" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "enum": [ "resource.updated" ] }, "productId": { "type": "string", "description": "Partner-provided product slug or id" }, "resourceId": { "type": "string", "description": "Partner provided resource ID" } }, "required": [ "type", "resourceId" ], "additionalProperties": false } ] } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "create-event", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.createEvent({\n integrationConfigurationId: \"\",\n requestBody: {\n event: {\n type: \"installation.updated\",\n },\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/resources": { "get": { "description": "Get all resources for a given installation ID.", "operationId": "get-integration-resources", "security": [ { "bearerToken": [] } ], "summary": "Get Integration Resources", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "resources": { "items": { "properties": { "billingPlanId": { "type": "string", "description": "The ID of the billing plan the resource is subscribed to, if applicable" }, "internalId": { "type": "string", "description": "The ID assigned by Vercel for the given resource" }, "metadata": { "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, { "items": { "type": "number" }, "type": "array", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, { "type": "boolean", "enum": [ false, true ] } ] }, "type": "object", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, "name": { "type": "string", "description": "The name of the resource as it is recorded in Vercel" }, "notification": { "properties": { "href": { "type": "string" }, "level": { "type": "string", "enum": [ "error", "info", "warn" ] }, "message": { "type": "string" }, "title": { "type": "string" } }, "required": [ "level", "title" ], "type": "object", "description": "The notification, if set, displayed to the user when viewing the resource in Vercel" }, "partnerId": { "type": "string", "description": "The ID provided by the partner for the given resource" }, "productId": { "type": "string", "description": "The ID of the product the resource is derived from" }, "protocolSettings": { "properties": { "authentication": { "properties": { "appUrls": { "items": { "properties": { "target": { "type": "string", "enum": [ "development", "preview", "production" ] }, "url": { "type": "string" } }, "required": [ "target", "url" ], "type": "object" }, "type": "array" } }, "type": "object" }, "experimentation": { "properties": { "edgeConfigId": { "type": "string" }, "edgeConfigSyncingEnabled": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigTokenId": { "type": "string" }, "globalConfigId": { "type": "string" }, "globalConfigSyncingEnabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object", "description": "Any settings provided for the resource to support its product's protocols" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The current status of the resource" } }, "required": [ "internalId", "name", "partnerId", "productId" ], "type": "object" }, "type": "array" } }, "required": [ "resources" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "get-integration-resources", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getIntegrationResources({\n integrationConfigurationId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/resources/{resourceId}": { "get": { "description": "Get a resource by its partner ID.", "operationId": "get-integration-resource", "security": [ { "bearerToken": [] } ], "summary": "Get Integration Resource", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "billingPlanId": { "type": "string", "description": "The ID of the billing plan the resource is subscribed to, if applicable" }, "id": { "type": "string", "description": "The ID provided by the 3rd party provider for the given resource" }, "internalId": { "type": "string", "description": "The ID assigned by Vercel for the given resource" }, "metadata": { "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, { "items": { "type": "number" }, "type": "array", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, { "type": "boolean", "enum": [ false, true ] } ] }, "type": "object", "description": "The configured metadata for the resource as defined by its product's Metadata Schema" }, "name": { "type": "string", "description": "The name of the resource as it is recorded in Vercel" }, "notification": { "properties": { "href": { "type": "string" }, "level": { "type": "string", "enum": [ "error", "info", "warn" ] }, "message": { "type": "string" }, "title": { "type": "string" } }, "required": [ "level", "title" ], "type": "object", "description": "The notification, if set, displayed to the user when viewing the resource in Vercel" }, "productId": { "type": "string", "description": "The ID of the product the resource is derived from" }, "protocolSettings": { "properties": { "authentication": { "properties": { "appUrls": { "items": { "properties": { "target": { "type": "string", "enum": [ "development", "preview", "production" ] }, "url": { "type": "string" } }, "required": [ "target", "url" ], "type": "object" }, "type": "array" } }, "type": "object" }, "experimentation": { "properties": { "edgeConfigId": { "type": "string" }, "globalConfigId": { "type": "string" } }, "type": "object" } }, "type": "object", "description": "Any settings provided for the resource to support its product's protocols" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The current status of the resource" } }, "required": [ "id", "internalId", "name", "productId" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "description": "The ID of the integration configuration (installation) the resource belongs to", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the integration configuration (installation) the resource belongs to" } }, { "name": "resourceId", "description": "The ID provided by the 3rd party provider for the given resource", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID provided by the 3rd party provider for the given resource" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "get-integration-resource", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getIntegrationResource({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a resource owned by the selected installation ID.", "operationId": "delete-integration-resource", "security": [ { "bearerToken": [] } ], "summary": "Delete Integration Resource", "tags": [ "marketplace" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "delete-integration-resource", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.deleteIntegrationResource({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n\n}\n\nrun();" } ] }, "put": { "description": "This endpoint imports (upserts) a resource to Vercel's installation. This may be needed if resources can be independently created on the partner's side and need to be synchronized to Vercel. When importing as part of the user-initiated import flow, call this endpoint before redirecting the user back to Vercel. See the [Import existing resources flow](https://vercel.com/docs/integrations/create-integration/marketplace-flows#import-existing-resources-flow) for the full contract.", "operationId": "import-resource", "security": [ { "bearerToken": [] } ], "summary": "Import Resource", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "productId", "name", "status" ], "properties": { "ownership": { "type": "string", "enum": [ "owned", "linked", "sandbox" ] }, "productId": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ready", "pending", "onboarding", "suspended", "resumed", "uninstalled", "error" ] }, "metadata": { "type": "object", "additionalProperties": true }, "billingPlan": { "type": "object", "required": [ "id", "type", "name" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] }, "name": { "type": "string" }, "description": { "type": "string" }, "paymentMethodRequired": { "type": "boolean" }, "cost": { "type": "string" }, "details": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "highlightedDetails": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "effectiveDate": { "type": "string" } }, "additionalProperties": true }, "notification": { "type": "object", "required": [ "level", "title" ], "properties": { "level": { "type": "string", "enum": [ "info", "warn", "error" ] }, "title": { "type": "string" }, "message": { "type": "string" }, "href": { "type": "string", "format": "uri", "pattern": "^https?://|^sso:" } } }, "extras": { "type": "object", "additionalProperties": true }, "secrets": { "type": "array", "items": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "prefix": { "type": "string" }, "environmentOverrides": { "type": "object", "description": "A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.", "properties": { "development": { "type": "string", "description": "Value used for development environment." }, "preview": { "type": "string", "description": "Value used for preview environment." }, "production": { "type": "string", "description": "Value used for production environment." } } } }, "additionalProperties": false } } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "import-resource", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.importResource({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "This endpoint updates an existing resource in the installation. All parameters are optional, allowing partial updates.", "operationId": "update-resource", "security": [ { "bearerToken": [] } ], "summary": "Update Resource", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "ownership": { "type": "string", "enum": [ "owned", "linked", "sandbox" ] }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ready", "pending", "onboarding", "suspended", "resumed", "uninstalled", "error" ] }, "metadata": { "type": "object", "additionalProperties": true }, "billingPlan": { "type": "object", "required": [ "id", "type", "name" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] }, "name": { "type": "string" }, "description": { "type": "string" }, "paymentMethodRequired": { "type": "boolean" }, "cost": { "type": "string" }, "details": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "highlightedDetails": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "additionalProperties": false } }, "effectiveDate": { "type": "string" } }, "additionalProperties": true }, "notification": { "oneOf": [ { "type": "object", "required": [ "level", "title" ], "properties": { "level": { "type": "string", "enum": [ "info", "warn", "error" ] }, "title": { "type": "string" }, "message": { "type": "string" }, "href": { "type": "string", "format": "uri", "pattern": "^https?://|^sso:" } } }, { "type": "string" } ] }, "extras": { "type": "object", "additionalProperties": true }, "secrets": { "oneOf": [ { "type": "array", "items": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "prefix": { "type": "string" }, "environmentOverrides": { "type": "object", "description": "A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.", "properties": { "development": { "type": "string", "description": "Value used for development environment." }, "preview": { "type": "string", "description": "Value used for preview environment." }, "production": { "type": "string", "description": "Value used for production environment." } } } }, "additionalProperties": false } }, { "type": "object", "required": [ "secrets" ], "properties": { "secrets": { "type": "array", "items": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "prefix": { "type": "string" }, "environmentOverrides": { "type": "object", "description": "A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.", "properties": { "development": { "type": "string", "description": "Value used for development environment." }, "preview": { "type": "string", "description": "Value used for preview environment." }, "production": { "type": "string", "description": "Value used for production environment." } } } }, "additionalProperties": false } }, "partial": { "type": "boolean", "description": "If true, will only overwrite the provided secrets instead of replacing all secrets." } }, "additionalProperties": false } ] } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "update-resource", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.updateResource({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing": { "post": { "description": "Sends the billing and usage data. The partner should do this at least once a day and ideally once per hour.
Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.", "operationId": "submit-billing-data", "security": [ { "bearerToken": [] } ], "summary": "Submit Billing Data", "tags": [ "marketplace" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "date-time", "description": "Server time of your integration, used to determine the most recent data for race conditions & updates. Only the latest usage data for a given day, week, and month will be kept." }, "eod": { "type": "string", "format": "date-time", "description": "End of Day, the UTC datetime for when the end of the billing/usage day is in UTC time. This tells us which day the usage data is for, and also allows for your \"end of day\" to be different from UTC 00:00:00. eod must be within the period dates, and cannot be older than 24h earlier from our server's current time." }, "period": { "type": "object", "description": "Period for the billing cycle. The period end date cannot be older than 24 hours earlier than our current server's time.", "properties": { "start": { "type": "string", "format": "date-time" }, "end": { "type": "string", "format": "date-time" } }, "required": [ "start", "end" ], "additionalProperties": false }, "billing": { "description": "Billing data (interim invoicing data).", "oneOf": [ { "type": "array", "items": { "type": "object", "properties": { "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "resourceId": { "type": "string", "description": "Partner's resource ID." }, "start": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "end": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "name": { "type": "string", "description": "Line item name." }, "details": { "type": "string", "description": "Line item details." }, "price": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Price per unit." }, "quantity": { "type": "number", "description": "Quantity of units." }, "units": { "type": "string", "description": "Units of the quantity." }, "total": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Total amount." } }, "required": [ "billingPlanId", "name", "price", "quantity", "units", "total" ], "additionalProperties": false } }, { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "properties": { "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "resourceId": { "type": "string", "description": "Partner's resource ID." }, "start": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "end": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "name": { "type": "string", "description": "Line item name." }, "details": { "type": "string", "description": "Line item details." }, "price": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Price per unit." }, "quantity": { "type": "number", "description": "Quantity of units." }, "units": { "type": "string", "description": "Units of the quantity." }, "total": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Total amount." } }, "required": [ "billingPlanId", "name", "price", "quantity", "units", "total" ], "additionalProperties": false } }, "discounts": { "type": "array", "items": { "type": "object", "properties": { "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "resourceId": { "type": "string", "description": "Partner's resource ID." }, "start": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "end": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "name": { "type": "string", "description": "Discount name." }, "details": { "type": "string", "description": "Discount details." }, "amount": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Discount amount." } }, "required": [ "billingPlanId", "name", "amount" ], "additionalProperties": false } } }, "required": [ "items" ] } ] }, "usage": { "type": "array", "items": { "type": "object", "properties": { "resourceId": { "type": "string", "description": "Partner's resource ID." }, "name": { "type": "string", "description": "Metric name." }, "type": { "type": "string", "description": "\n Type of the metric.\n - total: measured total value, such as Database size\n - interval: usage during the period, such as i/o or number of queries.\n - rate: rate of usage, such as queries per second.\n ", "enum": [ "total", "interval", "rate" ] }, "units": { "type": "string", "description": "Metric units. Example: \"GB\"" }, "dayValue": { "type": "number", "description": "Metric value for the day. Could be a final or an interim value for the day." }, "periodValue": { "type": "number", "description": "Metric value for the billing period. Could be a final or an interim value for the period." }, "planValue": { "type": "number", "description": "The limit value of the metric for a billing period, if a limit is defined by the plan." } }, "required": [ "name", "type", "units", "dayValue", "periodValue" ], "additionalProperties": false } } }, "required": [ "timestamp", "eod", "period", "billing", "usage" ], "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "submit-billing-data", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.submitBillingData({\n integrationConfigurationId: \"\",\n requestBody: {\n timestamp: new Date(\"2023-11-26T05:03:03.977Z\"),\n eod: new Date(\"2023-04-14T04:58:49.647Z\"),\n period: {\n start: new Date(\"2023-03-12T13:32:00.895Z\"),\n end: new Date(\"2023-12-15T15:17:13.187Z\"),\n },\n billing: [\n {\n billingPlanId: \"\",\n name: \"\",\n price: \"694.00\",\n quantity: 228.64,\n units: \"\",\n total: \"\",\n },\n {\n billingPlanId: \"\",\n name: \"\",\n price: \"694.00\",\n quantity: 228.64,\n units: \"\",\n total: \"\",\n },\n ],\n usage: [\n {\n name: \"\",\n type: \"interval\",\n units: \"\",\n dayValue: 5212.43,\n periodValue: 4147.35,\n },\n {\n name: \"\",\n type: \"interval\",\n units: \"\",\n dayValue: 5212.43,\n periodValue: 4147.35,\n },\n {\n name: \"\",\n type: \"interval\",\n units: \"\",\n dayValue: 5212.43,\n periodValue: 4147.35,\n },\n ],\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing/invoices": { "post": { "description": "This endpoint allows the partner to submit an invoice to Vercel. The invoice is created in Vercel's billing system and sent to the customer. Depending on the type of billing plan, the invoice can be sent at a time of signup, at the start of the billing period, or at the end of the billing period.

Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.
There are several limitations to the invoice submission:

1. A resource can only be billed once per the billing period and the billing plan.
2. The billing plan used to bill the resource must have been active for this resource during the billing period.
3. The billing plan used must be a subscription plan.
4. The interim usage data must be sent hourly for all types of subscriptions. See [Send subscription billing and usage data](#send-subscription-billing-and-usage-data) API on how to send interim billing and usage data.
5. If provided, `externalId` must be unique for the installation.
", "operationId": "submit-invoice", "security": [ { "bearerToken": [] } ], "summary": "Submit Invoice", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "invoiceId": { "type": "string" }, "test": { "type": "boolean", "enum": [ false, true ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "externalId": { "type": "string", "description": "Partner-provided invoice identifier. If provided, it must be unique for this installation." }, "invoiceDate": { "type": "string", "format": "date-time", "description": "Invoice date. Must be within the period's start and end." }, "memo": { "type": "string", "description": "Additional memo for the invoice." }, "period": { "type": "object", "description": "Subscription period for this billing cycle.", "properties": { "start": { "type": "string", "format": "date-time" }, "end": { "type": "string", "format": "date-time" } }, "required": [ "start", "end" ], "additionalProperties": false }, "items": { "type": "array", "items": { "type": "object", "properties": { "resourceId": { "type": "string", "description": "Partner's resource ID." }, "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "start": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "end": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "name": { "type": "string" }, "details": { "type": "string" }, "price": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Currency amount as a decimal string." }, "quantity": { "type": "number" }, "units": { "type": "string" }, "total": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Currency amount as a decimal string." } }, "required": [ "billingPlanId", "name", "price", "quantity", "units", "total" ], "additionalProperties": false } }, "discounts": { "type": "array", "items": { "type": "object", "properties": { "resourceId": { "type": "string", "description": "Partner's resource ID." }, "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "start": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "end": { "type": "string", "format": "date-time", "description": "Start and end are only needed if different from the period's start/end." }, "name": { "type": "string" }, "details": { "type": "string" }, "amount": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Currency amount as a decimal string." } }, "required": [ "billingPlanId", "name", "amount" ], "additionalProperties": false } }, "final": { "type": "boolean", "description": "Set this to `true` if this is the final invoice for the installation. Can only be set when the installation is pending deletion." }, "test": { "type": "object", "description": "Test mode", "properties": { "validate": { "type": "boolean" }, "result": { "type": "string", "enum": [ "paid", "notpaid", "overdue" ] } }, "additionalProperties": false } }, "required": [ "invoiceDate", "period", "items" ], "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "submit-invoice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.submitInvoice({\n integrationConfigurationId: \"\",\n requestBody: {\n invoiceDate: new Date(\"2023-12-12T13:24:35.882Z\"),\n period: {\n start: new Date(\"2024-10-20T02:46:19.279Z\"),\n end: new Date(\"2025-06-06T21:30:28.107Z\"),\n },\n items: [\n {\n billingPlanId: \"\",\n name: \"\",\n price: \"469.29\",\n quantity: 3808.42,\n units: \"\",\n total: \"\",\n },\n {\n billingPlanId: \"\",\n name: \"\",\n price: \"469.29\",\n quantity: 3808.42,\n units: \"\",\n total: \"\",\n },\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing/finalize": { "post": { "description": "This endpoint allows the partner to mark an installation as finalized. This means you will not send any more invoices for the installation. Use this after a customer has requested uninstall and you have sent any remaining invoices. This will allow the uninstall process to proceed immediately after all invoices have been paid.
Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.", "operationId": "finalize-installation", "security": [ { "bearerToken": [] } ], "summary": "Finalize Installation", "tags": [ "marketplace" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "finalize-installation", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.finalizeInstallation({\n integrationConfigurationId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}": { "get": { "description": "Get Invoice details and status for a given invoice ID.

See [Billing Events with Webhooks documentation](https://vercel.com/docs/integrations/create-integration/marketplace-api#working-with-billing-events-through-webhooks) on how to receive invoice events. This endpoint is used to retrieve the invoice details.", "operationId": "get-invoice", "security": [ { "bearerToken": [] } ], "summary": "Get Invoice", "tags": [ "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "created": { "type": "string", "description": "System creation date. ISO 8601 timestamp." }, "discounts": { "items": { "properties": { "amount": { "type": "string", "description": "Discount amount. A dollar-based decimal string." }, "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "details": { "type": "string", "description": "Additional discount details." }, "end": { "type": "string", "description": "Start and end are only needed if different from the period's start/end. ISO 8601 timestamp." }, "name": { "type": "string", "description": "Discount name." }, "resourceId": { "type": "string", "description": "Partner's resource ID. If not specified, indicates installation-wide discount." }, "start": { "type": "string", "description": "Start and end are only needed if different from the period's start/end. ISO 8601 timestamp." } }, "required": [ "amount", "billingPlanId", "name" ], "type": "object", "description": "Invoice discounts." }, "type": "array", "description": "Invoice discounts." }, "externalId": { "type": "string", "description": "Partner-supplied Invoice ID, if applicable." }, "invoiceDate": { "type": "string", "description": "Invoice date. ISO 8601 timestamp." }, "invoiceId": { "type": "string", "description": "Vercel Marketplace Invoice ID." }, "invoiceNumber": { "type": "string", "description": "User-readable invoice number." }, "items": { "items": { "properties": { "billingPlanId": { "type": "string", "description": "Partner's billing plan ID." }, "details": { "type": "string", "description": "Additional item details." }, "end": { "type": "string", "description": "Start and end are only needed if different from the period's start/end. ISO 8601 timestamp." }, "name": { "type": "string", "description": "Invoice item name." }, "price": { "type": "string", "description": "Item price. A dollar-based decimal string." }, "quantity": { "type": "number", "description": "Item quantity." }, "resourceId": { "type": "string", "description": "Partner's resource ID. If not specified, indicates installation-wide item." }, "start": { "type": "string", "description": "Start and end are only needed if different from the period's start/end. ISO 8601 timestamp." }, "total": { "type": "string", "description": "Item total. A dollar-based decimal string." }, "units": { "type": "string", "description": "Units for item's quantity." } }, "required": [ "billingPlanId", "name", "price", "quantity", "total", "units" ], "type": "object", "description": "Invoice items." }, "type": "array", "description": "Invoice items." }, "memo": { "type": "string", "description": "Additional memo for the invoice." }, "paidAt": { "type": "string", "description": "Moment the invoice was paid. ISO 8601 timestamp." }, "period": { "properties": { "end": { "type": "string" }, "start": { "type": "string" } }, "required": [ "end", "start" ], "type": "object", "description": "Subscription period for this billing cycle. ISO 8601 timestamps." }, "refundedAt": { "type": "string", "description": "Most recent moment the invoice was refunded. ISO 8601 timestamp." }, "refundReason": { "type": "string", "description": "The reason for refund. Only applicable for states \"refunded\" or \"refund_request\"." }, "refundTotal": { "type": "string", "description": "Refund amount. Only applicable for states \"refunded\" or \"refund_request\". A dollar-based decimal string." }, "state": { "type": "string", "enum": [ "draft", "invoiced", "notpaid", "overdue", "paid", "pending", "refund_requested", "refunded", "scheduled" ], "description": "Invoice state." }, "test": { "type": "boolean", "enum": [ false, true ], "description": "Whether the invoice is in the testmode (no real transaction created)." }, "total": { "type": "string", "description": "Invoice total amount. A dollar-based decimal string." }, "updated": { "type": "string", "description": "System update date. ISO 8601 timestamp." } }, "required": [ "created", "invoiceDate", "invoiceId", "items", "period", "state", "total", "updated" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "invoiceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "get-invoice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getInvoice({\n integrationConfigurationId: \"\",\n invoiceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}/actions": { "post": { "description": "This endpoint allows the partner to request a refund for an invoice to Vercel. The invoice is created using the [Submit Invoice API](#submit-invoice-api).", "operationId": "update-invoice", "security": [ { "bearerToken": [] } ], "summary": "Invoice Actions", "tags": [ "marketplace" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "invoiceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "properties": { "action": { "type": "string", "enum": [ "refund" ] }, "reason": { "type": "string", "description": "Refund reason." }, "total": { "type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "The total amount to be refunded. Must be less than or equal to the total amount of the invoice." } }, "required": [ "action", "reason", "total" ], "additionalProperties": false } ] } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "update-invoice", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.updateInvoice({\n integrationConfigurationId: \"\",\n invoiceId: \"\",\n requestBody: {\n action: \"refund\",\n reason: \"\",\n total: \"\",\n },\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/billing/balance": { "post": { "description": "Sends the prepayment balances. The partner should do this at least once a day and ideally once per hour.
Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.", "operationId": "submit-prepayment-balances", "security": [ { "bearerToken": [] } ], "summary": "Submit Prepayment Balances", "tags": [ "marketplace" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "date-time", "description": "Server time of your integration, used to determine the most recent data for race conditions & updates. Only the latest usage data for a given day, week, and month will be kept." }, "balances": { "type": "array", "items": { "type": "object", "description": "A credit balance for a particular token type", "properties": { "resourceId": { "type": "string", "description": "Partner's resource ID, exclude if credits are tied to the installation and not an individual resource." }, "credit": { "type": "string", "description": "A human-readable description of the credits the user currently has, e.g. \"2,000 Tokens\"" }, "nameLabel": { "type": "string", "description": "The name of the credits, for display purposes, e.g. \"Tokens\"" }, "currencyValueInCents": { "type": "number", "description": "The dollar value of the credit balance, in USD and provided in cents, which is used to trigger automatic purchase thresholds." } }, "required": [ "currencyValueInCents" ], "additionalProperties": false } } }, "required": [ "timestamp", "balances" ], "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "submit-prepayment-balances", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.submitPrepaymentBalances({\n integrationConfigurationId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/products/{integrationProductIdOrSlug}/resources/{resourceId}/secrets": { "put": { "description": "This endpoint is deprecated and replaced with the endpoint [Update Resource Secrets](#update-resource-secrets).
This endpoint updates the secrets of a resource. If a resource has projects connected, the connected secrets are updated with the new secrets. The old secrets may still be used by existing connected projects because they are not automatically redeployed. Redeployment is a manual action and must be completed by the user. All new project connections will use the new secrets.

Use cases for this endpoint:

- Resetting the credentials of a database in the partner. If the user requests the credentials to be updated in the partner’s application, the partner post the new set of secrets to Vercel, the user should redeploy their application and the expire the old credentials.
", "operationId": "update-resource-secrets", "security": [ { "bearerToken": [] } ], "summary": "Deprecated: true. Update Resource Secrets (Deprecated)", "tags": [ "marketplace" ], "deprecated": true, "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "integrationProductIdOrSlug", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "secrets" ], "properties": { "secrets": { "type": "array", "items": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "prefix": { "type": "string" }, "environmentOverrides": { "type": "object", "description": "A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.", "properties": { "development": { "type": "string", "description": "Value used for development environment." }, "preview": { "type": "string", "description": "Value used for preview environment." }, "production": { "type": "string", "description": "Value used for production environment." } } } }, "additionalProperties": false } }, "partial": { "type": "boolean", "description": "If true, will only update the provided secrets" } }, "additionalProperties": false } } }, "required": true } } }, "/v1/installations/{integrationConfigurationId}/resources/{resourceId}/secrets": { "put": { "description": "This endpoint updates the secrets of a resource. If a resource has projects connected, the connected secrets are updated with the new secrets. The old secrets may still be used by existing connected projects because they are not automatically redeployed. Redeployment is a manual action and must be completed by the user. All new project connections will use the new secrets.

Use cases for this endpoint:

- Resetting the credentials of a database in the partner. If the user requests the credentials to be updated in the partner’s application, the partner post the new set of secrets to Vercel, the user should redeploy their application and the expire the old credentials.
", "operationId": "update-resource-secrets-by-id", "security": [ { "bearerToken": [] } ], "summary": "Update Resource Secrets", "tags": [ "marketplace" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "secrets" ], "properties": { "secrets": { "type": "array", "items": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "prefix": { "type": "string" }, "environmentOverrides": { "type": "object", "description": "A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.", "properties": { "development": { "type": "string", "description": "Value used for development environment." }, "preview": { "type": "string", "description": "Value used for preview environment." }, "production": { "type": "string", "description": "Value used for production environment." } } } }, "additionalProperties": false } }, "partial": { "type": "boolean", "description": "If true, will only overwrite the provided secrets instead of replacing all secrets." } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "update-resource-secrets-by-id", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.updateResourceSecretsById({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/integrations/configurations": { "get": { "description": "Allows to retrieve all configurations for an authenticated integration. When the `project` view is used, configurations generated for the authorization flow will be filtered out of the results.", "operationId": "getConfigurations", "security": [ { "bearerToken": [] } ], "summary": "Get configurations for the authenticated user or team", "tags": [ "integrations" ], "responses": { "200": { "description": "The list of configurations for the authenticated user", "content": { "application/json": { "schema": { "oneOf": [ { "items": { "properties": { "acceptedPoliciesInheritedFromInstallationId": { "type": "string", "description": "Historical parent installation from which acceptedPolicies were inherited. This is immutable provenance, not current authorization or relationship truth." }, "completedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was installed successfully", "example": 1558531915505 }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the configuration was created", "example": 1558531915505 }, "customerDeleteRequestedAt": { "nullable": true, "type": "number", "description": "Record when the customer initited deletion, independent of whether `deleteRequestedAt` gets set." }, "deletedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration was deleted.", "example": 1558531915505 }, "deleteRequestedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.", "example": 1558531915505 }, "disabledAt": { "type": "number", "description": "A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.", "example": 1558531915505 }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "original-owner-left-the-team", "original-owner-role-downgraded" ] }, "externalId": { "type": "string", "description": "An external identifier defined by the integration vendor." }, "id": { "type": "string", "description": "The unique identifier of the configuration", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "installationType": { "type": "string", "enum": [ "external", "marketplace" ], "description": "Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'" }, "integrationId": { "type": "string", "description": "The unique identifier of the app the configuration was created for", "example": "oac_xzpVzcUOgcB1nrVlirtKhbWV" }, "ownerId": { "type": "string", "description": "The user or team ID that owns the configuration", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projects": { "items": { "type": "string" }, "type": "array", "description": "When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.", "example": [ "prj_xQxbutw1HpL6HLYPAzt5h75m8NjO" ] }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "The resources that are allowed to be accessed by the configuration.", "example": [ "read:project", "read-write:log-drain" ] }, "slug": { "type": "string", "description": "The slug of the integration the configuration is created for.", "example": "slack" }, "source": { "type": "string", "enum": [ "backoffice", "cli", "deploy-button", "external", "import-recommended-integrations", "marketplace", "oauth", "organization", "resource-claims", "v0" ], "description": "Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.", "example": "marketplace" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The configuration status. Optional. If not defined, assume 'ready'." }, "teamId": { "nullable": true, "type": "string", "description": "When the configuration was created for a team, this will show the ID of the team.", "example": "team_nLlpyC6RE1qxydlFKbrxDlud" }, "type": { "type": "string", "enum": [ "integration-configuration" ] }, "updatedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was updated.", "example": 1558531915505 }, "userId": { "type": "string", "description": "The ID of the user that created the configuration.", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" } }, "type": "object", "description": "The list of configurations for the authenticated user" }, "type": "array", "description": "The list of configurations for the authenticated user" }, { "items": { "properties": { "acceptedPoliciesInheritedFromInstallationId": { "type": "string", "description": "Historical parent installation from which acceptedPolicies were inherited. This is immutable provenance, not current authorization or relationship truth." }, "completedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was installed successfully", "example": 1558531915505 }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the configuration was created", "example": 1558531915505 }, "customerDeleteRequestedAt": { "nullable": true, "type": "number", "description": "Record when the customer initited deletion, independent of whether `deleteRequestedAt` gets set." }, "deletedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration was deleted.", "example": 1558531915505 }, "deleteRequestedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.", "example": 1558531915505 }, "disabledAt": { "type": "number", "description": "A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.", "example": 1558531915505 }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "original-owner-left-the-team", "original-owner-role-downgraded" ] }, "externalId": { "type": "string", "description": "An external identifier defined by the integration vendor." }, "id": { "type": "string", "description": "The unique identifier of the configuration", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "installationType": { "type": "string", "enum": [ "external", "marketplace" ], "description": "Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'" }, "integration": { "properties": { "assignedBetaLabelAt": { "type": "number" }, "flags": { "items": { "type": "string" }, "type": "array" }, "icon": { "type": "string" }, "isLegacy": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "tagIds": { "items": { "type": "string", "enum": [ "tag_agents", "tag_ai", "tag_analytics", "tag_authentication", "tag_cms", "tag_code_repository", "tag_code_review", "tag_code_security", "tag_code_testing", "tag_commerce", "tag_databases", "tag_dev_tools", "tag_experimentation", "tag_flags", "tag_logging", "tag_messaging", "tag_monitoring", "tag_observability", "tag_payments", "tag_performance", "tag_productivity", "tag_searching", "tag_security", "tag_support_agent", "tag_testing", "tag_video", "tag_web_automation", "tag_workflow" ] }, "type": "array" } }, "required": [ "icon", "isLegacy", "name" ], "type": "object" }, "integrationId": { "type": "string", "description": "The unique identifier of the app the configuration was created for", "example": "oac_xzpVzcUOgcB1nrVlirtKhbWV" }, "ownerId": { "type": "string", "description": "The user or team ID that owns the configuration", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projects": { "items": { "type": "string" }, "type": "array", "description": "When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.", "example": [ "prj_xQxbutw1HpL6HLYPAzt5h75m8NjO" ] }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "The resources that are allowed to be accessed by the configuration.", "example": [ "read:project", "read-write:log-drain" ] }, "slug": { "type": "string", "description": "The slug of the integration the configuration is created for.", "example": "slack" }, "source": { "type": "string", "enum": [ "backoffice", "cli", "deploy-button", "external", "import-recommended-integrations", "marketplace", "oauth", "organization", "resource-claims", "v0" ], "description": "Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.", "example": "marketplace" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The configuration status. Optional. If not defined, assume 'ready'." }, "teamId": { "nullable": true, "type": "string", "description": "When the configuration was created for a team, this will show the ID of the team.", "example": "team_nLlpyC6RE1qxydlFKbrxDlud" }, "type": { "type": "string", "enum": [ "integration-configuration" ] }, "updatedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was updated.", "example": 1558531915505 }, "userId": { "type": "string", "description": "The ID of the user that created the configuration.", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" } }, "required": [ "createdAt", "id", "integration", "integrationId", "ownerId", "scopes", "slug", "type", "updatedAt", "userId" ], "type": "object" }, "type": "array" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "view", "in": "query", "required": true, "schema": { "type": "string", "enum": [ "account", "project" ] } }, { "name": "installationType", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "marketplace", "external", "provisioning" ] } }, { "name": "integrationIdOrSlug", "description": "ID of the integration", "in": "query", "required": false, "schema": { "type": "string", "description": "ID of the integration" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "getConfigurations", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.getConfigurations({\n view: \"account\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getConfigurations", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Integrations.GetConfigurations(ctx, operations.GetConfigurationsRequest{\n View: operations.ViewAccount,\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/integrations/configuration/{id}": { "get": { "description": "Allows to retrieve a the configuration with the provided id in case it exists. The authenticated user or team must be the owner of the config in order to access it.", "operationId": "getConfiguration", "security": [ { "bearerToken": [] } ], "summary": "Retrieve an integration configuration", "tags": [ "integrations" ], "responses": { "200": { "description": "The configuration with the provided id", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "acceptedPoliciesInheritedFromInstallationId": { "type": "string", "description": "Historical parent installation from which acceptedPolicies were inherited. This is immutable provenance, not current authorization or relationship truth." }, "canConfigureOpenTelemetry": { "type": "boolean", "enum": [ false, true ] }, "completedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was installed successfully", "example": 1558531915505 }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the configuration was created", "example": 1558531915505 }, "customerDeleteRequestedAt": { "nullable": true, "type": "number", "description": "Record when the customer initited deletion, independent of whether `deleteRequestedAt` gets set." }, "deletedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration was deleted.", "example": 1558531915505 }, "deleteRequestedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.", "example": 1558531915505 }, "disabledAt": { "type": "number", "description": "A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.", "example": 1558531915505 }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "original-owner-left-the-team", "original-owner-role-downgraded" ] }, "externalId": { "type": "string", "description": "An external identifier defined by the integration vendor." }, "id": { "type": "string", "description": "The unique identifier of the configuration", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "installationType": { "type": "string", "enum": [ "external", "marketplace" ], "description": "Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'" }, "integrationId": { "type": "string", "description": "The unique identifier of the app the configuration was created for", "example": "oac_xzpVzcUOgcB1nrVlirtKhbWV" }, "notification": { "properties": { "href": { "type": "string" }, "level": { "type": "string", "enum": [ "error", "info", "warn" ] }, "message": { "type": "string" }, "title": { "type": "string" } }, "required": [ "level", "title" ], "type": "object" }, "ownerId": { "type": "string", "description": "The user or team ID that owns the configuration", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projects": { "items": { "type": "string" }, "type": "array", "description": "When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.", "example": [ "prj_xQxbutw1HpL6HLYPAzt5h75m8NjO" ] }, "projectSelection": { "type": "string", "enum": [ "all", "selected" ], "description": "A string representing the permission for projects. Possible values are `all` or `selected`.", "example": "all" }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "The resources that are allowed to be accessed by the configuration.", "example": [ "read:project", "read-write:log-drain" ] }, "slug": { "type": "string", "description": "The slug of the integration the configuration is created for.", "example": "slack" }, "source": { "type": "string", "enum": [ "backoffice", "cli", "deploy-button", "external", "import-recommended-integrations", "marketplace", "oauth", "organization", "resource-claims", "v0" ], "description": "Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.", "example": "marketplace" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The configuration status. Optional. If not defined, assume 'ready'." }, "teamId": { "nullable": true, "type": "string", "description": "When the configuration was created for a team, this will show the ID of the team.", "example": "team_nLlpyC6RE1qxydlFKbrxDlud" }, "transferRequest": { "oneOf": [ { "properties": { "approvedAt": { "type": "number" }, "approvedBy": { "type": "string" }, "authorizationId": { "type": "string" }, "billingPlan": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "paymentMethodRequired": { "type": "boolean", "enum": [ false, true ] }, "preauthorizationAmount": { "type": "number" }, "scope": { "type": "string", "enum": [ "installation", "resource" ] }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] } }, "required": [ "description", "id", "name", "type" ], "type": "object" }, "createdAt": { "type": "number" }, "discardedAt": { "type": "number" }, "discardedBy": { "type": "string" }, "expiresAt": { "type": "number" }, "kind": { "type": "string", "enum": [ "transfer-to-marketplace" ] }, "metadata": { "additionalProperties": true, "type": "object" }, "requester": { "properties": { "email": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "requestId": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "createdAt", "expiresAt", "kind", "requestId", "requester", "transferId" ], "type": "object" }, { "properties": { "approvedAt": { "type": "number" }, "approvedBy": { "type": "string" }, "authorizationId": { "type": "string" }, "createdAt": { "type": "number" }, "discardedAt": { "type": "number" }, "discardedBy": { "type": "string" }, "expiresAt": { "type": "number" }, "kind": { "type": "string", "enum": [ "transfer-from-marketplace" ] }, "requester": { "properties": { "email": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "requestId": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "createdAt", "expiresAt", "kind", "requestId", "requester", "transferId" ], "type": "object" } ] }, "type": { "type": "string", "enum": [ "integration-configuration" ] }, "updatedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was updated.", "example": 1558531915505 }, "userId": { "type": "string", "description": "The ID of the user that created the configuration.", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" } }, "required": [ "createdAt", "id", "integrationId", "notification", "ownerId", "projectSelection", "scopes", "slug", "transferRequest", "type", "updatedAt", "userId" ], "type": "object" }, { "properties": { "acceptedPoliciesInheritedFromInstallationId": { "type": "string", "description": "Historical parent installation from which acceptedPolicies were inherited. This is immutable provenance, not current authorization or relationship truth." }, "completedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was installed successfully", "example": 1558531915505 }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the configuration was created", "example": 1558531915505 }, "customerDeleteRequestedAt": { "nullable": true, "type": "number", "description": "Record when the customer initited deletion, independent of whether `deleteRequestedAt` gets set." }, "deletedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration was deleted.", "example": 1558531915505 }, "deleteRequestedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.", "example": 1558531915505 }, "disabledAt": { "type": "number", "description": "A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.", "example": 1558531915505 }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "original-owner-left-the-team", "original-owner-role-downgraded" ] }, "externalId": { "type": "string", "description": "An external identifier defined by the integration vendor." }, "id": { "type": "string", "description": "The unique identifier of the configuration", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "installationType": { "type": "string", "enum": [ "external", "marketplace" ], "description": "Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'" }, "integrationId": { "type": "string", "description": "The unique identifier of the app the configuration was created for", "example": "oac_xzpVzcUOgcB1nrVlirtKhbWV" }, "ownerId": { "type": "string", "description": "The user or team ID that owns the configuration", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projects": { "items": { "type": "string" }, "type": "array", "description": "When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.", "example": [ "prj_xQxbutw1HpL6HLYPAzt5h75m8NjO" ] }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "The resources that are allowed to be accessed by the configuration.", "example": [ "read:project", "read-write:log-drain" ] }, "slug": { "type": "string", "description": "The slug of the integration the configuration is created for.", "example": "slack" }, "source": { "type": "string", "enum": [ "backoffice", "cli", "deploy-button", "external", "import-recommended-integrations", "marketplace", "oauth", "organization", "resource-claims", "v0" ], "description": "Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.", "example": "marketplace" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The configuration status. Optional. If not defined, assume 'ready'." }, "teamId": { "nullable": true, "type": "string", "description": "When the configuration was created for a team, this will show the ID of the team.", "example": "team_nLlpyC6RE1qxydlFKbrxDlud" }, "type": { "type": "string", "enum": [ "integration-configuration" ] }, "updatedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was updated.", "example": 1558531915505 }, "userId": { "type": "string", "description": "The ID of the user that created the configuration.", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" } }, "required": [ "createdAt", "id", "integrationId", "ownerId", "scopes", "slug", "type", "updatedAt", "userId" ], "type": "object", "description": "The configuration with the provided id" }, { "properties": { "acceptedPoliciesInheritedFromInstallationId": { "type": "string", "description": "Historical parent installation from which acceptedPolicies were inherited. This is immutable provenance, not current authorization or relationship truth." }, "completedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was installed successfully", "example": 1558531915505 }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the configuration was created", "example": 1558531915505 }, "customerDeleteRequestedAt": { "nullable": true, "type": "number", "description": "Record when the customer initited deletion, independent of whether `deleteRequestedAt` gets set." }, "deletedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration was deleted.", "example": 1558531915505 }, "deleteRequestedAt": { "nullable": true, "type": "number", "description": "A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.", "example": 1558531915505 }, "disabledAt": { "type": "number", "description": "A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.", "example": 1558531915505 }, "disabledReason": { "type": "string", "enum": [ "account-plan-downgrade", "disabled-by-admin", "disabled-by-owner", "feature-not-available", "original-owner-left-the-team", "original-owner-role-downgraded" ] }, "externalId": { "type": "string", "description": "An external identifier defined by the integration vendor." }, "id": { "type": "string", "description": "The unique identifier of the configuration", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "installationType": { "type": "string", "enum": [ "external", "marketplace" ], "description": "Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'" }, "integrationId": { "type": "string", "description": "The unique identifier of the app the configuration was created for", "example": "oac_xzpVzcUOgcB1nrVlirtKhbWV" }, "ownerId": { "type": "string", "description": "The user or team ID that owns the configuration", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projects": { "items": { "type": "string" }, "type": "array", "description": "When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.", "example": [ "prj_xQxbutw1HpL6HLYPAzt5h75m8NjO" ] }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "The resources that are allowed to be accessed by the configuration.", "example": [ "read:project", "read-write:log-drain" ] }, "slug": { "type": "string", "description": "The slug of the integration the configuration is created for.", "example": "slack" }, "source": { "type": "string", "enum": [ "backoffice", "cli", "deploy-button", "external", "import-recommended-integrations", "marketplace", "oauth", "organization", "resource-claims", "v0" ], "description": "Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.", "example": "marketplace" }, "status": { "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled" ], "description": "The configuration status. Optional. If not defined, assume 'ready'." }, "teamId": { "nullable": true, "type": "string", "description": "When the configuration was created for a team, this will show the ID of the team.", "example": "team_nLlpyC6RE1qxydlFKbrxDlud" }, "type": { "type": "string", "enum": [ "integration-configuration" ] }, "updatedAt": { "type": "number", "description": "A timestamp that tells you when the configuration was updated.", "example": 1558531915505 }, "userId": { "type": "string", "description": "The ID of the user that created the configuration.", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" } }, "type": "object", "description": "A configuration represents information about a single installation of an integration within an individual or team account" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The configuration was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "ID of the configuration to check", "in": "path", "required": true, "schema": { "type": "string", "description": "ID of the configuration to check", "example": "icfg_cuwj0AdCdH3BwWT4LPijCC7t" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getConfiguration", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.getConfiguration({\n id: \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getConfiguration", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Integrations.GetConfiguration(ctx, \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Allows to remove the configuration with the `id` provided in the parameters. The configuration and all of its resources will be removed. This includes Webhooks, LogDrains and Project Env variables.", "operationId": "deleteConfiguration", "security": [ { "bearerToken": [] } ], "summary": "Delete an integration configuration", "tags": [ "integrations" ], "responses": { "204": { "description": "The configuration was successfully removed" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The configuration was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteConfiguration", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.integrations.deleteConfiguration({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteConfiguration", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Integrations.DeleteConfiguration(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/integrations/configuration/{id}/products": { "get": { "description": "Returns products available for an integration configuration. Each product includes a `metadataSchema` field with the JSON Schema for required and optional metadata fields.", "operationId": "getConfigurationProducts", "security": [ { "bearerToken": [] } ], "summary": "List products for integration configuration", "tags": [ "integrations" ], "responses": { "200": { "description": "List of products available for this integration configuration", "content": { "application/json": { "schema": { "properties": { "configuration": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "integration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object" }, "products": { "items": { "properties": { "id": { "type": "string" }, "metadataSchema": { "properties": { "properties": { "additionalProperties": { "oneOf": [ { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "input" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "type": "number" }, "description": { "type": "string" }, "exclusiveMaximum": { "type": "number" }, "exclusiveMinimum": { "type": "number" }, "maximum": { "type": "number" }, "minimum": { "type": "number" }, "type": { "type": "string", "enum": [ "number" ] }, "ui:control": { "type": "string", "enum": [ "input" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "type": "boolean", "enum": [ false, true ] }, "description": { "type": "string" }, "type": { "type": "string", "enum": [ "boolean" ] }, "ui:control": { "type": "string", "enum": [ "toggle" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "items": { "type": "number" }, "type": "array" }, "description": { "type": "string" }, "items": { "properties": { "default": { "type": "number" }, "description": { "type": "string" }, "exclusiveMaximum": { "type": "number" }, "exclusiveMinimum": { "type": "number" }, "maximum": { "type": "number" }, "minimum": { "type": "number" }, "type": { "type": "string", "enum": [ "number" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "slider" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:steps": { "items": { "type": "number" }, "type": "array" } }, "required": [ "items", "type", "ui:control", "ui:steps" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "select" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "radio-button" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "items": { "type": "string" }, "type": "array" }, "description": { "type": "string" }, "example": { "items": { "type": "string" }, "type": "array" }, "items": { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "multi-select" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "items", "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "vercel-region" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "items": { "type": "string" }, "type": "array" }, "description": { "type": "string" }, "example": { "items": { "type": "string" }, "type": "array" }, "items": { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "multi-vercel-region" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "items", "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "vercel-country" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "domain" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "description": { "type": "string" }, "git:providers": { "items": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] }, "type": "array" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "git-namespace" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" } ] }, "type": "object" }, "required": { "items": { "type": "string" }, "type": "array" }, "type": { "type": "string", "enum": [ "object" ] }, "ui:order": { "items": { "type": "string" }, "type": "array" } }, "required": [ "properties", "type" ], "type": "object" }, "name": { "type": "string" }, "primaryProtocol": { "type": "string", "enum": [ "ai", "authentication", "checks", "experimentation", "logDrain", "messaging", "observability", "other", "storage", "traceDrain", "video", "workflow" ] }, "protocols": { "properties": { "ai": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "authentication": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] }, "appUrlRegistrationSupport": { "type": "boolean", "enum": [ false, true ], "description": "The partner accepts Vercel-managed app URLs via `protocolSettings.authentication.appUrls` on provision-resource and update-resource, and reconciles them into its trusted-origin / redirect-URL allowlist. When absent, consumers surface the URL for a one-time manual registration instead." } }, "required": [ "status" ], "type": "object" }, "checks": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "experimentation": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] }, "edgeConfigSyncingSupport": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "status" ], "type": "object" }, "logDrain": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "format": { "type": "string", "enum": [ "json", "ndjson" ] } }, "required": [ "endpoint", "format", "status" ], "type": "object" }, "messaging": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "observability": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "other": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "storage": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] }, "repl": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "supportsReadOnlyMode": { "type": "boolean", "enum": [ false, true ] }, "welcomeMessage": { "type": "string" } }, "required": [ "enabled", "supportsReadOnlyMode" ], "type": "object" } }, "required": [ "status" ], "type": "object" }, "traceDrain": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] }, "endpoint": { "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "format": { "type": "string", "enum": [ "json", "proto" ] } }, "required": [ "endpoint", "format", "status" ], "type": "object" }, "video": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" }, "workflow": { "properties": { "status": { "type": "string", "enum": [ "disabled", "enabled" ] } }, "required": [ "status" ], "type": "object" } }, "type": "object" }, "slug": { "type": "string" } }, "required": [ "id", "metadataSchema", "name", "protocols", "slug" ], "type": "object" }, "type": "array" } }, "required": [ "configuration", "integration", "products" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "id", "description": "ID of the integration configuration", "in": "path", "required": true, "schema": { "type": "string", "description": "ID of the integration configuration", "example": "icfg_cuwj0AdCdH3BwWT4LPijCC7t" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getConfigurationProducts", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.getConfigurationProducts({\n id: \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/integrations/sso/token": { "post": { "description": "During the autorization process, Vercel sends the user to the provider [redirectLoginUrl](https://vercel.com/docs/integrations/create-integration/submit-integration#redirect-login-url), that includes the OAuth authorization `code` parameter. The provider then calls the SSO Token Exchange endpoint with the sent code and receives the OIDC token. They log the user in based on this token and redirects the user back to the Vercel account using deep-link parameters included the redirectLoginUrl. Providers should not persist the returned `id_token` in a database since the token will expire. See [**Authentication with SSO**](https://vercel.com/docs/integrations/create-integration/marketplace-api#authentication-with-sso) for more details.", "operationId": "exchange-sso-token", "security": [], "summary": "SSO Token Exchange", "tags": [ "authentication", "marketplace" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "access_token": { "nullable": true, "type": "string" }, "expires_in": { "type": "number" }, "id_token": { "type": "string" }, "refresh_token": { "type": "string" }, "token_type": { "nullable": true, "type": "string" } }, "required": [ "access_token", "id_token", "token_type" ], "type": "object" }, { "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "number" }, "id_token": { "type": "string" }, "refresh_token": { "type": "string" }, "token_type": { "type": "string" } }, "required": [ "access_token", "expires_in", "id_token", "refresh_token", "token_type" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "403": { "description": "" }, "500": { "description": "" } }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "required": [ "code", "client_id", "client_secret", "grant_type" ], "properties": { "code": { "type": "string", "description": "The sensitive code received from Vercel" }, "state": { "type": "string", "description": "The state received from the initialization request" }, "client_id": { "type": "string", "description": "The integration client id" }, "client_secret": { "type": "string", "description": "The integration client secret" }, "redirect_uri": { "type": "string", "description": "The integration redirect URI" }, "grant_type": { "type": "string", "description": "The grant type, when using x-www-form-urlencoded content type", "enum": [ "authorization_code" ] } } }, { "type": "object", "required": [ "refresh_token", "client_id", "client_secret", "grant_type" ], "properties": { "refresh_token": { "type": "string", "description": "The refresh token received from previous token exchange" }, "client_id": { "type": "string", "description": "The integration client id" }, "client_secret": { "type": "string", "description": "The integration client secret" }, "grant_type": { "type": "string", "description": "The grant type, when using x-www-form-urlencoded content type", "enum": [ "refresh_token" ] } } } ] } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "exchange-sso-token", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.authentication.exchangeSsoToken({\n code: \"\",\n clientId: \"\",\n clientSecret: \"\",\n grantType: \"authorization_code\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "typescript", "label": "exchange-sso-token", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.marketplace.exchangeSsoToken({\n code: \"\",\n clientId: \"\",\n clientSecret: \"\",\n grantType: \"authorization_code\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/integrations/log-drains": { "get": { "description": "Retrieves a list of all Integration log drains that are defined for the authenticated user or team. When using an OAuth2 token, the list is limited to log drains created by the authenticated integration.", "operationId": "getIntegrationLogDrains", "security": [ { "bearerToken": [] } ], "summary": "Retrieves a list of Integration log drains (deprecated)", "tags": [ "logDrains" ], "responses": { "200": { "description": "A list of log drains", "content": { "application/json": { "schema": { "items": { "properties": { "branch": { "type": "string", "description": "The branch regexp of log drain", "example": "feature/*" }, "clientId": { "type": "string", "description": "The oauth2 client application id that created this log drain", "example": "oac_xRhY4LAB7yLhUADD69EvV7ct" }, "configurationId": { "type": "string", "description": "The client configuration this log drain was created with", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the log drain was created", "example": 1558531915505 }, "createdFrom": { "type": "string", "enum": [ "integration", "self-served" ], "description": "Whether the log drain was created by an integration or by a user", "example": "integration" }, "deliveryFormat": { "type": "string", "enum": [ "json", "ndjson", "protobuf" ], "description": "The delivery log format", "example": "json" }, "environments": { "items": { "type": "string", "enum": [ "preview", "production" ], "description": "The environment of log drain", "example": [ "production" ] }, "type": "array", "description": "The environment of log drain", "example": [ "production" ] }, "headers": { "additionalProperties": { "type": "string" }, "type": "object", "description": "The headers to send with the request", "example": "{\"Authorization\": \"Bearer 123\"}" }, "id": { "type": "string", "description": "The unique identifier of the log drain. Always prefixed with `ld_`", "example": "ld_nBuA7zCID8g4QZ8g" }, "name": { "type": "string", "description": "The name of the log drain", "example": "My first log drain" }, "ownerId": { "type": "string", "description": "The identifier of the team or user whose events will trigger the log drain", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projectId": { "nullable": true, "type": "string", "example": "AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The identifier of the projects this log drain is associated with", "example": "AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb" }, "samplingRate": { "type": "number", "description": "The sampling rate of log drain", "example": 0.5 }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ], "description": "The sources from which logs are currently being delivered to this log drain.", "example": [ "build", "edge" ] }, "type": "array", "description": "The sources from which logs are currently being delivered to this log drain.", "example": [ "build", "edge" ] }, "url": { "type": "string", "description": "The URL to call when logs are generated", "example": "https://example.com/log-drain" } }, "required": [ "createdAt", "id", "name", "ownerId", "source", "url" ], "type": "object" }, "type": "array" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getIntegrationLogDrains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logDrains.getIntegrationLogDrains({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getIntegrationLogDrains", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.GetIntegrationLogDrains(ctx, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.ResponseBodies != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Creates an Integration log drain. This endpoint must be called with an OAuth2 client (integration), since log drains are tied to integrations. If it is called with a different token type it will produce a 400 error.", "operationId": "createLogDrain", "security": [ { "bearerToken": [] } ], "summary": "Creates a new Integration Log Drain (deprecated)", "tags": [ "logDrains" ], "responses": { "200": { "description": "The log drain was successfully created", "content": { "application/json": { "schema": { "properties": { "branch": { "type": "string", "description": "The branch regexp of log drain", "example": "feature/*" }, "clientId": { "type": "string", "description": "The oauth2 client application id that created this log drain", "example": "oac_xRhY4LAB7yLhUADD69EvV7ct" }, "configurationId": { "type": "string", "description": "The client configuration this log drain was created with", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "createdAt": { "type": "number", "description": "A timestamp that tells you when the log drain was created", "example": 1558531915505 }, "createdFrom": { "type": "string", "enum": [ "integration", "self-served" ], "description": "Whether the log drain was created by an integration or by a user", "example": "integration" }, "deliveryFormat": { "type": "string", "enum": [ "json", "ndjson", "protobuf" ], "description": "The delivery log format", "example": "json" }, "environments": { "items": { "type": "string", "enum": [ "preview", "production" ], "description": "The environment of log drain", "example": [ "production" ] }, "type": "array", "description": "The environment of log drain", "example": [ "production" ] }, "headers": { "additionalProperties": { "type": "string" }, "type": "object", "description": "The headers to send with the request", "example": "{\"Authorization\": \"Bearer 123\"}" }, "id": { "type": "string", "description": "The unique identifier of the log drain. Always prefixed with `ld_`", "example": "ld_nBuA7zCID8g4QZ8g" }, "name": { "type": "string", "description": "The name of the log drain", "example": "My first log drain" }, "ownerId": { "type": "string", "description": "The identifier of the team or user whose events will trigger the log drain", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "projectId": { "nullable": true, "type": "string", "example": "AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The identifier of the projects this log drain is associated with", "example": "AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb" }, "samplingRate": { "type": "number", "description": "The sampling rate of log drain", "example": 0.5 }, "source": { "oneOf": [ { "properties": { "kind": { "type": "string", "enum": [ "self-served" ] } }, "required": [ "kind" ], "type": "object" }, { "properties": { "externalResourceId": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "kind": { "type": "string", "enum": [ "integration" ] }, "resourceId": { "type": "string" } }, "required": [ "integrationConfigurationId", "integrationId", "kind" ], "type": "object" } ] }, "sources": { "items": { "type": "string", "enum": [ "build", "edge", "external", "firewall", "lambda", "redirect", "static" ], "description": "The sources from which logs are currently being delivered to this log drain.", "example": [ "build", "edge" ] }, "type": "array", "description": "The sources from which logs are currently being delivered to this log drain.", "example": [ "build", "edge" ] }, "url": { "type": "string", "description": "The URL to call when logs are generated", "example": "https://example.com/log-drain" } }, "required": [ "createdAt", "id", "name", "ownerId", "source", "url" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nThe provided token is not from an OAuth2 Client" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "description": "The name of the log drain", "example": "My first log drain", "maxLength": 100, "pattern": "^[A-z0-9_ -]+$", "type": "string" }, "projectIds": { "minItems": 1, "maxItems": 50, "type": "array", "items": { "pattern": "^[a-zA-z0-9_]+$", "type": "string" } }, "secret": { "description": "A secret to sign log drain notification headers so a consumer can verify their authenticity", "example": "a1Xsfd325fXcs", "maxLength": 100, "pattern": "^[A-z0-9_ -]+$", "type": "string" }, "deliveryFormat": { "description": "The delivery log format", "example": "json", "enum": [ "json", "ndjson" ] }, "url": { "description": "The url where you will receive logs. The protocol must be `https://` or `http://` when type is `json` and `ndjson`.", "example": "https://example.com/log-drain", "format": "uri", "pattern": "^https?://", "type": "string" }, "sources": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "static", "lambda", "build", "edge", "external", "firewall" ] }, "minItems": 1 }, "headers": { "description": "Headers to be sent together with the request", "type": "object", "additionalProperties": { "type": "string" } }, "environments": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "preview", "production" ] }, "minItems": 1 } }, "required": [ "name", "url" ], "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createLogDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logDrains.createLogDrain({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"My first log drain\",\n secret: \"a1Xsfd325fXcs\",\n deliveryFormat: \"json\",\n url: \"https://example.com/log-drain\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createLogDrain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.CreateLogDrain(ctx, nil, nil, &operations.CreateLogDrainRequestBody{\n Name: \"My first log drain\",\n Secret: vercel.String(\"a1Xsfd325fXcs\"),\n DeliveryFormat: operations.DeliveryFormatJSON.ToPointer(),\n URL: \"https://example.com/log-drain\",\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/integrations/log-drains/{id}": { "delete": { "description": "Deletes the Integration log drain with the provided `id`. When using an OAuth2 Token, the log drain can be deleted only if the integration owns it.", "operationId": "deleteIntegrationLogDrain", "security": [ { "bearerToken": [] } ], "summary": "Deletes the Integration log drain with the provided `id` (deprecated)", "tags": [ "logDrains" ], "responses": { "204": { "description": "The log drain was successfully deleted" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "ID of the log drain to be deleted", "in": "path", "required": true, "schema": { "description": "ID of the log drain to be deleted", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteIntegrationLogDrain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.logDrains.deleteIntegrationLogDrain({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteIntegrationLogDrain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.LogDrains.DeleteIntegrationLogDrain(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/api-keys": { "post": { "description": "", "operationId": "createApiKeys", "security": [], "tags": [], "responses": { "200": { "description": "Successfully created an API key.", "content": { "application/json": { "schema": { "type": "object", "properties": { "apiKeyString": { "description": "The API key's actual value. This value is only provided in this response, and can never be retrieved again in the future. Be sure to save it somewhere safe!", "example": "uRKJSTt0L4RaSkiMj41QTkxM", "type": "string" }, "apiKey": { "$ref": "#/components/schemas/APIKey" } }, "required": [ "apiKeyString", "apiKey" ] } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized.", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ] } }, "required": [ "error" ] } } } }, "403": { "description": "You do not have permission to access this resource.", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ] } }, "required": [ "error" ] } } } }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": "string" }, "message": { "type": "string" }, "limit": { "type": "number" } }, "required": [ "code", "name", "message", "limit" ] } }, "required": [ "error" ] } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ] } }, "required": [ "error" ] } } } } }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "purpose" ], "properties": { "purpose": { "type": "string", "description": "The API key's purpose, which restricts how it can be used." }, "projectId": { "type": "string", "description": "An optional project to restrict the API key to.", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" }, "name": { "type": "string", "description": "An optional name for the API key.", "example": "API Key for App 123" }, "expiresAt": { "type": "number", "description": "The API key's expiration, expressed as a UNIX timestamp in milliseconds." }, "aiGatewayQuota": { "type": "object", "description": "Optional AI Gateway quota configuration for the API key.", "properties": { "limitAmount": { "type": "number", "minimum": 1, "description": "The quota limit amount." }, "includeByokInQuota": { "type": "boolean", "default": false, "description": "Whether to include BYOK (Bring Your Own Key) usage in the quota." }, "refreshPeriod": { "type": "string", "enum": [ "daily", "weekly", "monthly", "none" ], "default": "none", "description": "How often the quota refreshes." }, "alertThresholds": { "type": "array", "items": { "type": "number", "enum": [ 50, 75, 100 ] }, "description": "Spend percentages (a subset of [50, 75, 100]) at which to send a spend alert." } }, "required": [ "limitAmount" ] }, "metadata": { "type": "object", "description": "Optional generic metadata for the API key. The accepted shape depends on the key's `purpose` and is validated on creation; for `ai-gateway` keys this accepts `environment`.", "additionalProperties": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createApiKeys", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.createApiKeys({\n purpose: \"\",\n projectId: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n name: \"API Key for App 123\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers": { "get": { "description": "Retrieve the list of KMS issuers that belong to the authenticated team. The results are paginated.", "operationId": "listKmsIssuers", "security": [ { "bearerToken": [] } ], "summary": "List issuers", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "issuers": { "items": { "properties": { "algorithm": { "type": "string", "enum": [ "ES256", "ES384", "ES512", "PS256", "PS384", "PS512", "RS256", "RS384", "RS512" ] }, "claimsSchema": { "additionalProperties": true, "type": "object" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "managedBy": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string", "enum": [ "external", "vercel" ] }, "ownerId": { "type": "string" }, "policies": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] }, "type": "array" }, "signingKeys": { "items": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "id", "name", "origin", "ownerId", "policies", "signingKeys", "updatedAt" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" } }, "required": [ "issuers", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "limit", "description": "Maximum number of issuers to return.", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Maximum number of issuers to return." } }, { "name": "next", "description": "Continuation cursor to retrieve the next page of results.", "in": "query", "schema": { "type": "string", "maxLength": 1024, "pattern": "^[A-Za-z0-9_-]+$", "description": "Continuation cursor to retrieve the next page of results." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listKmsIssuers", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.listKmsIssuers({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Create a new KMS issuer for the authenticated team. An issuer owns the asymmetric signing keys that are used to sign tokens and messages.", "operationId": "createKmsIssuer", "security": [ { "bearerToken": [] } ], "summary": "Create an issuer", "tags": [ "kms" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "algorithm": { "type": "string", "enum": [ "ES256", "ES384", "ES512", "PS256", "PS384", "PS512", "RS256", "RS384", "RS512" ] }, "claimsSchema": { "additionalProperties": true, "type": "object" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "managedBy": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string", "enum": [ "external", "vercel" ] }, "ownerId": { "type": "string" }, "policies": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] }, "type": "array" }, "signingKeys": { "items": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "id", "name", "origin", "ownerId", "policies", "signingKeys", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "name" ], "properties": { "name": { "type": "string", "description": "The name of the issuer." }, "algorithm": { "type": "string", "description": "The signing algorithm to use for the issuer.", "enum": [ "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" ], "default": "RS512" }, "claimsSchema": { "type": "object", "description": "A JSON Schema used to validate the resolved token claims when signing tokens for this issuer.", "additionalProperties": true }, "policy": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "kind", "teamId", "projectId", "environments" ], "properties": { "kind": { "type": "string", "enum": [ "project-grant" ] }, "teamId": { "type": "string", "description": "The team ID for the project grant policy." }, "projectId": { "type": "string", "description": "The project ID for the project grant policy." }, "environments": { "type": "array", "description": "The environments for the project grant policy. Each entry is a system environment (production, preview, development) or a custom environment ID (env_...).", "items": { "type": "string", "pattern": "^(?:production|preview|development|env_.+)$" }, "minItems": 1, "uniqueItems": true }, "tokenClaims": { "type": "object", "description": "The claims that KMS should include in signed JWTs for this policy.", "additionalProperties": true } } }, { "type": "object", "additionalProperties": false, "required": [ "kind", "clientId" ], "properties": { "kind": { "type": "string", "enum": [ "connex-grant" ] }, "clientId": { "type": "string", "description": "The Connex client ID for the Connex grant policy." }, "tokenClaims": { "type": "object", "description": "The claims that KMS should include in signed JWTs for this policy.", "additionalProperties": true } } } ] }, "importKey": { "type": "string", "description": "The PEM-encoded private key to use for the issuer." }, "importKeyId": { "type": "string", "description": "The key id to use as the imported key's JWT/JWKS `kid`. Only allowed when `importKey` is provided. Not required to be unique; the addressable key id is the server-minted `keyId` returned in the response.", "maxLength": 128, "pattern": "^[A-Za-z0-9._-]+$" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createKmsIssuer", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.createKmsIssuer({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/sign/message": { "post": { "description": "Sign a raw message with a KMS issuer's active signing key. Authenticate the request with a Vercel OIDC token in the `Authorization: Bearer` header; the issuer's policies decide which workloads are allowed to sign. The response `signature` is standard-base64 of the raw signature over the decoded message bytes. `keyId` and `algorithm` identify the signing key in the issuer's JWKS.", "operationId": "signKmsMessage", "security": [ { "bearerToken": [] } ], "summary": "Sign a message", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "algorithm": { "type": "string", "description": "Algorithm of the signing key." }, "keyId": { "type": "string", "description": "Key id of the signing key. Matches the JWKS `kid` so verifiers can select the key after rotation without trial-verifying every published key." }, "signature": { "type": "string", "description": "Standard-base64 encoding of the raw signature over the decoded message bytes." } }, "required": [ "algorithm", "keyId", "signature" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "" }, "404": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "Base64-encoded message to be signed.", "maxLength": 44000, "pattern": "^[A-Za-z0-9+/]*={0,2}$" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "signKmsMessage", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.signKmsMessage({\n issuerId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/sign/token": { "post": { "description": "Sign a JWT with a KMS issuer's active signing key. Authenticate the request with a Vercel OIDC token in the `Authorization: Bearer` header; the issuer's policies decide which workloads are allowed to sign.", "operationId": "signKmsToken", "security": [ { "bearerToken": [] } ], "summary": "Sign a token", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "token": { "type": "string" } }, "required": [ "token" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "" }, "404": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "claims": { "type": "object", "description": "The claims to include in the token.", "maxProperties": 128 }, "headers": { "type": "object", "description": "Additional headers to include in the token.", "maxProperties": 64 }, "ttl": { "type": "number", "description": "The time-to-live for the token, in seconds.", "default": 300, "nullable": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "signKmsToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.signKmsToken({\n issuerId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/keys": { "post": { "description": "Create a new signing key for a KMS issuer. Depending on the activation mode, the key is activated automatically once its public key has propagated, or manually via the activate endpoint.", "operationId": "createKmsSigningKey", "security": [ { "bearerToken": [] } ], "summary": "Create a signing key", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "activation": { "type": "string", "enum": [ "automatic", "manual" ], "description": "Whether the new key is activated automatically after its public key has propagated, or manually via the activate endpoint. Defaults to `automatic`." }, "revokePreviousAfterHours": { "type": "number", "minimum": 0, "description": "For automatic activation, how many hours after activation the previous signing key should stop being used. Defaults to a 1 hour grace period so already-issued tokens keep verifying." }, "revokePreviousAt": { "description": "Deprecated. The ISO date string or timestamp when the previous signing key should stop being used. Converted to a relative grace and applied at activation, not creation. Prefer revokePreviousAfterHours.", "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "importKey": { "type": "string", "description": "The PEM-encoded private key to use for the issuer." }, "importKeyId": { "type": "string", "description": "The key id to use as the imported key's JWT/JWKS `kid`. Only allowed when `importKey` is provided. Not required to be unique; the addressable key id is the server-minted `keyId` returned in the response.", "maxLength": 128, "pattern": "^[A-Za-z0-9._-]+$" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createKmsSigningKey", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.createKmsSigningKey({\n issuerId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/keys/{keyId}/activate": { "post": { "description": "Activate a pending signing key so the issuer starts signing with it.", "operationId": "activateKmsSigningKey", "security": [ { "bearerToken": [] } ], "summary": "Activate a signing key", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "name": "keyId", "description": "The ID of the pending signing key to activate.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the pending signing key to activate." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "revokePreviousAfterHours": { "type": "number", "minimum": 0, "description": "How many hours after activation the previously-active key should stop being used. Defaults to a 1 hour grace period so already-issued tokens keep verifying." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "activateKmsSigningKey", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.activateKmsSigningKey({\n issuerId: \"\",\n keyId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/keys/{keyId}/revoke": { "post": { "description": "Immediately revoke a signing key that is already scheduled for revocation.", "operationId": "revokeKmsSigningKey", "security": [ { "bearerToken": [] } ], "summary": "Revoke a signing key", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "algorithm": { "type": "string", "enum": [ "ES256", "ES384", "ES512", "PS256", "PS384", "PS512", "RS256", "RS384", "RS512" ] }, "claimsSchema": { "additionalProperties": true, "type": "object" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "managedBy": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string", "enum": [ "external", "vercel" ] }, "ownerId": { "type": "string" }, "policies": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] }, "type": "array" }, "signingKeys": { "items": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "id", "name", "origin", "ownerId", "policies", "signingKeys", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "name": "keyId", "description": "The ID of the signing key to revoke immediately. The key must already be scheduled for revocation.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the signing key to revoke immediately. The key must already be scheduled for revocation." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "revokeKmsSigningKey", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.revokeKmsSigningKey({\n issuerId: \"\",\n keyId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}": { "get": { "description": "Retrieve a single KMS issuer by its ID. Accepts either a team bearer token (existing path) or an OIDC token authorized by one of the issuer's policies (e.g. a connex-grant token). The OIDC path returns the issuer without policies, since a policy token only proves signing access, not management access.", "operationId": "getKmsIssuer", "security": [ { "bearerToken": [] } ], "summary": "Get an issuer", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "algorithm": { "type": "string", "enum": [ "ES256", "ES384", "ES512", "PS256", "PS384", "PS512", "RS256", "RS384", "RS512" ] }, "claimsSchema": { "additionalProperties": true, "type": "object" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "managedBy": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string", "enum": [ "external", "vercel" ] }, "ownerId": { "type": "string" }, "policies": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] }, "type": "array" }, "signingKeys": { "items": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "id", "name", "origin", "ownerId", "policies", "signingKeys", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getKmsIssuer", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.getKmsIssuer({\n issuerId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update a KMS issuer's name or claims schema.", "operationId": "updateKmsIssuer", "security": [ { "bearerToken": [] } ], "summary": "Update an issuer", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "algorithm": { "type": "string", "enum": [ "ES256", "ES384", "ES512", "PS256", "PS384", "PS512", "RS256", "RS384", "RS512" ] }, "claimsSchema": { "additionalProperties": true, "type": "object" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "managedBy": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string", "enum": [ "external", "vercel" ] }, "ownerId": { "type": "string" }, "policies": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] }, "type": "array" }, "signingKeys": { "items": { "properties": { "activateAt": { "type": "string" }, "activatedAt": { "type": "string", "description": "When the key became the active signer. Present for active and revoking keys (and absent for pending keys and rows predating this field)." }, "algorithm": { "type": "string" }, "certificatePem": { "type": "string", "description": "The stored X.509 certificate (from `publicKey.x5c[0]`) in PEM form, ready to render. Present only for keys created with a stored certificate; omitted for keys created before certificates were stored." }, "createdAt": { "type": "string" }, "importKeyId": { "type": "string", "description": "The caller-supplied key id (imported keys only), used as the JWT/JWKS `kid`. Not unique across an issuer's keys; omitted for generated keys." }, "issuerId": { "type": "string" }, "keyId": { "type": "string", "description": "The server-minted, unique record identifier. Use this to address the key on the activate / certificate endpoints." }, "publicKey": { "properties": { "alg": { "type": "string" }, "key_ops": { "items": { "type": "string" }, "type": "array" }, "kid": { "type": "string" }, "kty": { "type": "string" }, "use": { "type": "string" }, "x5c": { "items": { "type": "string" }, "type": "array", "description": "The X.509 certificate chain (RFC 7517 §4.7). Each entry is the base64 DER (not base64url) of a certificate. For keys minted with a stored certificate this holds the single self-signed cert as `[x5c]`." }, "x5t#S256": { "type": "string", "description": "The base64url SHA-256 thumbprint of the DER certificate in `x5c[0]` (RFC 7517 §4.9)." } }, "type": "object" }, "publicKeyFingerprint": { "type": "string" }, "publicKeyPem": { "type": "string", "description": "The public key in SPKI PEM form, ready to render. Present whenever the key has public key material. Derived from `publicKey`; the embedded certificate members (`x5c`/`x5t#S256`) do not affect it." }, "revokeAt": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "pending", "revoking" ] }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "issuerId", "keyId", "status", "updatedAt" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "string" } }, "required": [ "algorithm", "createdAt", "id", "name", "origin", "ownerId", "policies", "signingKeys", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { "name": { "type": "string", "description": "The name of the issuer." }, "claimsSchema": { "type": "object", "description": "A JSON Schema used to validate the resolved token claims when signing tokens for this issuer. Pass null to remove it.", "additionalProperties": true, "nullable": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateKmsIssuer", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.updateKmsIssuer({\n issuerId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete a KMS issuer and its signing keys.", "operationId": "deleteKmsIssuer", "security": [ { "bearerToken": [] } ], "summary": "Delete an issuer", "tags": [ "kms" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteKmsIssuer", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.kms.deleteKmsIssuer({\n issuerId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/policies": { "post": { "description": "Attach a policy to a KMS issuer that grants a project's deployments permission to sign with it.", "operationId": "createKmsIssuerPolicy", "security": [ { "bearerToken": [] } ], "summary": "Create an issuer policy", "tags": [ "kms" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "kind", "projectId", "environments" ], "properties": { "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string", "description": "The project ID for the project grant policy." }, "environments": { "type": "array", "description": "The environments for the project grant policy. Each entry is a system environment (production, preview, development) or a custom environment ID (env_...).", "items": { "type": "string", "pattern": "^(?:production|preview|development|env_.+)$" }, "minItems": 1, "uniqueItems": true }, "tokenClaims": { "type": "object", "description": "The claims that KMS should include in signed JWTs for this policy.", "additionalProperties": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createKmsIssuerPolicy", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.createKmsIssuerPolicy({\n issuerId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/kms/issuers/{issuerId}/policies/{kind}/{policyKey}": { "patch": { "description": "Update an existing KMS issuer policy's environments or token claims.", "operationId": "updateKmsIssuerPolicy", "security": [ { "bearerToken": [] } ], "summary": "Update an issuer policy", "tags": [ "kms" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "createdAt": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array", "description": "Environments whose OIDC tokens this grant authorizes. Each entry is either a system environment slug (`production`, `preview`, `development`) or a custom environment ID (prefixed `env_`). Custom environments are matched against the token's `custom_environment_id` claim (the stable ID); system environments against its `environment` claim." }, "kind": { "type": "string", "enum": [ "project-grant" ] }, "projectId": { "type": "string" }, "teamId": { "type": "string" }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "environments", "kind", "projectId", "teamId", "updatedAt" ], "type": "object" }, { "properties": { "clientId": { "type": "string" }, "createdAt": { "type": "string" }, "kind": { "type": "string", "enum": [ "connex-grant" ] }, "tokenClaims": { "additionalProperties": true, "type": "object" }, "updatedAt": { "type": "string" } }, "required": [ "clientId", "createdAt", "kind", "updatedAt" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "name": "kind", "description": "The issuer policy kind.", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "project-grant" ], "description": "The issuer policy kind." } }, { "name": "policyKey", "description": "The policy identifier.", "in": "path", "required": true, "schema": { "type": "string", "description": "The policy identifier." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "environments": { "type": "array", "description": "The environments for the project grant policy. Each entry is a system environment (production, preview, development) or a custom environment ID (env_...).", "items": { "type": "string", "pattern": "^(?:production|preview|development|env_.+)$" }, "minItems": 1, "uniqueItems": true }, "tokenClaims": { "type": "object", "description": "The claims that KMS should include in signed JWTs for this policy. Pass null to remove them.", "additionalProperties": true, "nullable": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateKmsIssuerPolicy", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.kms.updateKmsIssuerPolicy({\n issuerId: \"\",\n kind: \"project-grant\",\n policyKey: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Remove a policy from a KMS issuer.", "operationId": "deleteKmsIssuerPolicy", "security": [ { "bearerToken": [] } ], "summary": "Delete an issuer policy", "tags": [ "kms" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "issuerId", "description": "The ID of the issuer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the issuer." } }, { "name": "kind", "description": "The issuer policy kind.", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "project-grant", "connex-grant" ], "description": "The issuer policy kind." } }, { "name": "policyKey", "description": "The policy identifier.", "in": "path", "required": true, "schema": { "type": "string", "description": "The policy identifier." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteKmsIssuerPolicy", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.kms.deleteKmsIssuerPolicy({\n issuerId: \"\",\n kind: \"project-grant\",\n policyKey: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/deployments/{deploymentId}/runtime-logs": { "get": { "description": "Returns a stream of logs for a given deployment.", "operationId": "getRuntimeLogs", "security": [ { "bearerToken": [] } ], "summary": "Get logs for a deployment", "tags": [ "logs" ], "responses": { "200": { "description": "", "content": { "application/stream+json": { "schema": { "properties": { "domain": { "type": "string" }, "level": { "type": "string", "enum": [ "debug", "error", "fatal", "info", "trace", "warning" ] }, "message": { "type": "string" }, "messageTruncated": { "type": "boolean", "enum": [ false, true ] }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "responseStatusCode": { "type": "number" }, "rowId": { "type": "string" }, "source": { "type": "string", "enum": [ "delimiter", "edge-function", "edge-middleware", "request", "serverless" ] }, "timestampInMs": { "type": "number" } }, "required": [ "domain", "level", "message", "messageTruncated", "requestMethod", "requestPath", "responseStatusCode", "rowId", "source", "timestampInMs" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRuntimeLogs", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.logs.getRuntimeLogs({\n projectId: \"\",\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items": { "post": { "description": "Create one or multiple experimentation items", "operationId": "createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItems", "security": [ { "bearerToken": [] } ], "summary": "Create one or multiple experimentation items", "tags": [ "marketplace" ], "responses": { "204": { "description": "The items were created" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "items" ], "properties": { "items": { "type": "array", "maxItems": 50, "items": { "type": "object", "additionalProperties": false, "required": [ "id", "slug", "origin" ], "properties": { "id": { "type": "string", "maxLength": 1024 }, "slug": { "type": "string", "maxLength": 1024 }, "origin": { "type": "string", "maxLength": 2048 }, "category": { "type": "string", "enum": [ "experiment", "flag" ] }, "name": { "type": "string", "maxLength": 1024 }, "description": { "type": "string", "maxLength": 1024 }, "isArchived": { "type": "boolean" }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } } } } } } } } }, "x-speakeasy-name-override": "createInstallationIntegrationConfiguration", "x-codeSamples": [ { "lang": "typescript", "label": "createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItems", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.createInstallationIntegrationConfiguration({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}": { "patch": { "description": "Patch an existing experimentation item", "operationId": "updateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId", "security": [ { "bearerToken": [] } ], "summary": "Patch an existing experimentation item", "tags": [ "marketplace" ], "responses": { "204": { "description": "The item was updated" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "itemId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "slug", "origin" ], "properties": { "slug": { "type": "string", "maxLength": 1024 }, "origin": { "type": "string", "maxLength": 2048 }, "name": { "type": "string", "maxLength": 1024 }, "category": { "type": "string", "enum": [ "experiment", "flag" ] }, "description": { "type": "string", "maxLength": 1024 }, "isArchived": { "type": "boolean" }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } } } } } }, "x-speakeasy-name-override": "updateInstallationIntegrationConfiguration", "x-codeSamples": [ { "lang": "typescript", "label": "updateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.updateInstallationIntegrationConfiguration({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n itemId: \"\",\n });\n\n\n}\n\nrun();" } ] }, "delete": { "description": "Delete an existing experimentation item", "operationId": "deleteInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId", "security": [ { "bearerToken": [] } ], "summary": "Delete an existing experimentation item", "tags": [ "marketplace" ], "responses": { "204": { "description": "The item was deleted" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "itemId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-speakeasy-name-override": "deleteInstallationIntegrationConfiguration", "x-codeSamples": [ { "lang": "typescript", "label": "deleteInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.marketplace.deleteInstallationIntegrationConfiguration({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n itemId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/global-config": { "head": { "description": "When the user enabled Global Config syncing, then this endpoint can be used by the partner to fetch the contents of the Global Config.", "operationId": "headInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "security": [ { "bearerToken": [] } ], "summary": "Get the data of a user-provided Global Config", "tags": [ "marketplace" ], "responses": { "200": { "description": "The Global Config data", "content": { "application/json": { "schema": { "properties": { "digest": { "type": "string" }, "items": { "additionalProperties": { "$ref": "#/components/schemas/GlobalConfigItemValue" }, "type": "object" }, "purpose": { "type": "string", "enum": [ "experimentation", "flags" ] }, "updatedAt": { "type": "number" } }, "required": [ "digest", "items", "updatedAt" ], "type": "object" } } } }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "headInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.headInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "When the user enabled Global Config syncing, then this endpoint can be used by the partner to fetch the contents of the Global Config.", "operationId": "getInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "security": [ { "bearerToken": [] } ], "summary": "Get the data of a user-provided Global Config", "tags": [ "marketplace" ], "responses": { "200": { "description": "The Global Config data", "content": { "application/json": { "schema": { "properties": { "digest": { "type": "string" }, "items": { "additionalProperties": { "$ref": "#/components/schemas/GlobalConfigItemValue" }, "type": "object" }, "purpose": { "type": "string", "enum": [ "experimentation", "flags" ] }, "updatedAt": { "type": "number" } }, "required": [ "digest", "items", "updatedAt" ], "type": "object" } } } }, "304": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.getInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "When the user enabled Global Config syncing, then this endpoint can be used by the partner to push their configuration data into the relevant Global Config.", "operationId": "replaceInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "security": [ { "bearerToken": [] } ], "summary": "Push data into a user-provided Global Config", "tags": [ "marketplace" ], "responses": { "200": { "description": "The Global Config was updated", "content": { "application/json": { "schema": { "properties": { "digest": { "type": "string" }, "items": { "additionalProperties": { "$ref": "#/components/schemas/GlobalConfigItemValue" }, "type": "object" }, "purpose": { "type": "string", "enum": [ "experimentation", "flags" ] }, "updatedAt": { "type": "number" } }, "required": [ "digest", "items", "updatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "412": { "description": "" } }, "parameters": [ { "name": "integrationConfigurationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "resourceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "data" ], "properties": { "data": { "type": "object", "additionalProperties": {} } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "replaceInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.marketplace.replaceInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationGlobalConfig({\n integrationConfigurationId: \"\",\n resourceId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/microfrontends/groups": { "get": { "description": "Get the microfrontends group IDs for a team.", "operationId": "getMicrofrontendsGroups", "security": [ { "bearerToken": [] } ], "summary": "List microfrontends groups", "tags": [ "microfrontends" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getMicrofrontendsGroups", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.microfrontends.getMicrofrontendsGroups({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/microfrontends/groups/{groupId}/projects": { "get": { "description": "Get the microfrontends for a given group ID.", "operationId": "getMicrofrontendsInGroup", "security": [ { "bearerToken": [] } ], "summary": "List projects in a microfrontends group", "tags": [ "microfrontends" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "projects": { "items": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" }, "type": "array" } }, "required": [ "projects" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "groupId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getMicrofrontendsInGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.microfrontends.getMicrofrontendsInGroup({\n groupId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/microfrontends/{deploymentId}/config": { "get": { "description": "Get the microfrontends config for a deployment.", "operationId": "getMicrofrontendsConfig", "security": [ { "bearerToken": [] } ], "summary": "Get microfrontends config for a deployment", "tags": [ "microfrontends" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "config": { "nullable": true, "properties": { "$schema": { "type": "string", "description": "See https://openapi.vercel.sh/microfrontends.json." }, "applications": { "additionalProperties": { "oneOf": [ { "properties": { "development": { "properties": { "fallback": { "type": "string", "description": "Fallback for local development, could point to any environment. This is required for the default app. This value is used as the fallback for child apps as well if they do not have a fallback. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS. See https://vercel.com/docs/microfrontends/local-development." }, "local": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "task": { "type": "string", "description": "The task to run when starting the development server. Should reference a script in the package.json of the application. The default value is \"dev\". See https://vercel.com/docs/microfrontends/local-development." } }, "required": [ "fallback" ], "type": "object", "description": "Development configuration for the default application." }, "packageName": { "type": "string", "description": "The name used to run the application, e.g. the `name` field in the `package.json`. This is used by the local proxy to map the application config to the locally running app. This is only necessary when the application name does not match the `name` used in `package.json`. See https://vercel.com/docs/microfrontends/configuration#application-naming." }, "projectId": { "type": "string" } }, "required": [ "development", "projectId" ], "type": "object" }, { "properties": { "assetPrefix": { "type": "string", "description": "The name of the asset prefix to use instead of the auto-generated name. The asset prefix is used to prefix all paths to static assets, such as JS, CSS, or images that are served by a specific application. It is necessary to ensure there are no conflicts with other applications on the same domain. An auto-generated asset prefix of the form `vc-ap-` is used when this field is not provided. When this field is provided, `/${assetPrefix}/:path*` must also be added to the list of paths in the `routing` field. Changing the asset prefix after a microfrontend application has already been deployed is not a forwards and backwards compatible change, and the asset prefix should be added to the `routing` field and deployed before setting the `assetPrefix` field. The default value is the auto-generated asset prefix of the form `vc-ap-`. See https://vercel.com/docs/microfrontends/path-routing#asset-prefix." }, "development": { "properties": { "fallback": { "type": "string", "description": "Fallback for local development, could point to any environment. If not provided for child apps, the fallback of the default app will be used. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS. See https://vercel.com/docs/microfrontends/local-development." }, "local": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "task": { "type": "string", "description": "The task to run when starting the development server. Should reference a script in the package.json of the application. The default value is \"dev\". See https://vercel.com/docs/microfrontends/local-development." } }, "type": "object", "description": "Development configuration for the child application." }, "packageName": { "type": "string", "description": "The name used to run the application, e.g. the `name` field in the `package.json`. This is used by the local proxy to map the application config to the locally running app. This is only necessary when the application name does not match the `name` used in `package.json`. See https://vercel.com/docs/microfrontends/configuration#application-naming." }, "routing": { "items": { "properties": { "flag": { "type": "string", "description": "The name of the feature flag that controls routing for this group of paths. See https://vercel.com/docs/microfrontends/path-routing#routing-changes-safely-with-flags." }, "group": { "type": "string", "description": "Group name for the paths." }, "paths": { "items": { "type": "string" }, "type": "array", "description": "A list of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing#supported-path-expressions." } }, "required": [ "paths" ], "type": "object", "description": "Groups of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing." }, "type": "array", "description": "Groups of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing." }, "projectId": { "type": "string" } }, "required": [ "projectId", "routing" ], "type": "object" } ] }, "type": "object" }, "options": { "properties": { "disableOverrides": { "type": "boolean", "enum": [ false, true ], "description": "If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect. See https://vercel.com/docs/microfrontends/managing-microfrontends/vercel-toolbar#routing-overrides." }, "localProxyPort": { "type": "number", "description": "The port number used by the local proxy server. The default value is 3024. See https://vercel.com/docs/microfrontends/local-development." } }, "type": "object", "description": "Optional configuration options for the microfrontend." }, "version": { "type": "string", "enum": [ "1" ], "description": "The version of the microfrontends config schema." } }, "required": [ "applications" ], "type": "object", "description": "projectIds are added when the config is uploaded to s3 deployment assets." } }, "required": [ "config" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "deploymentId", "description": "The unique deployment identifier", "in": "path", "required": true, "schema": { "description": "The unique deployment identifier", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getMicrofrontendsConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.microfrontends.getMicrofrontendsConfig({\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/microfrontends/projects/{projectIdOrName}/production-mfe-config": { "get": { "description": "Get the microfrontends config for a project by ID or name.", "operationId": "getMicrofrontendsConfigForProject", "security": [ { "bearerToken": [] } ], "summary": "Get microfrontends config for a project", "tags": [ "microfrontends" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "config": { "nullable": true, "properties": { "$schema": { "type": "string", "description": "See https://openapi.vercel.sh/microfrontends.json." }, "applications": { "additionalProperties": { "oneOf": [ { "properties": { "development": { "properties": { "fallback": { "type": "string", "description": "Fallback for local development, could point to any environment. This is required for the default app. This value is used as the fallback for child apps as well if they do not have a fallback. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS. See https://vercel.com/docs/microfrontends/local-development." }, "local": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "task": { "type": "string", "description": "The task to run when starting the development server. Should reference a script in the package.json of the application. The default value is \"dev\". See https://vercel.com/docs/microfrontends/local-development." } }, "required": [ "fallback" ], "type": "object", "description": "Development configuration for the default application." }, "packageName": { "type": "string", "description": "The name used to run the application, e.g. the `name` field in the `package.json`. This is used by the local proxy to map the application config to the locally running app. This is only necessary when the application name does not match the `name` used in `package.json`. See https://vercel.com/docs/microfrontends/configuration#application-naming." }, "projectId": { "type": "string" } }, "required": [ "development", "projectId" ], "type": "object" }, { "properties": { "assetPrefix": { "type": "string", "description": "The name of the asset prefix to use instead of the auto-generated name. The asset prefix is used to prefix all paths to static assets, such as JS, CSS, or images that are served by a specific application. It is necessary to ensure there are no conflicts with other applications on the same domain. An auto-generated asset prefix of the form `vc-ap-` is used when this field is not provided. When this field is provided, `/${assetPrefix}/:path*` must also be added to the list of paths in the `routing` field. Changing the asset prefix after a microfrontend application has already been deployed is not a forwards and backwards compatible change, and the asset prefix should be added to the `routing` field and deployed before setting the `assetPrefix` field. The default value is the auto-generated asset prefix of the form `vc-ap-`. See https://vercel.com/docs/microfrontends/path-routing#asset-prefix." }, "development": { "properties": { "fallback": { "type": "string", "description": "Fallback for local development, could point to any environment. If not provided for child apps, the fallback of the default app will be used. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS. See https://vercel.com/docs/microfrontends/local-development." }, "local": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "task": { "type": "string", "description": "The task to run when starting the development server. Should reference a script in the package.json of the application. The default value is \"dev\". See https://vercel.com/docs/microfrontends/local-development." } }, "type": "object", "description": "Development configuration for the child application." }, "packageName": { "type": "string", "description": "The name used to run the application, e.g. the `name` field in the `package.json`. This is used by the local proxy to map the application config to the locally running app. This is only necessary when the application name does not match the `name` used in `package.json`. See https://vercel.com/docs/microfrontends/configuration#application-naming." }, "routing": { "items": { "properties": { "flag": { "type": "string", "description": "The name of the feature flag that controls routing for this group of paths. See https://vercel.com/docs/microfrontends/path-routing#routing-changes-safely-with-flags." }, "group": { "type": "string", "description": "Group name for the paths." }, "paths": { "items": { "type": "string" }, "type": "array", "description": "A list of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing#supported-path-expressions." } }, "required": [ "paths" ], "type": "object", "description": "Groups of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing." }, "type": "array", "description": "Groups of path expressions that are routed to this application. See https://vercel.com/docs/microfrontends/path-routing." }, "projectId": { "type": "string" } }, "required": [ "projectId", "routing" ], "type": "object" } ] }, "type": "object" }, "options": { "properties": { "disableOverrides": { "type": "boolean", "enum": [ false, true ], "description": "If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect. See https://vercel.com/docs/microfrontends/managing-microfrontends/vercel-toolbar#routing-overrides." }, "localProxyPort": { "type": "number", "description": "The port number used by the local proxy server. The default value is 3024. See https://vercel.com/docs/microfrontends/local-development." } }, "type": "object", "description": "Optional configuration options for the microfrontend." }, "version": { "type": "string", "enum": [ "1" ], "description": "The version of the microfrontends config schema." } }, "required": [ "applications" ], "type": "object", "description": "projectIds are added when the config is uploaded to s3 deployment assets." } }, "required": [ "config" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The name or ID of the project", "in": "path", "required": true, "schema": { "description": "The name or ID of the project", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getMicrofrontendsConfigForProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.microfrontends.getMicrofrontendsConfigForProject({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/microfrontends/group": { "post": { "description": "Creates a microfrontends group and attaches multiple projects in a single request.", "operationId": "createMicrofrontendsGroupWithApplications", "security": [ { "bearerToken": [] } ], "summary": "Create a microfrontends group with applications", "tags": [ "microfrontends" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "newMicrofrontendsGroup": { "properties": { "createdAt": { "type": "number" }, "enablePolyrepoBranchRouting": { "type": "boolean", "enum": [ false, true ] }, "fallbackEnvironment": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "createdAt", "enablePolyrepoBranchRouting", "fallbackEnvironment", "id", "name", "slug", "updatedAt" ], "type": "object" } }, "required": [ "newMicrofrontendsGroup" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "groupName", "defaultApp", "otherApplications" ], "properties": { "groupName": { "type": "string", "example": "MFE Group 1", "description": "The name of the microfrontends group that will be used to identify the group" }, "defaultApp": { "type": "object", "required": [ "projectId" ], "description": "The default app for the new microfrontend group", "properties": { "projectId": { "type": "string", "description": "The id of the project that will be used as the default app for the new microfrontend group" }, "defaultRoute": { "type": "string", "description": "The default route for the default app of the new microfrontend group" } } }, "otherApplications": { "type": "array", "description": "The list of other applications that will be used in the new microfrontend group", "items": { "type": "object", "required": [ "projectId" ], "properties": { "projectId": { "type": "string", "description": "The id of the project that will be used in the new microfrontend group" }, "defaultRoute": { "type": "string", "description": "The default route for the application in the new microfrontend group" } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createMicrofrontendsGroupWithApplications", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.microfrontends.createMicrofrontendsGroupWithApplications({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n groupName: \"MFE Group 1\",\n defaultApp: {\n projectId: \"\",\n },\n otherApplications: [\n {\n projectId: \"\",\n },\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/observability/manage/configuration/projects": { "get": { "description": "Lists the projects that are currently configured as disabled for Observability Plus on a team.", "operationId": "getObservabilityConfigurationProjects", "security": [ { "bearerToken": [] } ], "summary": "Lists disabled Observability Plus projects", "tags": [ "observability" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "disabledProjects": { "items": { "properties": { "disabledAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "disabledAt", "id" ], "type": "object" }, "type": "array" } }, "required": [ "disabledProjects" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getObservabilityConfigurationProjects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.observability.getObservabilityConfigurationProjects({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/observability/manage/configuration/projects/{projectIdOrName}": { "put": { "description": "Updates whether Observability Plus is disabled for a single project.", "operationId": "updateObservabilityConfigurationProject", "security": [ { "bearerToken": [] } ], "summary": "Updates a disabled Observability Plus project setting", "tags": [ "observability" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "disabledAt": { "type": "number" }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "projectIdOrName", "description": "The ID or name of the project to update", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the project to update" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "disabled" ], "properties": { "disabled": { "type": "boolean", "description": "Whether Observability Plus should be disabled for the project" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateObservabilityConfigurationProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.observability.updateObservabilityConfigurationProject({\n projectIdOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/observability/query": { "post": { "description": "", "operationId": "createObservabilityQuery", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "408": { "description": "" }, "410": { "description": "" }, "413": { "description": "" }, "422": { "description": "" }, "500": { "description": "" }, "503": { "description": "" } }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "metric", "scope" ], "properties": { "metric": { "type": "string", "description": "Metric id" }, "scope": { "type": "object", "description": "Owner or project scope for the query" }, "aggregation": { "type": "string", "description": "Aggregation function to apply. Some aggregations require a dimension: use /, for example unique/visitor_id." }, "groupBy": { "type": "array", "items": { "type": "string" }, "description": "Dimensions to group results by. JSON dimensions support nested refs, for example event_data/checkout_step. Nested keys containing characters that OData cannot parse as an identifier, such as '-', spaces, quotes, or '/', must be wrapped in single quotes (escape embedded single quotes by doubling them), for example flags/'enable-comments-view' or event_data/'some property''s/value'." }, "filter": { "type": "string", "description": "Filter to apply to the query. JSON dimensions support nested refs, for example event_data/checkout_step eq 'payment'. Nested keys containing characters that OData cannot parse as an identifier, such as '-', spaces, quotes, or '/', must be wrapped in single quotes (escape embedded single quotes by doubling them), for example flags/'enable-comments-view' eq true or event_data/'some property''s/value' eq true." }, "limit": { "type": "number", "description": "Maximum number of results" }, "orderBy": { "type": "string", "description": "Rollup column to order grouped results by. Use the generated rollup key for the requested metric and aggregation. Defaults to the query engine count rollup." }, "orderDirection": { "type": "string", "enum": [ "asc", "desc" ], "description": "Direction to order grouped results by. Defaults to desc." }, "granularity": { "type": "object", "description": "Time bucket size" }, "startTime": { "type": "string", "description": "Start timestamp" }, "endTime": { "type": "string", "description": "End timestamp" }, "bucketTimezone": { "type": "string", "description": "IANA timezone (e.g. Europe/Paris) used only to align calendar buckets (1d/1mo) to that zone's day/month boundaries. startTime/endTime and all output timestamps are always UTC. No effect on sub-day granularities." } }, "additionalProperties": true } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createObservabilityQuery", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.createObservabilityQuery();\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/observability/schema": { "get": { "description": "", "operationId": "getObservabilitySchema", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "metrics": { "items": { "properties": { "description": { "type": "string" }, "id": { "type": "string" } }, "required": [ "description", "id" ], "type": "object" }, "type": "array" } }, "required": [ "metrics" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [], "x-codeSamples": [ { "lang": "typescript", "label": "getObservabilitySchema", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.getObservabilitySchema();\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/observability/schema/{metricId}": { "get": { "description": "", "operationId": "getObservabilitySchemaByMetricId", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "items": { "properties": { "aggregations": { "items": { "type": "string" }, "type": "array" }, "defaultAggregation": { "type": "string" }, "description": { "type": "string" }, "dimensions": { "items": { "properties": { "description": { "type": "string" }, "label": { "type": "string" }, "name": { "type": "string" } }, "required": [ "label", "name" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "unit": { "type": "string" } }, "required": [ "aggregations", "defaultAggregation", "description", "dimensions", "id", "unit" ], "type": "object" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "metricId", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getObservabilitySchemaByMetricId", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.getObservabilitySchemaByMetricId({\n metricId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/members": { "get": { "description": "Lists all members of a project.", "operationId": "getProjectMembers", "security": [ { "bearerToken": [] } ], "summary": "List project members", "tags": [ "projectMembers" ], "responses": { "200": { "description": "Paginated list of members for the project.", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "members": { "items": { "properties": { "avatar": { "type": "string", "description": "ID of the file for the Avatar of this member.", "example": "123a6c5209bc3778245d011443644c8d27dc2c50" }, "computedProjectRole": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ], "description": "Role of this user in the project.", "example": "ADMIN" }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when this member was added.", "example": 1588720733602 }, "email": { "type": "string", "description": "The email of this member.", "example": "jane.doe@example.com" }, "name": { "type": "string", "description": "The name of this user.", "example": "Jane Doe" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ], "description": "Role of this user in the project.", "example": "ADMIN" }, "teamRole": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ], "description": "The role of this user in the team.", "example": "CONTRIBUTOR" }, "uid": { "type": "string", "description": "The ID of this user.", "example": "zTuNVUXEAvvnNN3IaqinkyMw" }, "username": { "type": "string", "description": "The unique username of this user.", "example": "jane-doe" } }, "required": [ "computedProjectRole", "createdAt", "email", "role", "teamRole", "uid", "username" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number", "description": "Amount of items in the current page.", "example": 20 }, "hasNext": { "type": "boolean", "enum": [ false, true ] }, "next": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the next page.", "example": 1540095775951 }, "prev": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the previous page.", "example": 1540095775951 } }, "required": [ "count", "hasNext", "next", "prev" ], "type": "object" } }, "required": [ "members", "pagination" ], "type": "object", "description": "Paginated list of members for the project." } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the Project.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the Project.", "example": "prj_pavWOn1iLObbXLRiwVvzmPrTWyTf" } }, { "name": "limit", "description": "Limit how many project members should be returned", "in": "query", "required": false, "schema": { "description": "Limit how many project members should be returned", "example": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "since", "description": "Timestamp in milliseconds to only include members added since then.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds to only include members added since then.", "example": 1540095775951, "type": "integer" } }, { "name": "until", "description": "Timestamp in milliseconds to only include members added until then.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds to only include members added until then.", "example": 1540095775951, "type": "integer" } }, { "name": "search", "description": "Search project members by their name, username, and email.", "in": "query", "required": false, "schema": { "description": "Search project members by their name, username, and email.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "getProjectMembers", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectMembers.getProjectMembers({\n idOrName: \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n limit: 20,\n since: 1540095775951,\n until: 1540095775951,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getProjectMembers", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.ProjectMembers.GetProjectMembers(ctx, operations.GetProjectMembersRequest{\n IDOrName: \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n Limit: vercel.Int64(20),\n Since: vercel.Int64(1540095775951),\n Until: vercel.Int64(1540095775951),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Adds a new member to the project.", "operationId": "addProjectMember", "security": [ { "bearerToken": [] } ], "summary": "Adds a new member to a project.", "tags": [ "projectMembers" ], "responses": { "200": { "description": "Responds with the project ID on success.", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "Responds with the project ID on success." } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the Project.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the Project.", "example": "prj_pavWOn1iLObbXLRiwVvzmPrTWyTf" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "role" ], "oneOf": [ { "required": [ "uid" ] }, { "required": [ "username" ] }, { "required": [ "email" ] } ], "properties": { "uid": { "type": "string", "maxLength": 256, "example": "ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the team member that should be added to this project." }, "username": { "type": "string", "maxLength": 256, "example": "example", "description": "The username of the team member that should be added to this project." }, "email": { "type": "string", "format": "email", "example": "entity@example.com", "description": "The email of the team member that should be added to this project." }, "role": { "type": "string", "example": "ADMIN", "description": "The project role of the member that will be added.", "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER" ] } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "addProjectMember", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectMembers.addProjectMember({\n idOrName: \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n uid: \"ndlgr43fadlPyCtREAqxxdyFK\",\n username: \"example\",\n email: \"entity@example.com\",\n role: \"ADMIN\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "addProjectMember", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.ProjectMembers.AddProjectMember(ctx, \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\", nil, nil, vercel.Pointer(operations.CreateAddProjectMemberRequestBodyAddProjectMemberRequestBody1(\n operations.AddProjectMemberRequestBody1{\n UID: \"ndlgr43fadlPyCtREAqxxdyFK\",\n Username: vercel.String(\"example\"),\n Email: vercel.String(\"entity@example.com\"),\n Role: operations.RequestBodyRoleAdmin,\n },\n )))\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{idOrName}/members/{uid}": { "delete": { "description": "Remove a member from a specific project", "operationId": "removeProjectMember", "security": [ { "bearerToken": [] } ], "summary": "Remove a Project Member", "tags": [ "projectMembers" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the Project.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the Project.", "example": "prj_pavWOn1iLObbXLRiwVvzmPrTWyTf" } }, { "name": "uid", "description": "The user ID of the member.", "in": "path", "required": true, "schema": { "type": "string", "description": "The user ID of the member.", "example": "ndlgr43fadlPyCtREAqxxdyFK" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "removeProjectMember", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectMembers.removeProjectMember({\n idOrName: \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\",\n uid: \"ndlgr43fadlPyCtREAqxxdyFK\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "removeProjectMember", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.ProjectMembers.RemoveProjectMember(ctx, \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\", \"ndlgr43fadlPyCtREAqxxdyFK\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{projectId}/routes": { "get": { "description": "Get the routing rules for a project. Supports searching by name/ID/pattern, filtering by route type, and diffing staged changes against production.", "operationId": "getRoutes", "security": [ { "bearerToken": [] } ], "summary": "Get project routing rules", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "diffCount": { "type": "number" }, "routes": { "items": { "properties": { "description": { "type": "string", "description": "Optional description of what the routing rule does." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether the routing rule is enabled. Defaults to true." }, "id": { "type": "string", "description": "Unique identifier for the routing rule." }, "name": { "type": "string", "description": "Human-readable name for the routing rule." }, "rawDest": { "type": "string", "description": "Original destination provided by user." }, "rawSrc": { "type": "string", "description": "Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses." }, "route": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object", "description": "The route definition from @vercel/routing-utils." }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite", "set_status", "transform" ], "description": "Computed route type based on the route configuration. Only present in API responses, not stored in S3." }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "The syntax type of the source pattern. Determines how the pattern is compiled to regex." }, "staged": { "type": "boolean", "enum": [ false, true ], "description": "Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production." } }, "required": [ "id", "name", "route" ], "type": "object", "description": "A routing rule with metadata for project-level routing." }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "diffCount", "routes", "version" ], "type": "object" }, { "properties": { "routes": { "items": { "properties": { "description": { "type": "string", "description": "Optional description of what the routing rule does." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether the routing rule is enabled. Defaults to true." }, "id": { "type": "string", "description": "Unique identifier for the routing rule." }, "name": { "type": "string", "description": "Human-readable name for the routing rule." }, "rawDest": { "type": "string", "description": "Original destination provided by user." }, "rawSrc": { "type": "string", "description": "Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses." }, "route": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object", "description": "The route definition from @vercel/routing-utils." }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite", "set_status", "transform" ], "description": "Computed route type based on the route configuration. Only present in API responses, not stored in S3." }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "The syntax type of the source pattern. Determines how the pattern is compiled to regex." }, "staged": { "type": "boolean", "enum": [ false, true ], "description": "Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production." } }, "required": [ "id", "name", "route" ], "type": "object", "description": "A routing rule with metadata for project-level routing." }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "routes", "version" ], "type": "object" }, { "properties": { "limit": { "properties": { "currentRoutes": { "type": "number" }, "maxRoutes": { "type": "number" } }, "required": [ "currentRoutes", "maxRoutes" ], "type": "object" }, "routes": { "items": { "properties": { "description": { "type": "string", "description": "Optional description of what the routing rule does." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether the routing rule is enabled. Defaults to true." }, "id": { "type": "string", "description": "Unique identifier for the routing rule." }, "name": { "type": "string", "description": "Human-readable name for the routing rule." }, "rawDest": { "type": "string", "description": "Original destination provided by user." }, "rawSrc": { "type": "string", "description": "Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses." }, "route": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object", "description": "The route definition from @vercel/routing-utils." }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite", "set_status", "transform" ], "description": "Computed route type based on the route configuration. Only present in API responses, not stored in S3." }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "The syntax type of the source pattern. Determines how the pattern is compiled to regex." }, "staged": { "type": "boolean", "enum": [ false, true ], "description": "Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production." } }, "required": [ "id", "name", "route" ], "type": "object", "description": "A routing rule with metadata for project-level routing." }, "type": "array" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "limit", "routes", "version" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "versionId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "q", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "filter", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "rewrite", "redirect", "set_status", "transform" ] } }, { "name": "diff", "in": "query", "required": false, "schema": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "only" ] } ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRoutes", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.getRoutes({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Stage routing rules for a project. Set `overwrite` to true to replace all existing rules, or omit it to merge with existing rules by ID. Returns the new staged version.", "operationId": "stageRoutes", "security": [ { "bearerToken": [] } ], "summary": "Stage routing rules", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "overwrite": { "type": "boolean" }, "routes": { "type": "array", "default": [], "items": { "type": "object", "required": [ "id", "name", "route" ], "properties": { "id": { "type": "string", "maxLength": 256 }, "name": { "type": "string", "maxLength": 256 }, "description": { "type": "string", "maxLength": 1024 }, "enabled": { "type": "boolean" }, "route": { "type": "object", "required": [ "src" ], "properties": { "src": { "type": "string" }, "dest": { "type": "string" }, "headers": { "type": "object" }, "caseSensitive": { "type": "boolean" }, "status": { "type": "integer" }, "has": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "missing": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "transforms": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] }, "op": { "type": "string", "enum": [ "append", "set", "delete" ] }, "target": { "type": "object" }, "args": {}, "env": { "type": "array", "items": { "type": "string" } } } } }, "respectOriginCacheControl": { "type": "boolean" } } } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "stageRoutes", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.stageRoutes({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Add a single routing rule to a project at a specified position. Defaults to the end of the list if no position is provided. The route is enabled by default. Stages a new version with the added route.", "operationId": "addRoute", "security": [ { "bearerToken": [] } ], "summary": "Add a routing rule", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "route": { "properties": { "description": { "type": "string", "description": "Optional description of what the routing rule does." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether the routing rule is enabled. Defaults to true." }, "id": { "type": "string", "description": "Unique identifier for the routing rule." }, "name": { "type": "string", "description": "Human-readable name for the routing rule." }, "rawDest": { "type": "string", "description": "Original destination provided by user." }, "rawSrc": { "type": "string", "description": "Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses." }, "route": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object", "description": "The route definition from @vercel/routing-utils." }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite", "set_status", "transform" ] }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "The syntax type of the source pattern. Determines how the pattern is compiled to regex." }, "staged": { "type": "boolean", "enum": [ false, true ], "description": "Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production." } }, "required": [ "id", "name", "route" ], "type": "object" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "route", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "route" ], "properties": { "route": { "type": "object", "required": [ "name", "route" ], "properties": { "name": { "type": "string", "maxLength": 256 }, "description": { "type": "string", "maxLength": 1024 }, "enabled": { "type": "boolean" }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "Pattern syntax type. If not provided, inferred from pattern." }, "route": { "type": "object", "required": [ "src" ], "properties": { "src": { "type": "string" }, "dest": { "type": "string" }, "headers": { "type": "object" }, "caseSensitive": { "type": "boolean" }, "status": { "type": "integer" }, "has": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "missing": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "transforms": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] }, "op": { "type": "string", "enum": [ "append", "set", "delete" ] }, "target": { "type": "object" }, "args": {}, "env": { "type": "array", "items": { "type": "string" } } } } }, "respectOriginCacheControl": { "type": "boolean" } } } } }, "position": { "type": "object", "description": "Controls where the route is inserted. Defaults to \"end\" if omitted.", "properties": { "placement": { "type": "string", "enum": [ "start", "end", "after", "before" ], "description": "\"after\"/\"before\" require referenceId." }, "referenceId": { "type": "string", "description": "Route ID to insert after/before. Required for \"after\"/\"before\"." } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "addRoute", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.addRoute({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Delete one or more routing rules from a project by ID. Stages a new version with the routes removed.", "operationId": "deleteRoutes", "security": [ { "bearerToken": [] } ], "summary": "Delete routing rules", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "deletedCount": { "type": "number" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "deletedCount", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "routeIds" ], "properties": { "routeIds": { "type": "array", "description": "The IDs of the routes to delete", "minItems": 1, "items": { "type": "string" } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "deleteRoutes", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.deleteRoutes({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/routes/{routeId}": { "patch": { "description": "Replace a routing rule identified by its ID, or restore it from the current production version. Stages a new version with the modified route.", "operationId": "editRoute", "security": [ { "bearerToken": [] } ], "summary": "Edit a routing rule", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "route": { "properties": { "description": { "type": "string", "description": "Optional description of what the routing rule does." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether the routing rule is enabled. Defaults to true." }, "id": { "type": "string", "description": "Unique identifier for the routing rule." }, "name": { "type": "string", "description": "Human-readable name for the routing rule." }, "rawDest": { "type": "string", "description": "Original destination provided by user." }, "rawSrc": { "type": "string", "description": "Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses." }, "route": { "properties": { "caseSensitive": { "type": "boolean", "enum": [ false, true ] }, "check": { "type": "boolean", "enum": [ false, true ] }, "continue": { "type": "boolean", "enum": [ false, true ] }, "dest": { "type": "string" }, "destination": { "oneOf": [ { "type": "string" }, { "properties": { "path": { "type": "string", "description": "Routing-only path used to select a route inside the target service." }, "service": { "type": "string" }, "type": { "type": "string", "enum": [ "service" ], "description": "Optional explicit format marker. The destination is identified by the presence of `service`, so `type` is no longer required." } }, "required": [ "service" ], "type": "object" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "has": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "important": { "type": "boolean", "enum": [ false, true ] }, "locale": { "properties": { "cookie": { "type": "string" }, "redirect": { "additionalProperties": { "type": "string" }, "type": "object" } }, "type": "object" }, "methods": { "items": { "type": "string" }, "type": "array" }, "middleware": { "type": "number", "description": "A middleware index in the `middleware` key under the build result" }, "middlewarePath": { "type": "string", "description": "A middleware key within the `output` key under the build result. Overrides a `middleware` definition." }, "middlewareRawSrc": { "items": { "type": "string" }, "type": "array", "description": "The original middleware matchers." }, "missing": { "items": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type", "value" ], "type": "object" }, { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "header", "query" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key", "type" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny" ] } }, "required": [ "action" ], "type": "object" }, "override": { "type": "boolean", "enum": [ false, true ] }, "respectOriginCacheControl": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string", "description": "Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, the string forms are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object. `destination` may also be a service-targeted object, in which case routing is delegated into the named service's internal route table and the object is preserved as-is (not folded into `dest`)." }, "src": { "type": "string" }, "status": { "type": "number" }, "statusCode": { "type": "number" }, "transforms": { "items": { "oneOf": [ { "properties": { "args": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "target": { "properties": { "key": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] } }, "required": [ "op", "target", "type" ], "type": "object" }, { "properties": { "args": { "type": "string" }, "env": { "items": { "type": "string" }, "type": "array" }, "op": { "type": "string", "enum": [ "set" ] }, "type": { "type": "string", "enum": [ "request.path" ] } }, "required": [ "args", "op", "type" ], "type": "object" } ] }, "type": "array" } }, "required": [ "src" ], "type": "object", "description": "The route definition from @vercel/routing-utils." }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite", "set_status", "transform" ] }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "The syntax type of the source pattern. Determines how the pattern is compiled to regex." }, "staged": { "type": "boolean", "enum": [ false, true ], "description": "Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production." } }, "required": [ "id", "name", "route" ], "type": "object" }, "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "routeId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "route": { "type": "object", "description": "The full route object to replace the existing route with", "required": [ "name", "route" ], "properties": { "name": { "type": "string", "maxLength": 256 }, "description": { "type": "string", "maxLength": 1024 }, "enabled": { "type": "boolean" }, "srcSyntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ], "description": "Pattern syntax type. If not provided, inferred from pattern." }, "route": { "type": "object", "required": [ "src" ], "properties": { "src": { "type": "string" }, "dest": { "type": "string" }, "headers": { "type": "object" }, "caseSensitive": { "type": "boolean" }, "status": { "type": "integer" }, "has": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "missing": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "header", "cookie", "query" ] }, "key": { "type": "string" }, "value": { "type": "string" } } } }, "transforms": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "request.headers", "request.query", "response.headers" ] }, "op": { "type": "string", "enum": [ "append", "set", "delete" ] }, "target": { "type": "object" }, "args": {}, "env": { "type": "array", "items": { "type": "string" } } } } }, "respectOriginCacheControl": { "type": "boolean" } } } } }, "restore": { "type": "boolean", "description": "If true, restores the staged route to the value in the production version." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "editRoute", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.editRoute({\n projectId: \"\",\n routeId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/routes/generate": { "post": { "description": "Generate a routing rule configuration from a natural language description. Returns a suggested route configuration that can be reviewed and saved.", "operationId": "generateRoute", "security": [ { "bearerToken": [] } ], "summary": "Generate a routing rule from natural language", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" }, "route": { "properties": { "actions": { "items": { "properties": { "dest": { "type": "string" }, "headers": { "items": { "properties": { "key": { "type": "string" }, "op": { "type": "string", "enum": [ "append", "delete", "set" ] }, "value": { "type": "string" } }, "required": [ "key", "op" ], "type": "object" }, "type": "array" }, "status": { "type": "number" }, "subType": { "type": "string", "enum": [ "response-headers", "transform-request-header", "transform-request-query" ] }, "type": { "type": "string", "enum": [ "modify", "redirect", "rewrite", "set-status" ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "field": { "type": "string", "enum": [ "cookie", "header", "host", "query" ] }, "key": { "type": "string" }, "missing": { "type": "boolean", "enum": [ false, true ] }, "operator": { "type": "string", "enum": [ "contains", "eq", "exists", "re" ] }, "value": { "type": "string" } }, "required": [ "field", "missing", "operator" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "name": { "type": "string" }, "pathCondition": { "properties": { "syntax": { "type": "string", "enum": [ "equals", "path-to-regexp", "regex" ] }, "value": { "type": "string" } }, "required": [ "syntax", "value" ], "type": "object" } }, "required": [ "actions", "description", "name", "pathCondition" ], "type": "object" } }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "408": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "prompt" ], "properties": { "prompt": { "type": "string", "maxLength": 2000 }, "currentRoute": { "type": "object", "required": [ "pathCondition", "actions" ], "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "pathCondition": { "type": "object", "properties": { "value": { "type": "string" }, "syntax": { "type": "string" } } }, "conditions": { "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string" }, "operator": { "type": "string" }, "key": { "type": "string" }, "value": { "type": "string" }, "missing": { "type": "boolean" } } } }, "actions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "subType": { "type": "string" }, "dest": { "type": "string" }, "status": { "type": "integer" }, "headers": { "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string" }, "value": { "type": "string" }, "op": { "type": "string" } } } } } } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "generateRoute", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.generateRoute({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/routes/versions": { "get": { "description": "Get the version history for a project's routing rules. Returns the staging version (if one exists) followed by production versions, most recent first. The staging version has `isStaging: true` and the current production version has `isLive: true`.", "operationId": "getRouteVersions", "security": [ { "bearerToken": [] } ], "summary": "Get routing rule version history", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "versions": { "items": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." }, "type": "array" } }, "required": [ "versions" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRouteVersions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.getRouteVersions({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Promote staged routing rules to production, restore a previous production version, or discard staged changes. - `promote`: Publishes the staging version to production. - `restore`: Rolls back to a previous production version. - `discard`: Removes the staging version without publishing.", "operationId": "updateRouteVersions", "security": [ { "bearerToken": [] } ], "summary": "Promote, restore, or discard a routing rule version", "tags": [ "project-routes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "version": { "properties": { "alias": { "type": "string", "description": "The staging alias for previewing this version." }, "createdBy": { "type": "string", "description": "The user who created this version." }, "id": { "type": "string", "description": "Unique identifier for the version." }, "isLive": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is currently live in production." }, "isStaging": { "type": "boolean", "enum": [ false, true ], "description": "Whether this version is staged and not yet promoted to production." }, "lastModified": { "type": "number", "description": "Timestamp of when this version was last modified." }, "ruleCount": { "type": "number", "description": "The number of routing rules in this version." }, "s3Key": { "type": "string", "description": "The S3 key where the routing rules are stored." } }, "required": [ "createdBy", "id", "lastModified", "s3Key" ], "type": "object", "description": "A version of routing rules stored in S3." } }, "required": [ "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "action" ], "properties": { "id": { "type": "string" }, "action": { "type": "string", "enum": [ "promote", "restore", "discard" ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateRouteVersions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projectRoutes.updateRouteVersions({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v10/projects": { "get": { "description": "Allows to retrieve the list of projects of the authenticated user or team. The list will be paginated and the provided query parameters allow filtering the returned projects.", "operationId": "getProjects", "security": [ { "bearerToken": [] } ], "summary": "Retrieve a list of projects", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "nullable": true, "oneOf": [ { "items": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallRoutes": { "items": { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "finalize", "init" ] }, "has": { "items": { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "domain_environment", "environment", "header", "headers", "host", "initial_request_path", "ip_address", "method", "path", "protocol", "query", "region", "scheme", "trusted_source" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "missing": { "items": { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "domain_environment", "environment", "header", "headers", "host", "initial_request_path", "ip_address", "method", "path", "protocol", "query", "region", "scheme", "trusted_source" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "erl": { "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rule_id": { "type": "string" }, "ttl": { "type": "number" } }, "required": [ "action", "rule_id" ], "type": "object" }, "src": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] }, "status": { "type": "number" }, "tierRequirement": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "transforms": { "items": { "properties": { "args": { "type": "string" }, "op": { "type": "string", "enum": [ "append" ] }, "target": { "properties": { "key": { "type": "string" } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers" ] } }, "required": [ "args", "op", "target", "type" ], "type": "object" }, "type": "array" } }, "type": "object" }, "type": "array" }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "requestLogsKey": { "items": { "type": "string" }, "type": "array" }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionRegion": { "type": "string" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig", "serverlessFunctionRegion" ], "type": "object" }, "type": "array" }, { "properties": { "pagination": { "oneOf": [ { "properties": { "count": { "type": "number", "description": "Amount of items in the current page.", "example": 20 }, "next": { "nullable": true, "type": "string", "description": "Continuation token that must be used to request the next page. Base32 encoded for safe URL transmission.", "example": "JBSWY3DPEHPK3PXP" } }, "required": [ "count", "next" ], "type": "object", "description": "This object contains information related to the pagination of the current request using continuation tokens. Since CosmosDB doesn't support going to previous pages, only count and next are provided." }, { "$ref": "#/components/schemas/Pagination" } ] }, "projects": { "items": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallRoutes": { "items": { "properties": { "dest": { "type": "string" }, "handle": { "type": "string", "enum": [ "finalize", "init" ] }, "has": { "items": { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "domain_environment", "environment", "header", "headers", "host", "initial_request_path", "ip_address", "method", "path", "protocol", "query", "region", "scheme", "trusted_source" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "missing": { "items": { "properties": { "key": { "type": "string" }, "type": { "type": "string", "enum": [ "cookie", "domain_environment", "environment", "header", "headers", "host", "initial_request_path", "ip_address", "method", "path", "protocol", "query", "region", "scheme", "trusted_source" ] }, "value": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "erl": { "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rule_id": { "type": "string" }, "ttl": { "type": "number" } }, "required": [ "action", "rule_id" ], "type": "object" }, "src": { "oneOf": [ { "type": "string" }, { "properties": { "eq": { "type": "string" }, "gt": { "type": "number" }, "gte": { "type": "number" }, "inc": { "items": { "type": "string" }, "type": "array" }, "list": { "type": "string" }, "lt": { "type": "number" }, "lte": { "type": "number" }, "neq": { "type": "string" }, "ninc": { "items": { "type": "string" }, "type": "array" }, "pre": { "type": "string" }, "re": { "type": "string" }, "suf": { "type": "string" } }, "type": "object" } ] }, "status": { "type": "number" }, "tierRequirement": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "transforms": { "items": { "properties": { "args": { "type": "string" }, "op": { "type": "string", "enum": [ "append" ] }, "target": { "properties": { "key": { "type": "string" } }, "required": [ "key" ], "type": "object" }, "type": { "type": "string", "enum": [ "request.headers" ] } }, "required": [ "args", "op", "target", "type" ], "type": "object" }, "type": "array" } }, "type": "object" }, "type": "array" }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "requestLogsKey": { "items": { "type": "string" }, "type": "array" }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionRegion": { "type": "string" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig", "serverlessFunctionRegion" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "projects" ], "type": "object" }, { "properties": { "pagination": { "oneOf": [ { "properties": { "count": { "type": "number", "description": "Amount of items in the current page.", "example": 20 }, "next": { "nullable": true, "type": "string", "description": "Continuation token that must be used to request the next page. Base32 encoded for safe URL transmission.", "example": "JBSWY3DPEHPK3PXP" } }, "required": [ "count", "next" ], "type": "object", "description": "This object contains information related to the pagination of the current request using continuation tokens. Since CosmosDB doesn't support going to previous pages, only count and next are provided." }, { "$ref": "#/components/schemas/Pagination" } ] }, "projects": { "items": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" }, "type": "array" } }, "required": [ "pagination", "projects" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "from", "description": "Query only projects updated after the given timestamp or continuation token.", "in": "query", "schema": { "description": "Query only projects updated after the given timestamp or continuation token.", "type": "string" } }, { "name": "gitForkProtection", "description": "Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed", "in": "query", "schema": { "description": "Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed", "type": "string", "enum": [ "1", "0" ], "example": "1" } }, { "name": "limit", "description": "Limit the number of projects returned", "in": "query", "schema": { "description": "Limit the number of projects returned", "type": "string" } }, { "name": "search", "description": "Search projects by the name field", "in": "query", "schema": { "description": "Search projects by the name field", "type": "string", "maxLength": 100 } }, { "name": "repo", "description": "Filter results by repo. Also used for project count", "in": "query", "schema": { "description": "Filter results by repo. Also used for project count", "type": "string" } }, { "name": "repoId", "description": "Filter results by Repository ID.", "in": "query", "schema": { "description": "Filter results by Repository ID.", "type": "string" } }, { "name": "repoUrl", "description": "Filter results by Repository URL.", "in": "query", "schema": { "description": "Filter results by Repository URL.", "type": "string", "example": "https://github.com/vercel/next.js" } }, { "name": "excludeRepos", "description": "Filter results by excluding those projects that belong to a repo", "in": "query", "schema": { "description": "Filter results by excluding those projects that belong to a repo", "type": "string" } }, { "name": "edgeConfigId", "description": "Filter results by connected Global Config ID", "in": "query", "schema": { "description": "Filter results by connected Global Config ID", "type": "string" } }, { "name": "edgeConfigTokenId", "description": "Filter results by connected Global Config Token ID", "in": "query", "schema": { "description": "Filter results by connected Global Config Token ID", "type": "string" } }, { "name": "deprecated", "in": "query", "schema": { "type": "boolean" } }, { "name": "elasticConcurrencyEnabled", "description": "Filter results by projects with elastic concurrency enabled", "in": "query", "schema": { "description": "Filter results by projects with elastic concurrency enabled", "type": "string", "enum": [ "1", "0" ], "example": "1" } }, { "name": "staticIpsEnabled", "description": "Filter results by projects with Static IPs enabled", "in": "query", "schema": { "description": "Filter results by projects with Static IPs enabled", "enum": [ "0", "1" ], "example": "1", "type": "string" } }, { "name": "buildMachineTypes", "description": "Filter results by effective build machine types. Accepts comma-separated values. Use \"elastic\" for projects with elastic selection and \"default\" for projects without a build machine type set.", "in": "query", "schema": { "description": "Filter results by effective build machine types. Accepts comma-separated values. Use \"elastic\" for projects with elastic selection and \"default\" for projects without a build machine type set.", "type": "string", "example": "default,enhanced" } }, { "name": "buildQueueConfiguration", "description": "Filter results by build queue configuration. SKIP_NAMESPACE_QUEUE includes projects without a configuration set.", "in": "query", "schema": { "description": "Filter results by build queue configuration. SKIP_NAMESPACE_QUEUE includes projects without a configuration set.", "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ], "example": "SKIP_NAMESPACE_QUEUE" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjects", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjects({\n gitForkProtection: \"1\",\n repoUrl: \"https://github.com/vercel/next.js\",\n elasticConcurrencyEnabled: \"1\",\n staticIpsEnabled: \"1\",\n buildMachineTypes: \"default,enhanced\",\n buildQueueConfiguration: \"SKIP_NAMESPACE_QUEUE\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/traces": { "get": { "description": "Returns the OTEL trace for a given Vercel CLI request.", "operationId": "getProjectTrace", "security": [ { "bearerToken": [] } ], "summary": "Get a project trace by request ID", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "trace": { "properties": { "resources": { "items": { "properties": { "attributes": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" } }, "required": [ "attributes", "name" ], "type": "object" }, "type": "array" }, "rootSpanId": { "type": "string" }, "spans": { "items": { "properties": { "attributes": { "additionalProperties": true, "type": "object" }, "duration": { "items": { "oneOf": [ { "type": "number" }, { "type": "number" } ] }, "maxItems": 2, "minItems": 2, "type": "array" }, "endTime": { "items": { "oneOf": [ { "type": "number" }, { "type": "number" } ] }, "maxItems": 2, "minItems": 2, "type": "array" }, "events": { "items": { "properties": { "attributes": { "additionalProperties": true, "type": "object" }, "name": { "type": "string" }, "timestamp": { "items": { "oneOf": [ { "type": "number" }, { "type": "number" } ] }, "maxItems": 2, "minItems": 2, "type": "array" } }, "required": [ "attributes", "name", "timestamp" ], "type": "object" }, "type": "array" }, "kind": { "type": "number" }, "library": { "properties": { "name": { "type": "string" }, "version": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "links": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "name": { "type": "string" }, "parentSpanId": { "type": "string" }, "resource": { "type": "string" }, "spanId": { "type": "string" }, "startTime": { "items": { "oneOf": [ { "type": "number" }, { "type": "number" } ] }, "maxItems": 2, "minItems": 2, "type": "array" }, "status": { "properties": { "code": { "type": "number" }, "message": { "type": "string" } }, "required": [ "code" ], "type": "object" }, "traceFlags": { "type": "number" }, "traceState": { "type": "string" } }, "required": [ "attributes", "duration", "endTime", "events", "kind", "library", "links", "name", "resource", "spanId", "startTime", "status", "traceFlags" ], "type": "object" }, "type": "array" }, "traceId": { "type": "string" } }, "required": [ "spans", "traceId" ], "type": "object" } }, "required": [ "trace" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID", "in": "query", "required": true, "schema": { "description": "The project ID", "type": "string", "example": "prj_123", "maxLength": 150 } }, { "name": "requestId", "description": "The Vercel CLI request ID associated with the trace", "in": "query", "required": true, "schema": { "description": "The Vercel CLI request ID associated with the trace", "type": "string", "example": "cli-req-abc", "maxLength": 256 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectTrace", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjectTrace({\n projectId: \"prj_123\",\n requestId: \"cli-req-abc\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v11/projects": { "post": { "description": "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.", "operationId": "createProject", "security": [ { "bearerToken": [] } ], "summary": "Create a new project", "tags": [ "projects" ], "responses": { "200": { "description": "The project was successfuly created", "content": { "application/json": { "schema": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nAt least one environment variable failed validation\nThe Bitbucket Webhook for the project link could not be created\nThe Gitlab Webhook for the project link could not be created" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\nDeploying to Serverless Functions to multiple regions requires a plan update" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "A project with the provided name already exists." }, "410": { "description": "" }, "428": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "bodyArguments": [ "name" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { "enablePreviewFeedback": { "description": "Opt-in to preview toolbar on the project level", "type": "boolean", "nullable": true }, "enableProductionFeedback": { "description": "Opt-in to production toolbar on the project level", "type": "boolean", "nullable": true }, "previewDeploymentsDisabled": { "description": "Specifies whether preview deployments are disabled for this project.", "type": "boolean", "nullable": true }, "previewDeploymentSuffix": { "description": "Custom domain suffix for preview deployments. Takes precedence over team-level suffix. Must be a domain owned by the team.", "type": "string", "maxLength": 253, "nullable": true }, "buildCommand": { "description": "The build command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "commandForIgnoringBuildStep": { "maxLength": 256, "type": "string", "nullable": true }, "devCommand": { "description": "The dev command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "environmentVariables": { "description": "Collection of ENV Variables the Project will use", "items": { "properties": { "key": { "description": "Name of the ENV variable", "type": "string" }, "target": { "description": "Deployment Target or Targets in which the ENV variable will be used", "oneOf": [ { "enum": [ "production", "preview", "development" ] }, { "items": { "enum": [ "production", "preview", "development" ] }, "type": "array" } ] }, "gitBranch": { "description": "If defined, the git branch of the environment variable (must have target=preview)", "type": "string", "maxLength": 250 }, "type": { "description": "Type of the ENV variable", "enum": [ "system", "encrypted", "plain", "sensitive" ], "type": "string" }, "value": { "description": "Value for the ENV variable", "type": "string" } }, "required": [ "key", "value", "target" ], "type": "object" }, "type": "array" }, "framework": { "description": "The framework that is being used for this project. When `null` is used no framework is selected", "enum": [ null, "container", "blitzjs", "nextjs", "gatsby", "remix", "react-router", "astro", "hexo", "eleventy", "docusaurus-2", "docusaurus", "preact", "solidstart-1", "solidstart", "dojo", "ember", "vue", "scully", "ionic-angular", "angular", "polymer", "svelte", "sveltekit", "sveltekit-1", "ionic-react", "create-react-app", "gridsome", "umijs", "sapper", "saber", "stencil", "nuxtjs", "redwoodjs", "hugo", "jekyll", "brunch", "middleman", "zola", "hydrogen", "vite", "tanstack-start", "tanstack-start-lovable", "vitepress", "vuepress", "parcel", "fastapi", "flask", "fasthtml", "django", "ash", "factory-eve", "eve", "sanity", "sanity-v2", "storybook", "nitro", "hono", "express", "h3", "koa", "nestjs", "elysia", "fastify", "xmcp", "python", "ruby", "rust", "axum", "actix-web", "bun", "node", "go", "services", "mastra" ] }, "gitRepository": { "description": "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", "properties": { "repo": { "description": "The name of the git repository. For example: \\\"vercel/next.js\\\"", "type": "string" }, "type": { "description": "The Git Provider of the repository", "enum": [ "github", "github-limited", "gitlab", "bitbucket", "vercel", "cursor-origin" ] } }, "required": [ "type", "repo" ], "type": "object" }, "installCommand": { "description": "The install command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "name": { "description": "The desired name for the project", "example": "a-project-name", "type": "string", "maxLength": 100 }, "skipGitConnectDuringLink": { "description": "Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.", "type": "boolean", "deprecated": true }, "ssoProtection": { "description": "The Vercel Auth setting for the project (historically named \\\"SSO Protection\\\")", "type": "object", "properties": { "deploymentType": { "type": "string", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ] } }, "required": [ "deploymentType" ], "nullable": true }, "sandbox": { "type": "object", "description": "Specifies the default region and failover regions for sandboxes created in the project", "properties": { "region": { "description": "The Vercel region sandboxes in this project are created in by default.", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "example": "iad1" }, "failoverRegions": { "description": "The regions sandboxes in this project fall back to when they cannot be created in `region`.", "type": "array", "uniqueItems": true, "maxItems": 19, "items": { "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "example": [ "sfo1", "cle1" ] } }, "additionalProperties": false }, "outputDirectory": { "description": "The output directory of the project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "publicSource": { "deprecated": true, "description": "Deprecated. Accepted for backwards compatibility but ignored.", "type": "boolean", "nullable": true }, "rootDirectory": { "description": "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", "maxLength": 256, "type": "string", "nullable": true }, "serverlessFunctionRegion": { "description": "The region to deploy Serverless Functions in this project", "maxLength": 4, "type": "string", "nullable": true }, "serverlessFunctionZeroConfigFailover": { "description": "Specifies whether Zero Config Failover is enabled for this project.", "oneOf": [ { "type": "boolean" } ] }, "oidcTokenConfig": { "description": "OpenID Connect JSON Web Token generation configuration.", "type": "object", "additionalProperties": false, "properties": { "enabled": { "description": "Whether or not to generate OpenID Connect JSON Web Tokens.", "deprecated": true, "type": "boolean", "default": true }, "issuerMode": { "description": "team: `https://oidc.vercel.com/[team_slug]` global: `https://oidc.vercel.com`", "type": "string", "enum": [ "team", "global" ], "default": "team" } } }, "enableAffectedProjectsDeployments": { "description": "Opt-in to skip deployments when there are no changes to the root directory and its dependencies", "type": "boolean" }, "resourceConfig": { "properties": { "buildMachineType": { "enum": [ "basic", "enhanced", "turbo", "standard", "elastic" ] }, "fluid": { "type": "boolean" }, "functionDefaultRegions": { "description": "The regions to deploy Vercel Functions to for this project", "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "maxLength": 4 } }, "functionDefaultTimeout": { "type": "number", "maximum": 900, "minimum": 1 }, "functionDefaultMemoryType": { "enum": [ "standard_legacy", "standard", "performance", "performance_xl" ] }, "functionZeroConfigFailover": { "description": "Specifies whether Zero Config Failover is enabled for this project.", "oneOf": [ { "type": "boolean" } ] }, "elasticConcurrencyEnabled": { "type": "boolean" }, "buildMachineSelection": { "enum": [ "elastic", "fixed" ] }, "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "enum": [ "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": { "type": "boolean" }, "buildQueue": { "type": "object", "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } } }, "enableFunctionsBeta": { "type": "boolean" } }, "type": "object", "description": "Specifies resource override configuration for the project", "additionalProperties": false } }, "required": [ "name" ], "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.createProject({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"a-project-name\",\n sandbox: {\n region: \"iad1\",\n failoverRegions: [\n \"sfo1\",\n \"cle1\",\n ],\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/token": { "post": { "description": "Generates an OIDC token for the project and returns it.", "operationId": "getProjectToken", "security": [ { "bearerToken": [] } ], "summary": "Generate a project OIDC token", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "token": { "type": "string" } }, "required": [ "token" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The project ID or name", "in": "path", "required": true, "schema": { "description": "The project ID or name", "type": "string", "example": "my-project, ", "maxLength": 150 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "source": { "description": "The source that is calling the endpoint.", "type": "string", "example": "vercel-cli:pull", "maxLength": 150 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "getProjectToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjectToken({\n idOrName: \"my-project, \",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n source: \"vercel-cli:pull\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/traces/session": { "post": { "description": "Mints a short-lived HS256 JWT scoped to a deployment hostname. The Vercel CLI presents this JWT to the Vercel proxy on requests it wants traced.", "operationId": "createTraceSession", "security": [ { "bearerToken": [] } ], "summary": "Create a trace session token for a deployment", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "token": { "type": "string" } }, "required": [ "token" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "projectId", "hostname" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "The project ID the deployment belongs to." }, "hostname": { "type": "string", "description": "The deployment hostname to scope the trace session to." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createTraceSession", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.createTraceSession({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}": { "get": { "description": "Get the information for a specific project by passing either the project `id` or `name` in the URL.", "operationId": "getProject", "security": [ { "bearerToken": [] } ], "summary": "Find a project by id or name", "tags": [ "projects" ], "responses": { "200": { "description": "The project information", "content": { "application/json": { "schema": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "integrations": { "items": { "properties": { "installationId": { "type": "string", "description": "The integration installation ID.", "example": "icfg_3bwCLgxL8qt5kjRLcv2Dit7F" }, "resources": { "items": { "properties": { "externalResourceId": { "type": "string" } }, "required": [ "externalResourceId" ], "type": "object", "description": "The list of the installation resources connected to the project." }, "type": "array", "description": "The list of the installation resources connected to the project." } }, "required": [ "installationId" ], "type": "object", "description": "Integration installation enabled on the project." }, "type": "array" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "inspect", "get" ] }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique project identifier or the project name", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProject({\n idOrName: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update the fields of a project using either its `name` or `id`.", "operationId": "updateProject", "security": [ { "bearerToken": [] } ], "summary": "Update an existing project", "tags": [ "projects" ], "responses": { "200": { "description": "The project was successfully updated", "content": { "application/json": { "schema": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nTrusted IPs is only accessible for enterprise customers. This plan gate runs before the ACL check below on purpose: it depends only on the team's billing plan, so it can reject unsupported plans deterministically. `auth.can` resolves team membership (a DynamoDB lookup) and rejecting here first avoids depending on that external read for a request that is invalid regardless of authorization." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\nDeploying to Serverless Functions to multiple regions requires a plan update" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The provided name for the project is already being used\nThe project is currently being transferred." }, "410": { "description": "" }, "428": { "description": "" }, "429": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "rename" ], "bodyArguments": [ "name" ] }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique project identifier or the project name", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { "autoExposeSystemEnvs": { "type": "boolean" }, "autoAssignCustomDomains": { "type": "boolean" }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "buildCommand": { "description": "The build command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "commandForIgnoringBuildStep": { "maxLength": 256, "type": "string", "nullable": true }, "customerSupportCodeVisibility": { "description": "Specifies whether customer support can see git source for a deployment", "type": "boolean" }, "devCommand": { "description": "The dev command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "directoryListing": { "type": "boolean" }, "framework": { "description": "The framework that is being used for this project. When `null` is used no framework is selected", "enum": [ null, "container", "blitzjs", "nextjs", "gatsby", "remix", "react-router", "astro", "hexo", "eleventy", "docusaurus-2", "docusaurus", "preact", "solidstart-1", "solidstart", "dojo", "ember", "vue", "scully", "ionic-angular", "angular", "polymer", "svelte", "sveltekit", "sveltekit-1", "ionic-react", "create-react-app", "gridsome", "umijs", "sapper", "saber", "stencil", "nuxtjs", "redwoodjs", "hugo", "jekyll", "brunch", "middleman", "zola", "hydrogen", "vite", "tanstack-start", "tanstack-start-lovable", "vitepress", "vuepress", "parcel", "fastapi", "flask", "fasthtml", "django", "ash", "factory-eve", "eve", "sanity", "sanity-v2", "storybook", "nitro", "hono", "express", "h3", "koa", "nestjs", "elysia", "fastify", "xmcp", "python", "ruby", "rust", "axum", "actix-web", "bun", "node", "go", "services", "mastra" ], "type": "string", "nullable": true }, "gitForkProtection": { "description": "Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed", "type": "boolean" }, "gitLFS": { "description": "Specifies whether Git LFS is enabled for this project.", "type": "boolean" }, "protectedSourcemaps": { "description": "Specifies whether sourcemaps are protected and require authentication to access.", "type": "boolean" }, "installCommand": { "description": "The install command for this project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "name": { "description": "The desired name for the project", "example": "a-project-name", "type": "string", "maxLength": 100 }, "nodeVersion": { "enum": [ "24.x", "22.x", "20.x", "18.x", "16.x", "14.x", "12.x", "10.x" ], "type": "string" }, "outputDirectory": { "description": "The output directory of the project. When `null` is used this value will be automatically detected", "maxLength": 256, "type": "string", "nullable": true }, "previewDeploymentsDisabled": { "description": "Specifies whether preview deployments are disabled for this project.", "type": "boolean", "nullable": true }, "previewDeploymentSuffix": { "description": "Custom domain suffix for preview deployments. Takes precedence over team-level suffix. Must be a domain owned by the team.", "type": "string", "maxLength": 253, "nullable": true }, "resourceConfig": { "properties": { "buildMachineType": { "enum": [ null, "basic", "enhanced", "turbo", "standard", "elastic" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildQueue": { "type": "object", "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } } }, "fluid": { "type": "boolean" }, "functionDefaultRegions": { "description": "The regions to deploy Vercel Functions to for this project", "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "maxLength": 4 } }, "functionDefaultTimeout": { "type": "number", "maximum": 900, "minimum": 1 }, "functionDefaultMemoryType": { "enum": [ "standard_legacy", "standard", "performance", "performance_xl" ] }, "functionZeroConfigFailover": { "description": "Specifies whether Zero Config Failover is enabled for this project.", "oneOf": [ { "type": "boolean" } ] }, "elasticConcurrencyEnabled": { "type": "boolean" }, "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "enum": [ "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": { "type": "boolean" }, "enableFunctionsBeta": { "type": "boolean" } }, "type": "object", "description": "Specifies resource override configuration for the project", "additionalProperties": false }, "publicSource": { "deprecated": true, "description": "Deprecated. Accepted for backwards compatibility but ignored.", "type": "boolean", "nullable": true }, "rootDirectory": { "description": "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", "maxLength": 256, "type": "string", "nullable": true }, "serverlessFunctionRegion": { "description": "The region to deploy Serverless Functions in this project", "maxLength": 4, "type": "string", "nullable": true }, "serverlessFunctionZeroConfigFailover": { "description": "Specifies whether Zero Config Failover is enabled for this project.", "oneOf": [ { "type": "boolean" } ] }, "skewProtectionBoundaryAt": { "description": "Deployments created before this absolute datetime have Skew Protection disabled. Value is in milliseconds since epoch to match \\\"createdAt\\\" fields.", "minimum": 0, "type": "integer" }, "skewProtectionMaxAge": { "description": "Deployments created before this rolling window have Skew Protection disabled. Value is in seconds to match \\\"revalidate\\\" fields.", "minimum": 0, "type": "integer" }, "skewProtectionAllowedDomains": { "description": "Cross-site domains allowed to fetch skew-protected assets (hostnames, optionally with leading wildcard like *.example.com).", "type": "array", "items": { "type": "string", "maxLength": 254 }, "maxItems": 12 }, "skipGitConnectDuringLink": { "description": "Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.", "type": "boolean", "deprecated": true }, "sourceFilesOutsideRootDirectory": { "description": "Indicates if there are source files outside of the root directory", "type": "boolean" }, "enablePreviewFeedback": { "description": "Opt-in to preview toolbar on the project level", "type": "boolean", "nullable": true }, "enableProductionFeedback": { "description": "Opt-in to production toolbar on the project level", "type": "boolean", "nullable": true }, "enableAffectedProjectsDeployments": { "description": "Opt-in to skip deployments when there are no changes to the root directory and its dependencies", "type": "boolean" }, "enableExternalRewriteCaching": { "description": "Specifies whether external rewrite caching is enabled for this project.", "type": "boolean" }, "staticIps": { "additionalProperties": false, "description": "Manage Static IPs for this project", "properties": { "enabled": { "description": "Opt-in to Static IPs for this project", "type": "boolean" } }, "required": [ "enabled" ], "type": "object" }, "tracing": { "description": "Tracing configuration for this project", "type": "object", "additionalProperties": false, "properties": { "domains": { "description": "Comma-separated list of drain endpoint domains", "type": "string" }, "ignorePaths": { "description": "Paths to ignore for tracing", "type": "array", "items": { "type": "string" } }, "samplingRules": { "description": "Sampling rules for trace collection", "type": "array", "maxItems": 10, "items": { "type": "object", "additionalProperties": false, "required": [ "rate" ], "properties": { "rate": { "type": "number", "minimum": 0, "maximum": 1, "description": "Sampling rate from 0 to 1" }, "env": { "type": "string", "enum": [ "production", "preview" ], "description": "Environment to apply sampling to" }, "requestPath": { "type": "string", "description": "Request path prefix to apply the sampling rule to" }, "destination": { "type": "string", "enum": [ "internal", "external" ], "description": "Tracing destination this rule applies to. Derived server-side when project tracing is computed; accepted here so a computed config can round-trip through this endpoint." } } } } }, "nullable": true }, "oidcTokenConfig": { "description": "OpenID Connect JSON Web Token generation configuration.", "type": "object", "additionalProperties": false, "properties": { "enabled": { "description": "Whether or not to generate OpenID Connect JSON Web Tokens.", "deprecated": true, "type": "boolean", "default": true }, "issuerMode": { "description": "team: `https://oidc.vercel.com/[team_slug]` global: `https://oidc.vercel.com`", "type": "string", "enum": [ "team", "global" ], "default": "team" } } }, "passwordProtection": { "additionalProperties": false, "description": "Allows to protect project deployments with a password", "properties": { "deploymentType": { "description": "Specify if the password will apply to every Deployment Target or just Preview", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ], "type": "string" }, "password": { "description": "The password that will be used to protect Project Deployments", "maxLength": 72, "type": "string", "nullable": true } }, "required": [ "deploymentType" ], "type": "object", "nullable": true }, "passport": { "description": "Passport configuration for the project.", "type": "object", "additionalProperties": false, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "default": "all", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ] } }, "required": [ "connectorId" ], "nullable": true }, "sandbox": { "type": "object", "description": "Specifies the default region and failover regions for sandboxes created in the project", "properties": { "region": { "description": "The Vercel region sandboxes in this project are created in by default.", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "example": "iad1" }, "failoverRegions": { "description": "The regions sandboxes in this project fall back to when they cannot be created in `region`.", "type": "array", "uniqueItems": true, "maxItems": 19, "items": { "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "example": [ "sfo1", "cle1" ] } }, "additionalProperties": false }, "ssoProtection": { "additionalProperties": false, "description": "Ensures visitors to your Preview Deployments are logged into Vercel and have a minimum of Viewer access on your team", "properties": { "deploymentType": { "default": "preview", "description": "Specify if the Vercel Authentication (SSO Protection) will apply to every Deployment Target or just Preview", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ], "type": "string" } }, "required": [ "deploymentType" ], "type": "object", "nullable": true }, "trustedIps": { "additionalProperties": false, "description": "Restricts access to deployments based on the incoming request IP address", "properties": { "deploymentType": { "description": "Specify if the Trusted IPs will apply to every Deployment Target or just Preview", "enum": [ "all", "preview", "production", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ], "type": "string" }, "addresses": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "description": "The IP addresses that are allowlisted. Supports IPv4 addresses and CIDR notations. IPv6 is not supported" }, "note": { "type": "string", "description": "An optional note explaining what the IP address or subnet is used for", "maxLength": 20 } }, "required": [ "value" ], "additionalProperties": false }, "minItems": 1 }, "protectionMode": { "description": "exclusive: ip match is enough to bypass deployment protection (regardless of other settings). additional: ip must match + any other protection should be also provided (password, vercel auth, shareable link, automation bypass header, automation bypass query param)", "enum": [ "exclusive", "additional" ], "type": "string" } }, "required": [ "deploymentType", "addresses", "protectionMode" ], "type": "object", "nullable": true }, "trustedSources": { "type": "object", "additionalProperties": false, "description": "Deployment Protection Trusted Sources", "properties": { "enableVercelCiSameRepository": { "type": "boolean", "description": "Allow same-team Vercel CI access to preview deployments built from the same repository as the CI run. The deployment source repository, not the current project repository link, is authoritative. Defaults to enabled when not stored. Omitting this field preserves its stored value, including when trustedSources is cleared. Set true explicitly to re-enable." }, "projects": { "type": "object", "maxProperties": 100, "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string", "maxLength": 100, "description": "The label or description of the trusted source" }, "customAllow": { "type": "array", "minItems": 1, "maxItems": 20, "items": { "type": "object", "additionalProperties": false, "required": [ "from", "to" ], "properties": { "to": { "type": "object", "additionalProperties": false, "description": "A set of environments, expressed as explicit slugs, a named preset, or both. At least one of `slugs` or `preset` must be set.", "anyOf": [ { "required": [ "slugs" ] }, { "required": [ "preset" ] } ], "properties": { "slugs": { "type": "array", "minItems": 1, "maxItems": 10, "uniqueItems": true, "items": { "type": "string", "maxLength": 64, "description": "A system environment (\\\"production\\\", \\\"preview\\\", or \\\"development\\\") or a custom environment slug" } }, "preset": { "type": "string", "enum": [ "all-custom" ] } } }, "from": { "type": "object", "additionalProperties": false, "description": "A set of environments, expressed as explicit slugs, a named preset, or both. At least one of `slugs` or `preset` must be set.", "anyOf": [ { "required": [ "slugs" ] }, { "required": [ "preset" ] } ], "properties": { "slugs": { "type": "array", "minItems": 1, "maxItems": 10, "uniqueItems": true, "items": { "type": "string", "maxLength": 64, "description": "A system environment (\\\"production\\\", \\\"preview\\\", or \\\"development\\\") or a custom environment slug" } }, "preset": { "type": "string", "enum": [ "all-custom" ] } } } } }, "description": "Optional overrides for the default same-env-by-slug matching." } } } }, "oidcProviders": { "type": "object", "maxProperties": 50, "additionalProperties": { "type": "array", "minItems": 1, "maxItems": 10, "items": { "type": "object", "additionalProperties": false, "required": [ "claims", "to" ], "properties": { "label": { "type": "string", "maxLength": 100, "description": "The label or description of the trusted source" }, "to": { "type": "object", "additionalProperties": false, "description": "A set of environments, expressed as explicit slugs, a named preset, or both. At least one of `slugs` or `preset` must be set.", "anyOf": [ { "required": [ "slugs" ] }, { "required": [ "preset" ] } ], "properties": { "slugs": { "type": "array", "minItems": 1, "maxItems": 10, "uniqueItems": true, "items": { "type": "string", "maxLength": 64, "description": "A system environment (\\\"production\\\", \\\"preview\\\", or \\\"development\\\") or a custom environment slug" } }, "preset": { "type": "string", "enum": [ "all-custom" ] } } }, "claims": { "type": "object", "minProperties": 1, "maxProperties": 20, "additionalProperties": { "type": "array", "minItems": 1, "maxItems": 20, "items": { "type": "string", "maxLength": 256 } } } } } } } }, "nullable": true }, "deploymentPolicy": { "anyOf": [ { "type": "object", "description": "Composable deployment-time policy. Each rule type holds a list of rules, one per environment scope.", "additionalProperties": false, "properties": { "gitSources": { "anyOf": [ { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "enabled", "environments", "sources" ], "properties": { "enabled": { "type": "boolean" }, "environments": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "target" ], "properties": { "type": { "type": "string", "enum": [ "system" ] }, "target": { "type": "string", "enum": [ "production", "preview" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "environmentId" ], "properties": { "type": { "type": "string", "enum": [ "custom" ] }, "environmentId": { "type": "string" } } } ] } }, "sources": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "provider", "org" ], "properties": { "provider": { "type": "string", "enum": [ "github", "bitbucket" ] }, "org": { "type": "string" }, "repo": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "provider", "namespace" ], "properties": { "provider": { "type": "string", "enum": [ "gitlab" ] }, "namespace": { "type": "string" }, "project": { "type": "string" } } } ] } } } } }, { "type": "string" } ] }, "deploymentSources": { "anyOf": [ { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "enabled", "environments", "sources" ], "properties": { "enabled": { "type": "boolean" }, "environments": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "target" ], "properties": { "type": { "type": "string", "enum": [ "system" ] }, "target": { "type": "string", "enum": [ "production", "preview" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "environmentId" ], "properties": { "type": { "type": "string", "enum": [ "custom" ] }, "environmentId": { "type": "string" } } } ] } }, "sources": { "type": "array", "items": { "type": "string", "enum": [ "git", "cli", "rest-api", "deploy-hook", "integration", "v0" ] } } } } }, { "type": "string" } ] } } }, { "type": "string" } ] }, "optionsAllowlist": { "additionalProperties": false, "description": "Specify a list of paths that should not be protected by Deployment Protection to enable Cors preflight requests", "properties": { "paths": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "description": "The regex path that should not be protected by Deployment Protection", "pattern": "^/.*" } }, "required": [ "value" ], "additionalProperties": false }, "minItems": 1, "maxItems": 5 } }, "required": [ "paths" ], "type": "object", "nullable": true }, "connectConfigurations": { "type": "array", "description": "The list of connections from project environment to Secure Compute network", "items": { "additionalProperties": false, "properties": { "envId": { "type": "string", "description": "The ID of the environment" }, "connectConfigurationId": { "type": "string", "description": "The ID of the Secure Compute network" }, "passive": { "type": "boolean", "description": "Whether the configuration should be passive, meaning builds will not run there and only passive Serverless Functions will be deployed" }, "buildsEnabled": { "type": "boolean", "description": "Flag saying if project builds should use Secure Compute" } }, "required": [ "envId", "connectConfigurationId", "passive", "buildsEnabled" ], "oneOf": [ { "type": "object" } ] }, "minItems": 1, "nullable": true }, "dismissedToasts": { "description": "An array of objects representing a Dismissed Toast in regards to a Project. Objects are either merged with existing toasts (on key match), or added to the `dimissedToasts` array.`", "type": "array", "minItems": 0, "maxItems": 50, "items": { "type": "object", "additionalProperties": false, "required": [ "key", "dismissedAt", "action", "value" ], "properties": { "key": { "type": "string", "description": "unique identifier for the dismissed toast" }, "dismissedAt": { "type": "number", "description": "unix timestamp representing the time the toast was dimissed" }, "action": { "enum": [ "cancel", "accept", "delete" ], "description": "Whether the toast was dismissed, the action was accepted, or the dismissal with this key should be removed" }, "value": { "oneOf": [ { "type": "string" }, { "type": "string" }, { "type": "boolean" }, { "type": "number" }, { "type": "object", "additionalProperties": false, "required": [ "previousValue", "currentValue" ], "properties": { "previousValue": { "oneOf": [ { "type": "number" }, { "type": "boolean" }, { "type": "string" } ] }, "currentValue": { "oneOf": [ { "type": "number" }, { "type": "boolean" }, { "type": "string" } ] } } } ] } } } } }, "type": "object" } } }, "required": true }, "x-speakeasy-usage-example": { "title": "Update an existing project", "description": "Update the fields of a project using either its name or id.", "position": 2 }, "x-codeSamples": [ { "lang": "typescript", "label": "updateProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.updateProject({\n idOrName: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"a-project-name\",\n sandbox: {\n region: \"iad1\",\n failoverRegions: [\n \"sfo1\",\n \"cle1\",\n ],\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateProject", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.UpdateProject(ctx, \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\", nil, nil, &operations.UpdateProjectRequestBody{\n Name: vercel.String(\"a-project-name\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Delete a specific project by passing either the project `id` or `name` in the URL.", "operationId": "deleteProject", "security": [ { "bearerToken": [] } ], "summary": "Delete a Project", "tags": [ "projects" ], "responses": { "204": { "description": "The project was successfuly removed" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique project identifier or the project name", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.projects.deleteProject({\n idOrName: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteProject", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.DeleteProject(ctx, \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{idOrName}/avatar": { "post": { "description": "Upload an image as the avatar of the project identified by `idOrName`. The request body is the raw bytes of a JPG, PNG, or SVG image; the `Content-Type` header must declare which. SVG payloads are sanitized and optimized server-side before storage. The final SHA-1 of the stored bytes becomes the project's `avatar` value. The actual upload pipeline (validation, sanitization, S3 write, conditional `updateProject`, and event emission) lives in the shared `@api/project-avatar-upload` helper so it can be reused by background workers.", "operationId": "uploadProjectAvatar", "security": [ { "bearerToken": [] } ], "summary": "Upload a project avatar", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "413": { "description": "" }, "415": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name.", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "uploadProjectAvatar", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.uploadProjectAvatar({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/shared-connect-links": { "patch": { "description": "Allows configuring Static IPs for a project", "operationId": "updateStaticIps", "security": [ { "bearerToken": [] } ], "summary": "Configures Static IPs for a project", "tags": [ "networking", "static-ips" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "anyOf": [ { "required": [ "builds" ] }, { "required": [ "regions" ] } ], "properties": { "builds": { "type": "boolean", "description": "Whether to use Static IPs for builds." }, "regions": { "type": "array", "items": { "type": "string", "maxLength": 4, "description": "The region in which to enable Static IPs.", "example": "iad1" }, "minItems": 0, "maxItems": 3, "uniqueItems": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateStaticIps", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.networking.updateStaticIps({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n regions: [\n \"iad1\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "typescript", "label": "updateStaticIps", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.staticIps.updateStaticIps({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n regions: [\n \"iad1\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}/custom-environments": { "post": { "description": "Creates a custom environment for the current project. Cannot be named 'Production' or 'Preview'.", "operationId": "createCustomEnvironment", "security": [ { "bearerToken": [] } ], "summary": "Create a custom environment for the current project.", "tags": [ "environment" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "slug": { "description": "The slug of the custom environment to create.", "type": "string", "maxLength": 32 }, "description": { "description": "Description of the custom environment. This is optional.", "type": "string", "maxLength": 256 }, "branchMatcher": { "required": [ "type", "pattern" ], "description": "How we want to determine a matching branch. This is optional.", "type": "object", "properties": { "type": { "description": "Type of matcher. One of \"equals\", \"startsWith\", or \"endsWith\".", "enum": [ "equals", "startsWith", "endsWith" ] }, "pattern": { "description": "Git branch name or portion thereof.", "type": "string", "maxLength": 100 } } }, "copyEnvVarsFrom": { "description": "Where to copy environment variables from. This is optional.", "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createCustomEnvironment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.createCustomEnvironment({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "Retrieve custom environments for the project. Must not be named 'Production' or 'Preview'.", "operationId": "getProjectsByIdOrNameCustomEnvironments", "security": [ { "bearerToken": [] } ], "summary": "Retrieve custom environments", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "accountLimit": { "properties": { "total": { "type": "number" } }, "required": [ "total" ], "type": "object", "description": "The maximum number of custom environments allowed either by the team's plan type or a custom override." }, "environments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "accountLimit", "environments" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "gitBranch", "description": "Fetch custom environments for a specific git branch", "in": "query", "required": false, "schema": { "description": "Fetch custom environments for a specific git branch", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectsByIdOrNameCustomEnvironments", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.getProjectsByIdOrNameCustomEnvironments({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}": { "get": { "description": "Retrieve a custom environment for the project. Must not be named 'Production' or 'Preview'.", "operationId": "getCustomEnvironment", "security": [ { "bearerToken": [] } ], "summary": "Retrieve a custom environment", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "environmentSlugOrId", "description": "The unique custom environment identifier within the project", "in": "path", "required": true, "schema": { "description": "The unique custom environment identifier within the project", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getCustomEnvironment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.getCustomEnvironment({\n idOrName: \"\",\n environmentSlugOrId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update a custom environment for the project. Must not be named 'Production' or 'Preview'.", "operationId": "updateCustomEnvironment", "security": [ { "bearerToken": [] } ], "summary": "Update a custom environment", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "environmentSlugOrId", "description": "The unique custom environment identifier within the project", "in": "path", "required": true, "schema": { "description": "The unique custom environment identifier within the project", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "slug": { "description": "The slug of the custom environment.", "type": "string", "maxLength": 32 }, "description": { "description": "Description of the custom environment. This is optional.", "type": "string", "maxLength": 256 }, "branchMatcher": { "required": [ "type", "pattern" ], "description": "How we want to determine a matching branch. This is optional.", "type": "object", "properties": { "type": { "description": "Type of matcher. One of \"equals\", \"startsWith\", or \"endsWith\".", "enum": [ "equals", "startsWith", "endsWith" ] }, "pattern": { "description": "Git branch name or portion thereof.", "type": "string", "maxLength": 100 } }, "nullable": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateCustomEnvironment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.updateCustomEnvironment({\n idOrName: \"\",\n environmentSlugOrId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Remove a custom environment for the project. Must not be named 'Production' or 'Preview'.", "operationId": "removeCustomEnvironment", "security": [ { "bearerToken": [] } ], "summary": "Remove a custom environment", "tags": [ "environment" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "environmentSlugOrId", "description": "The unique custom environment identifier within the project", "in": "path", "required": true, "schema": { "description": "The unique custom environment identifier within the project", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "deleteUnassignedEnvironmentVariables": { "description": "Delete Environment Variables that are not assigned to any environments.", "type": "boolean" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "removeCustomEnvironment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.environment.removeCustomEnvironment({\n idOrName: \"\",\n environmentSlugOrId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}/domains": { "get": { "description": "Retrieve the domains associated with a given project by passing either the project `id` or `name` in the URL.", "operationId": "getProjectDomains", "security": [ { "bearerToken": [] } ], "summary": "Retrieve project domains by project by id or name", "tags": [ "projects" ], "responses": { "200": { "description": "Successful response retrieving a list of domains", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "number" }, "prev": { "nullable": true, "type": "number" } }, "required": [ "count", "next", "prev" ], "type": "object" } }, "required": [ "domains", "pagination" ], "type": "object" }, { "properties": { "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "domains", "pagination" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "oneOf": [ { "type": "string" } ] } }, { "name": "production", "description": "Filters only production domains when set to `true`.", "in": "query", "required": false, "schema": { "default": "false", "description": "Filters only production domains when set to `true`.", "enum": [ "true", "false" ] } }, { "name": "target", "description": "Filters on the target of the domain. Can be either \"production\", \"preview\"", "in": "query", "required": false, "schema": { "description": "Filters on the target of the domain. Can be either \"production\", \"preview\"", "enum": [ "production", "preview" ], "type": "string" } }, { "name": "customEnvironmentId", "description": "The unique custom environment identifier within the project", "in": "query", "required": false, "schema": { "description": "The unique custom environment identifier within the project", "type": "string", "example": "env_123abc4567" } }, { "name": "gitBranch", "description": "Filters domains based on specific branch.", "in": "query", "required": false, "schema": { "description": "Filters domains based on specific branch.", "type": "string" } }, { "name": "redirects", "description": "Excludes redirect project domains when \"false\". Includes redirect project domains when \"true\" (default).", "in": "query", "required": false, "schema": { "default": "true", "description": "Excludes redirect project domains when \"false\". Includes redirect project domains when \"true\" (default).", "enum": [ "true", "false" ] } }, { "name": "redirect", "description": "Filters domains based on their redirect target.", "in": "query", "required": false, "schema": { "description": "Filters domains based on their redirect target.", "type": "string", "example": "example.com" } }, { "name": "verified", "description": "Filters domains based on their verification status.", "in": "query", "required": false, "schema": { "description": "Filters domains based on their verification status.", "enum": [ "true", "false" ] } }, { "name": "limit", "description": "Maximum number of domains to list from a request (max 100).", "in": "query", "required": false, "schema": { "description": "Maximum number of domains to list from a request (max 100).", "type": "number", "example": 20 } }, { "name": "since", "description": "Get domains created after this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get domains created after this JavaScript timestamp.", "type": "number", "example": 1609499532000 } }, { "name": "until", "description": "Get domains created before this JavaScript timestamp.", "in": "query", "required": false, "schema": { "description": "Get domains created before this JavaScript timestamp.", "type": "number", "example": 1612264332000 } }, { "name": "order", "description": "Domains sort order by createdAt", "in": "query", "required": false, "schema": { "default": "DESC", "description": "Domains sort order by createdAt", "enum": [ "ASC", "DESC" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectDomains", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjectDomains({\n idOrName: \"\",\n customEnvironmentId: \"env_123abc4567\",\n redirect: \"example.com\",\n limit: 20,\n since: 1609499532000,\n until: 1612264332000,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}/domains/{domain}": { "get": { "description": "Get project domain by project id/name and domain name.", "operationId": "getProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Get a project domain", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "domain", "description": "The project domain name", "in": "path", "required": true, "schema": { "description": "The project domain name", "type": "string", "example": "www.example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjectDomain({\n idOrName: \"\",\n domain: \"www.example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getProjectDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.GetProjectDomain(ctx, \"\", \"www.example.com\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "patch": { "description": "Update a project domain's configuration, including the name, git branch and redirect of the domain.", "operationId": "updateProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Update a project domain", "tags": [ "projects" ], "responses": { "200": { "description": "The domain was updated successfuly", "content": { "application/json": { "schema": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe domain redirect is not valid" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "The project is currently being transferred" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "domain", "description": "The project domain name", "in": "path", "required": true, "schema": { "description": "The project domain name", "type": "string", "example": "www.example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "gitBranch": { "description": "Git branch to link the project domain", "example": null, "type": "string", "maxLength": 250, "nullable": true }, "redirect": { "description": "Target destination domain for redirect", "example": "foobar.com", "type": "string", "nullable": true }, "redirectStatusCode": { "description": "Status code for domain redirect", "example": 307, "type": "integer", "enum": [ null, 301, 302, 307, 308 ], "nullable": true } }, "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.updateProjectDomain({\n idOrName: \"\",\n domain: \"www.example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n gitBranch: null,\n redirect: \"foobar.com\",\n redirectStatusCode: 307,\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateProjectDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.UpdateProjectDomain(ctx, operations.UpdateProjectDomainRequest{\n IDOrName: \"\",\n Domain: \"www.example.com\",\n RequestBody: &operations.UpdateProjectDomainRequestBody{\n GitBranch: nil,\n Redirect: vercel.String(\"foobar.com\"),\n RedirectStatusCode: operations.RedirectStatusCodeThreeHundredAndSeven.ToPointer(),\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Remove a domain from a project by passing the domain name and by specifying the project by either passing the project `id` or `name` in the URL.", "operationId": "removeProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Remove a domain from a project", "tags": [ "projects" ], "responses": { "200": { "description": "The domain was succesfully removed from the project", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The project is currently being transferred" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "domain", "description": "The project domain name", "in": "path", "required": true, "schema": { "description": "The project domain name", "type": "string", "example": "www.example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "removeRedirects": { "type": "boolean", "description": "Whether to remove all domains from this project that redirect to the domain being removed." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "removeProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.removeProjectDomain({\n idOrName: \"\",\n domain: \"www.example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "removeProjectDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.RemoveProjectDomain(ctx, \"\", \"www.example.com\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v10/projects/{idOrName}/domains": { "post": { "description": "Add a domain to the project by passing its domain name and by specifying the project by either passing the project `id` or `name` in the URL. If the domain is not yet verified to be used on this project, the request will return `verified = false`, and the domain will need to be verified according to the `verification` challenge via `POST /projects/:idOrName/domains/:domain/verify`. If the domain already exists on the project, the request will fail with a `400` status code.", "operationId": "addProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Add a domain to a project", "tags": [ "projects" ], "responses": { "200": { "description": "The domain was successfully added to the project", "content": { "application/json": { "schema": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe domain is not valid\nYou can't set both a git branch and a redirect for the domain\nThe domain can not be added because the latest production deployment for the project was not successful\nThe domain redirect is not valid\nA domain cannot redirect to itself\nYou can not set the production branch as a branch for your domain" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource.\nYou don't have access to the domain you are adding" }, "409": { "description": "The domain is already assigned to another Vercel project\nCannot create project domain since owner already has `domain` on their account, but it's not verified yet.\nCannot create project domain since owner already has `domain` on their account, and it's verified.\nThe domain is not allowed to be used\nThe project is currently being transferred" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "description": "The project domain name", "example": "www.example.com", "type": "string" }, "gitBranch": { "description": "Git branch to link the project domain", "example": null, "maxLength": 250, "type": "string", "nullable": true }, "customEnvironmentId": { "description": "The unique custom environment identifier within the project", "type": "string" }, "redirect": { "description": "Target destination domain for redirect", "example": "foobar.com", "type": "string", "nullable": true }, "redirectStatusCode": { "description": "Status code for domain redirect", "example": 307, "type": "integer", "enum": [ null, 301, 302, 307, 308 ], "nullable": true } }, "required": [ "name" ], "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "addProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.addProjectDomain({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"www.example.com\",\n gitBranch: null,\n redirect: \"foobar.com\",\n redirectStatusCode: 307,\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "addProjectDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.AddProjectDomain(ctx, \"\", nil, nil, &operations.AddProjectDomainRequestBody{\n Name: \"www.example.com\",\n GitBranch: nil,\n Redirect: vercel.String(\"foobar.com\"),\n RedirectStatusCode: operations.AddProjectDomainRedirectStatusCodeThreeHundredAndSeven.ToPointer(),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{idOrName}/domains/{domain}/move": { "post": { "description": "Move one project's domain to another project. Also allows the move of all redirects pointed to that domain in the same project.", "operationId": "moveProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Move a project domain", "tags": [ "projects" ], "responses": { "200": { "description": "The domain was updated successfuly", "content": { "application/json": { "schema": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe domain redirect is not valid" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "The project is currently being transferred" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "domain", "description": "The project domain name", "in": "path", "required": true, "schema": { "description": "The project domain name", "type": "string", "example": "www.example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "required": [ "projectId" ], "properties": { "projectId": { "description": "The unique target project identifier", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA", "oneOf": [ { "type": "string" } ] }, "gitBranch": { "description": "Git branch to link the project domain", "example": null, "type": "string", "maxLength": 250, "nullable": true }, "redirect": { "description": "Target destination domain for redirect", "example": "foobar.com", "type": "string", "nullable": true }, "redirectStatusCode": { "description": "Status code for domain redirect", "example": 307, "type": "integer", "enum": [ null, 301, 302, 307, 308 ], "nullable": true } }, "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "moveProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.moveProjectDomain({\n idOrName: \"\",\n domain: \"www.example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n gitBranch: null,\n redirect: \"foobar.com\",\n redirectStatusCode: 307,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v9/projects/{idOrName}/domains/{domain}/verify": { "post": { "description": "Attempts to verify a project domain with `verified = false` by checking the correctness of the project domain's `verification` challenge.", "operationId": "verifyProjectDomain", "security": [ { "bearerToken": [] } ], "summary": "Verify project domain", "tags": [ "projects" ], "responses": { "200": { "description": "The project domain was verified successfully\nDomain is already verified", "content": { "application/json": { "schema": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid.\nThere is an existing TXT record on the domain verifying it for another project\nThe domain does not have a TXT record that attempts to verify the project domain\nThe TXT record on the domain does not match the expected challenge for the project domain\nProject domain is not assigned to project" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique project identifier or the project name", "type": "string" } }, { "name": "domain", "description": "The domain name you want to verify", "in": "path", "required": true, "schema": { "description": "The domain name you want to verify", "type": "string", "example": "example.com" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "verifyProjectDomain", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.verifyProjectDomain({\n idOrName: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n domain: \"example.com\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "verifyProjectDomain", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.VerifyProjectDomain(ctx, \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\", \"example.com\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v10/projects/{idOrName}/env": { "get": { "description": "Retrieve the environment variables for a given project by passing either the project `id` or `name` in the URL.", "operationId": "filterProjectEnvs", "security": [ { "bearerToken": [] } ], "summary": "Retrieve the environment variables of a project by id or name", "tags": [ "projects" ], "responses": { "200": { "description": "The list of environment variables for the given project", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "securityIssues": { "items": { "type": "string", "enum": [ "flags-secret-needs-split", "readable-secret" ] }, "type": "array" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "system": { "type": "boolean", "enum": [ false, true ] }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "securityIssues", "type", "value" ], "type": "object" }, { "properties": { "envs": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "securityIssues": { "items": { "type": "string", "enum": [ "flags-secret-needs-split", "readable-secret" ] }, "type": "array" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "system": { "type": "boolean", "enum": [ false, true ] }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "securityIssues", "type", "value" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "envs", "pagination" ], "type": "object" }, { "properties": { "envs": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "securityIssues": { "items": { "type": "string", "enum": [ "flags-secret-needs-split", "readable-secret" ] }, "type": "array" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "system": { "type": "boolean", "enum": [ false, true ] }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "securityIssues", "type", "value" ], "type": "object" }, "type": "array" }, "hiddenProductionEnvCount": { "type": "number" } }, "required": [ "envs", "hiddenProductionEnvCount" ], "type": "object", "description": "The list of environment variables for the given project" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "gitBranch", "description": "If defined, the git branch of the environment variable to filter the results (must have target=preview)", "in": "query", "required": false, "schema": { "description": "If defined, the git branch of the environment variable to filter the results (must have target=preview)", "type": "string", "maxLength": 250, "example": "feature-1" } }, { "name": "decrypt", "description": "If true, the environment variable value will be decrypted", "in": "query", "required": false, "schema": { "description": "If true, the environment variable value will be decrypted", "type": "string", "enum": [ "true", "false" ], "example": "true", "deprecated": true } }, { "name": "source", "description": "The source that is calling the endpoint.", "in": "query", "required": false, "schema": { "description": "The source that is calling the endpoint.", "type": "string", "example": "vercel-cli:pull" } }, { "name": "customEnvironmentId", "description": "The unique custom environment identifier within the project", "in": "query", "required": false, "schema": { "type": "string", "description": "The unique custom environment identifier within the project", "example": "env_123abc4567" } }, { "name": "customEnvironmentSlug", "description": "The custom environment slug (name) within the project", "in": "query", "required": false, "schema": { "type": "string", "description": "The custom environment slug (name) within the project", "example": "my-custom-env" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "filterProjectEnvs", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.filterProjectEnvs({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n gitBranch: \"feature-1\",\n decrypt: \"true\",\n source: \"vercel-cli:pull\",\n customEnvironmentId: \"env_123abc4567\",\n customEnvironmentSlug: \"my-custom-env\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Create one or more environment variables for a project by passing its `key`, `value`, `type` and `target` and by specifying the project by either passing the project `id` or `name` in the URL. If you include `upsert=true` as a query parameter, a new environment variable will not be created if it already exists but, the existing variable's value will be updated.", "operationId": "createProjectEnv", "security": [ { "bearerToken": [] } ], "summary": "Create one or more environment variables", "tags": [ "projects" ], "responses": { "201": { "description": "The environment variable was created successfully", "content": { "application/json": { "schema": { "properties": { "created": { "oneOf": [ { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "production", "preview", "development" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" }, "system": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "key", "type", "value" ], "type": "object" }, { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" }, "system": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" } ] }, "failed": { "items": { "properties": { "error": { "properties": { "action": { "type": "string" }, "code": { "type": "string" }, "envVarId": { "type": "string" }, "envVarKey": { "type": "string" }, "gitBranch": { "type": "string" }, "key": { "type": "string" }, "link": { "type": "string" }, "message": { "type": "string" }, "project": { "type": "string" }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "value": { "oneOf": [ { "type": "string" }, { "items": { "type": "string", "enum": [ "production", "preview", "development" ] }, "type": "array" } ] } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, "type": "array" } }, "required": [ "failed" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe environment variable coudn't be created because an ongoing update env update is already happening\nThe environment variable coudn't be created because project document is too large" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource.\nThe environment variable cannot be created because it already exists" }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "upsert", "description": "Allow override of environment variable if it already exists", "in": "query", "required": false, "schema": { "description": "Allow override of environment variable if it already exists", "type": "string", "example": "true" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "required": [ "key", "value", "type" ], "anyOf": [ { "required": [ "target" ] }, { "required": [ "customEnvironmentIds" ] } ], "properties": { "key": { "description": "The name of the environment variable", "type": "string", "example": "API_URL" }, "value": { "description": "The value of the environment variable", "type": "string", "example": "https://api.vercel.com" }, "type": { "description": "The type of environment variable", "type": "string", "enum": [ "system", "encrypted", "plain", "sensitive" ], "example": "plain" }, "target": { "description": "The target environment of the environment variable", "type": "array", "items": { "enum": [ "production", "preview", "development" ] }, "example": [ "preview" ] }, "gitBranch": { "description": "If defined, the git branch of the environment variable (must have target=preview)", "type": "string", "maxLength": 250, "example": "feature-1", "nullable": true }, "comment": { "type": "string", "description": "A comment to add context on what this environment variable is for", "example": "database connection string for production", "maxLength": 500 }, "customEnvironmentIds": { "type": "array", "description": "The custom environment IDs associated with the environment variable", "items": { "type": "string", "example": "env_1234567890" } } } }, { "type": "array", "items": { "type": "object", "required": [ "key", "value", "type" ], "anyOf": [ { "required": [ "target" ] }, { "required": [ "customEnvironmentIds" ] } ], "properties": { "key": { "description": "The name of the environment variable", "type": "string", "example": "API_URL" }, "value": { "description": "The value of the environment variable", "type": "string", "example": "https://api.vercel.com" }, "type": { "description": "The type of environment variable", "type": "string", "enum": [ "system", "encrypted", "plain", "sensitive" ], "example": "plain" }, "target": { "description": "The target environment of the environment variable", "type": "array", "items": { "enum": [ "production", "preview", "development" ] }, "example": [ "preview" ] }, "gitBranch": { "description": "If defined, the git branch of the environment variable (must have target=preview)", "type": "string", "maxLength": 250, "example": "feature-1", "nullable": true }, "comment": { "type": "string", "description": "A comment to add context on what this environment variable is for", "example": "database connection string for production", "maxLength": 500 }, "customEnvironmentIds": { "type": "array", "description": "The custom environment IDs associated with the environment variable", "items": { "type": "string", "example": "env_1234567890" } } } } } ] } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createProjectEnv", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.createProjectEnv({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n upsert: \"true\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n key: \"API_URL\",\n value: \"https://api.vercel.com\",\n type: \"plain\",\n target: [\n \"preview\",\n ],\n gitBranch: \"feature-1\",\n comment: \"database connection string for production\",\n customEnvironmentIds: [\n \"env_1234567890\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createProjectEnv", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.CreateProjectEnv(ctx, operations.CreateProjectEnvRequest{\n IDOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n Upsert: vercel.String(\"true\"),\n RequestBody: vercel.Pointer(operations.CreateCreateProjectEnvRequestBodyCreateProjectEnvRequestBody1(\n operations.CreateCreateProjectEnvRequestBody1CreateProjectEnv12(\n operations.CreateProjectEnv12{\n Key: \"API_URL\",\n Value: \"https://api.vercel.com\",\n Type: operations.CreateProjectEnv1TypePlain,\n Target: []operations.CreateProjectEnv1Target{\n operations.CreateProjectEnv1TargetPreview,\n },\n GitBranch: vercel.String(\"feature-1\"),\n Comment: vercel.String(\"database connection string for production\"),\n },\n ),\n )),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{idOrName}/env/{id}": { "get": { "description": "Retrieve the environment variable for a given project.", "operationId": "getProjectEnv", "security": [ { "bearerToken": [] } ], "summary": "Retrieve the decrypted value of an environment variable of a project by id", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "decrypted", "key", "type" ], "type": "object" }, { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "production", "preview", "development" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "type", "value" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "id", "description": "The unique ID for the environment variable to get the decrypted value.", "in": "path", "required": true, "schema": { "description": "The unique ID for the environment variable to get the decrypted value.", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getProjectEnv", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.getProjectEnv({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getProjectEnv", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.GetProjectEnv(ctx, \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\", \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v9/projects/{idOrName}/env/{id}": { "delete": { "description": "Delete a specific environment variable for a given project by passing the environment variable identifier and either passing the project `id` or `name` in the URL.", "operationId": "removeProjectEnv", "security": [ { "bearerToken": [] } ], "summary": "Remove an environment variable", "tags": [ "projects" ], "responses": { "200": { "description": "The environment variable was successfully removed", "content": { "application/json": { "schema": { "oneOf": [ { "items": { "nullable": true, "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "system": { "type": "boolean", "enum": [ false, true ] }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "type", "value" ], "type": "object" }, { "nullable": true, "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "production", "preview", "development" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "type", "value" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The project is being transfered and removing an environment variable is not possible" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "id", "description": "The unique environment variable identifier", "in": "path", "required": true, "schema": { "description": "The unique environment variable identifier", "type": "string", "example": "XMbOEya1gUUO1ir4" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "customEnvironmentId", "description": "The unique custom environment identifier within the project", "in": "query", "required": false, "schema": { "type": "string", "description": "The unique custom environment identifier within the project", "example": "env_123abc4567" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "removeProjectEnv", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.removeProjectEnv({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n id: \"XMbOEya1gUUO1ir4\",\n customEnvironmentId: \"env_123abc4567\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "removeProjectEnv", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.RemoveProjectEnv(ctx, \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\", \"XMbOEya1gUUO1ir4\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] }, "patch": { "description": "Edit a specific environment variable for a given project by passing the environment variable identifier and either passing the project `id` or `name` in the URL.", "operationId": "editProjectEnv", "security": [ { "bearerToken": [] } ], "summary": "Edit an environment variable", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "nullable": true, "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." } }, "required": [ "key", "type", "value" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nAt least one environment variable failed validation" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "The project is being transfered and removing an environment variable is not possible" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" }, "x-vercel-cli": { "kind": "argument" } }, { "name": "id", "description": "The unique environment variable identifier", "in": "path", "required": true, "schema": { "description": "The unique environment variable identifier", "type": "string", "example": "XMbOEya1gUUO1ir4" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "The name of the environment variable", "type": "string", "example": "GITHUB_APP_ID" }, "target": { "description": "The target environment of the environment variable", "type": "array", "items": { "enum": [ "production", "preview", "development" ] }, "example": [ "preview" ] }, "gitBranch": { "description": "If defined, the git branch of the environment variable (must have target=preview)", "type": "string", "maxLength": 250, "example": "feature-1", "nullable": true }, "type": { "description": "The type of environment variable", "type": "string", "enum": [ "system", "encrypted", "plain", "sensitive" ], "example": "plain" }, "value": { "description": "The value of the environment variable", "type": "string", "example": "bkWIjbnxcvo78" }, "customEnvironmentIds": { "type": "array", "description": "The custom environments that the environment variable should be synced to", "items": { "type": "string", "example": "env_1234567890" } }, "comment": { "type": "string", "description": "A comment to add context on what this env var is for", "example": "database connection string for production", "maxLength": 500 } } } } }, "required": true }, "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "editProjectEnv", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.editProjectEnv({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n id: \"XMbOEya1gUUO1ir4\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n key: \"GITHUB_APP_ID\",\n target: [\n \"preview\",\n ],\n gitBranch: \"feature-1\",\n type: \"plain\",\n value: \"bkWIjbnxcvo78\",\n customEnvironmentIds: [\n \"env_1234567890\",\n ],\n comment: \"database connection string for production\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "editProjectEnv", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.EditProjectEnv(ctx, operations.EditProjectEnvRequest{\n IDOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n ID: \"XMbOEya1gUUO1ir4\",\n RequestBody: &operations.EditProjectEnvRequestBody{\n Key: vercel.String(\"GITHUB_APP_ID\"),\n Target: []operations.EditProjectEnvTarget{\n operations.EditProjectEnvTargetPreview,\n },\n GitBranch: vercel.String(\"feature-1\"),\n Type: operations.EditProjectEnvTypePlain.ToPointer(),\n Value: vercel.String(\"bkWIjbnxcvo78\"),\n CustomEnvironmentIds: []string{\n \"env_1234567890\",\n },\n Comment: vercel.String(\"database connection string for production\"),\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{idOrName}/env": { "delete": { "description": "Delete multiple environment variables for a given project in a single batch operation.", "operationId": "batchRemoveProjectEnv", "security": [ { "bearerToken": [] } ], "summary": "Batch remove environment variables", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "deleted": { "type": "number" }, "ids": { "items": { "type": "string" }, "type": "array" } }, "required": [ "deleted", "ids" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "ids" ], "properties": { "ids": { "description": "Array of environment variable IDs to delete", "type": "array", "items": { "type": "string" }, "minItems": 1, "maxItems": 1000 } }, "additionalProperties": false } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "batchRemoveProjectEnv", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.batchRemoveProjectEnv({\n idOrName: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release/billing": { "get": { "description": "Get the Rolling Releases billing status for a project. The team level billing status is used to determine if the project can be configured for rolling releases.", "operationId": "getRollingReleaseBillingStatus", "security": [ { "bearerToken": [] } ], "summary": "Get rolling release billing status", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "availableSlots": { "type": "number", "enum": [ 0 ] }, "message": { "type": "string" }, "reason": { "type": "string", "enum": [ "plan_not_supported" ] } }, "required": [ "availableSlots", "message", "reason" ], "type": "object" }, { "properties": { "availableSlots": { "type": "string", "enum": [ "unlimited" ] }, "message": { "type": "string" }, "reason": { "type": "string", "enum": [ "unlimited_slots" ] } }, "required": [ "availableSlots", "message", "reason" ], "type": "object" }, { "properties": { "availableSlots": { "type": "number", "enum": [ 0 ] }, "enabledProjects": { "items": { "type": "string" }, "type": "array" }, "message": { "type": "string" }, "reason": { "type": "string", "enum": [ "no_available_slots" ] } }, "required": [ "availableSlots", "enabledProjects", "message", "reason" ], "type": "object" }, { "properties": { "availableSlots": { "type": "number" }, "message": { "type": "string" }, "reason": { "type": "string", "enum": [ "available_slots" ] } }, "required": [ "availableSlots", "message", "reason" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRollingReleaseBillingStatus", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.getRollingReleaseBillingStatus({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release/config": { "get": { "description": "Get the Rolling Releases configuration for a project. The project-level config is simply a template that will be used for any future rolling release, and not the configuration for any active rolling release.", "operationId": "getRollingReleaseConfig", "security": [ { "bearerToken": [] } ], "summary": "Get rolling release configuration", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" } }, "required": [ "rollingRelease" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRollingReleaseConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.getRollingReleaseConfig({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Disable Rolling Releases for a project means that future deployments will not undergo a rolling release. Changing the config never alters a rollout that's already in-flight—it only affects the next production deployment. If you want to also stop the current rollout, call this endpoint to disable the feature, and then call either the /complete or /abort endpoint.", "operationId": "deleteRollingReleaseConfig", "security": [ { "bearerToken": [] } ], "summary": "Delete rolling release configuration", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true } }, "required": [ "rollingRelease" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteRollingReleaseConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.deleteRollingReleaseConfig({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Update (or disable) Rolling Releases for a project. When disabling with the resolve-on-disable feature flag enabled, any active rolling release document is resolved using the disableRolloutAction parameter: \"abort\" to roll back (default), or \"complete\" to promote the canary to production. When enabling or updating config, changes only affect the next production deployment and do not alter a rollout that's already in-flight. Note: Enabling Rolling Releases automatically enables skew protection on the project with the default value if it wasn't configured already.", "operationId": "updateRollingReleaseConfig", "security": [ { "bearerToken": [] } ], "summary": "Update the rolling release settings for the project", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "rollingRelease": { "nullable": true } }, "required": [ "rollingRelease" ], "type": "object" }, { "properties": { "rollingRelease": { "nullable": true, "properties": { "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "A stage object configured for a rolling release once a new deployment is triggered the first stage will be read in the proxy for first time visitors, and if a RNG < targetPercentage then it will serve the new deployment. Upon approval the next stage will be read, etc." }, "type": "array" } }, "type": "object" } }, "required": [ "rollingRelease" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "updateRollingReleaseConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.updateRollingReleaseConfig({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release": { "get": { "description": "Return the Rolling Release for a project, regardless of whether the rollout is active, aborted, or completed. If the feature is enabled but no deployment has occurred yet, null will be returned.", "operationId": "getRollingRelease", "security": [ { "bearerToken": [] } ], "summary": "Get the active rolling release information for a project", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true, "properties": { "activeStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The currently active stage, null if the rollout is aborted", "example": { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null } }, "advancementType": { "type": "string", "enum": [ "automatic", "manual-approval" ], "description": "The advancement type of the rolling release", "example": "manual-approval" }, "canaryDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The canary deployment being rolled out", "example": { "id": "dpl_def456", "name": "my-shop@9c7e2f4", "url": "9c7e2f4-my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716210100000, "readyState": "READY", "readyStateAt": 1716210400000 } }, "currentCanaryPercentage": { "type": "number", "description": "When set (for example while {@link substate} is `PAUSED`), the canary traffic percentage persisted on the rollout document — use for dashboard display when linear shift is active." }, "currentDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The current deployment receiving production traffic", "example": { "id": "dpl_abc123", "name": "my-shop@main", "url": "my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716206500000, "readyState": "READY", "readyStateAt": 1716206800000 } }, "nextStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The next stage to be activated, null if not in ACTIVE state", "example": { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null } }, "queuedDeploymentId": { "nullable": true, "type": "string", "description": "The ID of a deployment queued for the next rolling release", "example": "dpl_ghi789" }, "stages": { "items": { "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "type": "array", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "startedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release started", "example": 1716210500000 }, "state": { "type": "string", "enum": [ "ABORTED", "ACTIVE", "COMPLETE" ], "description": "The current state of the rolling release", "example": "ACTIVE" }, "substate": { "nullable": true, "type": "string", "enum": [ "PAUSED", null ], "description": "When set to `PAUSED`, the rollout is frozen at the current percentage until continued." }, "updatedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release was last updated", "example": 1716210600000 } }, "required": [ "activeStage", "advancementType", "canaryDeployment", "currentDeployment", "nextStage", "queuedDeploymentId", "stages", "startedAt", "state", "substate", "updatedAt" ], "type": "object", "description": "Rolling release information including configuration and document details, or null if no rolling release exists" } }, "required": [ "rollingRelease" ], "type": "object", "description": "The response format for rolling release endpoints that return rolling release information" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "name": "state", "description": "Filter by rolling release state", "in": "query", "required": false, "schema": { "description": "Filter by rolling release state", "type": "string", "enum": [ "ACTIVE", "COMPLETE", "ABORTED" ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRollingRelease", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.getRollingRelease({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release/approve-stage": { "post": { "description": "Advance a rollout to the next stage. This is only needed when rolling releases is configured to require manual approval.", "operationId": "approveRollingReleaseStage", "security": [ { "bearerToken": [] } ], "summary": "Update the active rolling release to the next stage for a project", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true, "properties": { "activeStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The currently active stage, null if the rollout is aborted", "example": { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null } }, "advancementType": { "type": "string", "enum": [ "automatic", "manual-approval" ], "description": "The advancement type of the rolling release", "example": "manual-approval" }, "canaryDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The canary deployment being rolled out", "example": { "id": "dpl_def456", "name": "my-shop@9c7e2f4", "url": "9c7e2f4-my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716210100000, "readyState": "READY", "readyStateAt": 1716210400000 } }, "currentCanaryPercentage": { "type": "number", "description": "When set (for example while {@link substate} is `PAUSED`), the canary traffic percentage persisted on the rollout document — use for dashboard display when linear shift is active." }, "currentDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The current deployment receiving production traffic", "example": { "id": "dpl_abc123", "name": "my-shop@main", "url": "my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716206500000, "readyState": "READY", "readyStateAt": 1716206800000 } }, "nextStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The next stage to be activated, null if not in ACTIVE state", "example": { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null } }, "queuedDeploymentId": { "nullable": true, "type": "string", "description": "The ID of a deployment queued for the next rolling release", "example": "dpl_ghi789" }, "stages": { "items": { "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "type": "array", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "startedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release started", "example": 1716210500000 }, "state": { "type": "string", "enum": [ "ABORTED", "ACTIVE", "COMPLETE" ], "description": "The current state of the rolling release", "example": "ACTIVE" }, "substate": { "nullable": true, "type": "string", "enum": [ "PAUSED", null ], "description": "When set to `PAUSED`, the rollout is frozen at the current percentage until continued." }, "updatedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release was last updated", "example": 1716210600000 } }, "required": [ "activeStage", "advancementType", "canaryDeployment", "currentDeployment", "nextStage", "queuedDeploymentId", "stages", "startedAt", "state", "substate", "updatedAt" ], "type": "object", "description": "Rolling release information including configuration and document details, or null if no rolling release exists" } }, "required": [ "rollingRelease" ], "type": "object", "description": "The response format for rolling release endpoints that return rolling release information" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "nextStageIndex", "canaryDeploymentId" ], "properties": { "nextStageIndex": { "description": "The index of the stage to transition to", "type": "number" }, "canaryDeploymentId": { "description": "The id of the canary deployment to approve for the next stage", "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "approveRollingReleaseStage", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.approveRollingReleaseStage({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release/start": { "post": { "description": "Start a rolling release for a deployment. If a rolling release is already active for the same canary deployment, returns the current state without side effects.", "operationId": "startRollingRelease", "security": [ { "bearerToken": [] } ], "summary": "Start a rolling release for the project", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true, "properties": { "activeStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The currently active stage, null if the rollout is aborted", "example": { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null } }, "advancementType": { "type": "string", "enum": [ "automatic", "manual-approval" ], "description": "The advancement type of the rolling release", "example": "manual-approval" }, "canaryDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The canary deployment being rolled out", "example": { "id": "dpl_def456", "name": "my-shop@9c7e2f4", "url": "9c7e2f4-my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716210100000, "readyState": "READY", "readyStateAt": 1716210400000 } }, "currentCanaryPercentage": { "type": "number", "description": "When set (for example while {@link substate} is `PAUSED`), the canary traffic percentage persisted on the rollout document — use for dashboard display when linear shift is active." }, "currentDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The current deployment receiving production traffic", "example": { "id": "dpl_abc123", "name": "my-shop@main", "url": "my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716206500000, "readyState": "READY", "readyStateAt": 1716206800000 } }, "nextStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The next stage to be activated, null if not in ACTIVE state", "example": { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null } }, "queuedDeploymentId": { "nullable": true, "type": "string", "description": "The ID of a deployment queued for the next rolling release", "example": "dpl_ghi789" }, "stages": { "items": { "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "type": "array", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "startedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release started", "example": 1716210500000 }, "state": { "type": "string", "enum": [ "ABORTED", "ACTIVE", "COMPLETE" ], "description": "The current state of the rolling release", "example": "ACTIVE" }, "substate": { "nullable": true, "type": "string", "enum": [ "PAUSED", null ], "description": "When set to `PAUSED`, the rollout is frozen at the current percentage until continued." }, "updatedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release was last updated", "example": 1716210600000 } }, "required": [ "activeStage", "advancementType", "canaryDeployment", "currentDeployment", "nextStage", "queuedDeploymentId", "stages", "startedAt", "state", "substate", "updatedAt" ], "type": "object", "description": "Rolling release information including configuration and document details, or null if no rolling release exists" } }, "required": [ "rollingRelease" ], "type": "object", "description": "The response format for rolling release endpoints that return rolling release information" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "canaryDeploymentId" ], "properties": { "canaryDeploymentId": { "description": "The ID of the canary deployment to start the rolling release for", "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "startRollingRelease", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.startRollingRelease({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/rolling-release/complete": { "post": { "description": "Force-complete a Rolling Release. The canary deployment will begin serving 100% of the traffic.", "operationId": "completeRollingRelease", "security": [ { "bearerToken": [] } ], "summary": "Complete the rolling release for the project", "tags": [ "rolling-release" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "rollingRelease": { "nullable": true, "properties": { "activeStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The currently active stage, null if the rollout is aborted", "example": { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null } }, "advancementType": { "type": "string", "enum": [ "automatic", "manual-approval" ], "description": "The advancement type of the rolling release", "example": "manual-approval" }, "canaryDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The canary deployment being rolled out", "example": { "id": "dpl_def456", "name": "my-shop@9c7e2f4", "url": "9c7e2f4-my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716210100000, "readyState": "READY", "readyStateAt": 1716210400000 } }, "currentCanaryPercentage": { "type": "number", "description": "When set (for example while {@link substate} is `PAUSED`), the canary traffic percentage persisted on the rollout document — use for dashboard display when linear shift is active." }, "currentDeployment": { "nullable": true, "properties": { "createdAt": { "type": "number", "description": "A number containing the date when the deployment was created in milliseconds", "example": 1540257589405 }, "id": { "type": "string", "description": "A string holding the unique ID of the deployment", "example": "dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ" }, "name": { "type": "string", "description": "The name of the project associated with the deployment at the time that the deployment was created", "example": "my-project" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "The state of the deployment depending on the process of deploying, or if it is ready or in an error state", "example": "READY" }, "readyStateAt": { "type": "number" }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "Where was the deployment created from. Best-effort guess for metrics only — not authoritative; do not gate behavior on it.", "example": "cli" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "If defined, either `staging` if a staging alias in the format `..now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \"preview\" deployment.", "example": null }, "url": { "type": "string", "description": "A string with the unique URL of the deployment", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "createdAt", "id", "name", "readyState", "url" ], "type": "object", "description": "The current deployment receiving production traffic", "example": { "id": "dpl_abc123", "name": "my-shop@main", "url": "my-shop.vercel.app", "target": "production", "source": "git", "createdAt": 1716206500000, "readyState": "READY", "readyStateAt": 1716206800000 } }, "nextStage": { "nullable": true, "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "The next stage to be activated, null if not in ACTIVE state", "example": { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null } }, "queuedDeploymentId": { "nullable": true, "type": "string", "description": "The ID of a deployment queued for the next rolling release", "example": "dpl_ghi789" }, "stages": { "items": { "properties": { "duration": { "nullable": true, "type": "number", "description": "Duration in seconds for automatic advancement, null for manual stages or the final stage", "example": null }, "index": { "type": "number", "description": "The zero-based index of the stage", "example": 0 }, "isFinalStage": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage is the final stage (targetPercentage === 100)", "example": false }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed" }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "duration", "index", "isFinalStage", "requireApproval", "targetPercentage" ], "type": "object", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "type": "array", "description": "All stages configured for this rolling release", "example": [ { "index": 0, "isFinalStage": false, "targetPercentage": 5, "requireApproval": true, "duration": null }, { "index": 1, "isFinalStage": false, "targetPercentage": 25, "requireApproval": true, "duration": null }, { "index": 2, "isFinalStage": false, "targetPercentage": 60, "requireApproval": true, "duration": null }, { "index": 3, "isFinalStage": true, "targetPercentage": 100, "requireApproval": false, "duration": null } ] }, "startedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release started", "example": 1716210500000 }, "state": { "type": "string", "enum": [ "ABORTED", "ACTIVE", "COMPLETE" ], "description": "The current state of the rolling release", "example": "ACTIVE" }, "substate": { "nullable": true, "type": "string", "enum": [ "PAUSED", null ], "description": "When set to `PAUSED`, the rollout is frozen at the current percentage until continued." }, "updatedAt": { "type": "number", "description": "Unix timestamp in milliseconds when the rolling release was last updated", "example": 1716210600000 } }, "required": [ "activeStage", "advancementType", "canaryDeployment", "currentDeployment", "nextStage", "queuedDeploymentId", "stages", "startedAt", "state", "substate", "updatedAt" ], "type": "object", "description": "Rolling release information including configuration and document details, or null if no rolling release exists" } }, "required": [ "rollingRelease" ], "type": "object", "description": "The response format for rolling release endpoints that return rolling release information" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "Project ID or project name (URL-encoded)", "in": "path", "required": true, "schema": { "description": "Project ID or project name (URL-encoded)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "canaryDeploymentId" ], "properties": { "canaryDeploymentId": { "description": "The ID of the canary deployment to complete", "type": "string" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "completeRollingRelease", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.rollingRelease.completeRollingRelease({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/projects/{idOrName}/transfer-request": { "post": { "description": "Initiates a project transfer request from one team to another.
Returns a `code` that remains valid for 24 hours and can be used to accept the transfer request by another team using the `PUT /projects/transfer-request/:code` endpoint.
Users can also accept the project transfer request using the claim URL: `https://vercel.com/claim-deployment?code=&returnUrl=`.
The `code` parameter specifies the project transfer request code generated using this endpoint.
The `returnUrl` parameter redirects users to a specific page of the application if the claim URL is invalid or expired.", "operationId": "createProjectTransferRequest", "security": [ { "bearerToken": [] } ], "summary": "Create project transfer request", "tags": [ "projects" ], "responses": { "200": { "description": "The project transfer request has been initiated successfully.", "content": { "application/json": { "schema": { "properties": { "code": { "type": "string" } }, "required": [ "code" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The ID or name of the project to transfer.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID or name of the project to transfer." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "callbackUrl": { "type": "string", "description": "The URL to send a webhook to when the transfer is accepted." }, "callbackSecret": { "type": "string", "description": "The secret to use to sign the webhook payload with HMAC-SHA256." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createProjectTransferRequest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.createProjectTransferRequest({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/projects/transfer-request/{code}": { "put": { "description": "Accept a project transfer request initated by another team.
The `code` is generated using the `POST /projects/:idOrName/transfer-request` endpoint.", "operationId": "acceptProjectTransferRequest", "security": [ { "bearerToken": [] } ], "summary": "Accept project transfer request", "tags": [ "projects" ], "responses": { "202": { "description": "The project has been transferred successfully.", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "partnerCalls": { "items": { "properties": { "installationId": { "type": "string" }, "resourceIds": { "items": { "type": "string" }, "type": "array" }, "result": { "properties": { "code": { "type": "string" }, "error": { "type": "object" }, "status": { "type": "string", "enum": [ "errored", "fulfilled" ] } }, "required": [ "status" ], "type": "object" } }, "required": [ "installationId", "resourceIds", "result" ], "type": "object" }, "type": "array" }, "resourceTransferErrors": { "items": { "type": "object" }, "type": "array" }, "transferredStoreIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "partnerCalls", "resourceTransferErrors", "transferredStoreIds" ], "type": "object" }, { "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "code", "description": "The code of the project transfer request.", "in": "path", "required": true, "schema": { "type": "string", "description": "The code of the project transfer request." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "newProjectName": { "description": "The desired name for the project", "example": "a-project-name", "type": "string", "maxLength": 100 }, "paidFeatures": { "type": "object", "additionalProperties": false, "properties": { "concurrentBuilds": { "type": "integer", "nullable": true }, "passwordProtection": { "type": "boolean", "nullable": true }, "previewDeploymentSuffix": { "type": "boolean", "nullable": true } } }, "acceptedPolicies": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "string", "format": "date-time" }, "required": [ "eula", "privacy" ], "properties": { "eula": { "type": "string", "format": "date-time" }, "privacy": { "type": "string", "format": "date-time" } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "acceptProjectTransferRequest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.acceptProjectTransferRequest({\n code: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n newProjectName: \"a-project-name\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/projects/{idOrName}/protection-bypass": { "patch": { "description": "Update the deployment protection automation bypass for a project", "operationId": "updateProjectProtectionBypass", "security": [ { "bearerToken": [] } ], "summary": "Update Protection Bypass for Automation", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" } }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "idOrName", "description": "The unique project identifier or the project name", "in": "path", "required": true, "schema": { "description": "The unique project identifier or the project name", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "revoke": { "description": "Optional instructions for revoking and regenerating a automation bypass", "type": "object", "properties": { "secret": { "description": "Automation bypass to revoked", "type": "string" }, "regenerate": { "description": "Whether or not a new automation bypass should be created after the provided secret is revoked", "type": "boolean" } }, "required": [ "secret", "regenerate" ] }, "generate": { "description": "Generate a new secret. If neither generate or revoke are provided, a new random secret will be generated.", "type": "object", "properties": { "secret": { "description": "Optional value of the secret to generate, don't send it for oauth2 tokens", "type": "string", "pattern": "^[a-zA-Z0-9]{32}$" }, "note": { "type": "string", "description": "Note to be displayed in the UI for this bypass", "maxLength": 100 } } }, "update": { "description": "Update an existing bypass", "type": "object", "required": [ "secret" ], "properties": { "secret": { "description": "Automation bypass to updated", "type": "string" }, "isEnvVar": { "type": "boolean", "description": "Whether or not this bypass is set as the VERCEL_AUTOMATION_BYPASS_SECRET environment variable on deployments" }, "note": { "type": "string", "description": "Note to be displayed in the UI for this bypass", "maxLength": 100 } } } }, "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateProjectProtectionBypass", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.updateProjectProtectionBypass({\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {},\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateProjectProtectionBypass", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.UpdateProjectProtectionBypass(ctx, \"\", nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{projectId}/rollback/{deploymentId}": { "post": { "description": "Allows users to rollback to a deployment.", "operationId": "requestRollback", "security": [ { "bearerToken": [] } ], "summary": "Point production traffic to a previous production deployment by ID", "tags": [ "projects" ], "responses": { "201": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "deploymentId", "description": "The ID of the deployment to rollback *to*", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the deployment to rollback *to*" } }, { "name": "description", "description": "The reason for the rollback", "in": "query", "required": false, "schema": { "type": "string", "description": "The reason for the rollback" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "requestRollback", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.projects.requestRollback({\n projectId: \"\",\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/rollback/{deploymentId}/update-description": { "patch": { "description": "Updates the reason for a rollback, without changing the rollback status itself.", "operationId": "updateProjectsByProjectIdRollbackByDeploymentIdUpdateDescription", "security": [], "summary": "Updates the description for a rollback", "tags": [ "projects" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "description": { "type": "string", "description": "The reason for the rollback" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateProjectsByProjectIdRollbackByDeploymentIdUpdateDescription", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n await vercel.projects.updateProjectsByProjectIdRollbackByDeploymentIdUpdateDescription({\n projectId: \"\",\n deploymentId: \"\",\n });\n\n\n}\n\nrun();" } ] } }, "/v1/projects/{projectId}/microfrontends": { "patch": { "description": "Update the microfrontends settings for a project.", "operationId": "updateMicrofrontends", "security": [ { "bearerToken": [] } ], "summary": "Update the microfrontends settings", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "abuse": { "properties": { "block": { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, "blockHistory": { "items": { "oneOf": [ { "properties": { "action": { "type": "string", "enum": [ "blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason", "statusCode" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "createdAt" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-blocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] } }, "required": [ "action", "createdAt", "reason", "route" ], "type": "object" }, { "properties": { "action": { "type": "string", "enum": [ "route-unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "isCascading": { "type": "boolean", "enum": [ false, true ] }, "route": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "route" ], "type": "object" } ] }, "type": "array" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object" }, "type": "array" }, "interstitial": { "type": "boolean", "enum": [ false, true ] }, "interstitialHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "add-deployment-interstitial", "add-project-interstitial", "remove-deployment-interstitial", "remove-project-interstitial" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "action", "createdAt" ], "type": "object" }, "type": "array" }, "scanner": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "history", "updatedAt" ], "type": "object" }, "accountId": { "type": "string" }, "alias": { "items": { "properties": { "configuredBy": { "nullable": true, "type": "string", "enum": [ "A", "CNAME", "dns-01", "http", null ] }, "configuredChangedAt": { "nullable": true, "type": "number" }, "createdAt": { "nullable": true, "type": "number" }, "deployment": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "domain": { "type": "string" }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "gitBranch": { "nullable": true, "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "target": { "type": "string", "enum": [ "PREVIEW", "PRODUCTION", "STAGING" ] } }, "required": [ "deployment", "domain", "environment", "target" ], "type": "object" }, "type": "array" }, "analytics": { "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "appliedCve55182Migration": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "autoAssignCustomDomainsUpdatedBy": { "type": "string" }, "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "avatar": { "nullable": true, "type": "string" }, "blobs": { "properties": { "isDefaultApp": { "type": "boolean", "enum": [ false, true ], "description": "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." } }, "type": "object" }, "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "concurrencyBucketName": { "type": "string" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "nullable": true, "type": "string" }, "connectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "createdAt": { "type": "number" }, "creator": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "user" ] }, "via": { "nullable": true, "oneOf": [ { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object", "description": "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." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object", "description": "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." } ] }, "user": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "type", "user", "via" ], "type": "object" }, { "properties": { "app": { "properties": { "clientId": { "type": "string", "description": "The protocol-facing OAuth client ID. This may differ from {@link id} when Client ID Metadata Documents (CIMD) are used." }, "id": { "type": "string", "description": "The internal ID of the Vercel App backing this principal." } }, "required": [ "id" ], "type": "object" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "app", "type" ], "type": "object" }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" } }, "required": [ "configurationId", "integrationId" ], "type": "object" }, "type": { "type": "string", "enum": [ "integration" ] } }, "required": [ "integration", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object" } ] }, "crons": { "properties": { "definitions": { "items": { "properties": { "description": { "type": "string", "description": "A human-readable description of what this cron job does." }, "host": { "type": "string", "description": "The hostname that should be used.", "example": "vercel.com" }, "hostInferred": { "type": "boolean", "enum": [ false, true ], "description": "Whether the host was inferred from the production deployment URL rather than explicitly provided." }, "path": { "type": "string", "description": "The path that should be called for the cronjob.", "example": "/api/crons/sync-something?hello=world" }, "schedule": { "type": "string", "description": "The cron expression.", "example": "0 0 * * *" }, "source": { "type": "string", "enum": [ "api" ], "description": "The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json)." } }, "required": [ "host", "path", "schedule" ], "type": "object" }, "type": "array" }, "deploymentId": { "nullable": true, "type": "string", "description": "The ID of the Deployment from which the definitions originated." }, "disabledAt": { "nullable": true, "type": "number", "description": "The time the feature was disabled for this project." }, "enabledAt": { "type": "number", "description": "The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs." }, "updatedAt": { "type": "number" } }, "required": [ "definitions", "deploymentId", "disabledAt", "enabledAt", "updatedAt" ], "type": "object" }, "customEnvironments": { "items": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object", "description": "Configuration for matching git branches to this environment" }, "createdAt": { "type": "number", "description": "Timestamp when the environment was created" }, "currentDeploymentAliases": { "items": { "type": "string" }, "type": "array", "description": "List of aliases for the current deployment" }, "description": { "type": "string", "description": "Optional description of the environment's purpose" }, "domains": { "items": { "properties": { "apexName": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvironmentId": { "nullable": true, "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ] }, "updatedAt": { "type": "number" }, "verification": { "items": { "properties": { "domain": { "type": "string" }, "reason": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "reason", "type", "value" ], "type": "object", "description": "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": "array", "description": "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`." }, "verified": { "type": "boolean", "enum": [ false, true ], "description": "`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." } }, "required": [ "apexName", "name", "projectId", "verified" ], "type": "object", "description": "List of domains associated with this environment" }, "type": "array", "description": "List of domains associated with this environment" }, "id": { "type": "string", "description": "Unique identifier for the custom environment (format: env_*)" }, "slug": { "type": "string", "description": "URL-friendly name of the environment" }, "type": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The type of environment (production, preview, or development)" }, "updatedAt": { "type": "number", "description": "Timestamp when the environment was last updated" } }, "required": [ "createdAt", "id", "slug", "type", "updatedAt" ], "type": "object", "description": "Internal representation of a custom environment with all required properties" }, "type": "array" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "dataCache": { "properties": { "storageSizeBytes": { "nullable": true, "type": "number" }, "unlimited": { "type": "boolean", "enum": [ false, true ] }, "userDisabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "userDisabled" ], "type": "object" }, "defaultResourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "deploymentExpiration": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "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." }, "deploymentPolicy": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "nullable": true, "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "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." }, "devCommand": { "nullable": true, "type": "string" }, "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "dismissedToasts": { "items": { "properties": { "action": { "type": "string", "enum": [ "accept", "cancel", "delete" ] }, "dismissedAt": { "type": "number" }, "key": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "currentValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "previousValue": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "currentValue", "previousValue" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "action", "dismissedAt", "key", "value" ], "type": "object" }, "type": "array" }, "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "enablePreviewFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "enableProductionFeedback": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "env": { "items": { "properties": { "comment": { "type": "string" }, "configurationId": { "nullable": true, "type": "string" }, "contentHint": { "nullable": true, "oneOf": [ { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "redis-rest-api-read-only-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-read-write-token" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-store-id" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "blob-webhook-public-key" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-non-pooling" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-prisma-url" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-user" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-host" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-password" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-database" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "postgres-url-no-ssl" ] } }, "required": [ "storeId", "type" ], "type": "object" }, { "properties": { "integrationConfigurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductId": { "type": "string" }, "storeId": { "type": "string" }, "type": { "type": "string", "enum": [ "integration-store-secret" ] } }, "required": [ "integrationConfigurationId", "integrationId", "integrationProductId", "storeId", "type" ], "type": "object" }, { "properties": { "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "flags-connection-string" ] } }, "required": [ "projectId", "type" ], "type": "object" } ] }, "createdAt": { "type": "number" }, "createdBy": { "nullable": true, "type": "string" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "decrypted": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "internalContentHint": { "nullable": true, "properties": { "encryptedValue": { "type": "string", "description": "Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda." }, "type": { "type": "string", "enum": [ "flags-secret" ] } }, "required": [ "encryptedValue", "type" ], "type": "object", "description": "Similar to `contentHints`, but should not be exposed to the user." }, "key": { "type": "string" }, "legacyValue": { "type": "string", "description": "Legacy now-encryption ciphertext, present after migration swaps value/vsmValue" }, "sunsetSecretId": { "type": "string", "description": "This is used to identify variables that have been migrated from type secret to sensitive." }, "target": { "oneOf": [ { "items": { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] }, "type": "array" }, { "type": "string", "enum": [ "development", "development", "preview", "preview", "production" ] } ] }, "type": { "type": "string", "enum": [ "encrypted", "plain", "secret", "sensitive", "system" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "nullable": true, "type": "string" }, "value": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ], "description": "User-facing config/secret model. When set, authoritative for new code paths. Legacy rows omit this field and callers fall back to existing `type` behavior." }, "vsmValue": { "type": "string" } }, "required": [ "key", "type", "value" ], "type": "object" }, "type": "array" }, "expiration": { "oneOf": [ { "properties": { "expiresAt": { "type": "number", "description": "Unix ms timestamp when the project is scheduled to expire." } }, "required": [ "expiresAt" ], "type": "object" }, { "properties": { "lockedAt": { "type": "number", "description": "Unix ms timestamp when the project was locked." }, "lockedBy": { "type": "string", "description": "userId of the actor that triggered the lock (system or admin)." } }, "required": [ "lockedAt", "lockedBy" ], "type": "object" } ] }, "features": { "properties": { "webAnalytics": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "gitProviderOptions": { "properties": { "consolidatedGitCommitStatus": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether consolidated commit status is enabled." }, "propagateFailures": { "type": "boolean", "enum": [ false, true ], "description": "Whether to propagate individual deployment failures to the consolidated status." } }, "required": [ "enabled", "propagateFailures" ], "type": "object", "description": "Configuration for consolidated git commit status reporting. When enabled, Vercel will post a single consolidated commit status instead of individual statuses for each deployment." }, "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "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": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "gitCommitStatus": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel should post commit statuses for this project. When omitted, commit statuses remain enabled." }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "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`." } }, "required": [ "createDeployments" ], "type": "object" }, "hasActiveBranches": { "type": "boolean", "enum": [ false, true ] }, "hasDeployments": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "installCommand": { "nullable": true, "type": "string" }, "internalRoutes": { "items": { "oneOf": [ { "properties": { "expiry": { "type": "number" }, "src": { "type": "string" }, "status": { "type": "number" } }, "required": [ "src", "status" ], "type": "object" }, { "properties": { "has": { "items": { "oneOf": [ { "properties": { "key": { "type": "string", "enum": [ "x-vercel-ip-country" ] }, "type": { "type": "string", "enum": [ "header" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "key", "type", "value" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "host" ] }, "value": { "properties": { "eq": { "type": "string" } }, "required": [ "eq" ], "type": "object" } }, "required": [ "type", "value" ], "type": "object" } ] }, "type": "array" }, "mitigate": { "properties": { "action": { "type": "string", "enum": [ "block_legal_cwc" ] } }, "required": [ "action" ], "type": "object" }, "src": { "type": "string" } }, "required": [ "has", "mitigate" ], "type": "object" } ] }, "type": "array" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "jobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array" } }, "required": [ "targets" ], "type": "object" } }, "type": "object" }, "lastAliasRequest": { "nullable": true, "properties": { "fromDeploymentId": { "nullable": true, "type": "string" }, "fromRollingReleaseId": { "type": "string", "description": "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": { "type": "string", "enum": [ "failed", "in-progress", "pending", "skipped", "succeeded" ] }, "requestedAt": { "type": "number" }, "toDeploymentId": { "type": "string" }, "type": { "type": "string", "enum": [ "promote", "rollback" ] } }, "required": [ "fromDeploymentId", "jobStatus", "requestedAt", "toDeploymentId", "type" ], "type": "object" }, "lastRollbackTarget": { "nullable": true, "type": "object" }, "latestDeployments": { "items": { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "array" }, "link": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-limited" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "host": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoOwnerId": { "type": "number", "description": "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." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "github-custom-host" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "host", "org", "productionBranch", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "productionBranch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectNamespace": { "type": "string" }, "projectNameWithNamespace": { "type": "string" }, "projectOwnerId": { "type": "number", "description": "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": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "gitlab" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "productionBranch", "projectId", "projectName", "projectNameWithNamespace", "projectNamespace", "projectUrl", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "productionBranch": { "type": "string" }, "slug": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "bitbucket" ] }, "updatedAt": { "type": "number" }, "uuid": { "type": "string" }, "workspaceUuid": { "type": "string" } }, "required": [ "deployHooks", "gitCredentialId", "name", "owner", "productionBranch", "slug", "type", "uuid", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "vercel" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "org": { "type": "string" }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "v0" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "org", "productionBranch", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "deployHooks": { "items": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "name", "ref", "url" ], "type": "object" }, "type": "array" }, "gitCredentialId": { "type": "string" }, "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`) of the owner." }, "productionBranch": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string", "description": "Origin repository id." }, "sourceless": { "type": "boolean", "enum": [ false, true ] }, "type": { "type": "string", "enum": [ "cursor-origin" ] }, "updatedAt": { "type": "number" } }, "required": [ "deployHooks", "gitCredentialId", "owner", "ownerId", "productionBranch", "repo", "repoId", "type" ], "type": "object" } ] }, "live": { "type": "boolean", "enum": [ false, true ] }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "oidcTokenConfig": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not to generate OpenID Connect JSON Web Tokens." }, "issuerMode": { "type": "string", "enum": [ "global", "team" ], "description": "- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`" } }, "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "outputDirectory": { "nullable": true, "type": "string" }, "passiveConnectConfigurationId": { "nullable": true, "type": "string" }, "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" }, "passwordProtection": { "nullable": true, "type": "object" }, "paused": { "type": "boolean", "enum": [ false, true ] }, "permissions": { "properties": { "accessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "agent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyBypassAll": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeySpendAttribution": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayApiKeyZdrExemption": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayCredits": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayGuardrails": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayPrivateModels": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewaySettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscripts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayTranscriptsSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aiGatewayVirtualModelConfigs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alertRules": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "alerts": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "aliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "analyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyAiGateway": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "apiKeyOwnedBySelf": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "auditLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "automation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingAddress": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInformation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceEmailRecipient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingInvoiceLanguage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingPurchaseOrder": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingRefund": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "billingTaxId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blob": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "blobStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "budget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachine": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "buildMachineDefault": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "bulkRedirects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cacheArtifactUsageEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciInvocations": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ciLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeChecks": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "codeOwners": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "concurrentBuilds": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connect": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectConfigurationLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connectLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClient": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexClientProject": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexContact": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "connexToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "cursorOriginInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheBillingSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "dataCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "defaultDeploymentProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deployment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentBuildLogs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentCheckReRunFromProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPreview": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPrivate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProductionGit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentPromote": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentProtectionException": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentRollback": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "deploymentV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAcceptDelegation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainAuthCodes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCertificate": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainRecord": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "domainTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "drain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeCacheNamespace": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigSchema": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "edgeConfigToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "endpointVerification": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "fileUpload": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "flagsExplorerSubscription": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitCredentialGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "gitRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "imageOptimizationNewPrice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationProjects": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationRole": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationConfigurationTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationDeploymentAction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationLog": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationPullRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResource": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceReplCommand": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationResourceSecrets": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationSSOSession": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "integrationVercelConfigurationOverride": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ipBlocking": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "job": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "jobGlobal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsIssuer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "kmsProjectGrant": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logDrain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logs": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "logsPreset": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceBillingData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationEdgeConfigData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceExperimentationItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceFlexCommit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInstallationMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceInvoice": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "marketplaceSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "Monitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringChart": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringQuery": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "monitoringSettings": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationCustomerBudget": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDeploymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainExpire": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainMoved": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainPurchase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainRenewal": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationDomainUnverified": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "NotificationMonitoringAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPaymentFailed": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationPreferences": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationStatementOfReasons": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "notificationUsageAlert": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Application": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oauth2Connection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityFunnel": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "observabilityNotebook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "oidcFederationPolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandBuild": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "onDemandConcurrency": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "openTelemetryEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "optionsAllowlist": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organization": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "organizationTeam": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "ownEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "pageIntegrity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "passwordProtectionInvoiceItem": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "paymentMethod": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "permissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgres": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "postgresStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "previewDeploymentSuffix": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateCloudAccount": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "privateLinkEndpoint": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionAliasProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "productionShareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "project": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAccessGroup": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsSampling": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectAnalyticsUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheck": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectCheckRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentExpiration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentHook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDeploymentProtectionStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomain": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainCheckConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainMove": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectDomainVerify": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEnvVarsUnownedByIntegration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectEvent": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlags": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFlagsSdkKey": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectFromV0": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectId": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectIntegrationConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMember": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectMonitoring": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectOIDCToken": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectPermissions": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProductionBranch": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectProtectionBypass": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRollingRelease": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectRoutes": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSetting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectSupportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTier": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferIn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferOut": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectTransferRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "projectUsage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "proTrialOnboarding": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "rateLimit": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redis": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "redisStoreTokenSet": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "remoteCaching": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "repository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "samlConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "schedule": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "seawallConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "secret": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityConfig": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "securityPlusConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sensitiveEnvironmentVariablePolicy": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "setting": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "shareableLinkStrict": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVars": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "sharedEnvVarsProduction": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "skewProtection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "space": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "spaceRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeIsLocked": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTokenSetSensitive": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "storeTransfer": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCase": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "supportCaseComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "team": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamAccessRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamFellowMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamGitExclusivity": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInvite": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteCode": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamInviteLink": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamJoin": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMemberMfaStatus": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamMicrofrontends": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembership": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamOwnMembershipDisconnectSAML": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "teamTokenInvalidation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "token": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "toolbarComment": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedIps": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "trustedSources": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usage": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "usageCycle": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "user": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userMfaConfiguration": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userPreference": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "userSudo": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "v0Chat": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vcrRepository": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallation": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAppInstallationRequest": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelAuth": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vercelRun": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "vpcPeeringConnection": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalytics": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAnalyticsPlan": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webAuthn": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "webhook-event": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" }, "workflowRunData": { "items": { "$ref": "#/components/schemas/ACLAction" }, "type": "array" } }, "type": "object" }, "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "configurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "integrationId": { "type": "string" }, "scope": { "type": "string", "enum": [ "integration-automation-bypass" ] } }, "required": [ "configurationId", "createdAt", "createdBy", "integrationId", "scope" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "isEnvVar": { "type": "boolean", "enum": [ false, true ], "description": "When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var." }, "note": { "type": "string", "description": "Optional note about the bypass to be displayed in the UI" }, "scope": { "type": "string", "enum": [ "automation-bypass" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object" } ] }, "type": "object" }, "protectionConfig": { "properties": { "sandboxUrls": { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "resourceConfig": { "properties": { "buildMachineElasticLastUpdated": { "type": "number" }, "buildMachineElasticReason": { "type": "string", "enum": [ "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" ] }, "buildMachineSelection": { "type": "string", "enum": [ "elastic", "fixed" ] }, "buildMachineType": { "type": "string", "enum": [ "basic", "enhanced", "standard", "turbo" ] }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "fluid": { "type": "boolean", "enum": [ false, true ] }, "functionDefaultMemoryType": { "type": "string", "enum": [ "performance", "performance_xl", "standard", "standard_legacy" ] }, "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" }, "functionDefaultTimeout": { "type": "number" }, "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "isNSNBDisabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "required": [ "functionDefaultRegions" ] }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." }, "rollingRelease": { "nullable": true, "properties": { "canaryResponseHeader": { "type": "boolean", "enum": [ false, true ], "description": "Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.", "example": false }, "gate": { "properties": { "action": { "type": "string", "enum": [ "pause", "rollback" ], "description": "What to do when the gate trips: pause the rollout, or roll it back." }, "checks": { "items": { "properties": { "excludePaths": { "items": { "type": "string" }, "type": "array", "description": "Request paths to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Matched exactly against the request path with any query string removed; no prefix or glob matching. Defaults to `[]` when omitted.", "example": [ "/api/health" ] }, "excludeStatusCodes": { "items": { "type": "number" }, "type": "array", "description": "Response status codes to ignore entirely — dropped from both the numerator (errors) and the denominator (total requests). Defaults to `[]` when omitted.", "example": [ 503 ] }, "ingestWatermarkSeconds": { "type": "number", "description": "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.", "example": 30 }, "minSampleSize": { "type": "number", "description": "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.", "example": 100 }, "type": { "type": "string", "enum": [ "error-rate-5xx" ], "description": "The metric this check evaluates." } }, "required": [ "type" ], "type": "object", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "type": "array", "description": "The checks to evaluate. An empty array means nothing is evaluated." }, "dryRun": { "type": "boolean", "enum": [ false, true ], "description": "When true, a tripped gate is only reported — {@link action} is not taken." }, "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automated gating is enabled for this project's rollouts." }, "failureThreshold": { "type": "number", "description": "How many failing evaluations within {@link windowSize} trip the gate. Defaults to `3` when omitted.", "example": 3 }, "windowSize": { "type": "number", "description": "How many of the most recent evaluations {@link failureThreshold} is counted against. Defaults to `5` when omitted.", "example": 5 } }, "required": [ "action", "checks", "dryRun", "enabled" ], "type": "object", "description": "Automated gating configuration. Omitted (the default) means no gating is configured, which is equivalent to `enabled: false`." }, "stages": { "nullable": true, "items": { "properties": { "duration": { "type": "number", "description": "Duration in minutes for automatic advancement to the next stage", "example": 600 }, "linearShift": { "type": "boolean", "enum": [ false, true ], "description": "Whether to linearly shift traffic over the duration of this stage", "example": false }, "requireApproval": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not this stage requires manual approval to proceed", "example": false }, "targetPercentage": { "type": "number", "description": "The percentage of traffic to serve to the canary deployment (0-100)", "example": 25 } }, "required": [ "targetPercentage" ], "type": "object", "description": "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." }, "type": "array", "description": "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." }, "target": { "type": "string", "description": "The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.", "example": "production" } }, "required": [ "target" ], "type": "object", "description": "Project-level rolling release configuration that defines how deployments should be gradually rolled out" }, "rootDirectory": { "nullable": true, "type": "string" }, "sandbox": { "properties": { "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "type": "array" }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] } }, "type": "object" }, "security": { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" }, "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallBypassIps": { "items": { "type": "string" }, "type": "array" }, "firewallConfigVersion": { "type": "number" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallSeawallEnabled": { "type": "boolean", "enum": [ false, true ] }, "firewallUpdatedAt": { "type": "number" }, "ja3Enabled": { "type": "boolean", "enum": [ false, true ] }, "ja4Enabled": { "type": "boolean", "enum": [ false, true ] }, "log_headers": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "nullable": true, "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "bot_filter": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" } }, "required": [ "ai_bots", "bot_filter", "owasp", "traffic_sources", "vercel_ruleset" ], "type": "object" }, "pageIntegrityEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether Page Integrity is enabled for this project. Used by the metadata service to gate DynamoDB lookups against the page-integrity-inventory table." }, "rulesets": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" }, "securityPlus": { "type": "boolean", "enum": [ false, true ] }, "securityPlusMetadata": { "properties": { "firstEnabledAt": { "type": "number", "description": "Timestamp when the feature was first enabled. Never changes after initial enablement." }, "updatedAt": { "type": "number" } }, "required": [ "updatedAt" ], "type": "object" } }, "type": "object" }, "serverlessFunctionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] }, "services": { "items": { "properties": { "framework": { "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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" ], "description": "Framework slug, when the service has one (omitted otherwise)." }, "runtime": { "type": "string", "description": "Generic runtime, e.g. 'node' | 'python' | 'go' | 'ruby' | 'rust' (Service.runtime). Omitted for static builds." }, "serviceName": { "type": "string", "description": "Service name from the deployment (Service.name)." }, "serviceType": { "type": "string", "enum": [ "cron", "job", "web", "worker" ], "description": "Service kind (Service.type). Omitted for schemas that do not define one." } }, "required": [ "serviceName" ], "type": "object" }, "type": "array" }, "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" }, "skewProtectionBoundaryAt": { "type": "number" }, "skewProtectionMaxAge": { "type": "number" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, "staticIps": { "properties": { "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "builds", "enabled", "regions" ], "type": "object" }, "targets": { "additionalProperties": { "nullable": true, "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "aliasFinal": { "nullable": true, "type": "string" }, "automaticAliases": { "items": { "type": "string" }, "type": "array" }, "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" }, "buildingAt": { "type": "number" }, "builds": { "items": { "properties": { "dest": { "type": "string" }, "src": { "type": "string" }, "use": { "type": "string" } }, "required": [ "use" ], "type": "object" }, "type": "array" }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ] }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ] }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "createdIn": { "type": "string" }, "creator": { "nullable": true, "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "gitlabLogin": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "uid", "username" ], "type": "object" }, "deletedAt": { "type": "number" }, "deploymentHostname": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "monorepoManager": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "oidcTokenClaims": { "properties": { "aud": { "type": "string" }, "custom_environment_id": { "type": "string" }, "environment": { "type": "string" }, "iss": { "type": "string" }, "mfe_group_ids": { "items": { "type": "string" }, "type": "array" }, "owner": { "type": "string" }, "owner_id": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "project_id": { "type": "string" }, "scope": { "type": "string" }, "sub": { "type": "string" } }, "required": [ "aud", "environment", "iss", "owner", "owner_id", "project", "project_id", "scope", "sub" ], "type": "object" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previewCommentsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether or not preview comments are enabled for the deployment", "example": false }, "private": { "type": "boolean", "enum": [ false, true ] }, "readyAt": { "type": "number" }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ] }, "requestedAt": { "type": "number" }, "target": { "nullable": true, "type": "string" }, "teamId": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "LAMBDAS" ] }, "url": { "type": "string" }, "userId": { "type": "string", "description": "Present for user creators; omitted for app/integration/system creators." }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "createdAt", "createdIn", "creator", "deploymentHostname", "id", "name", "plan", "private", "readyState", "type", "url" ], "type": "object" }, "type": "object" }, "tier": { "type": "string", "enum": [ "advanced", "critical", "priority" ] }, "tracing": { "properties": { "domains": { "type": "string" }, "ignorePaths": { "items": { "type": "string" }, "type": "array" }, "samplingRules": { "items": { "properties": { "destination": { "type": "string", "enum": [ "external", "internal" ], "description": "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." }, "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" } }, "required": [ "rate" ], "type": "object" }, "type": "array" } }, "type": "object" }, "transferCompletedAt": { "type": "number" }, "transferredFromAccountId": { "type": "string" }, "transferStartedAt": { "type": "number" }, "transferToAccountId": { "type": "string" }, "trustedIps": { "nullable": true, "oneOf": [ { "properties": { "addresses": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] }, "protectionMode": { "type": "string", "enum": [ "additional", "exclusive" ] } }, "required": [ "addresses", "deploymentType", "protectionMode" ], "type": "object" }, { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production" ] } }, "required": [ "deploymentType" ], "type": "object" } ] }, "trustedSources": { "nullable": true, "properties": { "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ], "description": "Allow same-team Vercel CI access to preview deployments built from the CI run's repository, using the deployment source rather than the current project repository link. Defaults to enabled when not stored; omitted or null Trusted Sources updates preserve the stored value." }, "oidcProviders": { "additionalProperties": { "items": { "properties": { "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] }, "claims": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "type": "object" }, "label": { "type": "string" } }, "required": [ "claims", "to" ], "type": "object" }, "type": "array" }, "type": "object" }, "projects": { "additionalProperties": { "properties": { "customAllow": { "items": { "properties": { "from": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The source envs on the trusted project that are allowed to access `to`." } ] }, "to": { "oneOf": [ { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "slugs" ], "type": "object", "description": "The target envs on the current project that may be accessed." }, { "properties": { "preset": { "type": "string", "enum": [ "all-custom" ] }, "slugs": { "items": { "type": "string" }, "type": "array", "description": "System environment slugs (`production`, `preview`) and/or custom environment slugs defined on the referenced project." } }, "required": [ "preset" ], "type": "object", "description": "The target envs on the current project that may be accessed." } ] } }, "required": [ "from", "to" ], "type": "object", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "type": "array", "description": "Optional overrides for the default same-env-by-slug matching. Provide explicit rules to allow cross-env access or presets." }, "label": { "type": "string" } }, "type": "object" }, "type": "object" } }, "type": "object" }, "updatedAt": { "type": "number" }, "usageStatus": { "properties": { "bypassThrottleUntil": { "type": "number", "description": "Timestamp until which throttling is bypassed (project pays list rates for overage)." }, "exceededAllowanceUntil": { "type": "number", "description": "Timestamp until which the project has exceeded its CDN allowance." }, "kind": { "type": "string", "enum": [ "flat" ], "description": "Billing mode. Always 'flat' for flat-rate projects." }, "teamThrottled": { "type": "boolean", "enum": [ false, true ], "description": "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`." }, "throttled": { "type": "boolean", "enum": [ false, true ], "description": "Per-project throttle, set explicitly for this project (e.g. via the per-project Flat Rate CDN endpoint)." } }, "required": [ "kind" ], "type": "object" }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Created": { "type": "boolean", "enum": [ false, true ] }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accountId", "alias", "defaultResourceConfig", "deploymentExpiration", "directoryListing", "id", "name", "nodeVersion", "resourceConfig" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The unique project identifier", "in": "path", "required": true, "schema": { "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique project identifier", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "microfrontendsGroupId": { "type": "string", "example": "mfe_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "description": "The unique group identifier to add this microfrontend to" }, "enabled": { "type": "boolean", "example": true, "description": "Enable or disable microfrontends for the project" }, "isDefaultApp": { "type": "boolean", "example": true, "description": "Whether the application is the default application for the microfrontends group" }, "defaultRoute": { "type": "string", "example": "/home", "description": "The default route used for screenshots and preview links for the project" }, "routeObservabilityToThisProject": { "type": "boolean", "description": "Whether observability data should be routed to this project or a root project. Can only be set for child applications." }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "description": "Whether domains in this project should route as a microfrontend. Can only be set for child applications." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateMicrofrontends", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.updateMicrofrontends({\n projectId: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n microfrontendsGroupId: \"mfe_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n enabled: true,\n isDefaultApp: true,\n defaultRoute: \"/home\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v10/projects/{projectId}/promote/{deploymentId}": { "post": { "description": "Allows users to promote a deployment to production. Note: This does NOT rebuild the deployment. If you need that, then call create-deployments endpoint.", "operationId": "requestPromote", "security": [ { "bearerToken": [] } ], "summary": "Point production traffic to a given deployment", "tags": [ "projects" ], "responses": { "201": { "description": "" }, "202": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "requestPromote", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.projects.requestPromote({\n projectId: \"\",\n deploymentId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "requestPromote", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.RequestPromote(ctx, \"\", \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{projectId}/promote/aliases": { "get": { "description": "Get a list of aliases related to the last promote request with their mapping status", "operationId": "listPromoteAliases", "security": [ { "bearerToken": [] } ], "summary": "Gets a list of aliases with status for the current promote", "tags": [ "projects" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "aliases": { "items": { "properties": { "alias": { "type": "string" }, "id": { "type": "string" }, "status": { "type": "string" } }, "required": [ "alias", "id", "status" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "aliases", "pagination" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "limit", "description": "Maximum number of aliases to list from a request (max 100).", "in": "query", "required": false, "schema": { "description": "Maximum number of aliases to list from a request (max 100).", "type": "number", "example": 20, "maximum": 100 } }, { "name": "since", "description": "Get aliases created after this epoch timestamp.", "in": "query", "required": false, "schema": { "description": "Get aliases created after this epoch timestamp.", "type": "number", "example": 1609499532000 } }, { "name": "until", "description": "Get aliases created before this epoch timestamp.", "in": "query", "required": false, "schema": { "description": "Get aliases created before this epoch timestamp.", "type": "number", "example": 1612264332000 } }, { "name": "failedOnly", "description": "Filter results down to aliases that failed to map to the requested deployment", "in": "query", "required": false, "schema": { "description": "Filter results down to aliases that failed to map to the requested deployment", "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listPromoteAliases", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.projects.listPromoteAliases({\n projectId: \"\",\n limit: 20,\n since: 1609499532000,\n until: 1612264332000,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listPromoteAliases", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.ListPromoteAliases(ctx, operations.ListPromoteAliasesRequest{\n ProjectID: \"\",\n Limit: vercel.Float64(20),\n Since: vercel.Float64(1609499532000),\n Until: vercel.Float64(1612264332000),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{projectId}/pause": { "post": { "description": "Pause a project by passing its project `id` in the URL. If the project does not exist given the id then the request will fail with 400 status code. If the project disables auto assigning custom production domains and blocks the active Production Deployment then the request will return with 200 status code.", "operationId": "pauseProject", "security": [ { "bearerToken": [] } ], "summary": "Pause a project", "tags": [ "projects" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The unique project identifier", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique project identifier" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "pauseProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.projects.pauseProject({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "pauseProject", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.PauseProject(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/projects/{projectId}/unpause": { "post": { "description": "Unpause a project by passing its project `id` in the URL. If the project does not exist given the id then the request will fail with 400 status code. If the project enables auto assigning custom production domains and unblocks the active Production Deployment then the request will return with 200 status code.", "operationId": "unpauseProject", "security": [ { "bearerToken": [] } ], "summary": "Unpause a project", "tags": [ "projects" ], "responses": { "200": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The unique project identifier", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique project identifier" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "unpauseProject", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.projects.unpauseProject({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "unpauseProject", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Projects.UnpauseProject(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v2/sandboxes": { "get": { "description": "Retrieves a paginated list of named sandboxes belonging to a specific project. Results can be sorted by creation time or name, and optionally filtered by name prefix or status.", "operationId": "listNamedSandboxes", "security": [ { "bearerToken": [] } ], "summary": "List sandboxes", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" }, "sandboxes": { "items": { "$ref": "#/components/schemas/NamedSandbox" }, "type": "array" } }, "required": [ "pagination", "sandboxes" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "project", "description": "The unique identifier or name of the project to list named sandboxes for.", "in": "query", "required": false, "schema": { "description": "The unique identifier or name of the project to list named sandboxes for.", "type": "string", "example": "prj_abc123" } }, { "name": "limit", "description": "Maximum number of named sandboxes to return in the response. Used for pagination.", "in": "query", "required": false, "schema": { "description": "Maximum number of named sandboxes to return in the response. Used for pagination.", "type": "number", "minimum": 1, "maximum": 50, "default": 20, "example": 20 } }, { "name": "sortBy", "description": "Field to sort by.", "in": "query", "required": false, "schema": { "description": "Field to sort by.", "type": "string", "enum": [ "createdAt", "name", "statusUpdatedAt", "currentSnapshotId" ], "default": "createdAt" } }, { "name": "namePrefix", "description": "Filter named sandboxes whose name starts with this prefix. Only valid when sortBy=name.", "in": "query", "required": false, "schema": { "description": "Filter named sandboxes whose name starts with this prefix. Only valid when sortBy=name.", "type": "string" } }, { "name": "cursor", "description": "Opaque pagination cursor from a previous response.", "in": "query", "required": false, "schema": { "description": "Opaque pagination cursor from a previous response.", "type": "string" } }, { "name": "sortOrder", "description": "Sort direction. Defaults to desc.", "in": "query", "required": false, "schema": { "description": "Sort direction. Defaults to desc.", "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } }, { "name": "status", "description": "Filter named sandboxes by status. Only valid when sortBy is createdAt.", "in": "query", "required": false, "schema": { "description": "Filter named sandboxes by status. Only valid when sortBy is createdAt.", "type": "string", "enum": [ "running", "stopping", "stopped" ] } }, { "name": "tags", "description": "Filter sandboxes by tag. Format: \\\"key:value\\\". Only one tag filter is supported at a time.", "in": "query", "required": false, "schema": { "description": "Filter sandboxes by tag. Format: \\\"key:value\\\". Only one tag filter is supported at a time.", "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listNamedSandboxes", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.listNamedSandboxes({\n project: \"prj_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Creates a named sandbox environment. Named sandboxes have a unique name within a project and support automatic snapshotting on shutdown.", "operationId": "createSandboxesV2", "security": [ { "bearerToken": [] } ], "summary": "Create a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "runtime": { "description": "The runtime environment for the sandbox. Determines the pre-installed language runtimes and tools available.", "type": "string", "enum": [ "node22", "node24", "node26", "python3.13" ], "default": "node24", "example": "node24" }, "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "default": 2, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "source": { "description": "The source from which to initialize the sandbox filesystem. Can be a Git repository, a tarball URL, or an existing snapshot.", "oneOf": [ { "type": "object", "description": "Clone a Git repository into the sandbox.", "properties": { "type": { "description": "Indicates the source is a Git repository." }, "url": { "type": "string", "format": "uri", "description": "The URL of the Git repository to clone.", "example": "https://github.com/vercel/next.js.git" }, "username": { "type": "string", "description": "Username for Git authentication. Required together with password for private repositories." }, "password": { "type": "string", "description": "Password or personal access token for Git authentication. Required together with username for private repositories." }, "depth": { "type": "integer", "minimum": 1, "description": "Create a shallow clone with history truncated to the specified number of commits. Useful for faster cloning of large repositories.", "example": 1 }, "revision": { "type": "string", "description": "The specific commit SHA, branch name, or tag to checkout after cloning.", "example": "main" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Download and extract a gzipped tarball into the sandbox.", "properties": { "type": { "description": "Indicates the source is a tarball." }, "url": { "type": "string", "format": "uri", "description": "URL of a gzipped tarball (.tar.gz) to download and extract.", "example": "https://example.com/project.tar.gz" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Restore the sandbox filesystem from an existing snapshot.", "properties": { "type": { "description": "Indicates the source is a snapshot." }, "snapshotId": { "type": "string", "description": "The unique identifier of the snapshot to restore.", "example": "snap_abc123" } }, "required": [ "type", "snapshotId" ], "additionalProperties": false } ] }, "projectId": { "description": "The target project slug or ID in which the sandbox will be assigned to.", "example": "prj_abc123", "type": "string" }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "image": { "type": "string", "maxLength": 255, "description": "Image to use for the sandbox." }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. These are inherited by all commands unless overridden.", "default": {}, "example": { "NODE_ENV": "production", "HELLO": "world" } }, "mounts": { "type": "object", "description": "List of drives to mount to the sandbox at the provided path.", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "networkId": { "type": "string", "maxLength": 255, "description": "The Connect network id for the target Secure Compute private network." }, "name": { "example": "my-sandbox", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores)." }, "persistent": { "description": "Whether the sandbox persists its state across restarts via automatic snapshots. Defaults to true.", "type": "boolean", "default": true }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior.", "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } }, "tags": { "description": "Key-value tags to associate with the sandbox. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } } }, "/v2/sandboxes/drives": { "get": { "description": "Retrieves a paginated list of drives belonging to a specific project. Drives are in private beta. Register your interest to get access: https://vercel.com/changelog/drives-for-vercel-sandbox-in-private-beta", "operationId": "listDrives", "security": [ { "bearerToken": [] } ], "summary": "List drives", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "drives": { "items": { "$ref": "#/components/schemas/Drive" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" } }, "required": [ "drives", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project ID or name associated with the drives. Required unless using a Vercel OIDC token scoped to a project.", "in": "query", "required": false, "schema": { "type": "string", "description": "The project ID or name associated with the drives. Required unless using a Vercel OIDC token scoped to a project.", "example": "prj_abc123" } }, { "name": "limit", "description": "Maximum number of drives to return in the response. Used for pagination.", "in": "query", "required": false, "schema": { "description": "Maximum number of drives to return in the response. Used for pagination.", "type": "number", "minimum": 1, "maximum": 50, "default": 20, "example": 20 } }, { "name": "cursor", "description": "Opaque pagination cursor from a previous response.", "in": "query", "required": false, "schema": { "description": "Opaque pagination cursor from a previous response.", "type": "string" } }, { "name": "sortBy", "description": "Field to sort drives by.", "in": "query", "required": false, "schema": { "description": "Field to sort drives by.", "type": "string", "enum": [ "createdAt", "updatedAt", "name" ], "default": "createdAt" } }, { "name": "namePrefix", "description": "Filter drives whose name starts with this prefix. Only valid when sortBy=name.", "in": "query", "required": false, "schema": { "description": "Filter drives whose name starts with this prefix. Only valid when sortBy=name.", "type": "string" } }, { "name": "sortOrder", "description": "Sort direction for results.", "in": "query", "required": false, "schema": { "description": "Sort direction for results.", "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listDrives", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.listDrives({\n projectId: \"prj_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/drives/{name}": { "post": { "description": "Gets an existing drive by project and name, or creates it when it does not exist. Drives are in private beta. Register your interest to get access: https://vercel.com/changelog/drives-for-vercel-sandbox-in-private-beta", "operationId": "getOrCreateDrive", "security": [ { "bearerToken": [] } ], "summary": "Get or create a drive", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "drive": { "$ref": "#/components/schemas/Drive" } }, "required": [ "drive" ], "type": "object" } } } }, "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "drive": { "$ref": "#/components/schemas/Drive" } }, "required": [ "drive" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "name", "description": "Name for the drive. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "in": "path", "required": true, "schema": { "type": "string", "description": "Name for the drive. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 64, "example": "workspace" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "The project ID or name to associate the drive with. Required unless using a Vercel OIDC token scoped to a project.", "example": "prj_abc123" }, "maxSizeBytes": { "type": "integer", "description": "Maximum drive size in bytes. Defaults to 1 TiB when omitted (1 GiB for Hobby). The maximum quota is 16 TiB. Request a quota above 16 TiB at https://vercel.com/help." }, "region": { "type": "string", "description": "Region where the drive is stored. Defaults to iad1.", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": "iad1", "example": "iad1" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "getOrCreateDrive", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.getOrCreateDrive({\n name: \"workspace\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"prj_abc123\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes a drive by project and name. Attached drives cannot be deleted. Stop or replace the session currently using the drive before retrying deletion. Drives are in private beta. Register your interest to get access: https://vercel.com/changelog/drives-for-vercel-sandbox-in-private-beta", "operationId": "deleteDrive", "security": [ { "bearerToken": [] } ], "summary": "Delete a drive", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "drive": { "$ref": "#/components/schemas/Drive" } }, "required": [ "drive" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "name", "description": "Name for the drive. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "in": "path", "required": true, "schema": { "type": "string", "description": "Name for the drive. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 64, "example": "workspace" } }, { "name": "projectId", "description": "The project ID or name associated with the drive. Required unless using a Vercel OIDC token scoped to a project.", "in": "query", "required": false, "schema": { "type": "string", "description": "The project ID or name associated with the drive. Required unless using a Vercel OIDC token scoped to a project.", "example": "prj_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteDrive", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.deleteDrive({\n name: \"workspace\",\n projectId: \"prj_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/snapshots": { "get": { "description": "Retrieves a paginated list of snapshots for a specific project.", "operationId": "listSessionSnapshots", "security": [ { "bearerToken": [] } ], "summary": "List snapshots", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" }, "snapshots": { "items": { "$ref": "#/components/schemas/Snapshot" }, "type": "array" } }, "required": [ "pagination", "snapshots" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "project", "description": "The unique identifier or name of the project to list snapshots for.", "in": "query", "required": false, "schema": { "description": "The unique identifier or name of the project to list snapshots for.", "type": "string", "example": "prj_abc123" } }, { "name": "name", "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "in": "query", "required": false, "schema": { "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "example": "my-sandbox" } }, { "name": "limit", "description": "Maximum number of snapshots to return in the response. Used for pagination.", "in": "query", "required": false, "schema": { "description": "Maximum number of snapshots to return in the response. Used for pagination.", "type": "number", "minimum": 1, "maximum": 50, "default": 20, "example": 20 } }, { "name": "cursor", "description": "Opaque pagination cursor from a previous response.", "in": "query", "required": false, "schema": { "description": "Opaque pagination cursor from a previous response.", "type": "string" } }, { "name": "sortOrder", "description": "Sort direction for results by creation time.", "in": "query", "required": false, "schema": { "description": "Sort direction for results by creation time.", "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listSessionSnapshots", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.listSessionSnapshots({\n project: \"prj_abc123\",\n name: \"my-sandbox\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/snapshots/{snapshotId}": { "get": { "description": "Retrieves detailed information about a specific snapshot, including its creation time, size, expiration date, and the source session it was created from.", "operationId": "getSessionSnapshot", "security": [ { "bearerToken": [] } ], "summary": "Get a snapshot", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "snapshot": { "$ref": "#/components/schemas/Snapshot" } }, "required": [ "snapshot" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "snapshotId", "description": "The unique identifier of the snapshot to retrieve.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the snapshot to retrieve.", "pattern": "^(?:snap_[A-Za-z0-9]{28}|vhs_[a-z0-9]{28})$", "maxLength": 33, "example": "snap_1234567890123456789012345678" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSessionSnapshot", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.getSessionSnapshot({\n snapshotId: \"snap_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Permanently deletes a snapshot and frees its associated storage. This action cannot be undone. After deletion, the snapshot can no longer be used to create new sessions.", "operationId": "deleteSessionSnapshot", "security": [ { "bearerToken": [] } ], "summary": "Delete a snapshot", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "snapshot": { "$ref": "#/components/schemas/Snapshot" } }, "required": [ "snapshot" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "snapshotId", "description": "The unique identifier of the snapshot to delete.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the snapshot to delete.", "pattern": "^(?:snap_[A-Za-z0-9]{28}|vhs_[a-z0-9]{28})$", "maxLength": 33, "example": "snap_1234567890123456789012345678" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteSessionSnapshot", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.deleteSessionSnapshot({\n snapshotId: \"snap_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions": { "get": { "description": "Retrieves a paginated list of sessions belonging to a specific sandbox. Results are sorted by creation time and paginated using an opaque cursor.", "operationId": "listSessions", "security": [ { "bearerToken": [] } ], "summary": "List sessions", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The list of sessions matching the request filters.", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" } }, "required": [ "count", "next" ], "type": "object" }, "sessions": { "items": { "$ref": "#/components/schemas/Session" }, "type": "array" } }, "required": [ "pagination", "sessions" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "project", "description": "The unique identifier or name of the project to list sessions for.", "in": "query", "required": false, "schema": { "description": "The unique identifier or name of the project to list sessions for.", "type": "string", "example": "prj_abc123" } }, { "name": "name", "description": "Filter sessions by sandbox name. Only sessions belonging to the specified sandbox are returned.", "in": "query", "required": false, "schema": { "description": "Filter sessions by sandbox name. Only sessions belonging to the specified sandbox are returned.", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "example": "my-sandbox" } }, { "name": "limit", "description": "Maximum number of sessions to return in the response. Used for pagination.", "in": "query", "required": false, "schema": { "description": "Maximum number of sessions to return in the response. Used for pagination.", "type": "number", "minimum": 1, "maximum": 50, "default": 20, "example": 20 } }, { "name": "cursor", "description": "Opaque pagination cursor from a previous response.", "in": "query", "required": false, "schema": { "description": "Opaque pagination cursor from a previous response.", "type": "string" } }, { "name": "sortOrder", "description": "Sort direction for results by creation time.", "in": "query", "required": false, "schema": { "description": "Sort direction for results by creation time.", "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listSessions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.listSessions({\n project: \"prj_abc123\",\n name: \"my-sandbox\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}": { "get": { "description": "Retrieves detailed information about a specific session, including its current status, resource configuration, and exposed routes.", "operationId": "getSession", "security": [ { "bearerToken": [] } ], "summary": "Get a session", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The session was retrieved successfully.", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to retrieve.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to retrieve.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSession", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.getSession({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/{name}": { "get": { "description": "Retrieves a named sandbox by name, including its current sandbox and routes. If the sandbox is stopped and resume is true, a new sandbox will be created from the most recent snapshot.", "operationId": "getNamedSandbox", "security": [ { "bearerToken": [] } ], "summary": "Get a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "resumed": { "type": "boolean", "enum": [ false, true ] }, "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "resumed", "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "name": "name", "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "in": "path", "required": true, "schema": { "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores).", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "example": "my-sandbox" } }, { "name": "projectId", "description": "The project ID or name (required when not using OIDC token).", "in": "query", "required": false, "schema": { "type": "string", "description": "The project ID or name (required when not using OIDC token).", "example": "prj_abc123" } }, { "name": "resume", "description": "Whether to automatically resume a stopped named sandbox by creating a new instance from its snapshot. Defaults to false.", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "description": "Whether to automatically resume a stopped named sandbox by creating a new instance from its snapshot. Defaults to false." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getNamedSandbox", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.getNamedSandbox({\n name: \"my-sandbox\",\n projectId: \"prj_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "Updates the configuration of a sandbox. Only the provided fields will be modified; omitted fields remain unchanged.", "operationId": "updateSandbox", "security": [ { "bearerToken": [] } ], "summary": "Update a sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" } }, "required": [ "routes", "sandbox" ], "type": "object" }, { "properties": { "resumed": { "type": "boolean", "enum": [ false, true ] }, "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "resumed", "routes", "sandbox", "session" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "name": "name", "description": "The sandbox to update.", "in": "path", "required": true, "schema": { "type": "string", "description": "The sandbox to update.", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "example": "my-sandbox" } }, { "name": "projectId", "description": "The project ID that owns the named sandbox. When provided, takes precedence over OIDC project context.", "in": "query", "required": false, "schema": { "type": "string", "description": "The project ID that owns the named sandbox. When provided, takes precedence over OIDC project context.", "maxLength": 128 } }, { "name": "resume", "description": "Whether to automatically resume a stopped named sandbox by creating a new instance from its snapshot. Defaults to false.", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "description": "Whether to automatically resume a stopped named sandbox by creating a new instance from its snapshot. Defaults to false." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "runtime": { "description": "The runtime environment for the sandbox. Determines the pre-installed language runtimes and tools available.", "type": "string", "enum": [ "node22", "node24", "node26", "python3.13" ], "example": "node24" }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "persistent": { "type": "boolean", "description": "Whether the sandbox persists its state across restarts via automatic snapshots." }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior. Set to null to clear.", "oneOf": [ { "type": "string" }, { "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } } ] }, "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "mounts": { "description": "Drives to mount to the sandbox at the provided path. Replaces the current mounts; an empty object removes them all. Changes take effect when the next session starts.", "type": "object", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "networkId": { "description": "The Connect network id for the target Secure Compute private network. Set to null to remove the sandbox from Secure Compute.", "oneOf": [ { "type": "string" }, { "type": "string", "maxLength": 255 } ] }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. Set to empty object to clear.", "example": { "NODE_ENV": "production", "HELLO": "world" } }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "currentSnapshotId": { "type": "string", "maxLength": 128, "description": "The snapshot ID to set as the current snapshot. Must be active and belong to the same project." }, "tags": { "description": "Key-value tags to associate with the sandbox. Replaces existing tags. Set to empty object to clear. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } }, "delete": { "description": "Deletes a sandbox by name. If sandboxes are currently running, they will be stopped first. This operation deletes all sandbox entities with the given name and the named sandbox metadata.", "operationId": "deleteSandbox", "security": [ { "bearerToken": [] } ], "summary": "Delete a sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "sandbox": { "$ref": "#/components/schemas/NamedSandbox" } }, "required": [ "sandbox" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "name", "description": "The sandbox name to delete.", "in": "path", "required": true, "schema": { "type": "string", "description": "The sandbox name to delete.", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "example": "my-sandbox" } }, { "name": "projectId", "description": "The project ID that owns the named sandbox. When provided, takes precedence over OIDC project context.", "in": "query", "required": false, "schema": { "type": "string", "description": "The project ID that owns the named sandbox. When provided, takes precedence over OIDC project context.", "maxLength": 128 } }, { "name": "deleteOrphanSnapshots", "description": "When true, snapshots of the deleted sandbox that are not referenced by any other sandbox are also deleted asynchronously. Defaults to false.", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "description": "When true, snapshots of the deleted sandbox that are not referenced by any other sandbox are also deleted asynchronously. Defaults to false." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteSandbox", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.deleteSandbox({\n name: \"my-sandbox\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/cmd": { "get": { "description": "Retrieves a list of all commands that have been executed in a session, including their current status, exit codes, and execution times, ordered from the most recent to the oldest.", "operationId": "listSessionCommands", "security": [ { "bearerToken": [] } ], "summary": "List commands", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The list of commands executed in the session.", "content": { "application/json": { "schema": { "properties": { "commands": { "items": { "$ref": "#/components/schemas/SessionCommand" }, "type": "array" } }, "required": [ "commands" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to list commands for.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to list commands for.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listSessionCommands", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.listSessionCommands({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Executes a shell command inside a running session. The command runs asynchronously and returns immediately with a command ID that can be used to track its progress and retrieve its output. Optionally, use the `wait` parameter to stream the command status until completion.", "operationId": "runSessionCommand", "security": [ { "bearerToken": [] } ], "summary": "Execute a command", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "command": { "$ref": "#/components/schemas/SessionCommand" } }, "required": [ "command" ], "type": "object" } }, "application/x-ndjson": { "schema": { "oneOf": [ { "properties": { "data": { "properties": { "code": { "type": "string", "enum": [ "sandbox_stream_closed" ] }, "message": { "type": "string", "enum": [ "Sandbox stream was closed and is not accepting commands." ] } }, "required": [ "code", "message" ], "type": "object" }, "stream": { "type": "string" } }, "required": [ "data", "stream" ], "type": "object" }, { "properties": { "command": { "$ref": "#/components/schemas/SessionCommand" }, "data": { "type": "string" }, "stream": { "type": "string" } }, "required": [ "command", "data", "stream" ], "type": "object" }, { "oneOf": [ { "properties": { "data": { "properties": { "code": { "type": "string", "enum": [ "sandbox_stream_closed" ] }, "message": { "type": "string", "enum": [ "Sandbox stream was closed and is not accepting commands." ] } }, "required": [ "code", "message" ], "type": "object" }, "stream": { "type": "string" } }, "required": [ "data", "stream" ], "type": "object" }, { "properties": { "data": { "type": "string" }, "stream": { "type": "string" } }, "required": [ "data", "stream" ], "type": "object" } ] } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session in which to execute the command.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session in which to execute the command.", "example": "sbx_abc123" } }, { "name": "cmdId", "description": "The unique identifier of the command to stream logs for.", "in": "query", "required": true, "schema": { "type": "string", "description": "The unique identifier of the command to stream logs for.", "example": "cmd_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "command" ], "properties": { "command": { "type": "string", "description": "The executable or shell command to run. This is the program name without arguments.", "example": "npm" }, "args": { "type": "array", "items": { "type": "string" }, "description": "Arguments to pass to the command. Each argument should be a separate array element.", "example": [ "install", "--save", "lodash" ] }, "cwd": { "type": "string", "description": "The working directory in which to execute the command. Defaults to the sandbox home directory if not specified.", "example": "/home/vercel-sandbox" }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Additional environment variables to set for this command. These are merged with the sandbox environment.", "default": {}, "example": { "NODE_ENV": "production", "DEBUG": "true" } }, "sudo": { "type": "boolean", "description": "Execute the command with root (superuser) privileges.", "default": false }, "wait": { "type": "boolean", "description": "If true, returns an ND-JSON stream that emits the command status when started and again when finished. Useful for synchronously waiting for command completion.", "default": false }, "logs": { "type": "boolean", "description": "If true, stream the logs of the command execution in real-time via ND-JSON. This is only applicable if `wait` is also true.", "default": false }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds the command may run before it is killed with SIGKILL, up to 5 hours. Enforced at exec time, independently of `wait`.", "minimum": 100, "maximum": 1.8e+07, "example": 30000 } } } } } }, "x-speakeasy-test": false } }, "/v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}": { "get": { "description": "Retrieves the current status and details of a command executed in a session. Use the `wait` parameter to block until the command finishes execution.", "operationId": "getSessionCommand", "security": [ { "bearerToken": [] } ], "summary": "Get a command", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The command data along with the exit code if the command did finish.", "content": { "application/json": { "schema": { "properties": { "command": { "$ref": "#/components/schemas/SessionCommand" } }, "required": [ "command" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session containing the command.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session containing the command.", "example": "sbx_abc123" } }, { "name": "cmdId", "description": "The unique identifier of the command to retrieve.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the command to retrieve.", "example": "cmd_abc123" } }, { "name": "wait", "description": "If set to \"true\", the request will block until the command finishes execution. Useful for synchronously waiting for command completion.", "in": "query", "required": false, "schema": { "type": "string", "description": "If set to \"true\", the request will block until the command finishes execution. Useful for synchronously waiting for command completion.", "enum": [ "true", "false" ], "default": "false" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSessionCommand", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.getSessionCommand({\n sessionId: \"sbx_abc123\",\n cmdId: \"cmd_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}/kill": { "post": { "description": "Sends a signal to terminate a running command in a session. The signal can be used to gracefully stop (SIGTERM) or forcefully kill (SIGKILL) the process. The command must still be running for this operation to succeed.", "operationId": "killSessionCommand", "security": [ { "bearerToken": [] } ], "summary": "Kill a command", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The command was terminated successfully.", "content": { "application/json": { "schema": { "properties": { "command": { "$ref": "#/components/schemas/SessionCommand" } }, "required": [ "command" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "cmdId", "description": "The unique identifier of the command to terminate.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the command to terminate.", "example": "cmd_abc123" } }, { "name": "sessionId", "description": "The unique identifier of the session containing the command.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session containing the command.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "signal" ], "properties": { "signal": { "type": "number", "description": "The POSIX signal number to send to the process. Common values: 15 (SIGTERM) for graceful termination, 9 (SIGKILL) for forced termination.", "example": 15 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "killSessionCommand", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.killSessionCommand({\n cmdId: \"cmd_abc123\",\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n signal: 15,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}/logs": { "get": { "description": "Streams the output of a command in real-time using newline-delimited JSON (ND-JSON). Each entry includes the output data and stream type. Stream types include `stdout`, `stderr`, and `error` (for stream failures).", "operationId": "getSessionCommandLogs", "security": [ { "bearerToken": [] } ], "summary": "Stream command logs", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/x-ndjson": { "schema": { "oneOf": [ { "properties": { "data": { "properties": { "code": { "type": "string", "enum": [ "sandbox_stream_closed" ] }, "message": { "type": "string", "enum": [ "Sandbox stream was closed and is not accepting commands." ] } }, "required": [ "code", "message" ], "type": "object" }, "stream": { "type": "string" } }, "required": [ "data", "stream" ], "type": "object" }, { "properties": { "data": { "type": "string" }, "stream": { "type": "string" } }, "required": [ "data", "stream" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session containing the command.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session containing the command.", "example": "sbx_abc123" } }, { "name": "cmdId", "description": "The unique identifier of the command to stream logs for.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the command to stream logs for.", "example": "cmd_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ] } }, "/v2/sandboxes/sessions/{sessionId}/stop": { "post": { "description": "Stops a running session and releases its allocated resources. All running processes within the session will be terminated. This action cannot be undone. A stopped session cannot be restarted.", "operationId": "stopSession", "security": [ { "bearerToken": [] } ], "summary": "Stop a session", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The session was stopped successfully.", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "session" ], "type": "object" }, { "properties": { "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" }, "snapshot": { "$ref": "#/components/schemas/Snapshot" } }, "required": [ "sandbox", "session", "snapshot" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to stop.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to stop.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "stopSession", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.stopSession({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/extend-timeout": { "post": { "description": "Extends the maximum execution time of a running session. The session must be active and able to accept commands. The total timeout cannot exceed the maximum allowed limit for your account.", "operationId": "extendSessionTimeout", "security": [ { "bearerToken": [] } ], "summary": "Extend session timeout", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The session timeout was extended successfully.", "content": { "application/json": { "schema": { "properties": { "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to extend the timeout for.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to extend the timeout for.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "duration" ], "properties": { "duration": { "type": "number", "description": "The amount of time in milliseconds to add to the current timeout. Must be at least 1000ms (1 second).", "minimum": 1000, "example": 300000 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "extendSessionTimeout", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.extendSessionTimeout({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n duration: 300000,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/network-policy": { "post": { "description": "Replaces the network access policy of a running session. Use this to control which external hosts the session can communicate with. This is a full replacement. Any previously configured network rules will be overwritten.", "operationId": "updateSessionNetworkPolicy", "security": [ { "bearerToken": [] } ], "summary": "Update network policy", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The session network policy was updated successfully.", "content": { "application/json": { "schema": { "properties": { "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to update the network policy for.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to update the network policy for.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } }, "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ] }, { "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } }, "type": "object", "additionalProperties": false } ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateSessionNetworkPolicy", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.updateSessionNetworkPolicy({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n mode: \"custom\",\n allowedDomains: [\n \"api.github.com\",\n \"*.npmjs.org\",\n ],\n allowedCIDRs: [\n \"35.192.0.0/12\",\n \"104.16.0.0/12\",\n ],\n deniedCIDRs: [\n \"35.192.0.0/12\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/fs/read": { "post": { "description": "Downloads the contents of a file from a session's filesystem. The file content is returned as a binary stream with appropriate Content-Disposition headers for file download.", "operationId": "readSessionFile", "security": [ { "bearerToken": [] } ], "summary": "Read a file", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to read the file from.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to read the file from.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "path" ], "properties": { "cwd": { "description": "The base directory for resolving relative paths. If not specified, paths are resolved from the sandbox home directory.", "type": "string", "example": "/home/vercel-sandbox" }, "path": { "description": "The path of the file to read. Can be absolute or relative to the working directory.", "type": "string", "example": "dist/agent-output.md" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "readSessionFile", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.readSessionFile({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n cwd: \"/home/vercel-sandbox\",\n path: \"dist/agent-output.md\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/fs/mkdir": { "post": { "description": "Creates a new directory in a session's filesystem. By default, parent directories are created recursively if they don't exist (similar to `mkdir -p`).", "operationId": "createSessionDirectory", "security": [ { "bearerToken": [] } ], "summary": "Create a directory", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The directory was created successfully.", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to create the directory in.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to create the directory in.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "path" ], "properties": { "cwd": { "description": "The base directory for resolving relative paths. If not specified, paths are resolved from the sandbox home directory.", "type": "string", "example": "/home/vercel-sandbox" }, "path": { "description": "The path of the directory to create. Can be absolute or relative to the working directory.", "type": "string", "example": "src/components" }, "recursive": { "description": "If true, creates parent directories as needed (like `mkdir -p`). If false, fails if parent directories do not exist.", "type": "boolean", "default": true } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSessionDirectory", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.createSessionDirectory({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n cwd: \"/home/vercel-sandbox\",\n path: \"src/components\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/fs/write": { "post": { "description": "Uploads and extracts files to a session's filesystem. Files must be uploaded as a gzipped tarball (`.tar.gz`) with the `Content-Type` header set to `application/gzip`. The tarball contents are extracted to the session's working directory, or to a custom directory specified via the `x-cwd` header.", "operationId": "writeSessionFiles", "security": [ { "bearerToken": [] } ], "summary": "Write files", "tags": [ "sandboxes" ], "responses": { "200": { "description": "The files were successfully written to the session.", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid.\nOne of the provided values in the headers is invalid" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "in": "header", "description": "The target directory where the tarball contents will be extracted. If not specified, files are extracted to the sandbox home directory.", "schema": { "type": "string", "description": "The target directory where the tarball contents will be extracted. If not specified, files are extracted to the sandbox home directory.", "example": "/home/vercel-sandbox" }, "name": "x-cwd" }, { "name": "sessionId", "description": "The unique identifier of the session to write files to.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to write files to.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "writeSessionFiles", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.writeSessionFiles({\n xCwd: \"/home/vercel-sandbox\",\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/sessions/{sessionId}/snapshot": { "post": { "description": "Creates a point-in-time snapshot of a running session's filesystem. Snapshots can be used to quickly restore a session to a previous state or to create new sessions with pre-configured environments. The session must be running and able to accept commands for a snapshot to be created. The session will be terminated after the snapshot is created.", "operationId": "createSandboxesSessionsBySessionIdSnapshotV2", "security": [ { "bearerToken": [] } ], "summary": "Create a snapshot", "tags": [ "sandboxes" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "session": { "$ref": "#/components/schemas/Session" }, "snapshot": { "$ref": "#/components/schemas/Snapshot" } }, "required": [ "session", "snapshot" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to snapshot.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to snapshot.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "expiration": { "description": "The number of milliseconds after which the snapshot will expire and be deleted. Use 0 for no expiration.", "oneOf": [ {}, { "type": "integer" } ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSandboxesSessionsBySessionIdSnapshotV2", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.createSandboxesSessionsBySessionIdSnapshotV2({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/sandboxes/{name}/fork": { "post": { "description": "Forks a named sandbox, creating a new named sandbox from the source's configuration. Resources, timeout, ports, tags, network policy, mounts, Connect network, image, persistence, snapshot settings and — unlike the SDK-side fork — environment variables are copied from the source automatically (`interactive` is not). When the source has a snapshot the fork starts from it; otherwise it starts from the source's runtime/image. Any field provided in the request body overrides the value copied from the source.", "operationId": "createSandboxesByNameForkV2", "security": [ { "bearerToken": [] } ], "summary": "Fork a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "name": "name", "description": "Name of the source sandbox to fork.", "in": "path", "required": true, "schema": { "description": "Name of the source sandbox to fork.", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128 } }, { "name": "projectId", "description": "The ID of the project the source sandbox belongs to. Required unless authenticating with an OIDC token.", "in": "query", "required": false, "schema": { "description": "The ID of the project the source sandbox belongs to. Required unless authenticating with an OIDC token.", "type": "string", "maxLength": 128 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "default": 2, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "image": { "type": "string", "maxLength": 255, "description": "Image to use for the sandbox." }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. These are inherited by all commands unless overridden.", "default": {}, "example": { "NODE_ENV": "production", "HELLO": "world" } }, "mounts": { "type": "object", "description": "List of drives to mount to the sandbox at the provided path.", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "networkId": { "type": "string", "maxLength": 255, "description": "The Connect network id for the target Secure Compute private network." }, "name": { "example": "my-sandbox-fork", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "description": "Name for the forked sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores). A random name is generated when omitted." }, "persistent": { "description": "Whether the sandbox persists its state across restarts via automatic snapshots. Defaults to the source sandbox setting.", "type": "boolean" }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior.", "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } }, "tags": { "description": "Key-value tags to associate with the sandbox. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } } }, "/v3/sandboxes": { "post": { "description": "Creates a named sandbox environment. Named sandboxes have a unique name within a project and support automatic snapshotting on shutdown. Unlike v2, this version has no `runtime` parameter: when no `image` is provided (and the sandbox is not restored from a snapshot), the sandbox is created from the default universal image.", "operationId": "createSandboxesV3", "security": [ { "bearerToken": [] } ], "summary": "Create a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "default": 2, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "source": { "description": "The source from which to initialize the sandbox filesystem. Can be a Git repository, a tarball URL, or an existing snapshot.", "oneOf": [ { "type": "object", "description": "Clone a Git repository into the sandbox.", "properties": { "type": { "description": "Indicates the source is a Git repository." }, "url": { "type": "string", "format": "uri", "description": "The URL of the Git repository to clone.", "example": "https://github.com/vercel/next.js.git" }, "username": { "type": "string", "description": "Username for Git authentication. Required together with password for private repositories." }, "password": { "type": "string", "description": "Password or personal access token for Git authentication. Required together with username for private repositories." }, "depth": { "type": "integer", "minimum": 1, "description": "Create a shallow clone with history truncated to the specified number of commits. Useful for faster cloning of large repositories.", "example": 1 }, "revision": { "type": "string", "description": "The specific commit SHA, branch name, or tag to checkout after cloning.", "example": "main" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Download and extract a gzipped tarball into the sandbox.", "properties": { "type": { "description": "Indicates the source is a tarball." }, "url": { "type": "string", "format": "uri", "description": "URL of a gzipped tarball (.tar.gz) to download and extract.", "example": "https://example.com/project.tar.gz" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Restore the sandbox filesystem from an existing snapshot.", "properties": { "type": { "description": "Indicates the source is a snapshot." }, "snapshotId": { "type": "string", "description": "The unique identifier of the snapshot to restore.", "example": "snap_abc123" } }, "required": [ "type", "snapshotId" ], "additionalProperties": false } ] }, "projectId": { "description": "The target project slug or ID in which the sandbox will be assigned to.", "example": "prj_abc123", "type": "string" }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "image": { "type": "string", "maxLength": 255, "description": "Image to use for the sandbox." }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. These are inherited by all commands unless overridden.", "default": {}, "example": { "NODE_ENV": "production", "HELLO": "world" } }, "mounts": { "type": "object", "description": "List of drives to mount to the sandbox at the provided path.", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "networkId": { "type": "string", "maxLength": 255, "description": "The Connect network id for the target Secure Compute private network." }, "name": { "example": "my-sandbox", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores)." }, "persistent": { "description": "Whether the sandbox persists its state across restarts via automatic snapshots. Defaults to true.", "type": "boolean", "default": true }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior.", "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } }, "tags": { "description": "Key-value tags to associate with the sandbox. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } } }, "/v3/sandboxes/sessions/{sessionId}/snapshot": { "post": { "description": "Creates a point-in-time snapshot of a running session's filesystem. Snapshots can be used to quickly restore a session to a previous state or to create new sessions with pre-configured environments. The session must be running and able to accept commands for a snapshot to be created. The session will be terminated after the snapshot is created. Unlike v2, snapshots expire after 7 days when neither the request nor the sandbox configuration specifies an expiration.", "operationId": "createSandboxesSessionsBySessionIdSnapshotV3", "security": [ { "bearerToken": [] } ], "summary": "Create a snapshot", "tags": [ "sandboxes" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "properties": { "session": { "$ref": "#/components/schemas/Session" }, "snapshot": { "$ref": "#/components/schemas/Snapshot" } }, "required": [ "session", "snapshot" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "sessionId", "description": "The unique identifier of the session to snapshot.", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique identifier of the session to snapshot.", "example": "sbx_abc123" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "expiration": { "description": "The number of milliseconds after which the snapshot will expire and be deleted. Defaults to 7 days when neither this field nor the sandbox configuration specifies an expiration. Use 0 for no expiration.", "oneOf": [ {}, { "type": "integer" } ] } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSandboxesSessionsBySessionIdSnapshotV3", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.sandboxes.createSandboxesSessionsBySessionIdSnapshotV3({\n sessionId: \"sbx_abc123\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v3/sandboxes/{name}/fork": { "post": { "description": "Forks a named sandbox, creating a new named sandbox from the source's configuration. Resources, timeout, ports, tags, network policy, mounts, Connect network, image, persistence, snapshot settings and — unlike the SDK-side fork — environment variables are copied from the source automatically (`interactive` is not). When the source has a snapshot the fork starts from it; otherwise it starts from the source's runtime/image. Any field provided in the request body overrides the value copied from the source. Unlike v2, when neither the body nor the source provides a value, snapshots expire after 7 days by default and persistent sandboxes keep only their most recent snapshot (`keepLastSnapshots: null` disables the limit).", "operationId": "createSandboxesByNameForkV3", "security": [ { "bearerToken": [] } ], "summary": "Fork a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "name": "name", "description": "Name of the source sandbox to fork.", "in": "path", "required": true, "schema": { "description": "Name of the source sandbox to fork.", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128 } }, { "name": "projectId", "description": "The ID of the project the source sandbox belongs to. Required unless authenticating with an OIDC token.", "in": "query", "required": false, "schema": { "description": "The ID of the project the source sandbox belongs to. Required unless authenticating with an OIDC token.", "type": "string", "maxLength": 128 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "default": 2, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "image": { "type": "string", "maxLength": 255, "description": "Image to use for the sandbox." }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. These are inherited by all commands unless overridden.", "default": {}, "example": { "NODE_ENV": "production", "HELLO": "world" } }, "mounts": { "type": "object", "description": "List of drives to mount to the sandbox at the provided path.", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "networkId": { "type": "string", "maxLength": 255, "description": "The Connect network id for the target Secure Compute private network." }, "name": { "example": "my-sandbox-fork", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "description": "Name for the forked sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores). A random name is generated when omitted." }, "persistent": { "description": "Whether the sandbox persists its state across restarts via automatic snapshots. Defaults to the source sandbox setting.", "type": "boolean" }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Defaults to 7 days. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior. Persistent sandboxes default to keeping only the last snapshot (evicted snapshots are deleted). Set to null to disable the limit.", "oneOf": [ { "type": "string" }, { "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } } ] }, "tags": { "description": "Key-value tags to associate with the sandbox. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } } }, "/v4/sandboxes": { "post": { "description": "Creates a named sandbox environment. Named sandboxes have a unique name within a project and support automatic snapshotting on shutdown. When no `image` is provided (and the sandbox is not restored from a snapshot), the sandbox is created from the default universal image. Unlike v3, snapshots expire after 7 days by default and persistent sandboxes keep only their most recent snapshot unless `keepLastSnapshots` is configured otherwise (or set to `null` to disable the limit).", "operationId": "createSandboxesV4", "security": [ { "bearerToken": [] } ], "summary": "Create a named sandbox", "tags": [ "sandboxes" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "routes": { "items": { "$ref": "#/components/schemas/SandboxPublicRoute" }, "type": "array" }, "sandbox": { "$ref": "#/components/schemas/NamedSandbox" }, "session": { "$ref": "#/components/schemas/Session" } }, "required": [ "routes", "sandbox", "session" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "422": { "description": "" }, "429": { "description": "The concurrency limit has been exceeded." }, "500": { "description": "" }, "502": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "networkPolicy": { "oneOf": [ { "description": "Network access policy for the sandbox.\\n Controls which external hosts the sandbox can communicate with.\\n Use \\\"allow-all\\\" mode to allow all traffic, \\\"deny-all\\\" to block all traffic or \\\"custom\\\" to provide specific rules.", "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "description": "The network access policy mode. Use \\\"allow-all\\\" to permit all outbound traffic. Use \\\"deny-all\\\" to block all outbound traffic. Use \\\"custom\\\" to specify explicit allow/deny rules.", "type": "string", "enum": [ "allow-all", "deny-all", "custom", "default-allow", "default-deny" ], "example": "custom" }, "allowedDomains": { "description": "List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\"custom\\\". Supports wildcard patterns (e.g., \\\"*.example.com\\\" matches all subdomains).", "type": "array", "example": [ "api.github.com", "*.npmjs.org" ], "items": { "type": "string", "description": "A domain name pattern. Use \\\"*\\\" for wildcard matching of subdomains (e.g., \\\"*.example.com\\\")." } }, "allowedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.", "type": "array", "example": [ "35.192.0.0/12", "104.16.0.0/12" ], "items": { "type": "string", "description": "An IPv4 address range in CIDR notation (e.g., \\\"35.192.0.0/12\\\")." } }, "deniedCIDRs": { "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "type": "array", "example": [ "35.192.0.0/12" ], "items": { "type": "string", "description": "An IP address range in CIDR notation to block." } }, "injectionRules": { "description": "HTTP header injection rules for outgoing requests matching specific domains. Traffic to matching domains will be intercepted instead of proxied through encrypted connections.", "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "domain", "headers" ], "properties": { "domain": { "description": "The domain (or pattern) of requests to add headers for. Supports wildcards like *.example.com.", "type": "string" }, "headers": { "description": "HTTP headers to inject into requests for this domain. Existing headers with the same name will be overridden.", "type": "object", "additionalProperties": { "type": "string" } }, "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } } } } } } }, { "type": "object", "additionalProperties": false, "properties": { "allow": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "description": "A rule applied to requests matching a domain in the network policy. Only one of `transform`, `forwardURL`, or `response` can be specified per rule.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "match": { "description": "Optional L7 match. When provided, the injection rule only applies to requests that satisfy every specified dimension. When multiple injection rules target the same domain they are evaluated in order and the first match wins; a rule without `match` matches any request and shadows later rules for the same domain.", "type": "object", "additionalProperties": false, "properties": { "path": { "description": "Match on the request path. Comparison is case-sensitive.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "method": { "type": "array", "description": "HTTP methods to match. Any single match succeeds (OR semantics).", "items": { "type": "string" } }, "queryString": { "type": "array", "description": "Query-string entry matchers. Multiple entries are ANDed. Query parameter names and values are both compared case-sensitively (RFC 3986). When a request has multiple values for the same key, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } }, "headers": { "type": "array", "description": "Header matchers. Multiple entries are ANDed. Header names are compared case-insensitively (RFC 9110); header values are compared case-sensitively. When a request has multiple values for the same header, any matching value satisfies the matcher.", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "description": "Matcher for the entry key (header name or query key).", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } }, "value": { "description": "Matcher for the entry value.", "type": "object", "additionalProperties": false, "properties": { "exact": { "type": "string", "description": "Match the value exactly. Case-sensitive for paths, header values, and methods; case-insensitive for domains and header keys." }, "startsWith": { "type": "string", "description": "Match values that start with the given prefix." } } } } } } } }, "transform": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "headers": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "forwardURL": { "type": "string", "description": "HTTP/1.1 proxy URL to forward traffic to. Must not include username, password, query string, or fragment." }, "response": { "description": "Answer matching requests from the proxy with this response instead of forwarding them to the origin. Combine with a `match` on an earlier rule to allow one sub-path and reject the rest of a domain.", "type": "object", "additionalProperties": false, "required": [ "statusCode" ], "properties": { "statusCode": { "type": "integer", "minimum": 200, "maximum": 599, "description": "HTTP status code returned to the sandbox." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "HTTP response headers. Framing and hop-by-hop headers are managed by the proxy and cannot be set." }, "body": { "type": "string", "description": "UTF-8 response body. Requires `contentType`." }, "contentType": { "type": "string", "description": "Value of the `Content-Type` response header. Required when `body` is set." } } } } } } } ] }, "subnets": { "type": "object", "additionalProperties": false, "properties": { "allow": { "type": "array", "items": { "type": "string" } }, "deny": { "type": "array", "items": { "type": "string" } } } } } } ] }, "resources": { "description": "Resources to define the VM", "additionalProperties": false, "type": "object", "properties": { "vcpus": { "description": "The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.", "type": "integer", "minimum": 1, "default": 2, "example": 2 }, "memory": { "description": "The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.", "type": "integer", "minimum": 2048, "example": 4096 } } }, "source": { "description": "The source from which to initialize the sandbox filesystem. Can be a Git repository, a tarball URL, or an existing snapshot.", "oneOf": [ { "type": "object", "description": "Clone a Git repository into the sandbox.", "properties": { "type": { "description": "Indicates the source is a Git repository." }, "url": { "type": "string", "format": "uri", "description": "The URL of the Git repository to clone.", "example": "https://github.com/vercel/next.js.git" }, "username": { "type": "string", "description": "Username for Git authentication. Required together with password for private repositories." }, "password": { "type": "string", "description": "Password or personal access token for Git authentication. Required together with username for private repositories." }, "depth": { "type": "integer", "minimum": 1, "description": "Create a shallow clone with history truncated to the specified number of commits. Useful for faster cloning of large repositories.", "example": 1 }, "revision": { "type": "string", "description": "The specific commit SHA, branch name, or tag to checkout after cloning.", "example": "main" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Download and extract a gzipped tarball into the sandbox.", "properties": { "type": { "description": "Indicates the source is a tarball." }, "url": { "type": "string", "format": "uri", "description": "URL of a gzipped tarball (.tar.gz) to download and extract.", "example": "https://example.com/project.tar.gz" } }, "required": [ "type", "url" ], "additionalProperties": false }, { "type": "object", "description": "Restore the sandbox filesystem from an existing snapshot.", "properties": { "type": { "description": "Indicates the source is a snapshot." }, "snapshotId": { "type": "string", "description": "The unique identifier of the snapshot to restore.", "example": "snap_abc123" } }, "required": [ "type", "snapshotId" ], "additionalProperties": false } ] }, "projectId": { "description": "The target project slug or ID in which the sandbox will be assigned to.", "example": "prj_abc123", "type": "string" }, "ports": { "description": "List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.", "type": "array", "maxItems": 15, "uniqueItems": true, "example": [ 3000, 4000 ], "items": { "type": "integer", "description": "A port number to expose from the sandbox. Must be between 1024 and 65535.", "not": { "enum": [ 23456 ] }, "maximum": 65535, "minimum": 1024 } }, "image": { "type": "string", "maxLength": 255, "description": "Image to use for the sandbox." }, "timeout": { "type": "integer", "description": "Maximum duration in milliseconds that the sandbox can run before being automatically stopped.", "minimum": 1000, "example": 300000 }, "env": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Default environment variables for the sandbox. These are inherited by all commands unless overridden.", "default": {}, "example": { "NODE_ENV": "production", "HELLO": "world" } }, "mounts": { "type": "object", "description": "List of drives to mount to the sandbox at the provided path.", "maxProperties": 4, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "drive" ], "properties": { "drive": { "type": "string", "description": "Name of the drive to mount. The drive must already exist.", "maxLength": 64, "pattern": "^[a-zA-Z0-9_-]+$" }, "mode": { "type": "string", "description": "Mount the drive as read-write, or as a read-only snapshot. One writer is permitted at a time.", "default": "read-write", "enum": [ "snapshot", "read-write" ] } } } }, "region": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "default": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ], "description": "The Vercel region in which to create the sandbox.", "example": "iad1" }, "failoverRegions": { "type": "array", "maxItems": 19, "uniqueItems": true, "items": { "type": "string", "enum": [ "iad1", "sfo1", "cle1", "cdg1", "fra1", "arn1", "sin1", "pdx1", "lhr1", "icn1", "bom1", "cpt1", "dub1", "gru1", "hkg1", "syd1", "yul1", "hnd1", "kix1" ] }, "description": "The regions the sandbox falls back to when it cannot be created in `region`.", "example": [ "sfo1", "cle1" ] }, "networkId": { "type": "string", "maxLength": 255, "description": "The Connect network id for the target Secure Compute private network." }, "name": { "example": "my-sandbox", "type": "string", "pattern": "^[a-zA-Z0-9_-]+$", "maxLength": 128, "description": "Name for the sandbox. Must be unique per project and URL-safe (alphanumeric, hyphens, underscores)." }, "persistent": { "description": "Whether the sandbox persists its state across restarts via automatic snapshots. Defaults to true.", "type": "boolean", "default": true }, "snapshotExpiration": { "description": "Default snapshot expiration time in milliseconds. Defaults to 7 days. Set to 0 to disable expiration. When set, this value is used as the default expiration for all snapshots created for this sandbox.", "oneOf": [ {}, { "type": "integer" } ], "example": 604800000 }, "keepLastSnapshots": { "description": "Protect the N most recent snapshots with different expiration/deletion behavior. Persistent sandboxes default to keeping only the last snapshot (evicted snapshots are deleted). Set to null to disable the limit.", "oneOf": [ { "type": "string" }, { "type": "object", "additionalProperties": false, "required": [ "count" ], "properties": { "count": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Number of most recent snapshots to keep." }, "expiration": { "description": "Expiration time in milliseconds for kept snapshots. Falls back to snapshotExpiration.", "oneOf": [ {}, { "type": "integer" } ] }, "deleteEvicted": { "type": "boolean", "description": "Whether to immediately delete evicted snapshots. Defaults to true." } } } ] }, "tags": { "description": "Key-value tags to associate with the sandbox. Maximum 5 tags.", "type": "object", "maxProperties": 5, "additionalProperties": { "type": "string", "maxLength": 256 }, "example": { "env": "staging", "team": "platform" } } } } } } } } }, "/v1/security/attack-mode": { "post": { "description": "Update the setting for determining if the project has Attack Challenge mode enabled.", "operationId": "updateAttackChallengeMode", "security": [ { "bearerToken": [] } ], "summary": "Update Attack Challenge mode", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "attackModeUpdatedAt": { "type": "number" } }, "required": [ "attackModeEnabled", "attackModeUpdatedAt" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "oneOf": [ { "required": [ "projectId", "attackModeEnabled", "attackModeActiveUntil" ], "properties": { "projectId": { "type": "string" }, "attackModeEnabled": { "type": "boolean" }, "attackModeActiveUntil": { "type": "number" } } }, { "type": "object", "required": [ "projectId", "attackModeEnabled" ], "properties": { "projectId": { "type": "string" }, "attackModeEnabled": { "type": "boolean" } } } ] } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateAttackChallengeMode", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.updateAttackChallengeMode({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"\",\n attackModeEnabled: false,\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateAttackChallengeMode", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Security.UpdateAttackChallengeMode(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/security/firewall/config": { "get": { "description": "Lists WAF configs for a project", "operationId": "getSecurityFirewallConfig", "security": [], "summary": "Returns activated WAF config", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "active": { "nullable": true, "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" }, "draft": { "nullable": true, "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" }, "versions": { "items": { "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" }, "type": "array" } }, "required": [ "active", "draft", "versions" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [], "x-codeSamples": [ { "lang": "typescript", "label": "getSecurityFirewallConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.security.getSecurityFirewallConfig();\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Set the firewall configuration to provided rules and settings. Creates or overwrite the existing firewall configuration.", "operationId": "putFirewallConfig", "security": [ { "bearerToken": [] } ], "summary": "Put Firewall Configuration", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "active": { "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Generic Attack - Provide broad protection from various undefined or novel attack vectors." }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Java Attack - Mitigate risks of exploitation targeting Java-based applications or components." }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Local File Inclusion Attack - Prevent unauthorized access to local files through web applications." }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding." }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "PHP Attack - Safeguard against vulnerability exploits in PHP-based applications." }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands." }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files." }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools." }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs." }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases." }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "XSS Attack - Prevent injection of malicious scripts into trusted webpages." } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object", "description": "Custom Ruleset" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" } }, "required": [ "active" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "firewallEnabled": { "type": "boolean" }, "managedRules": { "type": "object" }, "crs": { "type": "object", "properties": { "sd": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools." }, "ma": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding." }, "lfi": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Local File Inclusion Attack - Prevent unauthorized access to local files through web applications." }, "rfi": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files." }, "rce": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands." }, "php": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "PHP Attack - Safeguard against vulnerability exploits in PHP-based applications." }, "gen": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Generic Attack - Provide broad protection from various undefined or novel attack vectors." }, "xss": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "XSS Attack - Prevent injection of malicious scripts into trusted webpages." }, "sqli": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases." }, "sf": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs." }, "java": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false, "description": "Java Attack - Mitigate risks of exploitation targeting Java-based applications or components." } }, "additionalProperties": false, "description": "Custom Ruleset" }, "rules": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ], "description": "[Parameter](https://vercel.com/docs/security/vercel-waf/rule-configuration#parameters) from the incoming traffic." }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "log", "challenge", "deny", "bypass", "rate_limit", "redirect" ] }, "rateLimit": { "anyOf": [ { "type": "object", "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "window": { "type": "number" }, "limit": { "type": "number" }, "keys": { "type": "array", "items": { "type": "string" } }, "action": { "anyOf": [ { "type": "string", "enum": [ "log", "challenge", "deny", "rate_limit" ] }, {} ], "nullable": true } }, "required": [ "algo", "window", "limit", "keys" ], "additionalProperties": false }, {} ], "nullable": true }, "redirect": { "anyOf": [ { "type": "object", "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean" } }, "required": [ "location", "permanent" ], "additionalProperties": false }, {} ], "nullable": true }, "actionDuration": { "type": "string", "nullable": true }, "bypassSystem": { "type": "boolean", "nullable": true }, "logHeaders": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup", "action" ], "additionalProperties": false } }, "rulesets": { "anyOf": [ { "type": "array", "maxItems": 25, "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "deny", "challenge", "log" ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup" ], "additionalProperties": false } }, { "type": "object", "maxProperties": 25, "additionalProperties": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "deny", "challenge", "log", "allow" ] } }, "required": [ "action" ], "additionalProperties": false } } ] }, "ips": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "hostname": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" }, "action": { "type": "string", "enum": [ "deny", "challenge", "log", "bypass" ] } }, "required": [ "hostname", "ip", "action" ], "additionalProperties": false } }, "botIdEnabled": { "type": "boolean" }, "logHeaders": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "firewallEnabled" ], "additionalProperties": false } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "putFirewallConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.putFirewallConfig({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n firewallEnabled: true,\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "putFirewallConfig", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Security.PutFirewallConfig(ctx, \"\", nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "patch": { "description": "Process updates to modify the existing firewall config for a project", "operationId": "updateFirewallConfig", "security": [ { "bearerToken": [] } ], "summary": "Update Firewall Configuration", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "description": "Add a ruleset", "type": "object", "properties": { "action": { "type": "string", "enum": [ "firewallEnabled" ] }, "id": { "nullable": true }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "deny", "challenge", "log" ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup" ], "additionalProperties": false } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Update a ruleset", "type": "object", "properties": { "action": { "type": "string", "enum": [ "rules.insert" ] }, "id": { "nullable": true }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "deny", "challenge", "log" ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Remove a ruleset", "type": "object", "properties": { "action": { "type": "string", "enum": [ "rules.update" ] }, "id": { "type": "string" }, "value": { "type": "string" } }, "required": [ "action", "id" ], "additionalProperties": false }, { "description": "Reorder a ruleset", "type": "object", "properties": { "action": { "type": "string", "enum": [ "rules.remove" ] }, "id": { "type": "string" }, "value": { "nullable": true } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Add a named condition", "type": "object", "properties": { "action": { "type": "string", "enum": [ "rules.priority" ] }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup" ], "additionalProperties": false } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Update a named condition", "type": "object", "properties": { "action": { "type": "string", "enum": [ "crs.update" ] }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Remove a named condition", "type": "object", "properties": { "action": { "type": "string", "enum": [ "crs.disable" ] }, "id": { "nullable": true }, "value": { "nullable": true } }, "required": [ "action", "id" ], "additionalProperties": false }, { "description": "Set the action for a consumed ruleset (project scope)", "type": "object", "properties": { "action": { "type": "string", "enum": [ "ip.insert" ] }, "id": { "maxLength": 180, "nullable": true }, "value": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "deny", "challenge", "log", "allow" ] } }, "required": [ "action" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Remove the action for a consumed ruleset (project scope)", "type": "object", "properties": { "action": { "type": "string", "enum": [ "ip.update" ] }, "id": { "type": "string", "maxLength": 180 }, "value": { "type": "string" } }, "required": [ "action", "id" ], "additionalProperties": false }, { "description": "Enable Firewall", "type": "object", "properties": { "action": { "type": "string", "enum": [ "ip.remove" ] }, "id": { "type": "string" }, "value": { "nullable": true } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Add a custom rule", "type": "object", "properties": { "action": { "type": "string", "enum": [ "managedRules.update" ] }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "log", "challenge", "deny", "bypass", "rate_limit", "redirect" ] }, "rateLimit": { "anyOf": [ { "type": "object", "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "window": { "type": "number" }, "limit": { "type": "number" }, "keys": { "type": "array", "items": { "type": "string" } }, "action": { "anyOf": [ { "type": "string", "enum": [ "log", "challenge", "deny", "rate_limit" ] }, { "type": "string" } ] } }, "required": [ "algo", "window", "limit", "keys" ], "additionalProperties": false }, { "type": "string" } ] }, "redirect": { "anyOf": [ { "type": "object", "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean" } }, "required": [ "location", "permanent" ], "additionalProperties": false }, { "type": "string" } ] }, "actionDuration": { "type": "string", "nullable": true }, "bypassSystem": { "type": "boolean", "nullable": true }, "logHeaders": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup", "action" ], "additionalProperties": false } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Update a custom rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 160 }, "description": { "type": "string", "maxLength": 256 }, "active": { "type": "boolean" }, "conditionGroup": { "type": "array", "items": { "type": "object", "properties": { "conditions": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "host", "path", "method", "header", "query", "cookie", "target_path", "route", "raw_path", "ip_address", "region", "protocol", "scheme", "environment", "domain_environment", "user_agent", "geo_continent", "geo_country", "geo_country_region", "geo_city", "geo_as_number", "ja4_digest", "ja3_digest", "rate_limit_api_id", "server_action", "bot_name", "bot_category", "bot_status", "bot_protection", "shared_condition", "traffic_source", "ruleset" ] }, "op": { "type": "string", "enum": [ "re", "eq", "neq", "ex", "nex", "inc", "ninc", "pre", "suf", "sub", "gt", "gte", "lt", "lte", "list" ] }, "neg": { "type": "boolean" }, "key": { "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 75 }, { "type": "number" } ] } }, "required": [ "type", "op" ], "additionalProperties": false }, "maxItems": 65 } }, "required": [ "conditions" ], "additionalProperties": false }, "maxItems": 25 }, "action": { "type": "object", "properties": { "mitigate": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "log", "challenge", "deny", "bypass", "rate_limit", "redirect" ] }, "rateLimit": { "anyOf": [ { "type": "object", "properties": { "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "window": { "type": "number" }, "limit": { "type": "number" }, "keys": { "type": "array", "items": { "type": "string" } }, "action": { "anyOf": [ { "type": "string", "enum": [ "log", "challenge", "deny", "rate_limit" ] }, { "type": "string" } ] } }, "required": [ "algo", "window", "limit", "keys" ], "additionalProperties": false }, { "type": "string" } ] }, "redirect": { "anyOf": [ { "type": "object", "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean" } }, "required": [ "location", "permanent" ], "additionalProperties": false }, { "type": "string" } ] }, "actionDuration": { "type": "string", "nullable": true }, "bypassSystem": { "type": "boolean", "nullable": true }, "logHeaders": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "action" ], "additionalProperties": false } }, "additionalProperties": false }, "valid": { "type": "boolean" }, "validationErrors": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "name", "active", "conditionGroup", "action" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Remove a custom rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "string" } }, "required": [ "action", "id" ], "additionalProperties": false }, { "description": "Reorder a custom rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "number" } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Enable a managed rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string", "enum": [ "sd", "ma", "lfi", "rfi", "rce", "php", "gen", "xss", "sqli", "sf", "java" ] }, "value": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "deny", "log" ] } }, "required": [ "active", "action" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Disable a managed rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "string" } }, "required": [ "action" ], "additionalProperties": false }, { "description": "Add an IP Blocking rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "hostname": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" }, "action": { "type": "string", "enum": [ "deny", "challenge", "log", "bypass" ] } }, "required": [ "hostname", "ip", "action" ], "additionalProperties": false } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Update an IP Blocking rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "object", "properties": { "hostname": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" }, "action": { "type": "string", "enum": [ "deny", "challenge", "log", "bypass" ] } }, "required": [ "hostname", "ip", "action" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Remove an IP Blocking rule", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "string" } }, "required": [ "action", "id" ], "additionalProperties": false }, { "description": "Update a managed ruleset", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string", "enum": [ "ai_bots", "bot_filter", "bot_protection", "traffic_sources", "vercel_ruleset", "owasp" ] }, "value": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "log", "challenge", "deny" ] }, "active": { "type": "boolean" } }, "required": [ "active" ], "additionalProperties": false } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Update a managed rule group", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string", "enum": [ "ai_bots", "bot_filter", "bot_protection", "traffic_sources", "vercel_ruleset", "owasp" ] }, "value": { "type": "object", "additionalProperties": { "type": "object", "properties": { "active": { "type": "boolean" }, "action": { "type": "string", "enum": [ "log", "challenge", "deny" ] } }, "required": [ "active" ], "additionalProperties": false } } }, "required": [ "action", "id", "value" ], "additionalProperties": false }, { "description": "Toggle bot ID", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "type": "boolean" } }, "required": [ "action", "value" ], "additionalProperties": false }, { "description": "Update log headers configuration", "type": "object", "properties": { "action": { "type": "string" }, "id": { "type": "string" }, "value": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, "required": [ "action", "value" ], "additionalProperties": false } ] } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateFirewallConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.updateFirewallConfig({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n action: \"ip.remove\",\n id: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateFirewallConfig", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Security.UpdateFirewallConfig(ctx, \"\", nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/security/firewall/config/{configVersion}": { "get": { "description": "Retrieve the specified firewall configuration for a project. The deployed configVersion will be `active`", "operationId": "getFirewallConfig", "security": [ { "bearerToken": [] } ], "summary": "Read Firewall Configuration", "tags": [ "security" ], "responses": { "200": { "description": "If the firewall configuration includes a [custom managed ruleset](https://vercel.com/docs/security/vercel-waf/managed-rulesets), it will include a `crs` item that has the following values: sd: Scanner Detection ma: Multipart Attack lfi: Local File Inclusion Attack rfi: Remote File Inclusion Attack rce: Remote Execution Attack php: PHP Attack gen: Generic Attack xss: XSS Attack sqli: SQL Injection Attack sf: Session Fixation Attack java: Java Attack", "content": { "application/json": { "schema": { "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Generic Attack - Provide broad protection from various undefined or novel attack vectors." }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Java Attack - Mitigate risks of exploitation targeting Java-based applications or components." }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Local File Inclusion Attack - Prevent unauthorized access to local files through web applications." }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding." }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "PHP Attack - Safeguard against vulnerability exploits in PHP-based applications." }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands." }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files." }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools." }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs." }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases." }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object", "description": "XSS Attack - Prevent injection of malicious scripts into trusted webpages." } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object", "description": "Custom Ruleset" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } }, { "description": "The deployed configVersion for the firewall configuration", "in": "path", "name": "configVersion", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getFirewallConfig", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.getFirewallConfig({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n configVersion: \"\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getFirewallConfig", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Security.GetFirewallConfig(ctx, \"\", \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Promotes a draft WAF config to an active config", "operationId": "deleteSecurityFirewallConfigByConfigVersion", "security": [], "summary": "Returns activated WAF config", "tags": [ "security" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "type": "string", "enum": [ "" ] } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The deployed configVersion for the firewall configuration", "in": "path", "name": "configVersion", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteSecurityFirewallConfigByConfigVersion", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.security.deleteSecurityFirewallConfigByConfigVersion({\n configVersion: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/security/firewall/config/{configVersion}/activate": { "post": { "description": "Promotes a draft WAF config to an active config", "operationId": "createSecurityFirewallConfigByConfigVersionActivate", "security": [], "summary": "Returns activated WAF config", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "botIdEnabled": { "type": "boolean", "enum": [ false, true ] }, "changes": { "items": { "type": "object" }, "type": "array" }, "conditions": { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, "crs": { "properties": { "gen": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "java": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "lfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "ma": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "php": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rce": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "rfi": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sd": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sf": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "sqli": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" }, "xss": { "properties": { "action": { "type": "string", "enum": [ "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "action", "active" ], "type": "object" } }, "required": [ "gen", "java", "lfi", "ma", "php", "rce", "rfi", "sd", "sf", "sqli", "xss" ], "type": "object" }, "firewallEnabled": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "ips": { "items": { "properties": { "action": { "type": "string", "enum": [ "bypass", "challenge", "deny", "log" ] }, "hostname": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "action", "hostname", "id", "ip" ], "type": "object" }, "type": "array" }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "managedRules": { "properties": { "ai_bots": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "bot_protection": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "owasp": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "traffic_sources": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" }, "vercel_ruleset": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "active" ], "type": "object" } }, "type": "object" }, "ownerId": { "type": "string" }, "projectKey": { "type": "string" }, "rules": { "items": { "oneOf": [ { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ true ] }, "validationErrors": { "nullable": true } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" }, { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean", "enum": [ false ] }, "validationErrors": { "items": { "type": "string" }, "type": "array" } }, "required": [ "action", "active", "conditionGroup", "id", "name", "valid", "validationErrors" ], "type": "object" } ] }, "type": "array" }, "rulesets": { "oneOf": [ { "items": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string", "enum": [ "eq", "ex", "gt", "gte", "inc", "list", "lt", "lte", "neq", "nex", "ninc", "pre", "re", "sub", "suf" ] }, "type": { "type": "string", "enum": [ "bot_category", "bot_name", "bot_protection", "bot_status", "cookie", "domain_environment", "environment", "geo_as_number", "geo_city", "geo_continent", "geo_country", "geo_country_region", "header", "host", "ip_address", "ja3_digest", "ja4_digest", "method", "path", "protocol", "query", "rate_limit_api_id", "raw_path", "region", "route", "ruleset", "scheme", "server_action", "shared_condition", "target_path", "traffic_source", "trusted_source", "user_agent" ] }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" } }, "required": [ "active", "conditionGroup", "id", "name" ], "type": "object" }, "type": "array" }, { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "allow", "bypass", "challenge", "deny", "log", "rate_limit", "redirect" ] }, "actionDuration": { "nullable": true, "type": "string" }, "bypassSystem": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "logHeaders": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string", "enum": [ "challenge", "deny", "log", "rate_limit", null ] }, "algo": { "type": "string", "enum": [ "fixed_window", "token_bucket" ] }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" }, "type": "object" } ] }, "updatedAt": { "type": "string" }, "version": { "type": "number" } }, "required": [ "changes", "firewallEnabled", "id", "ips", "ownerId", "projectKey", "rules", "updatedAt", "version" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The deployed configVersion for the firewall configuration", "in": "path", "name": "configVersion", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "createSecurityFirewallConfigByConfigVersionActivate", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.security.createSecurityFirewallConfigByConfigVersionActivate({\n configVersion: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/security/firewall/attack-status": { "get": { "description": "Retrieve active attack data within the last N days (default: 1 day)", "operationId": "getActiveAttackStatus", "security": [ { "bearerToken": [] } ], "summary": "Read active attack data", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object" }, { "properties": { "anomalies": { "items": { "properties": { "affectedHostMap": { "additionalProperties": { "properties": { "anomalyAlerts": { "additionalProperties": { "properties": { "at_minute": { "type": "string" }, "avg_requests": { "type": "number" }, "stddev_requests": { "type": "number" }, "total_requests_minute": { "type": "number" }, "zscore": { "type": "number" } }, "required": [ "at_minute", "avg_requests", "stddev_requests", "total_requests_minute", "zscore" ], "type": "object" }, "type": "object" }, "ddosAlerts": { "additionalProperties": { "properties": { "atMinute": { "type": "string" }, "totalReqs": { "type": "number" } }, "required": [ "atMinute", "totalReqs" ], "type": "object" }, "type": "object" } }, "type": "object" }, "type": "object" }, "atMinute": { "type": "number" }, "endTime": { "nullable": true, "type": "number" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "startTime": { "type": "number" }, "state": { "type": "string" } }, "required": [ "affectedHostMap", "atMinute", "endTime", "ownerId", "projectId", "startTime" ], "type": "object" }, "type": "array" } }, "required": [ "anomalies" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "since", "in": "query", "required": false, "schema": { "type": "number", "minimum": 1 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "getActiveAttackStatus", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.getActiveAttackStatus({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/security/firewall/bypass": { "get": { "description": "Retrieve the system bypass rules configured for the specified project", "operationId": "getBypassIp", "security": [ { "bearerToken": [] } ], "summary": "Read System Bypass", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "pagination": { "properties": { "Id": { "type": "string" }, "OwnerId": { "type": "string" } }, "required": [ "Id", "OwnerId" ], "type": "object" }, "result": { "items": { "properties": { "Action": { "type": "string", "enum": [ "block", "bypass" ] }, "ActorId": { "type": "string" }, "CreatedAt": { "type": "string" }, "DeletedAt": { "type": "string" }, "Domain": { "type": "string" }, "ExpiresAt": { "nullable": true, "type": "number" }, "Id": { "type": "string" }, "Ip": { "type": "string" }, "IsProjectRule": { "type": "boolean", "enum": [ false, true ] }, "Note": { "type": "string" }, "OwnerId": { "type": "string" }, "ProjectId": { "type": "string" }, "UpdatedAt": { "type": "string" }, "UpdatedAtHour": { "type": "string" } }, "required": [ "CreatedAt", "Domain", "Id", "Ip", "OwnerId", "UpdatedAt", "UpdatedAtHour" ], "type": "object" }, "type": "array" } }, "required": [ "result" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "number", "example": 10, "maximum": 256 } }, { "name": "sourceIp", "description": "Filter by source IP", "in": "query", "required": false, "schema": { "description": "Filter by source IP", "type": "string", "maxLength": 49 } }, { "name": "domain", "description": "Filter by domain", "in": "query", "required": false, "schema": { "description": "Filter by domain", "type": "string", "pattern": "([a-z]+[a-z.]+)$", "maxLength": 2544 } }, { "name": "projectScope", "description": "Filter by project scoped rules", "in": "query", "required": false, "schema": { "description": "Filter by project scoped rules", "type": "boolean" } }, { "name": "offset", "description": "Used for pagination. Retrieves results after the provided id", "in": "query", "required": false, "schema": { "description": "Used for pagination. Retrieves results after the provided id", "type": "string", "maxLength": 2560 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getBypassIp", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.getBypassIp({\n projectId: \"\",\n limit: 10,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Create new system bypass rules", "operationId": "addBypassIp", "security": [ { "bearerToken": [] } ], "summary": "Create System Bypass Rule", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "ok": { "type": "boolean", "enum": [ false, true ] }, "pagination": { "nullable": true }, "result": { "items": { "properties": { "Domain": { "type": "string" }, "Id": { "type": "string" }, "Ip": { "type": "string" }, "IsProjectRule": { "type": "boolean", "enum": [ false, true ] }, "Note": { "type": "string" }, "OwnerId": { "type": "string" }, "ProjectId": { "type": "string" } }, "required": [ "Domain", "Id", "IsProjectRule", "Note", "OwnerId", "ProjectId" ], "type": "object" }, "type": "array" } }, "required": [ "ok", "pagination", "result" ], "type": "object" }, { "properties": { "ok": { "type": "boolean", "enum": [ false, true ] }, "result": { "items": { "properties": { "Action": { "type": "string", "enum": [ "block", "bypass" ] }, "ActorId": { "type": "string" }, "CreatedAt": { "type": "string" }, "DeletedAt": { "type": "string" }, "Domain": { "type": "string" }, "ExpiresAt": { "nullable": true, "type": "number" }, "Id": { "type": "string" }, "Ip": { "type": "string" }, "IsProjectRule": { "type": "boolean", "enum": [ false, true ] }, "Note": { "type": "string" }, "OwnerId": { "type": "string" }, "ProjectId": { "type": "string" }, "UpdatedAt": { "type": "string" }, "UpdatedAtHour": { "type": "string" } }, "required": [ "CreatedAt", "Domain", "Id", "Ip", "OwnerId", "UpdatedAt", "UpdatedAtHour" ], "type": "object" }, "type": "array" } }, "required": [ "ok" ], "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "oneOf": [ { "required": [ "domain" ] }, { "required": [ "projectScope" ] } ], "properties": { "domain": { "type": "string", "pattern": "([a-z]+[a-z.]+)$", "maxLength": 2544 }, "projectScope": { "type": "boolean", "description": "If the specified bypass will apply to all domains for a project." }, "sourceIp": { "type": "string" }, "allSources": { "type": "boolean" }, "ttl": { "type": "number", "description": "Time to live in milliseconds" }, "note": { "type": "string", "maxLength": 500 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "addBypassIp", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.addBypassIp({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Remove system bypass rules", "operationId": "removeBypassIp", "security": [ { "bearerToken": [] } ], "summary": "Remove System Bypass Rule", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "ok": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "ok" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "oneOf": [ { "required": [ "domain" ] }, { "required": [ "projectScope" ] } ], "properties": { "domain": { "type": "string", "pattern": "([a-z]+[a-z.]+)$", "maxLength": 2544 }, "projectScope": { "type": "boolean" }, "sourceIp": { "type": "string" }, "allSources": { "type": "boolean" }, "note": { "type": "string", "maxLength": 500 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "removeBypassIp", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.removeBypassIp({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/security/firewall/events": { "get": { "description": "Retrieve firewall actions for a project Rule names are resolved against the project's *current* active firewall configuration and the team's active rulesets, so a rule that has since been renamed reports its new name and one that has been deleted reports `null`. System rules such as `sys_dos_mitigation` and `ip_blocking` have no configured name and always report `null`.", "operationId": "getSecurityFirewallEvents", "security": [ { "bearerToken": [] } ], "summary": "Read Firewall Actions by Project", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "actions": { "items": { "properties": { "action": { "type": "string" }, "action_type": { "type": "string" }, "count": { "type": "number" }, "endTime": { "type": "string" }, "host": { "type": "string" }, "isActive": { "type": "boolean", "enum": [ false, true ] }, "public_ip": { "type": "string" }, "ruleId": { "nullable": true, "type": "string" }, "ruleName": { "nullable": true, "type": "string" }, "startTime": { "type": "string" } }, "required": [ "action", "action_type", "count", "endTime", "host", "isActive", "public_ip", "ruleId", "ruleName", "startTime" ], "type": "object" }, "type": "array" } }, "required": [ "actions" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "408": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "startTimestamp", "in": "query", "required": false, "schema": { "type": "number" } }, { "name": "endTimestamp", "in": "query", "required": false, "schema": { "type": "number" } }, { "name": "hosts", "in": "query", "required": false, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getSecurityFirewallEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.getSecurityFirewallEvents({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/security/firewall/config/generate-rule": { "post": { "description": "Generate a firewall rule from a natural language description.", "operationId": "generateFirewallRule", "security": [ { "bearerToken": [] } ], "summary": "Generate a firewall rule from natural language", "tags": [ "security" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" }, "rule": { "properties": { "action": { "properties": { "mitigate": { "properties": { "action": { "type": "string" }, "actionDuration": { "nullable": true, "type": "string" }, "rateLimit": { "nullable": true, "properties": { "action": { "nullable": true, "type": "string" }, "algo": { "type": "string" }, "keys": { "items": { "type": "string" }, "type": "array" }, "limit": { "type": "number" }, "window": { "type": "number" } }, "required": [ "algo", "keys", "limit", "window" ], "type": "object" }, "redirect": { "nullable": true, "properties": { "location": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "location", "permanent" ], "type": "object" } }, "required": [ "action" ], "type": "object" } }, "type": "object" }, "active": { "type": "boolean", "enum": [ false, true ] }, "conditionGroup": { "items": { "properties": { "conditions": { "items": { "properties": { "key": { "type": "string" }, "neg": { "type": "boolean", "enum": [ false, true ] }, "op": { "type": "string" }, "type": { "type": "string" }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" } ] } }, "required": [ "op", "type" ], "type": "object" }, "type": "array" } }, "required": [ "conditions" ], "type": "object" }, "type": "array" }, "description": { "type": "string" }, "name": { "type": "string" } }, "required": [ "action", "active", "conditionGroup", "name" ], "type": "object" } }, "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "408": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "generateFirewallRule", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.security.generateFirewallRule({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/speed-insights/toggle": { "post": { "description": "", "operationId": "createSpeedInsightsToggle", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "value": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "value" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "value": { "type": "boolean" } }, "required": [ "value" ], "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createSpeedInsightsToggle", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.createSpeedInsightsToggle({\n projectId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/storage/stores/{id}": { "get": { "description": "", "operationId": "getStorageStoresById", "security": [], "summary": "Get a store", "tags": [ "storage" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "store": { "type": "object", "properties": { "projectFilter": { "properties": { "git": { "properties": { "owners": { "items": { "type": "string" }, "type": "array" }, "providers": { "oneOf": [ { "items": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "repos": { "items": { "type": "string" }, "type": "array" } }, "required": [ "providers" ], "type": "object" } }, "type": "object" }, "projectsMetadata": { "items": { "properties": { "deployments": { "properties": { "actions": { "items": { "properties": { "environments": { "items": { "type": "string" }, "type": "array" }, "slug": { "type": "string" } }, "required": [ "environments", "slug" ], "type": "object" }, "type": "array" }, "required": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "actions", "required" ], "type": "object" }, "environments": { "items": { "type": "string" }, "type": "array" }, "environmentVariables": { "items": { "type": "string" }, "type": "array" }, "envVarPrefix": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "makeEnvVarsSensitive": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "envVarPrefix", "environmentVariables", "environments", "id", "name", "projectId" ], "type": "object" }, "type": "array" }, "status": { "nullable": true, "type": "string", "enum": [ "available", "error", "initializing", "limits-exceeded-suspended", "limits-exceeded-suspended-store-count", "onboarding", "suspended", "uninstalled", null ] }, "totalConnectedProjects": { "type": "number" }, "usageQuotaExceeded": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "projectsMetadata", "status", "usageQuotaExceeded" ] } }, "required": [ "store" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "skip-metadata", "in": "query", "required": false, "schema": { "type": "boolean" } }, { "name": "include-guides", "in": "query", "required": false, "schema": { "type": "boolean" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getStorageStoresById", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.storage.getStorageStoresById({\n id: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/storage/stores/blob": { "post": { "description": "", "operationId": "createStorageStoresBlob", "security": [], "summary": "Create a Blob store", "tags": [ "storage" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "store": { "nullable": true, "type": "object", "properties": { "projectFilter": { "properties": { "git": { "properties": { "owners": { "items": { "type": "string" }, "type": "array" }, "providers": { "oneOf": [ { "items": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "repos": { "items": { "type": "string" }, "type": "array" } }, "required": [ "providers" ], "type": "object" } }, "type": "object" }, "projectsMetadata": { "items": { "properties": { "deployments": { "properties": { "actions": { "items": { "properties": { "environments": { "items": { "type": "string" }, "type": "array" }, "slug": { "type": "string" } }, "required": [ "environments", "slug" ], "type": "object" }, "type": "array" }, "required": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "actions", "required" ], "type": "object" }, "environments": { "items": { "type": "string" }, "type": "array" }, "environmentVariables": { "items": { "type": "string" }, "type": "array" }, "envVarPrefix": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "makeEnvVarsSensitive": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "envVarPrefix", "environmentVariables", "environments", "id", "name", "projectId" ], "type": "object" }, "type": "array" }, "status": { "nullable": true, "type": "string", "enum": [ "available", "error", "initializing", "limits-exceeded-suspended", "limits-exceeded-suspended-store-count", "onboarding", "suspended", "uninstalled", null ] }, "totalConnectedProjects": { "type": "number" }, "usageQuotaExceeded": { "type": "boolean", "enum": [ false, true ] }, "access": { "type": "string", "enum": [ "private", "public" ] }, "kind": { "type": "string", "enum": [ "project-default", "user-created" ], "description": "A project-default store is a private blob store that is lazily created per-project, uses OIDC auth instead of read-write tokens, and cannot be modified through standard store mutation APIs. Undefined for legacy stores." }, "projectId": { "type": "string", "description": "The project this store is scoped to. Set for project-default stores and user-created stores with enforced project association." }, "count": { "type": "number" }, "isTokenExpired": { "type": "boolean", "enum": [ false, true ] }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "dxb1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "size": { "type": "number" } }, "required": [ "count", "isTokenExpired", "projectsMetadata", "region", "size", "status", "usageQuotaExceeded" ] } }, "required": [ "store" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "429": { "description": "" } }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "maxLength": 70 }, "region": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "dxb1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ] }, "access": { "type": "string", "enum": [ "public", "private" ], "default": "public" }, "projectId": { "type": "string", "maxLength": 50 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createStorageStoresBlob", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.storage.createStorageStoresBlob();\n\n console.log(result);\n}\n\nrun();" } ] } }, "/storage/stores/blob/{id}": { "delete": { "description": "", "operationId": "deleteStorageStoresBlobById", "security": [], "summary": "Delete a Blob store", "tags": [ "storage" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteStorageStoresBlobById", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.storage.deleteStorageStoresBlobById({\n id: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/storage/stores/integration/direct": { "post": { "description": "Creates an integration store with automatic billing plan handling. For free resources, omit `billingPlanId` to auto-discover free plans. For paid resources, provide a `billingPlanId` from the billing plans endpoint.", "operationId": "createIntegrationStoreDirect", "security": [ { "bearerToken": [] } ], "summary": "Create integration store (free and paid plans)", "tags": [ "integrations" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "store": { "nullable": true, "type": "object", "properties": { "projectFilter": { "properties": { "git": { "properties": { "owners": { "items": { "type": "string" }, "type": "array" }, "providers": { "oneOf": [ { "items": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] }, "type": "array" }, { "type": "string", "enum": [ "*" ] } ] }, "repos": { "items": { "type": "string" }, "type": "array" } }, "required": [ "providers" ], "type": "object" } }, "type": "object" }, "projectsMetadata": { "items": { "properties": { "deployments": { "properties": { "actions": { "items": { "properties": { "environments": { "items": { "type": "string" }, "type": "array" }, "slug": { "type": "string" } }, "required": [ "environments", "slug" ], "type": "object" }, "type": "array" }, "required": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "actions", "required" ], "type": "object" }, "environments": { "items": { "type": "string" }, "type": "array" }, "environmentVariables": { "items": { "type": "string" }, "type": "array" }, "envVarPrefix": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "makeEnvVarsSensitive": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "envVarPrefix", "environmentVariables", "environments", "id", "name", "projectId" ], "type": "object" }, "type": "array" }, "status": { "nullable": true, "type": "string", "enum": [ "available", "error", "initializing", "limits-exceeded-suspended", "limits-exceeded-suspended-store-count", "onboarding", "suspended", "uninstalled", null ] }, "totalConnectedProjects": { "type": "number" }, "usageQuotaExceeded": { "type": "boolean", "enum": [ false, true ] }, "billingPlan": { "properties": { "cost": { "type": "string" }, "description": { "type": "string" }, "details": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "type": "object" }, "type": "array" }, "disabled": { "type": "boolean", "enum": [ false, true ] }, "effectiveDate": { "type": "string" }, "highlightedDetails": { "items": { "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "initialCharge": { "type": "string" }, "maximumAmount": { "type": "string" }, "maximumAmountAutoPurchasePerPeriod": { "type": "string" }, "minimumAmount": { "type": "string" }, "name": { "type": "string" }, "paymentMethodRequired": { "type": "boolean", "enum": [ false, true ] }, "preauthorizationAmount": { "type": "number" }, "quote": { "items": { "properties": { "amount": { "type": "string" }, "line": { "type": "string" } }, "required": [ "amount", "line" ], "type": "object" }, "type": "array" }, "scope": { "type": "string", "enum": [ "installation", "resource" ] }, "type": { "type": "string", "enum": [ "prepayment", "subscription" ] } }, "required": [ "description", "id", "name", "paymentMethodRequired", "scope", "type" ], "type": "object" }, "capabilities": { "properties": { "agentTools": { "type": "boolean", "enum": [ false, true ] }, "autoSensitive": { "type": "boolean", "enum": [ false, true ] }, "billable": { "type": "boolean", "enum": [ false, true ] }, "mcp": { "type": "boolean", "enum": [ false, true ] }, "mcpReadonly": { "type": "boolean", "enum": [ false, true ] }, "projects": { "type": "boolean", "enum": [ false, true ] }, "secretRotation": { "oneOf": [ { "properties": { "customRotationWarning": { "type": "string" }, "maxDelayHours": { "type": "number" } }, "required": [ "maxDelayHours" ], "type": "object" }, { "type": "boolean", "enum": [ false ] } ] }, "secretsSync": { "type": "boolean", "enum": [ false, true ] }, "sso": { "type": "boolean", "enum": [ false, true ] }, "transferable": { "type": "boolean", "enum": [ false, true ] }, "v0": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "directPartnerConsoleUrl": { "type": "string" }, "externalResourceId": { "type": "string" }, "externalResourceStatus": { "nullable": true, "type": "string", "enum": [ "error", "onboarding", "pending", "ready", "resumed", "suspended", "uninstalled", null ] }, "metadata": { "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "number" }, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] }, "type": "object" }, "notification": { "properties": { "href": { "type": "string" }, "level": { "type": "string", "enum": [ "error", "info", "warn" ] }, "message": { "type": "string" }, "title": { "type": "string" } }, "required": [ "level", "title" ], "type": "object" }, "ownership": { "type": "string", "enum": [ "linked", "owned", "sandbox" ] }, "parentId": { "type": "string", "description": "The ID of the parent resource. Used to establish a parent-child relationship between resources, such as sandbox resources linking to their owner account resource." }, "product": { "properties": { "agentSkills": { "items": { "type": "string" }, "type": "array", "description": "URLs to skills/guides for how AI agents should use this product. Providers can specify these to help agents understand how to interact with their integration." }, "capabilities": { "properties": { "agentTools": { "type": "boolean", "enum": [ false, true ] }, "autoSensitive": { "type": "boolean", "enum": [ false, true ] }, "billable": { "type": "boolean", "enum": [ false, true ] }, "connectedImportResource": { "type": "boolean", "enum": [ false, true ] }, "databaseUI": { "type": "boolean", "enum": [ false, true ] }, "importResource": { "type": "boolean", "enum": [ false, true ] }, "linking": { "type": "boolean", "enum": [ false, true ] }, "mcp": { "type": "boolean", "enum": [ false, true ] }, "mcpReadonly": { "type": "boolean", "enum": [ false, true ] }, "nativeImportResource": { "type": "boolean", "enum": [ false, true ] }, "projects": { "type": "boolean", "enum": [ false, true ] }, "sandbox": { "type": "boolean", "enum": [ false, true ] }, "secretRotation": { "oneOf": [ { "properties": { "customRotationWarning": { "type": "string" }, "maxDelayHours": { "type": "number" } }, "required": [ "maxDelayHours" ], "type": "object" }, { "type": "boolean", "enum": [ false ] } ] }, "secretsSync": { "type": "boolean", "enum": [ false, true ] }, "sso": { "type": "boolean", "enum": [ false, true ] }, "transferable": { "type": "boolean", "enum": [ false, true ] }, "v0": { "type": "boolean", "enum": [ false, true ] }, "v0Flavors": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "disableResourceRenaming": { "type": "boolean", "enum": [ false, true ] }, "iconUrl": { "type": "string" }, "id": { "type": "string" }, "metadataSchema": { "properties": { "properties": { "additionalProperties": { "oneOf": [ { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "input" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "type": "number" }, "description": { "type": "string" }, "exclusiveMaximum": { "type": "number" }, "exclusiveMinimum": { "type": "number" }, "maximum": { "type": "number" }, "minimum": { "type": "number" }, "type": { "type": "string", "enum": [ "number" ] }, "ui:control": { "type": "string", "enum": [ "input" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "type": "boolean", "enum": [ false, true ] }, "description": { "type": "string" }, "type": { "type": "string", "enum": [ "boolean" ] }, "ui:control": { "type": "string", "enum": [ "toggle" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "default": { "items": { "type": "number" }, "type": "array" }, "description": { "type": "string" }, "items": { "properties": { "default": { "type": "number" }, "description": { "type": "string" }, "exclusiveMaximum": { "type": "number" }, "exclusiveMinimum": { "type": "number" }, "maximum": { "type": "number" }, "minimum": { "type": "number" }, "type": { "type": "string", "enum": [ "number" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "slider" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:steps": { "items": { "type": "number" }, "type": "array" } }, "required": [ "items", "type", "ui:control", "ui:steps" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "select" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "radio-button" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "items": { "type": "string" }, "type": "array" }, "description": { "type": "string" }, "example": { "items": { "type": "string" }, "type": "array" }, "items": { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "multi-select" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "items", "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "vercel-region" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "items": { "type": "string" }, "type": "array" }, "description": { "type": "string" }, "example": { "items": { "type": "string" }, "type": "array" }, "items": { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "maxItems": { "type": "number" }, "minItems": { "type": "number" }, "type": { "type": "string", "enum": [ "array" ] }, "ui:control": { "type": "string", "enum": [ "multi-vercel-region" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "items", "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "vercel-country" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:options": { "items": { "oneOf": [ { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "label": { "type": "string" }, "value": { "type": "string" } }, "required": [ "label", "value" ], "type": "object" }, { "type": "string" }, { "properties": { "description": { "type": "string" }, "disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control", "ui:options" ], "type": "object" }, { "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "enum": { "items": { "type": "string" }, "type": "array" }, "maxLength": { "type": "number" }, "minLength": { "type": "number" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "domain" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" }, { "properties": { "description": { "type": "string" }, "git:providers": { "items": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ] }, "type": "array" }, "type": { "type": "string", "enum": [ "string" ] }, "ui:control": { "type": "string", "enum": [ "git-namespace" ] }, "ui:description": { "oneOf": [ { "type": "string" }, { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" } ] }, "ui:disabled": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:formatted-value": { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, "ui:hidden": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] }, "ui:label": { "type": "string" }, "ui:paid-only": { "type": "boolean", "enum": [ false, true ] }, "ui:placeholder": { "type": "string" }, "ui:read-only": { "oneOf": [ { "properties": { "expr": { "type": "string" } }, "required": [ "expr" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] }, { "type": "string", "enum": [ "create", "update" ] } ] } }, "required": [ "type", "ui:control" ], "type": "object" } ] }, "type": "object" }, "required": { "items": { "type": "string" }, "type": "array" }, "type": { "type": "string", "enum": [ "object" ] }, "ui:order": { "items": { "type": "string" }, "type": "array" } }, "required": [ "properties", "type" ], "type": "object" }, "name": { "type": "string" }, "projectConnectionScopes": { "items": { "type": "string", "enum": [ "read-write:deployment", "read-write:deployment-check", "read-write:domain", "read-write:drains", "read-write:global-project-env-vars", "read-write:integration-deployment-action", "read-write:log-drain", "read-write:project-env-vars", "read-write:project-protection-bypass", "read:deployment", "read:domain", "read:project" ] }, "type": "array" }, "resourceLinks": { "items": { "properties": { "href": { "type": "string" }, "title": { "type": "string" } }, "required": [ "href", "title" ], "type": "object" }, "type": "array" }, "resourceTitle": { "type": "string", "description": "Custom resource title to display during installation and configuration. If not provided, defaults to protocol-based defaults.", "example": "Instance" }, "shortDescription": { "type": "string" }, "showSSOLinkOnProjectConnection": { "type": "boolean", "enum": [ false, true ] }, "slug": { "type": "string" }, "tags": { "items": { "type": "string", "enum": [ "ai", "authentication", "blob", "checks", "drains", "edge-config", "experimentation", "kv", "libsql", "logDrain", "mcp", "messaging", "mysql", "observability", "other", "postgres", "rds", "redis", "sqlite", "storage", "tag_agents", "tag_ai", "tag_analytics", "tag_authentication", "tag_checks", "tag_cms", "tag_code_repository", "tag_code_review", "tag_code_security", "tag_code_testing", "tag_commerce", "tag_databases", "tag_dev_tools", "tag_experimentation", "tag_flags", "tag_logDrain", "tag_logging", "tag_messaging", "tag_monitoring", "tag_observability", "tag_other", "tag_payments", "tag_performance", "tag_productivity", "tag_searching", "tag_security", "tag_storage", "tag_support_agent", "tag_testing", "tag_traceDrain", "tag_video", "tag_web_automation", "tag_workflow", "traceDrain", "vector", "video", "workflow" ] }, "type": "array" }, "repl": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "supportsReadOnlyMode": { "type": "boolean", "enum": [ false, true ] }, "welcomeMessage": { "type": "string" } }, "required": [ "enabled", "supportsReadOnlyMode" ], "type": "object" }, "guides": { "items": { "properties": { "framework": { "type": "string" }, "steps": { "items": { "properties": { "actions": { "items": { "properties": { "type": { "type": "string", "enum": [ "add_drain", "configure_project_connections", "connect_to_project" ] } }, "required": [ "type" ], "type": "object" }, "type": "array" }, "content": { "type": "string" }, "title": { "type": "string" } }, "required": [ "content", "title" ], "type": "object" }, "type": "array" }, "title": { "type": "string" } }, "required": [ "framework", "steps", "title" ], "type": "object" }, "type": "array" }, "integration": { "properties": { "capabilities": { "properties": { "billable": { "type": "boolean", "enum": [ false, true ] }, "checks": { "type": "boolean", "enum": [ false, true ] }, "connectedImportResource": { "type": "boolean", "enum": [ false, true ] }, "connectedProvisioning": { "type": "boolean", "enum": [ false, true ] }, "flexCommitEligible": { "type": "boolean", "enum": [ false, true ] }, "importResource": { "type": "boolean", "enum": [ false, true ] }, "maxAllowedTeams": { "type": "number" }, "mcp": { "type": "boolean", "enum": [ false, true ] }, "mcpReadonly": { "type": "boolean", "enum": [ false, true ] }, "nativeImportResource": { "type": "boolean", "enum": [ false, true ] }, "provisioning": { "type": "boolean", "enum": [ false, true ] }, "requiresBrowserInstall": { "type": "boolean", "enum": [ false, true ] }, "secretRotation": { "oneOf": [ { "properties": { "customRotationWarning": { "type": "string" }, "maxDelayHours": { "type": "number" } }, "required": [ "maxDelayHours" ], "type": "object" }, { "type": "boolean", "enum": [ false ] } ] }, "sso": { "type": "boolean", "enum": [ false, true ] }, "templateCloneOnly": { "type": "boolean", "enum": [ false, true ] }, "transferable": { "type": "boolean", "enum": [ false, true ] }, "updateConfiguration": { "type": "boolean", "enum": [ false, true ] }, "v0Flavors": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "flags": { "items": { "type": "string" }, "type": "array" }, "icon": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "supportsInstallationBillingPlans": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "icon", "id", "name", "slug" ], "type": "object" }, "integrationConfigurationId": { "type": "string" }, "logDrainStatus": { "type": "string", "enum": [ "disabled", "enabled" ] }, "primaryProtocol": { "type": "string", "enum": [ "ai", "authentication", "checks", "experimentation", "logDrain", "messaging", "observability", "other", "storage", "traceDrain", "video", "workflow" ] }, "supportedProtocols": { "items": { "type": "string", "enum": [ "ai", "authentication", "checks", "experimentation", "logDrain", "messaging", "observability", "other", "storage", "traceDrain", "video", "workflow" ] }, "type": "array" } }, "required": [ "integration", "integrationConfigurationId", "supportedProtocols" ], "type": "object" }, "protocolSettings": { "properties": { "authentication": { "properties": { "appUrls": { "items": { "properties": { "target": { "type": "string", "enum": [ "development", "preview", "production" ] }, "url": { "type": "string" } }, "required": [ "target", "url" ], "type": "object" }, "type": "array" } }, "type": "object" }, "experimentation": { "properties": { "edgeConfigId": { "type": "string" }, "edgeConfigSyncingEnabled": { "type": "boolean", "enum": [ false, true ] }, "edgeConfigTokenId": { "type": "string" }, "globalConfigId": { "type": "string" }, "globalConfigSyncingEnabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" } }, "type": "object" }, "secretRotationCompletedAt": { "type": "number", "description": "The timestamp when secret rotation was completed." }, "secretRotationRequestedAt": { "type": "number", "description": "The timestamp when secret rotation was requested." }, "secretRotationRequestedBy": { "type": "string", "description": "The ID of the user/team who requested the secret rotation." }, "secretRotationRequestedReason": { "type": "string", "description": "The reason for the secret rotation request." }, "secrets": { "items": { "properties": { "frameworkPublishable": { "type": "boolean", "enum": [ false, true ] }, "length": { "type": "number" }, "name": { "type": "string" } }, "required": [ "length", "name" ], "type": "object" }, "type": "array" }, "targets": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "description": "The deployment targets that this resource is available for." }, "type": "array", "description": "The deployment targets that this resource is available for." } }, "required": [ "externalResourceId", "product", "projectsMetadata", "secrets", "status", "usageQuotaExceeded" ] } }, "required": [ "store" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "integrationConfigurationId", "integrationProductIdOrSlug" ], "properties": { "name": { "type": "string", "maxLength": 128, "description": "Human-readable name for the storage resource", "example": "my-dev-database" }, "integrationConfigurationId": { "type": "string", "description": "ID of your integration configuration. Get this from GET /v1/integrations/configurations", "example": "icfg_cuwj0AdCdH3BwWT4LPijCC7t", "pattern": "^icfg_[a-zA-Z0-9]+$" }, "integrationProductIdOrSlug": { "type": "string", "description": "ID or slug of the integration product. Get available products from GET /v1/integrations/configuration/{id}/products", "example": "iap_postgres_db", "oneOf": [ { "pattern": "^iap_[a-zA-Z0-9_]+$", "description": "Product ID format" }, { "pattern": "^[a-z0-9-]+$", "description": "Product slug format" } ] }, "metadata": { "type": "object", "description": "Optional key-value pairs for resource metadata", "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "type": "array", "items": { "type": "string" } }, { "type": "array", "items": { "type": "number" } } ] }, "example": { "environment": "development", "project": "my-app", "tags": [ "database", "postgres" ] } }, "externalId": { "type": "string", "description": "Optional external identifier for tracking purposes", "example": "dev-db-001" }, "protocolSettings": { "type": "object", "description": "Protocol-specific configuration settings", "additionalProperties": true, "example": { "experimentation": { "edgeConfigSyncingEnabled": true } } }, "source": { "type": "string", "enum": [ "marketplace", "deploy-button", "external", "v0", "resource-claims", "cli", "oauth", "backoffice", "import-recommended-integrations", "organization" ], "description": "Source of the store creation request", "example": "marketplace", "default": "marketplace" }, "billingPlanId": { "type": "string", "description": "ID of the billing plan for paid resources. Get available plans from GET /integrations/integration/{id}/products/{productId}/plans. If not provided, automatically discovers free billing plans.", "example": "bp_abc123def456" }, "paymentMethodId": { "type": "string", "description": "Payment method ID for paid resources. Optional - uses default payment method if not provided.", "example": "pm_1AbcDefGhiJklMno" }, "prepaymentAmountCents": { "type": "number", "minimum": 50, "description": "Amount in cents for prepayment billing plans. Required only for prepayment plans with variable amounts.", "example": 5000 } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createIntegrationStoreDirect", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.integrations.createIntegrationStoreDirect({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"my-dev-database\",\n integrationConfigurationId: \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\",\n integrationProductIdOrSlug: \"iap_postgres_db\",\n metadata: {\n \"environment\": \"development\",\n \"project\": \"my-app\",\n \"tags\": [\n \"database\",\n \"postgres\",\n ],\n },\n externalId: \"dev-db-001\",\n protocolSettings: {\n \"experimentation\": {\n \"edgeConfigSyncingEnabled\": true,\n },\n },\n billingPlanId: \"bp_abc123def456\",\n paymentMethodId: \"pm_1AbcDefGhiJklMno\",\n prepaymentAmountCents: 5000,\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v3/teams/{teamId}/members": { "get": { "description": "Get a paginated list of team members for the provided team.", "operationId": "getTeamMembers", "security": [ { "bearerToken": [] } ], "summary": "List team members", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "emailInviteCodes": { "items": { "properties": { "accessGroups": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "email": { "type": "string" }, "entitlements": { "items": { "type": "string" }, "type": "array" }, "expired": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" }, "isDSyncUser": { "type": "boolean", "enum": [ false, true ] }, "projects": { "additionalProperties": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" } }, "required": [ "id", "isDSyncUser" ], "type": "object" }, "type": "array" }, "members": { "items": { "properties": { "accessRequestedAt": { "type": "number", "description": "Timestamp in milliseconds for when this team member was accepted by an owner.", "example": 1588820733602 }, "avatar": { "type": "string", "description": "ID of the file for the Avatar of this member.", "example": "123a6c5209bc3778245d011443644c8d27dc2c50" }, "bitbucket": { "properties": { "login": { "type": "string" } }, "type": "object", "description": "Information about the Bitbucket account of this user." }, "confirmed": { "type": "boolean", "enum": [ false, true ], "description": "Boolean that indicates if this member was confirmed by an owner.", "example": true }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds when this member was added.", "example": 1588720733602 }, "email": { "type": "string", "description": "The email of this member.", "example": "jane.doe@example.com" }, "github": { "properties": { "login": { "type": "string" } }, "type": "object", "description": "Information about the GitHub account for this user." }, "gitlab": { "properties": { "login": { "type": "string" } }, "type": "object", "description": "Information about the GitLab account of this user." }, "isEnterpriseManaged": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the user is managed by an enterprise." }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object", "description": "Map with information about the members origin if they joined by requesting access." }, "name": { "type": "string", "description": "The name of this user.", "example": "Jane Doe" }, "projects": { "items": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] } }, "required": [ "id", "name" ], "type": "object", "description": "Array of project memberships" }, "type": "array", "description": "Array of project memberships" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ], "description": "Role of this user in the team.", "example": "OWNER" }, "uid": { "type": "string", "description": "The ID of this user.", "example": "zTuNVUXEAvvnNN3IaqinkyMw" }, "username": { "type": "string", "description": "The unique username of this user.", "example": "jane-doe" } }, "required": [ "confirmed", "createdAt", "email", "role", "uid", "username" ], "type": "object" }, "type": "array" }, "pagination": { "properties": { "count": { "type": "number", "description": "Amount of items in the current page.", "example": 20 }, "hasNext": { "type": "boolean", "enum": [ false, true ] }, "next": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the next page.", "example": 1540095775951 }, "prev": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the previous page.", "example": 1540095775951 } }, "required": [ "count", "hasNext", "next", "prev" ], "type": "object" } }, "required": [ "members", "pagination" ], "type": "object", "x-vercel-cli": { "displayColumns": { "username": "members[].username", "email": "members[].email", "role": "members[].role", "joinedFrom": "members[].joinedFrom.origin", "createdAt": "members[].createdAt" } } } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "members" ] }, "parameters": [ { "name": "limit", "description": "Limit how many teams should be returned", "in": "query", "required": false, "schema": { "description": "Limit how many teams should be returned", "example": 20, "minimum": 1, "type": "number" } }, { "name": "since", "description": "Timestamp in milliseconds to only include members added since then.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds to only include members added since then.", "example": 1540095775951, "type": "number" } }, { "name": "until", "description": "Timestamp in milliseconds to only include members added until then.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds to only include members added until then.", "example": 1540095775951, "type": "number" } }, { "name": "search", "description": "Search team members by their name, username, and email.", "in": "query", "required": false, "schema": { "description": "Search team members by their name, username, and email.", "type": "string" } }, { "name": "role", "description": "Only return members with the specified team role.", "in": "query", "required": false, "schema": { "description": "Only return members with the specified team role.", "example": "OWNER", "type": "string", "enum": [ "OWNER", "MEMBER", "DEVELOPER", "SECURITY", "BILLING", "VIEWER", "VIEWER_FOR_PLUS", "CONTRIBUTOR" ] } }, { "name": "excludeProject", "description": "Exclude members who belong to the specified project.", "in": "query", "required": false, "schema": { "description": "Exclude members who belong to the specified project.", "type": "string" } }, { "name": "eligibleMembersForProjectId", "description": "Include team members who are eligible to be members of the specified project.", "in": "query", "required": false, "schema": { "description": "Include team members who are eligible to be members of the specified project.", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "getTeamMembers", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.getTeamMembers({\n limit: 20,\n since: 1540095775951,\n until: 1540095775951,\n role: \"OWNER\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/teams/{teamId}/members": { "post": { "description": "Invite a user to join the team specified in the URL. The authenticated user needs to be an `OWNER` in order to successfully invoke this endpoint. The user to be invited must be specified by email.", "operationId": "inviteUserToTeam", "security": [ { "bearerToken": [] } ], "summary": "Invite a user", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvitedTeamMember" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource.\nThe authenticated user must be a team owner to perform the action" }, "410": { "description": "" }, "503": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "invite" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "required": [ "email" ], "properties": { "email": { "type": "string", "format": "email", "description": "The email address of the user to invite", "example": "john@example.com" }, "role": { "type": "string", "enum": [ "OWNER", "MEMBER", "DEVELOPER", "SECURITY", "BILLING", "VIEWER", "VIEWER_FOR_PLUS", "CONTRIBUTOR" ], "default": "VIEWER", "description": "The role of the user to invite", "example": "VIEWER" }, "projects": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "role", "projectId" ], "properties": { "projectId": { "type": "string", "maxLength": 64, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the project." }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER", "PROJECT_GUEST" ], "example": "ADMIN", "description": "Sets the project roles for the invited user" } } } } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "inviteUserToTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.inviteUserToTeam({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: [\n {\n email: \"john@example.com\",\n role: \"DEVELOPER\",\n projects: [\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n ],\n },\n ],\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/teams/{teamId}/request": { "post": { "description": "Request access to a team as a member. An owner has to approve the request. Only 100 users can request access to a team at the same time.", "operationId": "requestAccessToTeam", "security": [ { "bearerToken": [] } ], "summary": "Request access to a team", "tags": [ "teams" ], "responses": { "200": { "description": "Successfuly requested access to the team.", "content": { "application/json": { "schema": { "properties": { "accessRequestedAt": { "type": "number" }, "bitbucket": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object" }, "confirmed": { "type": "boolean", "enum": [ false, true ] }, "github": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object" }, "gitlab": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "teamName": { "type": "string" }, "teamSlug": { "type": "string" } }, "required": [ "bitbucket", "github", "gitlab", "teamName", "teamSlug" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The team was not found." }, "410": { "description": "" }, "429": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique team identifier", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "joinedFrom" ], "properties": { "joinedFrom": { "type": "object", "additionalProperties": false, "required": [ "origin" ], "properties": { "origin": { "type": "string", "enum": [ "import", "teams", "github", "gitlab", "bitbucket", "feedback", "organization-teams" ], "description": "The origin of the request.", "example": "github" }, "commitId": { "type": "string", "description": "The commit sha if the origin is a git provider.", "example": "f498d25d8bd654b578716203be73084b31130cd7" }, "repoId": { "type": "string", "description": "The ID of the repository for the given Git provider.", "example": "67753070" }, "repoPath": { "type": "string", "description": "The path to the repository for the given Git provider.", "example": "jane-doe/example" }, "gitUserId": { "description": "The ID of the Git account of the user who requests access.", "example": 103053343, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string", "description": "The login name for the Git account of the user who requests access.", "example": "jane-doe" } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "requestAccessToTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.requestAccessToTeam({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n joinedFrom: {\n origin: \"github\",\n commitId: \"f498d25d8bd654b578716203be73084b31130cd7\",\n repoId: \"67753070\",\n repoPath: \"jane-doe/example\",\n gitUserId: 103053343,\n gitUserLogin: \"jane-doe\",\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "requestAccessToTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.RequestAccessToTeam(ctx, \"\", &operations.RequestAccessToTeamRequestBody{\n JoinedFrom: operations.JoinedFrom{\n Origin: operations.OriginGithub,\n CommitID: vercel.String(\"f498d25d8bd654b578716203be73084b31130cd7\"),\n RepoID: vercel.String(\"67753070\"),\n RepoPath: vercel.String(\"jane-doe/example\"),\n GitUserID: vercel.Pointer(operations.CreateGitUserIDNumber(\n 103053343,\n )),\n GitUserLogin: vercel.String(\"jane-doe\"),\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/request/{userId}": { "get": { "description": "Check the status of a join request. It'll respond with a 404 if the request has been declined. If no `userId` path segment was provided, this endpoint will instead return the status of the authenticated user.", "operationId": "getTeamAccessRequest", "security": [ { "bearerToken": [] } ], "summary": "Get access request status", "tags": [ "teams" ], "responses": { "200": { "description": "Successfully", "content": { "application/json": { "schema": { "properties": { "accessRequestedAt": { "type": "number", "description": "Timestamp in milliseconds when the user requested access to the team.", "example": 1588720733602 }, "bitbucket": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object", "description": "Map of the connected Bitbucket account." }, "confirmed": { "type": "boolean", "enum": [ false, true ], "description": "Current status of the membership. Will be `true` if confirmed, if pending it'll be `false`.", "example": false }, "github": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object", "description": "Map of the connected GitHub account." }, "gitlab": { "nullable": true, "properties": { "login": { "type": "string" } }, "type": "object", "description": "Map of the connected GitLab account." }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object", "description": "A map that describes the origin from where the user joined." }, "teamName": { "type": "string", "description": "The name of the team.", "example": "My Team" }, "teamSlug": { "type": "string", "description": "The slug of the team.", "example": "my-team" } }, "required": [ "accessRequestedAt", "bitbucket", "confirmed", "github", "gitlab", "joinedFrom", "teamName", "teamSlug" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid.\nUser is already a confirmed member of the team and did not request access. Only visible when the authenticated user does have access to the team." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The provided user doesn't have a membership.\nTeam was not found." }, "410": { "description": "" } }, "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique user identifier" } }, { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique team identifier", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getTeamAccessRequest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.getTeamAccessRequest({\n userId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getTeamAccessRequest", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.GetTeamAccessRequest(ctx, \"\", \"\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/members/teams/join": { "post": { "description": "Join a team with a provided invite code or team ID.", "operationId": "joinTeam", "security": [ { "bearerToken": [] } ], "summary": "Join a team", "tags": [ "teams" ], "responses": { "200": { "description": "Successfully joined a team.", "content": { "application/json": { "schema": { "properties": { "from": { "type": "string", "description": "The origin of how the user joined.", "example": "email" }, "name": { "type": "string", "description": "The name of the team the user joined.", "example": "My Team" }, "slug": { "type": "string", "description": "The slug of the team the user joined.", "example": "my-team" }, "teamId": { "type": "string", "description": "The ID of the team the user joined.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" } }, "required": [ "from", "name", "slug", "teamId" ], "type": "object", "description": "Successfully joined a team." } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "" }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique team identifier", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "inviteCode": { "type": "string", "description": "The invite code to join the team.", "example": "fisdh38aejkeivn34nslfore9vjtn4ls" } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "joinTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.joinTeam({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n inviteCode: \"fisdh38aejkeivn34nslfore9vjtn4ls\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "joinTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.JoinTeam(ctx, \"\", &operations.JoinTeamRequestBody{\n InviteCode: vercel.String(\"fisdh38aejkeivn34nslfore9vjtn4ls\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/members/{uid}": { "patch": { "description": "Update the membership of a Team Member on the Team specified by `teamId`, such as changing the _role_ of the member, or confirming a request to join the Team for an unconfirmed member. The authenticated user must be an `OWNER` of the Team.", "operationId": "updateTeamMember", "security": [ { "bearerToken": [] } ], "summary": "Update a Team Member", "tags": [ "teams" ], "responses": { "200": { "description": "Successfully updated the membership.", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string", "description": "ID of the team." } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nCannot disconnect SSO from a Team member that does not have a SSO connection.\nCannot confirm a member that is already confirmed.\nCannot confirm a member that did not request access." }, "401": { "description": "The request is not authorized.\nTeam members can only be updated by an owner, or by the authenticated user if they are only disconnecting their SAML connection to the Team." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The provided user is not part of this team.\nA user with the specified ID does not exist." }, "409": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "uid", "description": "The ID of the member.", "in": "path", "required": true, "schema": { "type": "string", "description": "The ID of the member.", "example": "ndfasllgPyCtREAqxxdyFKb" } }, { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique team identifier", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "confirmed": { "type": "boolean", "enum": [ true ], "description": "Accept a user who requested access to the team.", "example": true }, "role": { "type": "string", "description": "The role in the team of the member.", "example": "VIEWER", "default": "MEMBER" }, "teamPermissions": { "type": "array", "description": "The team permissions to set for the member. Permissions must be compatible with the team roles assigned to the member.", "example": [ "CreateProject", "FullProductionDeployment" ], "items": { "type": "string", "enum": [ "ConnectorManager", "IntegrationManager", "CreateProject", "FullProductionDeployment", "UsageViewer", "EnvVariableManager", "EnvironmentManager", "WorkflowDecryptor", "OrgAdmin", "OrgViewer", "AiGatewaySettings", "AiGatewayCredits", "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "V0Builder", "V0Chatter", "V0Viewer" ] } }, "projects": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "role", "projectId" ], "properties": { "projectId": { "type": "string", "maxLength": 256, "example": "prj_ndlgr43fadlPyCtREAqxxdyFK", "description": "The ID of the project." }, "role": { "type": "string", "example": "ADMIN", "description": "The project role of the member that will be added. \\\"null\\\" will remove this project level role.", "nullable": true, "enum": [ "ADMIN", "PROJECT_VIEWER", "PROJECT_DEVELOPER", null ] } } } }, "joinedFrom": { "additionalProperties": false, "type": "object", "properties": { "ssoUserId": { "nullable": true } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "updateTeamMember", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.updateTeamMember({\n uid: \"ndfasllgPyCtREAqxxdyFKb\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n requestBody: {\n role: \"VIEWER\",\n teamPermissions: [\n \"CreateProject\",\n \"FullProductionDeployment\",\n ],\n projects: [\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n {\n projectId: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n role: \"ADMIN\",\n },\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "updateTeamMember", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.UpdateTeamMember(ctx, \"ndfasllgPyCtREAqxxdyFKb\", \"\", &operations.UpdateTeamMemberRequestBody{\n Confirmed: vercel.Bool(true),\n Role: vercel.String(\"[\\\"MEMBER\\\",\\\"VIEWER\\\"]\"),\n Projects: []operations.UpdateTeamMemberProjects{\n operations.UpdateTeamMemberProjects{\n ProjectID: \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n Role: operations.UpdateTeamMemberRoleAdmin.ToPointer(),\n },\n },\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Remove a Team Member from the Team, or dismiss a user that requested access, or leave a team. Directory Sync members can be removed when their directory email is absent or does not match the user's primary or verified secondary emails.", "operationId": "removeTeamMember", "security": [ { "bearerToken": [] } ], "summary": "Remove a Team Member", "tags": [ "teams" ], "responses": { "200": { "description": "Successfully removed a member of the team.", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string", "description": "ID of the team." } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource.\nNot authorized to update the team." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "uid", "description": "The user ID of the member.", "in": "path", "required": true, "schema": { "type": "string", "description": "The user ID of the member.", "example": "ndlgr43fadlPyCtREAqxxdyFK" } }, { "name": "newDefaultTeamId", "description": "The ID of the team to set as the new default team for the Northstar user.", "in": "query", "required": false, "schema": { "type": "string", "description": "The ID of the team to set as the new default team for the Northstar user.", "example": "team_nllPyCtREAqxxdyFKbbMDlxd" } }, { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string", "description": "The unique team identifier", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "removeTeamMember", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.removeTeamMember({\n uid: \"ndlgr43fadlPyCtREAqxxdyFK\",\n newDefaultTeamId: \"team_nllPyCtREAqxxdyFKbbMDlxd\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "removeTeamMember", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.RemoveTeamMember(ctx, \"ndlgr43fadlPyCtREAqxxdyFK\", \"\", vercel.String(\"team_nllPyCtREAqxxdyFKbbMDlxd\"))\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v2/teams/{teamId}": { "get": { "description": "Get information for the Team specified by the `teamId` parameter.", "operationId": "getTeam", "security": [ { "bearerToken": [] } ], "summary": "Get a Team", "tags": [ "teams" ], "responses": { "200": { "description": "The requested team", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Team" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource.\nNot authorized to access the team." }, "404": { "description": "Team was not found." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "get" ] }, "parameters": [ { "name": "slug", "in": "query", "schema": { "type": "string", "example": "my-team-url-slug" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true, "x-vercel-cli": { "kind": "argument" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.getTeam({\n slug: \"my-team-url-slug\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.GetTeam(ctx, \"\", nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Team != nil {\n // handle response\n }\n}" } ] }, "patch": { "description": "Update the information of a Team specified by the `teamId` parameter. The request body should contain the information that will be updated on the Team.", "operationId": "patchTeam", "security": [ { "bearerToken": [] } ], "summary": "Update a Team", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Team" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource.\nNot authorized to update the team. Must be an OWNER." }, "410": { "description": "" }, "428": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "update" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "avatar": { "type": "string", "maxLength": 40, "pattern": "^[0-9a-f]+$", "description": "The hash value of an uploaded image, or `null` to clear the avatar.", "nullable": true }, "description": { "type": "string", "maxLength": 140, "example": "Our mission is to make cloud computing accessible to everyone", "description": "A short text that describes the team." }, "emailDomain": { "type": "string", "format": "regex", "example": "example.com", "nullable": true }, "name": { "type": "string", "maxLength": 256, "example": "My Team", "description": "The name of the team." }, "previewDeploymentSuffix": { "type": "string", "format": "hostname", "example": "example.dev", "description": "Suffix that will be used for all preview deployments.", "nullable": true }, "regenerateInviteCode": { "type": "boolean", "example": true, "description": "Create a new invite code and replace the current one." }, "saml": { "type": "object", "additionalProperties": false, "properties": { "enforced": { "type": "boolean", "example": true, "description": "Require that members of the team use SAML Single Sign-On." }, "roles": { "type": "object", "description": "Directory groups to role or access group mappings.", "additionalProperties": { "anyOf": [ { "type": "string", "enum": [ "OWNER", "MEMBER", "DEVELOPER", "SECURITY", "BILLING", "VIEWER", "VIEWER_FOR_PLUS", "CONTRIBUTOR" ] }, { "type": "object", "additionalProperties": false, "required": [ "accessGroupId" ], "properties": { "accessGroupId": { "type": "string", "pattern": "^ag_[A-z0-9_ -]+$" } } } ] } } } }, "slug": { "type": "string", "example": "my-team", "description": "A new slug for the team." }, "enablePreviewFeedback": { "type": "string", "example": "on", "description": "Enable preview toolbar: one of on, off or default." }, "enableProductionFeedback": { "type": "string", "example": "on", "description": "Enable production toolbar: one of on, off or default." }, "sensitiveEnvironmentVariablePolicy": { "type": "string", "example": "on", "description": "Sensitive environment variable policy: one of on, off or default." }, "disjunctiveProductionSecretPolicy": { "type": "string", "example": "on", "description": "Require production secrets to be in their own environment group: one of on, off or default." }, "remoteCaching": { "type": "object", "description": "Whether or not remote caching is enabled for the team", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "example": true, "description": "Enable or disable remote caching for the team." } } }, "hideIpAddresses": { "type": "boolean", "example": false, "description": "Display or hide IP addresses in Monitoring queries." }, "hideIpAddressesInLogDrains": { "type": "boolean", "example": false, "description": "Display or hide IP addresses in Log Drains." }, "dpAccessRequestsMode": { "type": "string", "enum": [ "all", "none", "email-domain" ], "example": "none", "description": "Controls who can request access to protected deployments." }, "requireVerifiedCommits": { "type": "boolean", "example": true, "description": "When enabled, all projects in the team require commits to be signed and verified by the git provider before deployments will be created." }, "disableRepositoryDispatchEvents": { "type": "boolean", "example": false, "description": "Default for projects in the team. When `true`, projects in this team will not emit GitHub repository-dispatch events on deployment events unless the project explicitly overrides this setting." }, "defaultDeploymentProtection": { "type": "object", "description": "Default deployment protection settings for new projects.", "additionalProperties": false, "properties": { "passwordProtection": { "additionalProperties": false, "description": "Allows to protect project deployments with a password", "properties": { "deploymentType": { "description": "Specify if the password will apply to every Deployment Target or just Preview", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ], "type": "string" }, "password": { "description": "The password that will be used to protect Project Deployments", "maxLength": 72, "type": "string", "nullable": true } }, "required": [ "deploymentType" ], "type": "object", "nullable": true }, "ssoProtection": { "additionalProperties": false, "description": "Ensures visitors to your Preview Deployments are logged into Vercel and have a minimum of Viewer access on your team", "properties": { "deploymentType": { "default": "preview", "description": "Specify if the Vercel Authentication (SSO Protection) will apply to every Deployment Target or just Preview", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ], "type": "string" } }, "required": [ "deploymentType" ], "type": "object", "nullable": true } } }, "defaultPassport": { "description": "Default Passport configuration for new projects.", "type": "object", "additionalProperties": false, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "default": "all", "enum": [ "all", "preview", "prod_deployment_urls_and_all_previews", "all_except_custom_domains" ] } }, "required": [ "connectorId" ], "nullable": true }, "defaultExpirationSettings": { "properties": { "expiration": { "description": "The time period to keep non-production deployments for", "example": "1y", "type": "string", "enum": [ "3y", "2y", "1y", "6m", "3m", "2m", "1m", "2w", "1w", "1d", "unlimited" ] }, "expirationProduction": { "description": "The time period to keep production deployments for", "example": "1y", "type": "string", "enum": [ "3y", "2y", "1y", "6m", "3m", "2m", "1m", "2w", "1w", "1d", "unlimited" ] }, "expirationCanceled": { "description": "The time period to keep canceled deployments for", "example": "1y", "type": "string", "enum": [ "1y", "6m", "3m", "2m", "1m", "2w", "1w", "1d", "unlimited" ] }, "expirationErrored": { "description": "The time period to keep errored deployments for", "example": "1y", "type": "string", "enum": [ "1y", "6m", "3m", "2m", "1m", "2w", "1w", "1d", "unlimited" ] } }, "type": "object", "additionalProperties": false }, "deploymentPolicy": { "anyOf": [ { "type": "object", "description": "Composable deployment-time policy. Each rule type holds a list of rules, one per environment scope.", "additionalProperties": false, "properties": { "gitSources": { "anyOf": [ { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "enabled", "environments", "sources" ], "properties": { "enabled": { "type": "boolean" }, "environments": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "target" ], "properties": { "type": { "type": "string", "enum": [ "system" ] }, "target": { "type": "string", "enum": [ "production", "preview" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "environmentId" ], "properties": { "type": { "type": "string", "enum": [ "custom" ] }, "environmentId": { "type": "string" } } } ] } }, "sources": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "provider", "org" ], "properties": { "provider": { "type": "string", "enum": [ "github", "bitbucket" ] }, "org": { "type": "string" }, "repo": { "type": "string" } } }, { "type": "object", "additionalProperties": false, "required": [ "provider", "namespace" ], "properties": { "provider": { "type": "string", "enum": [ "gitlab" ] }, "namespace": { "type": "string" }, "project": { "type": "string" } } } ] } } } } }, { "type": "string" } ] }, "deploymentSources": { "anyOf": [ { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "enabled", "environments", "sources" ], "properties": { "enabled": { "type": "boolean" }, "environments": { "type": "array", "items": { "anyOf": [ { "type": "object", "additionalProperties": false, "required": [ "type", "target" ], "properties": { "type": { "type": "string", "enum": [ "system" ] }, "target": { "type": "string", "enum": [ "production", "preview" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "type", "environmentId" ], "properties": { "type": { "type": "string", "enum": [ "custom" ] }, "environmentId": { "type": "string" } } } ] } }, "sources": { "type": "array", "items": { "type": "string", "enum": [ "git", "cli", "rest-api", "deploy-hook", "integration", "v0" ] } } } } }, { "type": "string" } ] } } }, { "type": "string" } ] }, "strictDeploymentProtectionSettings": { "type": "object", "description": "When enabled, deployment protection settings require stricter permissions (owner-only).", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "example": true, "description": "Enable or disable strict deployment protection settings." } }, "required": [ "enabled" ] }, "strictShareableLinks": { "type": "object", "description": "When enabled, creating shareable links requires Owner role.", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "example": true, "description": "Enable or disable requiring Owner role to create shareable links." } }, "required": [ "enabled" ] }, "strictPasswordProtectionSettings": { "type": "object", "description": "When enabled, adding, changing, or removing project password protection requires Owner role.", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "example": true, "description": "Enable or disable requiring Owner role to change project password protection." } }, "required": [ "enabled" ] }, "strictConnectors": { "type": "object", "description": "When enabled, creating and managing connectors requires Owner role.", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "example": true, "description": "Enable or disable requiring Owner role to manage connectors." } }, "required": [ "enabled" ] }, "nsnbConfig": { "anyOf": [ { "type": "object", "description": "NSNB configuration for the team.", "additionalProperties": false, "properties": { "preference": { "type": "string", "enum": [ "auto-approval", "manual-approval", "block" ], "description": "The NSNB preference for the team." } }, "required": [ "preference" ] }, { "type": "string" } ] }, "defaultProjectJobs": { "oneOf": [ { "description": "Default job configuration applied to new projects created in this team.", "type": "object", "additionalProperties": false, "properties": { "lint": { "type": "object", "additionalProperties": false, "properties": { "targets": { "type": "array", "items": { "type": "string" } } }, "required": [ "targets" ] }, "typecheck": { "type": "object", "additionalProperties": false, "properties": { "targets": { "type": "array", "items": { "type": "string" } } }, "required": [ "targets" ] } } }, { "type": "string" } ] }, "resourceConfig": { "type": "object", "description": "Resource configuration for the team.", "additionalProperties": false, "properties": { "buildMachine": { "type": "object", "description": "Build machine configuration.", "additionalProperties": false, "properties": { "default": { "type": "string", "enum": [ "basic", "enhanced", "turbo", "standard", "elastic" ], "example": "standard", "description": "Default build machine type for new builds: standard, enhanced, turbo, or elastic." } } } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "patchTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.patchTeam({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n description: \"Our mission is to make cloud computing accessible to everyone\",\n emailDomain: \"example.com\",\n name: \"My Team\",\n previewDeploymentSuffix: \"example.dev\",\n regenerateInviteCode: true,\n saml: {\n enforced: true,\n },\n slug: \"my-team\",\n enablePreviewFeedback: \"on\",\n enableProductionFeedback: \"on\",\n sensitiveEnvironmentVariablePolicy: \"on\",\n disjunctiveProductionSecretPolicy: \"on\",\n remoteCaching: {\n enabled: true,\n },\n hideIpAddresses: false,\n hideIpAddressesInLogDrains: false,\n dpAccessRequestsMode: \"none\",\n requireVerifiedCommits: true,\n disableRepositoryDispatchEvents: false,\n defaultExpirationSettings: {\n expiration: \"1y\",\n expirationProduction: \"1y\",\n expirationCanceled: \"1y\",\n expirationErrored: \"1y\",\n },\n strictDeploymentProtectionSettings: {\n enabled: true,\n },\n strictShareableLinks: {\n enabled: true,\n },\n strictPasswordProtectionSettings: {\n enabled: true,\n },\n strictConnectors: {\n enabled: true,\n },\n resourceConfig: {\n buildMachine: {\n default: \"standard\",\n },\n },\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "patchTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.PatchTeam(ctx, \"\", nil, &operations.PatchTeamRequestBody{\n Description: vercel.String(\"Our mission is to make cloud computing accessible to everyone\"),\n EmailDomain: vercel.String(\"example.com\"),\n Name: vercel.String(\"My Team\"),\n PreviewDeploymentSuffix: vercel.String(\"example.dev\"),\n RegenerateInviteCode: vercel.Bool(true),\n Saml: &operations.Saml{\n Enforced: vercel.Bool(true),\n },\n Slug: vercel.String(\"my-team\"),\n EnablePreviewFeedback: vercel.String(\"on\"),\n EnableProductionFeedback: vercel.String(\"on\"),\n SensitiveEnvironmentVariablePolicy: vercel.String(\"on\"),\n RemoteCaching: &operations.RemoteCaching{\n Enabled: vercel.Bool(true),\n },\n HideIPAddresses: vercel.Bool(false),\n HideIPAddressesInLogDrains: vercel.Bool(false),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Team != nil {\n // handle response\n }\n}" } ] } }, "/v2/teams": { "get": { "description": "Get a paginated list of all the Teams the authenticated User is a member of.", "operationId": "getTeams", "security": [ { "bearerToken": [] } ], "summary": "List all teams", "tags": [ "teams" ], "responses": { "200": { "description": "A paginated list of teams.", "content": { "application/json": { "schema": { "properties": { "pagination": { "$ref": "#/components/schemas/Pagination" }, "teams": { "items": { "oneOf": [ { "$ref": "#/components/schemas/Team" }, { "$ref": "#/components/schemas/TeamLimited" } ] }, "type": "array" } }, "required": [ "pagination", "teams" ], "type": "object", "description": "A paginated list of teams.", "x-vercel-cli": { "displayColumns": { "name": "teams[].name", "id": "teams[].id", "slug": "teams[].slug", "role": "teams[].membership.role", "createdAt": "teams[].createdAt" } } } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "500": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "list" ] }, "parameters": [ { "name": "limit", "description": "Maximum number of Teams which may be returned.", "in": "query", "schema": { "description": "Maximum number of Teams which may be returned.", "example": 20, "type": "number" } }, { "name": "since", "description": "Timestamp (in milliseconds) to only include Teams created since then.", "in": "query", "schema": { "description": "Timestamp (in milliseconds) to only include Teams created since then.", "example": 1540095775951, "type": "number" } }, { "name": "until", "description": "Timestamp (in milliseconds) to only include Teams created until then.", "in": "query", "schema": { "description": "Timestamp (in milliseconds) to only include Teams created until then.", "example": 1540095775951, "type": "number" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getTeams", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.getTeams({\n limit: 20,\n since: 1540095775951,\n until: 1540095775951,\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getTeams", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.GetTeams(ctx, vercel.Float64(20), vercel.Float64(1540095775951), vercel.Float64(1540095775951))\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams": { "post": { "description": "Create a new Team under your account. You need to send a POST request with the desired Team slug, and optionally the Team name.", "operationId": "createTeam", "security": [ { "bearerToken": [] } ], "summary": "Create a Team", "tags": [ "teams" ], "responses": { "200": { "description": "The team was created successfully", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string", "description": "Id of the created team", "example": "team_nLlpyC6RE1qxqglFKbrMxlud" }, "slug": { "type": "string" } }, "required": [ "id", "slug" ], "type": "object", "description": "The team was created successfully" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nThe slug is already in use" }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "create" ] }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "slug" ], "properties": { "slug": { "example": "a-random-team", "description": "The desired slug for the Team", "type": "string", "maxLength": 48 }, "name": { "example": "A Random Team", "description": "The desired name for the Team. It will be generated from the provided slug if nothing is provided", "type": "string", "maxLength": 256 }, "attribution": { "type": "object", "description": "Attribution information for the session or current page", "properties": { "sessionReferrer": { "type": "string", "description": "Session referrer" }, "landingPage": { "type": "string", "description": "Session landing page" }, "pageBeforeConversionPage": { "type": "string", "description": "Referrer to the signup page" }, "utm": { "type": "object", "properties": { "utmSource": { "type": "string", "description": "UTM source" }, "utmMedium": { "type": "string", "description": "UTM medium" }, "utmCampaign": { "type": "string", "description": "UTM campaign" }, "utmTerm": { "type": "string", "description": "UTM term" } } } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.createTeam({\n slug: \"a-random-team\",\n name: \"A Random Team\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.CreateTeam(ctx, &operations.CreateTeamRequestBody{\n Slug: \"a-random-team\",\n Name: vercel.String(\"A Random Team\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/dsync-roles": { "post": { "description": "Update the Directory Sync role mappings for a Team. This endpoint allows updating the mapping between directory groups and team roles or access groups.", "operationId": "postTeamDsyncRoles", "security": [ { "bearerToken": [] } ], "summary": "Update Team Directory Sync Role Mappings", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "ok": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "ok" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "roles" ], "properties": { "roles": { "type": "object", "description": "Directory groups to role or access group mappings.", "additionalProperties": { "anyOf": [ { "type": "string", "enum": [ "OWNER", "MEMBER", "DEVELOPER", "SECURITY", "BILLING", "VIEWER", "VIEWER_FOR_PLUS", "CONTRIBUTOR" ] }, { "type": "object", "additionalProperties": false, "required": [ "accessGroupId" ], "properties": { "accessGroupId": { "type": "string", "pattern": "^ag_[A-z0-9_ -]+$" } } } ] } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "postTeamDsyncRoles", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.postTeamDsyncRoles({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/teams/{teamId}": { "delete": { "description": "Delete a team under your account. You need to send a `DELETE` request with the desired team `id`. An optional array of reasons for deletion may also be sent.", "operationId": "deleteTeam", "security": [ { "bearerToken": [] } ], "summary": "Delete a Team", "tags": [ "teams" ], "responses": { "200": { "description": "The Team was successfully deleted", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string", "description": "The ID of the deleted Team", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "newDefaultTeamIdError": { "type": "boolean", "enum": [ false, true ], "description": "Signifies whether the default team update has failed, when newDefaultTeamId is provided in request query.", "example": true } }, "required": [ "id" ], "type": "object", "description": "The Team was successfully deleted" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource.\nThe authenticated user can't access the team" }, "409": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "newDefaultTeamId", "description": "Id of the team to be set as the new default team", "in": "query", "required": false, "schema": { "type": "string", "description": "Id of the team to be set as the new default team", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "reasons": { "type": "array", "description": "Optional array of objects that describe the reason why the team is being deleted.", "items": { "type": "object", "description": "An object describing the reason why the team is being deleted.", "required": [ "slug", "description" ], "additionalProperties": false, "properties": { "slug": { "type": "string", "description": "Idenitifier slug of the reason why the team is being deleted." }, "description": { "type": "string", "description": "Description of the reason why the team is being deleted." } } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "deleteTeam", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.deleteTeam({\n newDefaultTeamId: \"team_LLHUOMOoDlqOp8wPE4kFo9pE\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {},\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteTeam", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.DeleteTeam(ctx, \"\", vercel.String(\"team_LLHUOMOoDlqOp8wPE4kFo9pE\"), nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/invites/{inviteId}": { "delete": { "description": "Delete an active Team invite code.", "operationId": "deleteTeamInviteCode", "security": [ { "bearerToken": [] } ], "summary": "Delete a Team invite code", "tags": [ "teams" ], "responses": { "200": { "description": "Successfully deleted Team invite code.", "content": { "application/json": { "schema": { "properties": { "id": { "type": "string", "description": "ID of the team." } }, "required": [ "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource.\nInvite managed by directory sync\nNot authorized to access this team." }, "404": { "description": "Team invite code not found." }, "410": { "description": "" } }, "parameters": [ { "name": "inviteId", "description": "The Team invite code ID.", "in": "path", "required": true, "schema": { "type": "string", "description": "The Team invite code ID.", "example": "2wn2hudbr4chb1ecywo9dvzo7g9sscs6mzcz8htdde0txyom4l" } }, { "name": "teamId", "description": "The Team identifier to perform the request on behalf of.", "in": "path", "required": true, "schema": { "type": "string", "description": "The Team identifier to perform the request on behalf of.", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteTeamInviteCode", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.deleteTeamInviteCode({\n inviteId: \"2wn2hudbr4chb1ecywo9dvzo7g9sscs6mzcz8htdde0txyom4l\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteTeamInviteCode", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Teams.DeleteTeamInviteCode(ctx, \"2wn2hudbr4chb1ecywo9dvzo7g9sscs6mzcz8htdde0txyom4l\", \"team_LLHUOMOoDlqOp8wPE4kFo9pE\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/teams/{teamId}/microfrontends/{groupId}": { "patch": { "description": "Updates a microfrontends group's settings.", "operationId": "updateMicrofrontendsGroup", "security": [ { "bearerToken": [] } ], "summary": "Update a microfrontends group", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "updatedMicrofrontendsGroup": { "properties": { "enablePolyrepoBranchRouting": { "type": "boolean", "enum": [ false, true ] }, "fallbackEnvironment": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "updatedMicrofrontendsGroup" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "groupId", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "example": "MFE Group 1", "description": "The new name for the existing microfrontends group." }, "fallbackEnvironment": { "type": "string", "description": "The new fallback environment for the microfrontends group. Must be \"SAME_ENV\", \"PRODUCTION\", or a valid custom environment slug from the default app." }, "enablePolyrepoBranchRouting": { "type": "boolean", "description": "Whether Preview Deployments can link to branches with the same name in other Git repositories." } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "updateMicrofrontendsGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.updateMicrofrontendsGroup({\n groupId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"MFE Group 1\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Deletes a microfrontends group from the team associated with the group ID.", "operationId": "deleteMicrofrontendsGroup", "security": [ { "bearerToken": [] } ], "summary": "Delete a microfrontends group", "tags": [ "teams" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "500": { "description": "" } }, "parameters": [ { "name": "groupId", "description": "The microfrontend group ID to delete.", "in": "path", "required": true, "schema": { "type": "string", "example": "mfe_", "description": "The microfrontend group ID to delete." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "path", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" }, "required": true }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteMicrofrontendsGroup", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.teams.deleteMicrofrontendsGroup({\n groupId: \"mfe_\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/files": { "post": { "description": "Before you create a deployment you need to upload the required files for that deployment. To do it, you need to first upload each file to this endpoint. Once that's completed, you can create a new deployment with the uploaded files. The file content must be placed inside the body of the request. In the case of a successful response you'll receive a status code 200 with an empty body.", "operationId": "uploadFile", "security": [ { "bearerToken": [] } ], "summary": "Upload Deployment Files", "tags": [ "deployments" ], "responses": { "200": { "description": "File already uploaded\nFile successfully uploaded", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "urls": { "items": { "type": "string" }, "type": "array", "description": "Array of URLs where the file was updated", "example": [ "example-upload.aws.com" ] } }, "required": [ "urls" ], "type": "object" }, { "type": "object" } ] } } } }, "400": { "description": "One of the provided values in the headers is invalid\nDigest is not valid\nFile size is not valid" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" }, "426": { "description": "" } }, "parameters": [ { "in": "header", "description": "The file size in bytes", "schema": { "description": "The file size in bytes", "type": "number" }, "name": "Content-Length" }, { "in": "header", "description": "The file SHA1 used to check the integrity", "schema": { "type": "string", "description": "The file SHA1 used to check the integrity", "maxLength": 40 }, "name": "x-vercel-digest" }, { "in": "header", "description": "The file SHA1 used to check the integrity", "schema": { "type": "string", "description": "The file SHA1 used to check the integrity", "maxLength": 40, "deprecated": true }, "name": "x-now-digest" }, { "in": "header", "description": "The file size as an alternative to `Content-Length`", "schema": { "type": "number", "deprecated": true, "description": "The file size as an alternative to `Content-Length`" }, "name": "x-now-size" }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "uploadFile", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.uploadFile({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "uploadFile", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.UploadFile(ctx, operations.UploadFileRequest{})\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v6/user/tokens": { "get": { "description": "Retrieve a list of the current User's authentication tokens.", "operationId": "listAuthTokens", "security": [ { "bearerToken": [] } ], "summary": "List Auth Tokens", "tags": [ "authentication" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "properties": { "pagination": { "properties": { "count": { "type": "number" }, "next": { "nullable": true, "type": "string" }, "prev": { "nullable": true, "type": "string" } }, "required": [ "count", "next", "prev" ], "type": "object" }, "tokens": { "items": { "$ref": "#/components/schemas/AuthToken" }, "type": "array" } }, "required": [ "pagination", "tokens" ], "type": "object" }, { "properties": { "pagination": { "$ref": "#/components/schemas/Pagination" }, "tokens": { "items": { "$ref": "#/components/schemas/AuthToken" }, "type": "array" } }, "required": [ "pagination", "tokens" ], "type": "object" } ] } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "list" ] }, "parameters": [], "x-codeSamples": [ { "lang": "typescript", "label": "listAuthTokens", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.authentication.listAuthTokens();\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v3/user/tokens": { "post": { "description": "Creates and returns a new authentication token for the currently authenticated User. The `bearerToken` property is only provided once, in the response body, so be sure to save it on the client for use with API requests.", "operationId": "createAuthToken", "security": [ { "bearerToken": [] } ], "summary": "Create an Auth Token", "tags": [ "authentication" ], "responses": { "200": { "description": "Successful response.", "content": { "application/json": { "schema": { "properties": { "bearerToken": { "type": "string", "description": "The authentication token's actual value. This token is only provided in this response, and can never be retrieved again in the future. Be sure to save it somewhere safe!", "example": "uRKJSTt0L4RaSkiMj41QTkxM" }, "token": { "$ref": "#/components/schemas/AuthToken" } }, "required": [ "bearerToken", "token" ], "type": "object", "description": "Successful response." } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "name" ], "properties": { "name": { "type": "string" }, "expiresAt": { "type": "number" }, "projectId": { "type": "string", "description": "The ID of the project to scope this token to" } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createAuthToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.authentication.createAuthToken({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n name: \"\",\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createAuthToken", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Authentication.CreateAuthToken(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v5/user/tokens/{tokenId}": { "get": { "description": "Retrieve metadata about an authentication token belonging to the currently authenticated User.", "operationId": "getAuthToken", "security": [ { "bearerToken": [] } ], "summary": "Get Auth Token Metadata", "tags": [ "authentication" ], "responses": { "200": { "description": "Successful response.", "content": { "application/json": { "schema": { "properties": { "token": { "$ref": "#/components/schemas/AuthToken" } }, "required": [ "token" ], "type": "object", "description": "Successful response." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "Token not found with the requested `tokenId`." }, "410": { "description": "" } }, "parameters": [ { "name": "tokenId", "description": "The identifier of the token to retrieve. The special value \"current\" may be supplied, which returns the metadata for the token that the current HTTP request is authenticated with.", "in": "path", "required": true, "schema": { "type": "string", "description": "The identifier of the token to retrieve. The special value \"current\" may be supplied, which returns the metadata for the token that the current HTTP request is authenticated with.", "example": "5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getAuthToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.authentication.getAuthToken({\n tokenId: \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getAuthToken", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Authentication.GetAuthToken(ctx, \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v3/user/tokens/{tokenId}": { "delete": { "description": "Invalidate an authentication token, such that it will no longer be valid for future HTTP requests.", "operationId": "deleteAuthToken", "security": [ { "bearerToken": [] } ], "summary": "Delete an authentication token", "tags": [ "authentication" ], "responses": { "200": { "description": "Authentication token successfully deleted.", "content": { "application/json": { "schema": { "properties": { "tokenId": { "type": "string", "description": "The unique identifier of the token that was deleted.", "example": "5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391" } }, "required": [ "tokenId" ], "type": "object", "description": "Authentication token successfully deleted." } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "Token not found with the requested `tokenId`." }, "410": { "description": "" } }, "parameters": [ { "name": "tokenId", "description": "The identifier of the token to invalidate. The special value \"current\" may be supplied, which invalidates the token that the HTTP request was authenticated with.", "in": "path", "required": true, "schema": { "type": "string", "description": "The identifier of the token to invalidate. The special value \"current\" may be supplied, which invalidates the token that the HTTP request was authenticated with.", "example": "5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAuthToken", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.authentication.deleteAuthToken({\n tokenId: \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteAuthToken", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Authentication.DeleteAuthToken(ctx, \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v2/user": { "get": { "description": "Retrieves information related to the currently authenticated User.", "operationId": "getAuthUser", "security": [ { "bearerToken": [] } ], "summary": "Get the User", "tags": [ "user" ], "responses": { "200": { "description": "Successful response.", "content": { "application/json": { "schema": { "properties": { "user": { "oneOf": [ { "$ref": "#/components/schemas/AuthUser" }, { "$ref": "#/components/schemas/AuthUserLimited" } ] } }, "required": [ "user" ], "type": "object", "description": "Successful response.", "x-vercel-cli": { "displayProperty": "user", "displayColumns": { "name": "user.name", "id": "user.id", "email": "user.email", "username": "user.username", "defaultTeamId": "user.defaultTeamId", "createdAt": "user.createdAt", "blockedAt": "user.softBlock.blockedAt", "blockedReason": "user.softBlock.reason" } } } } } }, "302": { "description": "" }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "409": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [], "x-speakeasy-test": false, "x-codeSamples": [ { "lang": "typescript", "label": "getAuthUser", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.user.getAuthUser();\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getAuthUser", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.User.GetAuthUser(ctx)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/user": { "delete": { "description": "Initiates the deletion process for the currently authenticated User, by sending a deletion confirmation email. The email contains a link that the user needs to visit in order to proceed with the deletion process.", "operationId": "requestDelete", "security": [ { "bearerToken": [] } ], "summary": "Delete User Account", "tags": [ "user" ], "responses": { "202": { "description": "Response indicating that the User deletion process has been initiated, and a confirmation email has been sent.", "content": { "application/json": { "schema": { "properties": { "email": { "type": "string", "description": "Email address of the User who has initiated deletion." }, "id": { "type": "string", "description": "Unique identifier of the User who has initiated deletion." }, "message": { "type": "string", "description": "User deletion progress status.", "example": "Verification email sent" } }, "required": [ "email", "id", "message" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "" }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "reasons": { "type": "array", "description": "Optional array of objects that describe the reason why the User account is being deleted.", "items": { "type": "object", "description": "An object describing the reason why the User account is being deleted.", "required": [ "slug", "description" ], "additionalProperties": false, "properties": { "slug": { "type": "string", "description": "Idenitifier slug of the reason why the User account is being deleted." }, "description": { "type": "string", "description": "Description of the reason why the User account is being deleted." } } } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "requestDelete", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.user.requestDelete({});\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "requestDelete", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.User.RequestDelete(ctx, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v1/vcr/repository": { "post": { "description": "Create a container registry repository for a project.", "operationId": "createRepository", "security": [ { "bearerToken": [] } ], "summary": "Create a repository", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "repository": { "$ref": "#/components/schemas/VcrRepository" } }, "required": [ "repository" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "projectId", "name" ], "properties": { "projectId": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." }, "name": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createRepository", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.createRepository({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n projectId: \"\",\n name: \"nginx\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "List container registry repositories for a project.", "operationId": "listRepositories", "security": [ { "bearerToken": [] } ], "summary": "List repositories", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VcrRepositoryList" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 1000 } }, { "name": "cursor", "description": "Opaque pagination cursor returned by a previous list response.", "in": "query", "required": false, "schema": { "type": "string", "maxLength": 1024, "description": "Opaque pagination cursor returned by a previous list response." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listRepositories", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.listRepositories({\n projectId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}": { "get": { "description": "Fetch a container registry repository for a project by ID or name.", "operationId": "getRepository", "security": [ { "bearerToken": [] } ], "summary": "Get a repository", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "repository": { "$ref": "#/components/schemas/VcrRepository" } }, "required": [ "repository" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRepository", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.getRepository({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Schedule a repository for deletion. The repository is marked so it disappears from list/get immediately; subscriber-vcr reclaims every image (manifests, blobs, tags and rows) and finally deletes the repository row asynchronously via the VcrRepositoryRemoved event.", "operationId": "deleteRepository", "security": [ { "bearerToken": [] } ], "summary": "Delete a repository", "tags": [ "vcr" ], "responses": { "202": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteRepository", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.deleteRepository({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/images": { "get": { "description": "List images for a container registry repository, including their tags.", "operationId": "listRepositoryImages", "security": [ { "bearerToken": [] } ], "summary": "List repository images", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VcrImageList" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "cursor", "description": "Opaque pagination cursor returned by a previous list response.", "in": "query", "required": false, "schema": { "type": "string", "maxLength": 1024, "description": "Opaque pagination cursor returned by a previous list response." } }, { "name": "untagged", "in": "query", "required": false, "schema": { "type": "boolean" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listRepositoryImages", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.listRepositoryImages({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/permissions": { "post": { "description": "Grant a team access to a VCR repository. Sharing applies to the whole repository.", "operationId": "addRepositoryPermission", "security": [ { "bearerToken": [] } ], "summary": "Add a repository permission", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "permission": { "$ref": "#/components/schemas/VcrRepositoryPermission" } }, "required": [ "permission" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "teamId": { "type": "string", "pattern": "^team_[a-zA-Z0-9]+$", "maxLength": 64, "description": "ID of a team that is granted access to a repository.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "teamSlug": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 64, "description": "Slug of a team that is granted access to a repository.", "example": "my-team" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "addRepositoryPermission", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.addRepositoryPermission({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n teamId: \"team_LLHUOMOoDlqOp8wPE4kFo9pE\",\n teamSlug: \"my-team\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Revoke a team's access to a VCR repository.", "operationId": "removeRepositoryPermission", "security": [ { "bearerToken": [] } ], "summary": "Remove a repository permission", "tags": [ "vcr" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "teamId": { "type": "string", "pattern": "^team_[a-zA-Z0-9]+$", "maxLength": 64, "description": "ID of a team that is granted access to a repository.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "teamSlug": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 64, "description": "Slug of a team that is granted access to a repository.", "example": "my-team" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "removeRepositoryPermission", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.removeRepositoryPermission({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n teamId: \"team_LLHUOMOoDlqOp8wPE4kFo9pE\",\n teamSlug: \"my-team\",\n },\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "List the teams a VCR repository is shared with.", "operationId": "listRepositoryPermissions", "security": [ { "bearerToken": [] } ], "summary": "List repository permissions", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VcrRepositoryPermissionList" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "cursor", "description": "Opaque pagination cursor returned by a previous list response.", "in": "query", "required": false, "schema": { "type": "string", "maxLength": 1024, "description": "Opaque pagination cursor returned by a previous list response." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listRepositoryPermissions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.listRepositoryPermissions({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/permissions/all": { "delete": { "description": "Revoke every team's access to a VCR repository. Clearing an unshared repository is a no-op.", "operationId": "clearRepositoryPermissions", "security": [ { "bearerToken": [] } ], "summary": "Clear all repository permissions", "tags": [ "vcr" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "clearRepositoryPermissions", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.clearRepositoryPermissions({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/tags": { "get": { "description": "List a repository's tags.", "operationId": "listRepositoryTags", "security": [ { "bearerToken": [] } ], "summary": "List repository tags", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "nextCursor": { "type": "string" }, "tags": { "items": { "properties": { "arch": { "type": "string" }, "createdAt": { "type": "string" }, "imageId": { "type": "string" }, "kind": { "type": "string", "enum": [ "attestation", "index", "manifest" ] }, "manifestDigest": { "type": "string" }, "platform": { "type": "string" }, "pushedBy": { "type": "string" }, "sizeInBytes": { "type": "number" }, "status": { "nullable": true, "type": "string", "enum": [ "preparing", "ready", "unoptimized", null ] }, "tag": { "type": "string" }, "updatedAt": { "type": "string" } }, "required": [ "createdAt", "imageId", "kind", "manifestDigest", "sizeInBytes", "status", "tag", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "tags" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "sortBy", "description": "Field to sort the non-pinned tags by.", "in": "query", "required": false, "schema": { "description": "Field to sort the non-pinned tags by.", "type": "string", "enum": [ "updatedAt", "tag" ], "default": "updatedAt" } }, { "name": "sortOrder", "description": "Sort direction. Defaults to desc.", "in": "query", "required": false, "schema": { "description": "Sort direction. Defaults to desc.", "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listRepositoryTags", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.listRepositoryTags({\n projectId: \"\",\n idOrName: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/tags/{tag}": { "get": { "description": "Fetch a single tag from a repository, including the backing image's metadata and VHS-readiness status.", "operationId": "getRepositoryTag", "security": [ { "bearerToken": [] } ], "summary": "Get a repository tag", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "tag": { "$ref": "#/components/schemas/VcrTag" } }, "required": [ "tag" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "tag", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRepositoryTag", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.getRepositoryTag({\n projectId: \"\",\n idOrName: \"\",\n tag: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/images/{imageIdOrDigest}": { "get": { "description": "Fetch an individual image from a repository, including its tags and Dockerfile history entries with discriminated layer details for UI rendering. The image may be addressed by its internal id (`image_...`) or by its manifest digest (`sha256:...`).", "operationId": "getRepositoryImage", "security": [ { "bearerToken": [] } ], "summary": "Get a repository image", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "image": { "$ref": "#/components/schemas/VcrImageDetail" } }, "required": [ "image" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "imageIdOrDigest", "description": "The internal image id (`image_...`) or the image manifest digest (`sha256:...`).", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255, "description": "The internal image id (`image_...`) or the image manifest digest (`sha256:...`)." } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getRepositoryImage", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.getRepositoryImage({\n projectId: \"\",\n idOrName: \"\",\n imageIdOrDigest: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/vcr/repository/{idOrName}/images/{imageId}": { "delete": { "description": "Schedule an image for deletion. The image is marked so it disappears from list/get immediately; subscriber-vcr reclaims the manifest, blobs, tags and row asynchronously via the VcrManifestRemoved event.", "operationId": "deleteRepositoryImage", "security": [ { "bearerToken": [] } ], "summary": "Delete a repository image", "tags": [ "vcr" ], "responses": { "202": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400.", "in": "query", "required": true, "schema": { "type": "string", "description": "Project ID or name (slug) within the authenticated team. IDs take precedence over names. Missing or empty values return HTTP 400." } }, { "name": "idOrName", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "name": "imageId", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 255 } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteRepositoryImage", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.vcr.deleteRepositoryImage({\n projectId: \"\",\n idOrName: \"\",\n imageId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/": { "get": { "description": "GET /v2/ Docker Registry v2 version check. Returns a 401 challenge when no credentials are provided, prompting the Docker client to send auth. With valid credentials, returns 200 so the client can proceed.", "operationId": "getRoot", "security": [], "summary": "Check registry API version support", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [], "x-codeSamples": [ { "lang": "typescript", "label": "getRoot", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.getRoot();\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/{teamSlug}/{projectSlug}/{repositoryName}/blobs/{digest}": { "head": { "description": "HEAD /v2/:teamSlug/:projectSlug/:repositoryName/blobs/:digest Check whether a blob exists. Used by the Docker client before pushing a layer to avoid re-uploading content that already exists.", "operationId": "headByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "security": [], "summary": "Check if a blob exists", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "digest", "description": "Content-addressable digest (algorithm:hex).", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Content-addressable digest (algorithm:hex).", "example": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "headByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.headByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n digest: \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "GET /v2/:teamSlug/:projectSlug/:repositoryName/blobs/:digest Fetch a blob by digest.", "operationId": "getByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "security": [], "summary": "Download a blob", "tags": [ "vcr" ], "responses": { "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "416": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "digest", "description": "Content-addressable digest (algorithm:hex).", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Content-addressable digest (algorithm:hex).", "example": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n await vercel.vcr.getByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n digest: \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n });\n\n\n}\n\nrun();" } ] }, "delete": { "description": "DELETE /v2/:teamSlug/:projectSlug/:repositoryName/blobs/:digest Blob deletion is intentionally not supported. Matches the behaviour of most public registries.", "operationId": "deleteByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "security": [], "summary": "Delete a blob", "tags": [ "vcr" ], "responses": { "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "405": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "digest", "description": "Content-addressable digest (algorithm:hex).", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Content-addressable digest (algorithm:hex).", "example": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n await vercel.vcr.deleteByTeamSlugByProjectSlugByRepositoryNameBlobsByDigest({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n digest: \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n });\n\n\n}\n\nrun();" } ] } }, "/v2/{teamSlug}/{projectSlug}/{repositoryName}/blobs/uploads/{uuid}": { "get": { "description": "GET /v2/:teamSlug/:projectSlug/:repositoryName/blobs/uploads/:uuid Query the status of an in-progress blob upload. Used by clients to resume a partial upload after an interruption.", "operationId": "getByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "security": [], "summary": "Get blob upload status", "tags": [ "vcr" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "uuid", "description": "Blob upload session identifier.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-f0-9]{40}$", "maxLength": 40, "description": "Blob upload session identifier.", "example": "0123456789abcdef0123456789abcdef01234567" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.getByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n uuid: \"0123456789abcdef0123456789abcdef01234567\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "DELETE /v2/:teamSlug/:projectSlug/:repositoryName/blobs/uploads/:uuid Cancel an in-flight blob upload. Aborts the underlying S3 multipart upload (if one was started) and discards the session.", "operationId": "deleteByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "security": [], "summary": "Cancel a blob upload", "tags": [ "vcr" ], "responses": { "204": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "uuid", "description": "Blob upload session identifier.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-f0-9]{40}$", "maxLength": 40, "description": "Blob upload session identifier.", "example": "0123456789abcdef0123456789abcdef01234567" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.deleteByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n uuid: \"0123456789abcdef0123456789abcdef01234567\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "patch": { "description": "PATCH /v2/:teamSlug/:projectSlug/:repositoryName/blobs/uploads/:uuid Upload a chunk of blob data. The request body is streamed directly to S3 as a multipart upload part while hashing incrementally. The client may call this multiple times for chunked uploads.", "operationId": "updateByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "security": [], "summary": "Upload a blob chunk", "tags": [ "vcr" ], "responses": { "202": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "413": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "uuid", "description": "Blob upload session identifier.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-f0-9]{40}$", "maxLength": 40, "description": "Blob upload session identifier.", "example": "0123456789abcdef0123456789abcdef01234567" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "updateByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.updateByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n uuid: \"0123456789abcdef0123456789abcdef01234567\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "PUT /v2/:teamSlug/:projectSlug/:repositoryName/blobs/uploads/:uuid?digest= Complete the blob upload. This may include a final chunk of data in the request body (monolithic upload) or just finalize a previous chunked upload.", "operationId": "replaceByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "security": [], "summary": "Complete a blob upload", "tags": [ "vcr" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "413": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "uuid", "description": "Blob upload session identifier.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-f0-9]{40}$", "maxLength": 40, "description": "Blob upload session identifier.", "example": "0123456789abcdef0123456789abcdef01234567" } }, { "name": "digest", "description": "Content-addressable digest (algorithm:hex).", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Content-addressable digest (algorithm:hex).", "example": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "replaceByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.replaceByTeamSlugByProjectSlugByRepositoryNameBlobsUploadsByUuid({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n uuid: \"0123456789abcdef0123456789abcdef01234567\",\n digest: \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/{teamSlug}/{projectSlug}/{repositoryName}/blobs/uploads/": { "post": { "description": "POST /v2/:teamSlug/:projectSlug/:repositoryName/blobs/uploads/[?mount=&from=] Initiate a blob upload. Returns a UUID in the Location header that the client uses for subsequent PATCH (chunk) and PUT (complete) requests.", "operationId": "createByTeamSlugByProjectSlugByRepositoryNameBlobsUploads", "security": [], "summary": "Start a blob upload", "tags": [ "vcr" ], "responses": { "202": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "mount", "description": "Digest of the blob to mount from another repository.", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Digest of the blob to mount from another repository." } }, { "name": "from", "description": "Source repository to mount the blob from.", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?\\\\/[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?\\\\/[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Source repository to mount the blob from." } } ], "x-codeSamples": [ { "lang": "typescript", "label": "createByTeamSlugByProjectSlugByRepositoryNameBlobsUploads", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.createByTeamSlugByProjectSlugByRepositoryNameBlobsUploads({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/{teamSlug}/{projectSlug}/{repositoryName}/manifests/{reference}": { "put": { "description": "PUT /v2/:teamSlug/:projectSlug/:repositoryName/manifests/:reference Upload an image manifest. The digest is computed from the body and returned in the Docker-Content-Digest header.", "operationId": "replaceByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "security": [], "summary": "Push an image manifest", "tags": [ "vcr" ], "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "413": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "reference", "description": "Manifest reference: a tag or digest.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^(?:[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}|[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+)$", "maxLength": 255, "description": "Manifest reference: a tag or digest.", "example": "latest" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "replaceByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.replaceByTeamSlugByProjectSlugByRepositoryNameManifestsByReference({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n reference: \"latest\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "head": { "description": "HEAD /v2/:teamSlug/:projectSlug/:repositoryName/manifests/:reference Check whether a manifest exists. Used by Docker client during push to determine if a manifest (or config blob referenced by digest) is already present.", "operationId": "headByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "security": [], "summary": "Check if a manifest exists", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "reference", "description": "Manifest reference: a tag or digest.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^(?:[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}|[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+)$", "maxLength": 255, "description": "Manifest reference: a tag or digest.", "example": "latest" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "headByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.headByTeamSlugByProjectSlugByRepositoryNameManifestsByReference({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n reference: \"latest\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "get": { "description": "GET /v2/:teamSlug/:projectSlug/:repositoryName/manifests/:reference Fetch a manifest by tag or digest.", "operationId": "getByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "security": [], "summary": "Pull an image manifest", "tags": [ "vcr" ], "responses": { "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "reference", "description": "Manifest reference: a tag or digest.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^(?:[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}|[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+)$", "maxLength": 255, "description": "Manifest reference: a tag or digest.", "example": "latest" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n await vercel.vcr.getByTeamSlugByProjectSlugByRepositoryNameManifestsByReference({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n reference: \"latest\",\n });\n\n\n}\n\nrun();" } ] }, "delete": { "description": "DELETE /v2/:teamSlug/:projectSlug/:repositoryName/manifests/:reference Reference must be a digest.", "operationId": "deleteByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "security": [], "summary": "Delete an image manifest", "tags": [ "vcr" ], "responses": { "202": { "description": "", "content": { "application/json": { "schema": { "nullable": true } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "reference", "description": "Content-addressable digest (algorithm:hex).", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Za-z0-9_+.-]+:[A-Fa-f0-9]+$", "maxLength": 255, "description": "Content-addressable digest (algorithm:hex).", "example": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteByTeamSlugByProjectSlugByRepositoryNameManifestsByReference", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.deleteByTeamSlugByProjectSlugByRepositoryNameManifestsByReference({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n reference: \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v2/{teamSlug}/{projectSlug}/{repositoryName}/tags/list": { "get": { "description": "GET /v2/:teamSlug/:projectSlug/:repositoryName/tags/list List the tags in a repository.", "operationId": "getByTeamSlugByProjectSlugByRepositoryNameTagsList", "security": [], "summary": "List image tags", "tags": [ "vcr" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "name": { "type": "string" }, "tags": { "items": { "type": "string" }, "type": "array" } }, "required": [ "name", "tags" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "parameters": [ { "name": "teamSlug", "description": "Single Docker repository team slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository team slug component.", "example": "team-slug" } }, { "name": "projectSlug", "description": "Single Docker repository project slug component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$", "maxLength": 255, "description": "Single Docker repository project slug component.", "example": "project-slug" } }, { "name": "repositoryName", "description": "Single Docker repository name component.", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]+(?:(?:\\\\.|_|__|-+)[a-z0-9]+)*$", "maxLength": 255, "description": "Single Docker repository name component.", "example": "nginx" } }, { "name": "n", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 1000 } }, { "name": "last", "description": "Opaque pagination cursor returned by a previous list response.", "in": "query", "required": false, "schema": { "type": "string", "maxLength": 1024, "description": "Opaque pagination cursor returned by a previous list response." } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getByTeamSlugByProjectSlugByRepositoryNameTagsList", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.vcr.getByTeamSlugByProjectSlugByRepositoryNameTagsList({\n teamSlug: \"team-slug\",\n projectSlug: \"project-slug\",\n repositoryName: \"nginx\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/web/insights/toggle": { "post": { "description": "", "operationId": "createWebInsightsToggle", "security": [], "tags": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "value": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "value" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "value": { "type": "boolean" } }, "required": [ "value" ], "type": "object" } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "createWebInsightsToggle", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel();\n\nasync function run() {\n const result = await vercel.createWebInsightsToggle({\n projectId: \"\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/query/web-analytics/visits/aggregate": { "get": { "description": "Counts pageviews on a project, within the requested date range. Results are either aggregated or broken down over time. Results can additionally be broken down by one dimension, and filtered by multiple dimensions.", "operationId": "aggregatePageviews", "security": [ { "bearerToken": [] } ], "summary": "Aggregates page views", "tags": [ "web-analytics" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "items": { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } }, "type": "object", "required": [ "timestamp" ] }, "type": "array" }, { "items": { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" } }, "required": [ "aiGatewayModelId", "aiModel", "aiModelType", "aiProvider", "appName", "asnId", "asnName", "attributes", "attributionEventName", "attributionTarget", "authMethod", "billableRegion", "blobOperationLevel", "blobOperationType", "botCategory", "botCategoryLegacy", "botCheckResult", "botName", "botVerified", "browserName", "cacheApi", "cacheCreation1hInputTokensCurrency", "cacheCreationInputTokensCurrency", "cacheHitLevel", "cacheHitState", "cacheHostname", "cacheOperation", "cachePath", "cacheReason", "cacheResult", "cacheTags", "cachedInputTokensCurrency", "cause", "clientIp", "clientIpCountry", "clientJa4Digest", "clientUserAgent", "codingAgent", "commitSha", "consumerGroup", "contentCaptureInputs", "contentCaptureOutputs", "contentCaptureStatus", "contentType", "costCurrency", "country", "dataCacheRegion", "deepAnalysisCheck", "deploymentId", "deviceType", "direction", "edgeNetworkRegion", "edgeType", "entryId", "entryItemId", "entryName", "entryRevalidateSeconds", "environment", "environmentId", "errorCode", "errorMessage", "eventData", "eventName", "eventType", "externalRewriteTargetHost", "externalRewriteTargetPath", "fetchIndex", "fetchType", "flagClientName", "flagEvaluationReason", "flagKey", "flagVariant", "flags", "functionDispatcher", "functionRegion", "functionStartType", "gatewayCostCurrency", "generationId", "hipaaRequested", "httpAccept", "httpStatus", "imageSource", "imageTransformationRegion", "inferenceEndpointSlug", "inferenceGeoRegion", "inferenceProviderRegion", "inferenceScope", "isAdditionalRequest", "isByok", "isPrefetchRequest", "isPrivateModel", "isRequestZdr", "isStreaming", "isrAction", "isrCacheRegion", "keyId", "keyName", "marketCostCurrency", "messageId", "metricName", "microfrontendsDefaultAppDeploymentId", "microfrontendsDefaultAppProjectId", "microfrontendsMatchedPath", "microfrontendsResponseReason", "middlewareAction", "middlewareActionTarget", "moderationApplied", "networkId", "networkTenancy", "notificationUrl", "optimizedFormatMimeType", "optimizedQuality", "optimizedWidthPixels", "originHostname", "originPath", "originRoute", "osName", "pathType", "pathTypeVariant", "piiRedactionApplied", "pprState", "privatelinkDnsName", "privatelinkEndpointId", "privatelinkIpAddress", "projectId", "projectName", "provider", "providerAttemptCanonicalSlug", "providerAttemptCredentialType", "providerAttemptDevSafetyIdentifier", "providerAttemptError", "providerAttemptIsFinal", "providerAttemptModelIndex", "providerAttemptNumber", "providerAttemptRegion", "providerAttemptSafetyIdentifier", "providerAttemptStatusCode", "providerAttemptSuccess", "providerAttemptTimeout", "providerAttemptTotalInRequest", "pullRequestNumber", "pullRequestState", "queueName", "queueRegion", "quotaEntityId", "quotaEntityType", "quotaRequested", "reason", "redirectLocation", "referrerHostname", "referrerUrl", "region", "reportingProjectId", "reportingProjectName", "repositoryName", "repositoryOwner", "requestApi", "requestExtension", "requestHostname", "requestId", "requestMethod", "requestPath", "requestResolvedIp", "requestedInferenceRegion", "reviewConclusion", "reviewStatus", "rewriteDestinationHostname", "route", "ruleCategory", "runtime", "sandboxName", "sandboxSessionId", "sdkKeyEnvironment", "sdkKeyId", "servedSpeed", "serverActionName", "service", "sessionId", "skewProtection", "source", "sourceImage", "sourceImageHash", "sourceImageHostname", "sourceImagePathname", "specVersion", "spendAttribution", "spendReportDatePart", "spendReportGroupBy", "stepRunId", "storeId", "storeName", "surchargeCostCurrency", "tagName", "toolCallErrorType", "toolCallProvider", "toolCallStatusCode", "toolCallSuccess", "toolCallType", "trafficSource", "transcriptInputs", "transcriptOutputs", "transcriptStatus", "triggeringTag", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm", "vdcOperationOrigin", "videoAspectRatio", "videoResolution", "virtualModelKind", "virtualModelSlug", "visitorId", "wafAction", "wafRuleId", "workflowEventType", "workflowName", "workflowRunId", "workflowStatus", "workflowStepName" ], "type": "object", "additionalProperties": { "nullable": true, "type": "number" } }, "type": "array" } ] }, "query": { "properties": { "filter": { "type": "string" }, "groupBy": { "items": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "browserName", "country", "deviceType", "environment", "flags", "osName", "referrerHostname", "requestPath", "route", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm" ] } ] }, "type": "array" }, "limit": { "type": "number" }, "since": { "type": "string" }, "until": { "type": "string" } }, "required": [ "limit", "since", "until" ], "type": "object" }, "version": { "type": "number" } }, "required": [ "data", "query", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project identifier or the project name", "in": "query", "required": true, "schema": { "description": "The project identifier or the project name", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA", "type": "string" } }, { "name": "by", "description": "Up to two dimensions used to break down results.\n\nAt most one time granularity is allowed: hour, day, week, month, year.\n\nOther dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions: flags. Used bare, it breaks down results by key, for example flags returns one group per flag name. With a key, it breaks down results by that key's value, for example flags/beta_banner. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag'.", "in": "query", "required": true, "schema": { "description": "Up to two dimensions used to break down results.\n\nAt most one time granularity is allowed: hour, day, week, month, year.\n\nOther dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions: flags. Used bare, it breaks down results by key, for example flags returns one group per flag name. With a key, it breaks down results by that key's value, for example flags/beta_banner. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag'.", "example": [ "day", "country" ], "type": "array", "minItems": 1, "maxItems": 2, "uniqueItems": true, "items": { "type": "string", "anyOf": [ { "enum": [ "hour", "day", "week", "month", "year", "country", "deviceType", "environment", "requestPath", "referrerHostname", "osName", "browserName", "route", "utmSource", "utmMedium", "utmCampaign", "utmContent", "utmTerm", "flags" ] }, { "pattern": "^(flags)(/([0-9A-Za-z_]+|'([^']|'')*'))+$" } ], "errorMessage": "`by` items should be equal to one of the allowed values \"hour, day, week, month, year, country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, flags\", or a JSON dimension key such as \"flags/\"" } } }, { "name": "since", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": true, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-01T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "until", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": true, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-08T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "limit", "description": "Number of distinct results, default to 10. Other results are grouped into \"Others\" group.", "in": "query", "required": false, "schema": { "description": "Number of distinct results, default to 10. Other results are grouped into \"Others\" group.", "default": 10, "example": 3, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "filter", "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions. By default, filters for production environment only.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions filtered by key: flags/, for example flags/beta_banner eq 'true'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "in": "query", "required": false, "schema": { "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions. By default, filters for production environment only.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions filtered by key: flags/, for example flags/beta_banner eq 'true'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "example": "requestPath eq '/docs'", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "aggregatePageviews", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webAnalytics.aggregatePageviews({\n projectId: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n by: [\n \"day\",\n \"country\",\n ],\n since: \"2024-09-01T00:00:00.000Z\",\n until: \"2024-09-08T00:00:00.000Z\",\n limit: 3,\n filter: \"requestPath eq '/docs'\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/query/web-analytics/events/aggregate": { "get": { "description": "Counts custom events on a project, within the requested date range. Results are either aggregated or broken down over time. Results can additionally be broken down by one dimension, and filtered by multiple dimensions.", "operationId": "aggregateEvents", "security": [ { "bearerToken": [] } ], "summary": "Aggregates custom events", "tags": [ "web-analytics" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "items": { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } }, "type": "object", "required": [ "timestamp" ] }, "type": "array" }, { "items": { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" } }, "required": [ "aiGatewayModelId", "aiModel", "aiModelType", "aiProvider", "appName", "asnId", "asnName", "attributes", "attributionEventName", "attributionTarget", "authMethod", "billableRegion", "blobOperationLevel", "blobOperationType", "botCategory", "botCategoryLegacy", "botCheckResult", "botName", "botVerified", "browserName", "cacheApi", "cacheCreation1hInputTokensCurrency", "cacheCreationInputTokensCurrency", "cacheHitLevel", "cacheHitState", "cacheHostname", "cacheOperation", "cachePath", "cacheReason", "cacheResult", "cacheTags", "cachedInputTokensCurrency", "cause", "clientIp", "clientIpCountry", "clientJa4Digest", "clientUserAgent", "codingAgent", "commitSha", "consumerGroup", "contentCaptureInputs", "contentCaptureOutputs", "contentCaptureStatus", "contentType", "costCurrency", "country", "dataCacheRegion", "deepAnalysisCheck", "deploymentId", "deviceType", "direction", "edgeNetworkRegion", "edgeType", "entryId", "entryItemId", "entryName", "entryRevalidateSeconds", "environment", "environmentId", "errorCode", "errorMessage", "eventData", "eventName", "eventType", "externalRewriteTargetHost", "externalRewriteTargetPath", "fetchIndex", "fetchType", "flagClientName", "flagEvaluationReason", "flagKey", "flagVariant", "flags", "functionDispatcher", "functionRegion", "functionStartType", "gatewayCostCurrency", "generationId", "hipaaRequested", "httpAccept", "httpStatus", "imageSource", "imageTransformationRegion", "inferenceEndpointSlug", "inferenceGeoRegion", "inferenceProviderRegion", "inferenceScope", "isAdditionalRequest", "isByok", "isPrefetchRequest", "isPrivateModel", "isRequestZdr", "isStreaming", "isrAction", "isrCacheRegion", "keyId", "keyName", "marketCostCurrency", "messageId", "metricName", "microfrontendsDefaultAppDeploymentId", "microfrontendsDefaultAppProjectId", "microfrontendsMatchedPath", "microfrontendsResponseReason", "middlewareAction", "middlewareActionTarget", "moderationApplied", "networkId", "networkTenancy", "notificationUrl", "optimizedFormatMimeType", "optimizedQuality", "optimizedWidthPixels", "originHostname", "originPath", "originRoute", "osName", "pathType", "pathTypeVariant", "piiRedactionApplied", "pprState", "privatelinkDnsName", "privatelinkEndpointId", "privatelinkIpAddress", "projectId", "projectName", "provider", "providerAttemptCanonicalSlug", "providerAttemptCredentialType", "providerAttemptDevSafetyIdentifier", "providerAttemptError", "providerAttemptIsFinal", "providerAttemptModelIndex", "providerAttemptNumber", "providerAttemptRegion", "providerAttemptSafetyIdentifier", "providerAttemptStatusCode", "providerAttemptSuccess", "providerAttemptTimeout", "providerAttemptTotalInRequest", "pullRequestNumber", "pullRequestState", "queueName", "queueRegion", "quotaEntityId", "quotaEntityType", "quotaRequested", "reason", "redirectLocation", "referrerHostname", "referrerUrl", "region", "reportingProjectId", "reportingProjectName", "repositoryName", "repositoryOwner", "requestApi", "requestExtension", "requestHostname", "requestId", "requestMethod", "requestPath", "requestResolvedIp", "requestedInferenceRegion", "reviewConclusion", "reviewStatus", "rewriteDestinationHostname", "route", "ruleCategory", "runtime", "sandboxName", "sandboxSessionId", "sdkKeyEnvironment", "sdkKeyId", "servedSpeed", "serverActionName", "service", "sessionId", "skewProtection", "source", "sourceImage", "sourceImageHash", "sourceImageHostname", "sourceImagePathname", "specVersion", "spendAttribution", "spendReportDatePart", "spendReportGroupBy", "stepRunId", "storeId", "storeName", "surchargeCostCurrency", "tagName", "toolCallErrorType", "toolCallProvider", "toolCallStatusCode", "toolCallSuccess", "toolCallType", "trafficSource", "transcriptInputs", "transcriptOutputs", "transcriptStatus", "triggeringTag", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm", "vdcOperationOrigin", "videoAspectRatio", "videoResolution", "virtualModelKind", "virtualModelSlug", "visitorId", "wafAction", "wafRuleId", "workflowEventType", "workflowName", "workflowRunId", "workflowStatus", "workflowStepName" ], "type": "object", "additionalProperties": { "nullable": true, "type": "number" } }, "type": "array" } ] }, "query": { "properties": { "filter": { "type": "string" }, "groupBy": { "items": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "browserName", "country", "deviceType", "environment", "eventData", "eventName", "flags", "osName", "referrerHostname", "requestPath", "route", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm" ] } ] }, "type": "array" }, "limit": { "type": "number" }, "since": { "type": "string" }, "until": { "type": "string" } }, "required": [ "limit", "since", "until" ], "type": "object" }, "version": { "type": "number" } }, "required": [ "data", "query", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project identifier or the project name", "in": "query", "required": true, "schema": { "description": "The project identifier or the project name", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA", "type": "string" } }, { "name": "by", "description": "Up to two dimensions used to break down results.\n\nAt most one time granularity is allowed: hour, day, week, month, year.\n\nOther dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions: flags, eventData. Used bare, they break down results by key, for example flags returns one group per flag name. With a key, they break down results by that key's value, for example eventData/plan. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag'.", "in": "query", "required": true, "schema": { "description": "Up to two dimensions used to break down results.\n\nAt most one time granularity is allowed: hour, day, week, month, year.\n\nOther dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions: flags, eventData. Used bare, they break down results by key, for example flags returns one group per flag name. With a key, they break down results by that key's value, for example eventData/plan. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag'.", "example": [ "day", "eventName" ], "type": "array", "minItems": 1, "maxItems": 2, "uniqueItems": true, "items": { "type": "string", "anyOf": [ { "enum": [ "hour", "day", "week", "month", "year", "country", "deviceType", "environment", "requestPath", "referrerHostname", "osName", "browserName", "route", "utmSource", "utmMedium", "utmCampaign", "utmContent", "utmTerm", "eventName", "flags", "eventData" ] }, { "pattern": "^(flags|eventData)(/([0-9A-Za-z_]+|'([^']|'')*'))+$" } ], "errorMessage": "`by` items should be equal to one of the allowed values \"hour, day, week, month, year, country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName, flags, eventData\", or a JSON dimension key such as \"flags/, eventData/\"" } } }, { "name": "since", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": true, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-01T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "until", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": true, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-08T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "limit", "description": "Number of distinct results, default to 10. Other results are grouped into \"Others\" group.", "in": "query", "required": false, "schema": { "description": "Number of distinct results, default to 10. Other results are grouped into \"Others\" group.", "default": 10, "example": 3, "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "filter", "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions. By default, filters for production environment only.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions filtered by key: flags/, eventData/, for example eventData/plan eq 'pro'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "in": "query", "required": false, "schema": { "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions. By default, filters for production environment only.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions filtered by key: flags/, eventData/, for example eventData/plan eq 'pro'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "example": "eventData/plan eq 'pro'", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "aggregateEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webAnalytics.aggregateEvents({\n projectId: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n by: [\n \"day\",\n \"eventName\",\n ],\n since: \"2024-09-01T00:00:00.000Z\",\n until: \"2024-09-08T00:00:00.000Z\",\n limit: 3,\n filter: \"eventData/plan eq 'pro'\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/query/web-analytics/visits/count": { "get": { "description": "Counts the number of page views on a project (production only), since Web Analytics was enabled. Results can be filtered on supported dimensions.", "operationId": "countPageviews", "security": [ { "bearerToken": [] } ], "summary": "Counts page views", "tags": [ "web-analytics" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" } }, "required": [ "aiGatewayModelId", "aiModel", "aiModelType", "aiProvider", "appName", "asnId", "asnName", "attributes", "attributionEventName", "attributionTarget", "authMethod", "billableRegion", "blobOperationLevel", "blobOperationType", "botCategory", "botCategoryLegacy", "botCheckResult", "botName", "botVerified", "browserName", "cacheApi", "cacheCreation1hInputTokensCurrency", "cacheCreationInputTokensCurrency", "cacheHitLevel", "cacheHitState", "cacheHostname", "cacheOperation", "cachePath", "cacheReason", "cacheResult", "cacheTags", "cachedInputTokensCurrency", "cause", "clientIp", "clientIpCountry", "clientJa4Digest", "clientUserAgent", "codingAgent", "commitSha", "consumerGroup", "contentCaptureInputs", "contentCaptureOutputs", "contentCaptureStatus", "contentType", "costCurrency", "country", "dataCacheRegion", "deepAnalysisCheck", "deploymentId", "deviceType", "direction", "edgeNetworkRegion", "edgeType", "entryId", "entryItemId", "entryName", "entryRevalidateSeconds", "environment", "environmentId", "errorCode", "errorMessage", "eventData", "eventName", "eventType", "externalRewriteTargetHost", "externalRewriteTargetPath", "fetchIndex", "fetchType", "flagClientName", "flagEvaluationReason", "flagKey", "flagVariant", "flags", "functionDispatcher", "functionRegion", "functionStartType", "gatewayCostCurrency", "generationId", "hipaaRequested", "httpAccept", "httpStatus", "imageSource", "imageTransformationRegion", "inferenceEndpointSlug", "inferenceGeoRegion", "inferenceProviderRegion", "inferenceScope", "isAdditionalRequest", "isByok", "isPrefetchRequest", "isPrivateModel", "isRequestZdr", "isStreaming", "isrAction", "isrCacheRegion", "keyId", "keyName", "marketCostCurrency", "messageId", "metricName", "microfrontendsDefaultAppDeploymentId", "microfrontendsDefaultAppProjectId", "microfrontendsMatchedPath", "microfrontendsResponseReason", "middlewareAction", "middlewareActionTarget", "moderationApplied", "networkId", "networkTenancy", "notificationUrl", "optimizedFormatMimeType", "optimizedQuality", "optimizedWidthPixels", "originHostname", "originPath", "originRoute", "osName", "pathType", "pathTypeVariant", "piiRedactionApplied", "pprState", "privatelinkDnsName", "privatelinkEndpointId", "privatelinkIpAddress", "projectId", "projectName", "provider", "providerAttemptCanonicalSlug", "providerAttemptCredentialType", "providerAttemptDevSafetyIdentifier", "providerAttemptError", "providerAttemptIsFinal", "providerAttemptModelIndex", "providerAttemptNumber", "providerAttemptRegion", "providerAttemptSafetyIdentifier", "providerAttemptStatusCode", "providerAttemptSuccess", "providerAttemptTimeout", "providerAttemptTotalInRequest", "pullRequestNumber", "pullRequestState", "queueName", "queueRegion", "quotaEntityId", "quotaEntityType", "quotaRequested", "reason", "redirectLocation", "referrerHostname", "referrerUrl", "region", "reportingProjectId", "reportingProjectName", "repositoryName", "repositoryOwner", "requestApi", "requestExtension", "requestHostname", "requestId", "requestMethod", "requestPath", "requestResolvedIp", "requestedInferenceRegion", "reviewConclusion", "reviewStatus", "rewriteDestinationHostname", "route", "ruleCategory", "runtime", "sandboxName", "sandboxSessionId", "sdkKeyEnvironment", "sdkKeyId", "servedSpeed", "serverActionName", "service", "sessionId", "skewProtection", "source", "sourceImage", "sourceImageHash", "sourceImageHostname", "sourceImagePathname", "specVersion", "spendAttribution", "spendReportDatePart", "spendReportGroupBy", "stepRunId", "storeId", "storeName", "surchargeCostCurrency", "tagName", "toolCallErrorType", "toolCallProvider", "toolCallStatusCode", "toolCallSuccess", "toolCallType", "trafficSource", "transcriptInputs", "transcriptOutputs", "transcriptStatus", "triggeringTag", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm", "vdcOperationOrigin", "videoAspectRatio", "videoResolution", "virtualModelKind", "virtualModelSlug", "visitorId", "wafAction", "wafRuleId", "workflowEventType", "workflowName", "workflowRunId", "workflowStatus", "workflowStepName" ], "type": "object", "additionalProperties": { "nullable": true, "type": "number" } }, { "properties": { "pageviews": { "type": "number" }, "visitors": { "type": "number" } }, "required": [ "pageviews", "visitors" ], "type": "object" } ] }, "query": { "properties": { "filter": { "type": "string" }, "since": { "type": "string" }, "until": { "type": "string" } }, "required": [ "since", "until" ], "type": "object" }, "version": { "type": "number" } }, "required": [ "data", "query", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project identifier or the project name", "in": "query", "required": true, "schema": { "description": "The project identifier or the project name", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA", "type": "string" } }, { "name": "since", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-01T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "until", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-08T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "filter", "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions filtered by key: flags/, for example flags/beta_banner eq 'true'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "in": "query", "required": false, "schema": { "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm.\n\nJSON dimensions filtered by key: flags/, for example flags/beta_banner eq 'true'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "example": "route eq '/home'", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "countPageviews", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webAnalytics.countPageviews({\n projectId: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n since: \"2024-09-01T00:00:00.000Z\",\n until: \"2024-09-08T00:00:00.000Z\",\n filter: \"route eq '/home'\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/query/web-analytics/events/count": { "get": { "description": "Counts the number of custom events on a project (production only), since Web Analytics was enabled. Results can be filtered on supported dimensions.", "operationId": "countEvents", "security": [ { "bearerToken": [] } ], "summary": "Counts custom events", "tags": [ "web-analytics" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "properties": { "aiGatewayModelId": { "type": "string" }, "aiModel": { "type": "string" }, "aiModelType": { "type": "string" }, "aiProvider": { "type": "string" }, "appName": { "type": "string" }, "asnId": { "type": "string" }, "asnName": { "type": "string" }, "attributes": { "type": "string" }, "attributionEventName": { "type": "string" }, "attributionTarget": { "type": "string" }, "authMethod": { "type": "string" }, "billableRegion": { "type": "string" }, "blobOperationLevel": { "type": "string" }, "blobOperationType": { "type": "string" }, "botCategory": { "type": "string" }, "botCategoryLegacy": { "type": "string" }, "botCheckResult": { "type": "string" }, "botName": { "type": "string" }, "botVerified": { "type": "string" }, "browserName": { "type": "string" }, "cacheApi": { "type": "string" }, "cacheCreation1hInputTokensCurrency": { "type": "string" }, "cacheCreationInputTokensCurrency": { "type": "string" }, "cachedInputTokensCurrency": { "type": "string" }, "cacheHitLevel": { "type": "string" }, "cacheHitState": { "type": "string" }, "cacheHostname": { "type": "string" }, "cacheOperation": { "type": "string" }, "cachePath": { "type": "string" }, "cacheReason": { "type": "string" }, "cacheResult": { "type": "string" }, "cacheTags": { "type": "string" }, "cause": { "type": "string" }, "clientIp": { "type": "string" }, "clientIpCountry": { "type": "string" }, "clientJa4Digest": { "type": "string" }, "clientUserAgent": { "type": "string" }, "codingAgent": { "type": "string" }, "commitSha": { "type": "string" }, "consumerGroup": { "type": "string" }, "contentCaptureInputs": { "type": "string" }, "contentCaptureOutputs": { "type": "string" }, "contentCaptureStatus": { "type": "string" }, "contentType": { "type": "string" }, "costCurrency": { "type": "string" }, "country": { "type": "string" }, "dataCacheRegion": { "type": "string" }, "deepAnalysisCheck": { "type": "string" }, "deploymentId": { "type": "string" }, "deviceType": { "type": "string" }, "direction": { "type": "string" }, "edgeNetworkRegion": { "type": "string" }, "edgeType": { "type": "string" }, "entryId": { "type": "string" }, "entryItemId": { "type": "string" }, "entryName": { "type": "string" }, "entryRevalidateSeconds": { "type": "string" }, "environment": { "type": "string" }, "environmentId": { "type": "string" }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, "eventData": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "externalRewriteTargetHost": { "type": "string" }, "externalRewriteTargetPath": { "type": "string" }, "fetchIndex": { "type": "string" }, "fetchType": { "type": "string" }, "flagClientName": { "type": "string" }, "flagEvaluationReason": { "type": "string" }, "flagKey": { "type": "string" }, "flags": { "type": "string" }, "flagVariant": { "type": "string" }, "functionDispatcher": { "type": "string" }, "functionRegion": { "type": "string" }, "functionStartType": { "type": "string" }, "gatewayCostCurrency": { "type": "string" }, "generationId": { "type": "string" }, "hipaaRequested": { "type": "string" }, "httpAccept": { "type": "string" }, "httpStatus": { "type": "string" }, "imageSource": { "type": "string" }, "imageTransformationRegion": { "type": "string" }, "inferenceEndpointSlug": { "type": "string" }, "inferenceGeoRegion": { "type": "string" }, "inferenceProviderRegion": { "type": "string" }, "inferenceScope": { "type": "string" }, "isAdditionalRequest": { "type": "string" }, "isByok": { "type": "string" }, "isPrefetchRequest": { "type": "string" }, "isPrivateModel": { "type": "string" }, "isrAction": { "type": "string" }, "isrCacheRegion": { "type": "string" }, "isRequestZdr": { "type": "string" }, "isStreaming": { "type": "string" }, "keyId": { "type": "string" }, "keyName": { "type": "string" }, "marketCostCurrency": { "type": "string" }, "messageId": { "type": "string" }, "metricName": { "type": "string" }, "microfrontendsDefaultAppDeploymentId": { "type": "string" }, "microfrontendsDefaultAppProjectId": { "type": "string" }, "microfrontendsMatchedPath": { "type": "string" }, "microfrontendsResponseReason": { "type": "string" }, "middlewareAction": { "type": "string" }, "middlewareActionTarget": { "type": "string" }, "moderationApplied": { "type": "string" }, "networkId": { "type": "string" }, "networkTenancy": { "type": "string" }, "notificationUrl": { "type": "string" }, "optimizedFormatMimeType": { "type": "string" }, "optimizedQuality": { "type": "string" }, "optimizedWidthPixels": { "type": "string" }, "originHostname": { "type": "string" }, "originPath": { "type": "string" }, "originRoute": { "type": "string" }, "osName": { "type": "string" }, "pathType": { "type": "string" }, "pathTypeVariant": { "type": "string" }, "piiRedactionApplied": { "type": "string" }, "pprState": { "type": "string" }, "privatelinkDnsName": { "type": "string" }, "privatelinkEndpointId": { "type": "string" }, "privatelinkIpAddress": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "provider": { "type": "string" }, "providerAttemptCanonicalSlug": { "type": "string" }, "providerAttemptCredentialType": { "type": "string" }, "providerAttemptDevSafetyIdentifier": { "type": "string" }, "providerAttemptError": { "type": "string" }, "providerAttemptIsFinal": { "type": "string" }, "providerAttemptModelIndex": { "type": "string" }, "providerAttemptNumber": { "type": "string" }, "providerAttemptRegion": { "type": "string" }, "providerAttemptSafetyIdentifier": { "type": "string" }, "providerAttemptStatusCode": { "type": "string" }, "providerAttemptSuccess": { "type": "string" }, "providerAttemptTimeout": { "type": "string" }, "providerAttemptTotalInRequest": { "type": "string" }, "pullRequestNumber": { "type": "string" }, "pullRequestState": { "type": "string" }, "queueName": { "type": "string" }, "queueRegion": { "type": "string" }, "quotaEntityId": { "type": "string" }, "quotaEntityType": { "type": "string" }, "quotaRequested": { "type": "string" }, "reason": { "type": "string" }, "redirectLocation": { "type": "string" }, "referrerHostname": { "type": "string" }, "referrerUrl": { "type": "string" }, "region": { "type": "string" }, "reportingProjectId": { "type": "string" }, "reportingProjectName": { "type": "string" }, "repositoryName": { "type": "string" }, "repositoryOwner": { "type": "string" }, "requestApi": { "type": "string" }, "requestedInferenceRegion": { "type": "string" }, "requestExtension": { "type": "string" }, "requestHostname": { "type": "string" }, "requestId": { "type": "string" }, "requestMethod": { "type": "string" }, "requestPath": { "type": "string" }, "requestResolvedIp": { "type": "string" }, "reviewConclusion": { "type": "string" }, "reviewStatus": { "type": "string" }, "rewriteDestinationHostname": { "type": "string" }, "route": { "type": "string" }, "ruleCategory": { "type": "string" }, "runtime": { "type": "string" }, "sandboxName": { "type": "string" }, "sandboxSessionId": { "type": "string" }, "sdkKeyEnvironment": { "type": "string" }, "sdkKeyId": { "type": "string" }, "servedSpeed": { "type": "string" }, "serverActionName": { "type": "string" }, "service": { "type": "string" }, "sessionId": { "type": "string" }, "skewProtection": { "type": "string" }, "source": { "type": "string" }, "sourceImage": { "type": "string" }, "sourceImageHash": { "type": "string" }, "sourceImageHostname": { "type": "string" }, "sourceImagePathname": { "type": "string" }, "specVersion": { "type": "string" }, "spendAttribution": { "type": "string" }, "spendReportDatePart": { "type": "string" }, "spendReportGroupBy": { "type": "string" }, "stepRunId": { "type": "string" }, "storeId": { "type": "string" }, "storeName": { "type": "string" }, "surchargeCostCurrency": { "type": "string" }, "tagName": { "type": "string" }, "toolCallErrorType": { "type": "string" }, "toolCallProvider": { "type": "string" }, "toolCallStatusCode": { "type": "string" }, "toolCallSuccess": { "type": "string" }, "toolCallType": { "type": "string" }, "trafficSource": { "type": "string" }, "transcriptInputs": { "type": "string" }, "transcriptOutputs": { "type": "string" }, "transcriptStatus": { "type": "string" }, "triggeringTag": { "type": "string" }, "utmCampaign": { "type": "string" }, "utmContent": { "type": "string" }, "utmMedium": { "type": "string" }, "utmSource": { "type": "string" }, "utmTerm": { "type": "string" }, "vdcOperationOrigin": { "type": "string" }, "videoAspectRatio": { "type": "string" }, "videoResolution": { "type": "string" }, "virtualModelKind": { "type": "string" }, "virtualModelSlug": { "type": "string" }, "visitorId": { "type": "string" }, "wafAction": { "type": "string" }, "wafRuleId": { "type": "string" }, "workflowEventType": { "type": "string" }, "workflowName": { "type": "string" }, "workflowRunId": { "type": "string" }, "workflowStatus": { "type": "string" }, "workflowStepName": { "type": "string" } }, "required": [ "aiGatewayModelId", "aiModel", "aiModelType", "aiProvider", "appName", "asnId", "asnName", "attributes", "attributionEventName", "attributionTarget", "authMethod", "billableRegion", "blobOperationLevel", "blobOperationType", "botCategory", "botCategoryLegacy", "botCheckResult", "botName", "botVerified", "browserName", "cacheApi", "cacheCreation1hInputTokensCurrency", "cacheCreationInputTokensCurrency", "cacheHitLevel", "cacheHitState", "cacheHostname", "cacheOperation", "cachePath", "cacheReason", "cacheResult", "cacheTags", "cachedInputTokensCurrency", "cause", "clientIp", "clientIpCountry", "clientJa4Digest", "clientUserAgent", "codingAgent", "commitSha", "consumerGroup", "contentCaptureInputs", "contentCaptureOutputs", "contentCaptureStatus", "contentType", "costCurrency", "country", "dataCacheRegion", "deepAnalysisCheck", "deploymentId", "deviceType", "direction", "edgeNetworkRegion", "edgeType", "entryId", "entryItemId", "entryName", "entryRevalidateSeconds", "environment", "environmentId", "errorCode", "errorMessage", "eventData", "eventName", "eventType", "externalRewriteTargetHost", "externalRewriteTargetPath", "fetchIndex", "fetchType", "flagClientName", "flagEvaluationReason", "flagKey", "flagVariant", "flags", "functionDispatcher", "functionRegion", "functionStartType", "gatewayCostCurrency", "generationId", "hipaaRequested", "httpAccept", "httpStatus", "imageSource", "imageTransformationRegion", "inferenceEndpointSlug", "inferenceGeoRegion", "inferenceProviderRegion", "inferenceScope", "isAdditionalRequest", "isByok", "isPrefetchRequest", "isPrivateModel", "isRequestZdr", "isStreaming", "isrAction", "isrCacheRegion", "keyId", "keyName", "marketCostCurrency", "messageId", "metricName", "microfrontendsDefaultAppDeploymentId", "microfrontendsDefaultAppProjectId", "microfrontendsMatchedPath", "microfrontendsResponseReason", "middlewareAction", "middlewareActionTarget", "moderationApplied", "networkId", "networkTenancy", "notificationUrl", "optimizedFormatMimeType", "optimizedQuality", "optimizedWidthPixels", "originHostname", "originPath", "originRoute", "osName", "pathType", "pathTypeVariant", "piiRedactionApplied", "pprState", "privatelinkDnsName", "privatelinkEndpointId", "privatelinkIpAddress", "projectId", "projectName", "provider", "providerAttemptCanonicalSlug", "providerAttemptCredentialType", "providerAttemptDevSafetyIdentifier", "providerAttemptError", "providerAttemptIsFinal", "providerAttemptModelIndex", "providerAttemptNumber", "providerAttemptRegion", "providerAttemptSafetyIdentifier", "providerAttemptStatusCode", "providerAttemptSuccess", "providerAttemptTimeout", "providerAttemptTotalInRequest", "pullRequestNumber", "pullRequestState", "queueName", "queueRegion", "quotaEntityId", "quotaEntityType", "quotaRequested", "reason", "redirectLocation", "referrerHostname", "referrerUrl", "region", "reportingProjectId", "reportingProjectName", "repositoryName", "repositoryOwner", "requestApi", "requestExtension", "requestHostname", "requestId", "requestMethod", "requestPath", "requestResolvedIp", "requestedInferenceRegion", "reviewConclusion", "reviewStatus", "rewriteDestinationHostname", "route", "ruleCategory", "runtime", "sandboxName", "sandboxSessionId", "sdkKeyEnvironment", "sdkKeyId", "servedSpeed", "serverActionName", "service", "sessionId", "skewProtection", "source", "sourceImage", "sourceImageHash", "sourceImageHostname", "sourceImagePathname", "specVersion", "spendAttribution", "spendReportDatePart", "spendReportGroupBy", "stepRunId", "storeId", "storeName", "surchargeCostCurrency", "tagName", "toolCallErrorType", "toolCallProvider", "toolCallStatusCode", "toolCallSuccess", "toolCallType", "trafficSource", "transcriptInputs", "transcriptOutputs", "transcriptStatus", "triggeringTag", "utmCampaign", "utmContent", "utmMedium", "utmSource", "utmTerm", "vdcOperationOrigin", "videoAspectRatio", "videoResolution", "virtualModelKind", "virtualModelSlug", "visitorId", "wafAction", "wafRuleId", "workflowEventType", "workflowName", "workflowRunId", "workflowStatus", "workflowStepName" ], "type": "object", "additionalProperties": { "nullable": true, "type": "number" } }, { "properties": { "count": { "type": "number" }, "visitors": { "type": "number" } }, "required": [ "count", "visitors" ], "type": "object" } ] }, "query": { "properties": { "filter": { "type": "string" }, "since": { "type": "string" }, "until": { "type": "string" } }, "required": [ "since", "until" ], "type": "object" }, "version": { "type": "number" } }, "required": [ "data", "query", "version" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "503": { "description": "" } }, "parameters": [ { "name": "projectId", "description": "The project identifier or the project name", "in": "query", "required": true, "schema": { "description": "The project identifier or the project name", "example": "prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA", "type": "string" } }, { "name": "since", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data from (including) this date and time.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-01T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "until", "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "in": "query", "required": false, "schema": { "description": "Timestamp in milliseconds, or a valid Date string.\n\nSelects data until (including) this date.\nWill be adjusted according to the desired time granularity.", "example": "2024-09-08T00:00:00.000Z", "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, { "name": "filter", "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions filtered by key: flags/, eventData/, for example eventData/plan eq 'pro'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "in": "query", "required": false, "schema": { "description": "OData-compliant filter. Encode the value when sending it in a URL.\n\nAllows filtering on one or multiple dimensions.\n\nSupported dimensions: country, deviceType, environment, requestPath, referrerHostname, osName, browserName, route, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, eventName.\n\nJSON dimensions filtered by key: flags/, eventData/, for example eventData/plan eq 'pro'. Wrap keys containing characters other than letters, digits, and underscores in single quotes, for example flags/'my-flag' eq 'true'.\n\nSupported operations include eq, ne, in, and logical operators and, or, not with parentheses. Functions such as startswith are supported by the OData parser.", "example": "eventName eq 'signup'", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "countEvents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webAnalytics.countEvents({\n projectId: \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n since: \"2024-09-01T00:00:00.000Z\",\n until: \"2024-09-08T00:00:00.000Z\",\n filter: \"eventName eq 'signup'\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v1/webhooks": { "post": { "description": "Creates a webhook", "operationId": "createWebhook", "security": [ { "bearerToken": [] } ], "summary": "Creates a webhook", "tags": [ "webhooks" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "alertRuleIds": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number", "description": "A number containing the date when the webhook was created in in milliseconds", "example": 1567024758130 }, "events": { "items": { "type": "string", "enum": [ "ai-gateway.auto-reload.limit-reached", "ai-gateway.balance-depleted", "alerts.triggered", "botid.anomaly", "budget.reached", "comment.created", "comment.deleted", "comment.mentioned", "comment.reaction-added", "comment.reaction-removed", "comment.resolved", "comment.unresolved", "comment.updated", "deployment", "deployment-canceled", "deployment-check-rerequested", "deployment-checks-completed", "deployment-error", "deployment-prepared", "deployment-ready", "deployment.blocked", "deployment.build-requested", "deployment.canceled", "deployment.check-rerequested", "deployment.checkrun.cancel", "deployment.checkrun.start", "deployment.checks.failed", "deployment.checks.succeeded", "deployment.cleanup", "deployment.created", "deployment.error", "deployment.integration.action.cancel", "deployment.integration.action.cleanup", "deployment.integration.action.start", "deployment.promoted", "deployment.ready", "deployment.rollback", "deployment.succeeded", "domain-created", "domain.auto-renew.changed", "domain.certificate.add", "domain.certificate.add.failed", "domain.certificate.deleted", "domain.certificate.renew", "domain.certificate.renew.failed", "domain.created", "domain.dns.records.changed", "domain.renewal", "domain.renewal.failed", "domain.transfer-in.completed", "domain.transfer-in.failed", "domain.transfer-in.started", "edge-config.created", "edge-config.deleted", "edge-config.items.updated", "firewall.attack", "firewall.custom-rule-anomaly", "firewall.system-rule-anomaly", "flag.created", "flag.deleted", "flag.segment.created", "flag.segment.deleted", "flag.segment.updated", "flag.updated", "function.archival-required", "function.removal-required", "integration-configuration-permission-updated", "integration-configuration-removed", "integration-configuration-scope-change-confirmed", "integration-configuration.permission-upgraded", "integration-configuration.removed", "integration-configuration.scope-change-confirmed", "integration-configuration.transferred", "integration-resource.project-connected", "integration-resource.project-disconnected", "marketplace.invoice.created", "marketplace.invoice.notpaid", "marketplace.invoice.overdue", "marketplace.invoice.paid", "marketplace.invoice.refunded", "marketplace.member.changed", "message.created", "message.deleted", "message.mentioned", "message.reaction-added", "message.reaction-removed", "message.updated", "observability.anomaly", "observability.anomaly-error", "observability.error-anomaly", "observability.usage-anomaly", "project-created", "project-removed", "project.created", "project.domain.created", "project.domain.deleted", "project.domain.moved", "project.domain.unverified", "project.domain.updated", "project.domain.verified", "project.env-variable.created", "project.env-variable.deleted", "project.env-variable.updated", "project.removed", "project.renamed", "project.rolling-release.aborted", "project.rolling-release.approved", "project.rolling-release.completed", "project.rolling-release.started", "test-webhook", "thread.resolved", "thread.unresolved" ], "example": "deployment.created", "description": "The webhooks events", "x-speakeasy-enums": { "budget.reached": "BudgetReached", "domain.created": "DomainCreated", "domain.dns.records.changed": "DomainDnsRecordsChanged", "domain.transfer-in.started": "DomainTransferInStarted", "domain.transfer-in.completed": "DomainTransferInCompleted", "domain.transfer-in.failed": "DomainTransferInFailed", "domain.certificate.add": "DomainCertificateAdd", "domain.certificate.add.failed": "DomainCertificateAddFailed", "domain.certificate.renew": "DomainCertificateRenew", "domain.certificate.renew.failed": "DomainCertificateRenewFailed", "domain.certificate.deleted": "DomainCertificateDeleted", "domain.renewal": "DomainRenewal", "domain.renewal.failed": "DomainRenewalFailed", "domain.auto-renew.changed": "DomainAutoRenewChanged", "deployment.created": "DeploymentCreated", "deployment.cleanup": "DeploymentCleanup", "deployment.error": "DeploymentError", "deployment.canceled": "DeploymentCanceled", "deployment.succeeded": "DeploymentSucceeded", "deployment.ready": "DeploymentReady", "deployment.check-rerequested": "DeploymentCheckRerequested", "deployment.promoted": "DeploymentPromoted", "deployment.integration.action.start": "DeploymentIntegrationActionStart", "deployment.integration.action.cancel": "DeploymentIntegrationActionCancel", "deployment.integration.action.cleanup": "DeploymentIntegrationActionCleanup", "deployment.checkrun.start": "DeploymentCheckrunStart", "deployment.checkrun.cancel": "DeploymentCheckrunCancel", "edge-config.created": "EdgeConfigCreated", "edge-config.deleted": "EdgeConfigDeleted", "edge-config.items.updated": "EdgeConfigItemsUpdated", "firewall.attack": "FirewallAttack", "integration-configuration.permission-upgraded": "IntegrationConfigurationPermissionUpgraded", "integration-configuration.removed": "IntegrationConfigurationRemoved", "integration-configuration.scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmed", "integration-resource.project-connected": "IntegrationResourceProjectConnected", "integration-resource.project-disconnected": "IntegrationResourceProjectDisconnected", "project.created": "ProjectCreated", "project.removed": "ProjectRemoved", "project.domain.created": "ProjectDomainCreated", "project.domain.updated": "ProjectDomainUpdated", "project.domain.deleted": "ProjectDomainDeleted", "project.domain.verified": "ProjectDomainVerified", "project.domain.unverified": "ProjectDomainUnverified", "project.domain.moved": "ProjectDomainMoved", "project.rolling-release.started": "ProjectRollingReleaseStarted", "project.rolling-release.aborted": "ProjectRollingReleaseAborted", "project.rolling-release.completed": "ProjectRollingReleaseCompleted", "project.rolling-release.approved": "ProjectRollingReleaseApproved", "deployment.checks.failed": "DeploymentChecksFailed", "deployment.checks.succeeded": "DeploymentChecksSucceeded", "deployment-checks-completed": "DeploymentChecksCompleted", "deployment-ready": "DeploymentReadyHyphen", "deployment-prepared": "DeploymentPreparedHyphen", "deployment-error": "DeploymentErrorHyphen", "deployment-check-rerequested": "DeploymentCheckRerequestedHyphen", "deployment-canceled": "DeploymentCanceledHyphen", "project-created": "ProjectCreatedHyphen", "project-removed": "ProjectRemovedHyphen", "domain-created": "DomainCreatedHyphen", "deployment": "Deployment", "integration-configuration-permission-updated": "IntegrationConfigurationPermissionUpdatedHyphen", "integration-configuration-removed": "IntegrationConfigurationRemovedHyphen", "integration-configuration-scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmedHyphen", "marketplace.invoice.created": "MarketplaceInvoiceCreated", "marketplace.invoice.paid": "MarketplaceInvoicePaid", "marketplace.invoice.notpaid": "MarketplaceInvoiceNotpaid", "marketplace.invoice.refunded": "MarketplaceInvoiceRefunded", "observability.anomaly": "ObservabilityAnomaly", "observability.anomaly-error": "ObservabilityAnomalyError", "test-webhook": "TestWebhook" } }, "type": "array", "description": "The webhooks events", "example": "deployment.created" }, "id": { "type": "string", "description": "The webhook id", "example": "account_hook_GflD6EYyo7F4ViYS" }, "ownerId": { "type": "string", "description": "The unique ID of the team the webhook belongs to", "example": "ZspSRT4ljIEEmMHgoDwKWDei" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The ID of the projects the webhook is associated with", "example": [ "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" ] }, "secret": { "type": "string", "description": "The webhook secret used to sign the payload" }, "updatedAt": { "type": "number", "description": "A number containing the date when the webhook was updated in in milliseconds", "example": 1567024758130 }, "url": { "type": "string", "description": "A string with the URL of the webhook", "example": "https://my-webhook.com" } }, "required": [ "createdAt", "events", "id", "ownerId", "secret", "updatedAt", "url" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "required": [ "url", "events" ], "properties": { "url": { "format": "uri", "pattern": "^https?://", "type": "string" }, "events": { "minItems": 1, "type": "array", "items": { "type": "string", "enum": [ "budget.reached", "domain.created", "domain.dns.records.changed", "domain.transfer-in.started", "domain.transfer-in.completed", "domain.transfer-in.failed", "domain.certificate.add", "domain.certificate.add.failed", "domain.certificate.renew", "domain.certificate.renew.failed", "domain.certificate.deleted", "domain.renewal", "domain.renewal.failed", "domain.auto-renew.changed", "deployment.created", "deployment.build-requested", "deployment.cleanup", "deployment.error", "deployment.blocked", "deployment.canceled", "deployment.succeeded", "deployment.ready", "deployment.check-rerequested", "deployment.promoted", "deployment.rollback", "deployment.integration.action.start", "deployment.integration.action.cancel", "deployment.integration.action.cleanup", "deployment.checkrun.start", "deployment.checkrun.cancel", "edge-config.created", "edge-config.deleted", "edge-config.items.updated", "firewall.attack", "firewall.system-rule-anomaly", "firewall.custom-rule-anomaly", "function.archival-required", "function.removal-required", "alerts.triggered", "integration-configuration.permission-upgraded", "integration-configuration.removed", "integration-configuration.scope-change-confirmed", "integration-configuration.transferred", "integration-resource.project-connected", "integration-resource.project-disconnected", "project.created", "project.removed", "project.renamed", "project.env-variable.created", "project.env-variable.updated", "project.env-variable.deleted", "project.domain.created", "project.domain.updated", "project.domain.deleted", "project.domain.verified", "project.domain.unverified", "project.domain.moved", "project.rolling-release.started", "project.rolling-release.aborted", "project.rolling-release.completed", "project.rolling-release.approved", "deployment.checks.failed", "deployment.checks.succeeded", "deployment-checks-completed", "deployment-ready", "deployment-prepared", "deployment-error", "deployment-check-rerequested", "deployment-canceled", "project-created", "project-removed", "domain-created", "deployment", "integration-configuration-permission-updated", "integration-configuration-removed", "integration-configuration-scope-change-confirmed", "marketplace.member.changed", "marketplace.invoice.created", "marketplace.invoice.paid", "marketplace.invoice.notpaid", "marketplace.invoice.overdue", "marketplace.invoice.refunded", "ai-gateway.balance-depleted", "ai-gateway.auto-reload.limit-reached", "observability.anomaly", "observability.anomaly-error", "observability.usage-anomaly", "observability.error-anomaly", "botid.anomaly", "flag.created", "flag.updated", "flag.deleted", "flag.segment.created", "flag.segment.updated", "flag.segment.deleted", "test-webhook", "message.created", "message.updated", "message.deleted", "thread.resolved", "thread.unresolved", "message.reaction-added", "message.reaction-removed", "message.mentioned", "comment.created", "comment.updated", "comment.deleted", "comment.resolved", "comment.unresolved", "comment.reaction-added", "comment.reaction-removed", "comment.mentioned" ], "x-speakeasy-enums": { "budget.reached": "BudgetReached", "domain.created": "DomainCreated", "domain.dns.records.changed": "DomainDnsRecordsChanged", "domain.transfer-in.started": "DomainTransferInStarted", "domain.transfer-in.completed": "DomainTransferInCompleted", "domain.transfer-in.failed": "DomainTransferInFailed", "domain.certificate.add": "DomainCertificateAdd", "domain.certificate.add.failed": "DomainCertificateAddFailed", "domain.certificate.renew": "DomainCertificateRenew", "domain.certificate.renew.failed": "DomainCertificateRenewFailed", "domain.certificate.deleted": "DomainCertificateDeleted", "domain.renewal": "DomainRenewal", "domain.renewal.failed": "DomainRenewalFailed", "domain.auto-renew.changed": "DomainAutoRenewChanged", "deployment.created": "DeploymentCreated", "deployment.cleanup": "DeploymentCleanup", "deployment.error": "DeploymentError", "deployment.canceled": "DeploymentCanceled", "deployment.succeeded": "DeploymentSucceeded", "deployment.ready": "DeploymentReady", "deployment.check-rerequested": "DeploymentCheckRerequested", "deployment.promoted": "DeploymentPromoted", "deployment.integration.action.start": "DeploymentIntegrationActionStart", "deployment.integration.action.cancel": "DeploymentIntegrationActionCancel", "deployment.integration.action.cleanup": "DeploymentIntegrationActionCleanup", "deployment.checkrun.start": "DeploymentCheckrunStart", "deployment.checkrun.cancel": "DeploymentCheckrunCancel", "edge-config.created": "EdgeConfigCreated", "edge-config.deleted": "EdgeConfigDeleted", "edge-config.items.updated": "EdgeConfigItemsUpdated", "firewall.attack": "FirewallAttack", "integration-configuration.permission-upgraded": "IntegrationConfigurationPermissionUpgraded", "integration-configuration.removed": "IntegrationConfigurationRemoved", "integration-configuration.scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmed", "integration-resource.project-connected": "IntegrationResourceProjectConnected", "integration-resource.project-disconnected": "IntegrationResourceProjectDisconnected", "project.created": "ProjectCreated", "project.removed": "ProjectRemoved", "project.domain.created": "ProjectDomainCreated", "project.domain.updated": "ProjectDomainUpdated", "project.domain.deleted": "ProjectDomainDeleted", "project.domain.verified": "ProjectDomainVerified", "project.domain.unverified": "ProjectDomainUnverified", "project.domain.moved": "ProjectDomainMoved", "project.rolling-release.started": "ProjectRollingReleaseStarted", "project.rolling-release.aborted": "ProjectRollingReleaseAborted", "project.rolling-release.completed": "ProjectRollingReleaseCompleted", "project.rolling-release.approved": "ProjectRollingReleaseApproved", "deployment.checks.failed": "DeploymentChecksFailed", "deployment.checks.succeeded": "DeploymentChecksSucceeded", "deployment-checks-completed": "DeploymentChecksCompleted", "deployment-ready": "DeploymentReadyHyphen", "deployment-prepared": "DeploymentPreparedHyphen", "deployment-error": "DeploymentErrorHyphen", "deployment-check-rerequested": "DeploymentCheckRerequestedHyphen", "deployment-canceled": "DeploymentCanceledHyphen", "project-created": "ProjectCreatedHyphen", "project-removed": "ProjectRemovedHyphen", "domain-created": "DomainCreatedHyphen", "deployment": "Deployment", "integration-configuration-permission-updated": "IntegrationConfigurationPermissionUpdatedHyphen", "integration-configuration-removed": "IntegrationConfigurationRemovedHyphen", "integration-configuration-scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmedHyphen", "marketplace.invoice.created": "MarketplaceInvoiceCreated", "marketplace.invoice.paid": "MarketplaceInvoicePaid", "marketplace.invoice.notpaid": "MarketplaceInvoiceNotpaid", "marketplace.invoice.refunded": "MarketplaceInvoiceRefunded", "observability.anomaly": "ObservabilityAnomaly", "observability.anomaly-error": "ObservabilityAnomalyError", "test-webhook": "TestWebhook" } } }, "projectIds": { "minItems": 1, "maxItems": 50, "type": "array", "items": { "pattern": "^[a-zA-z0-9_]+$", "type": "string" } } } } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "createWebhook", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webhooks.createWebhook({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n url: \"https://experienced-sailor.biz/\",\n events: [\n \"deployment.promoted\",\n \"deployment.error\",\n \"deployment.integration.action.cancel\",\n ],\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "createWebhook", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Webhooks.CreateWebhook(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "get": { "description": "Get a list of webhooks", "operationId": "getWebhooks", "security": [ { "bearerToken": [] } ], "summary": "Get a list of webhooks", "tags": [ "webhooks" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { "items": { "properties": { "alertRuleIds": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number", "description": "A number containing the date when the webhook was created in in milliseconds", "example": 1567024758130 }, "events": { "items": { "type": "string", "enum": [ "ai-gateway.auto-reload.limit-reached", "ai-gateway.balance-depleted", "alerts.triggered", "botid.anomaly", "budget.reached", "comment.created", "comment.deleted", "comment.mentioned", "comment.reaction-added", "comment.reaction-removed", "comment.resolved", "comment.unresolved", "comment.updated", "deployment", "deployment-canceled", "deployment-check-rerequested", "deployment-checks-completed", "deployment-error", "deployment-prepared", "deployment-ready", "deployment.blocked", "deployment.build-requested", "deployment.canceled", "deployment.check-rerequested", "deployment.checkrun.cancel", "deployment.checkrun.start", "deployment.checks.failed", "deployment.checks.succeeded", "deployment.cleanup", "deployment.created", "deployment.error", "deployment.integration.action.cancel", "deployment.integration.action.cleanup", "deployment.integration.action.start", "deployment.promoted", "deployment.ready", "deployment.rollback", "deployment.succeeded", "domain-created", "domain.auto-renew.changed", "domain.certificate.add", "domain.certificate.add.failed", "domain.certificate.deleted", "domain.certificate.renew", "domain.certificate.renew.failed", "domain.created", "domain.dns.records.changed", "domain.renewal", "domain.renewal.failed", "domain.transfer-in.completed", "domain.transfer-in.failed", "domain.transfer-in.started", "edge-config.created", "edge-config.deleted", "edge-config.items.updated", "firewall.attack", "firewall.custom-rule-anomaly", "firewall.system-rule-anomaly", "flag.created", "flag.deleted", "flag.segment.created", "flag.segment.deleted", "flag.segment.updated", "flag.updated", "function.archival-required", "function.removal-required", "integration-configuration-permission-updated", "integration-configuration-removed", "integration-configuration-scope-change-confirmed", "integration-configuration.permission-upgraded", "integration-configuration.removed", "integration-configuration.scope-change-confirmed", "integration-configuration.transferred", "integration-resource.project-connected", "integration-resource.project-disconnected", "marketplace.invoice.created", "marketplace.invoice.notpaid", "marketplace.invoice.overdue", "marketplace.invoice.paid", "marketplace.invoice.refunded", "marketplace.member.changed", "message.created", "message.deleted", "message.mentioned", "message.reaction-added", "message.reaction-removed", "message.updated", "observability.anomaly", "observability.anomaly-error", "observability.error-anomaly", "observability.usage-anomaly", "project-created", "project-removed", "project.created", "project.domain.created", "project.domain.deleted", "project.domain.moved", "project.domain.unverified", "project.domain.updated", "project.domain.verified", "project.env-variable.created", "project.env-variable.deleted", "project.env-variable.updated", "project.removed", "project.renamed", "project.rolling-release.aborted", "project.rolling-release.approved", "project.rolling-release.completed", "project.rolling-release.started", "test-webhook", "thread.resolved", "thread.unresolved" ], "example": "deployment.created", "description": "The webhooks events", "x-speakeasy-enums": { "budget.reached": "BudgetReached", "domain.created": "DomainCreated", "domain.dns.records.changed": "DomainDnsRecordsChanged", "domain.transfer-in.started": "DomainTransferInStarted", "domain.transfer-in.completed": "DomainTransferInCompleted", "domain.transfer-in.failed": "DomainTransferInFailed", "domain.certificate.add": "DomainCertificateAdd", "domain.certificate.add.failed": "DomainCertificateAddFailed", "domain.certificate.renew": "DomainCertificateRenew", "domain.certificate.renew.failed": "DomainCertificateRenewFailed", "domain.certificate.deleted": "DomainCertificateDeleted", "domain.renewal": "DomainRenewal", "domain.renewal.failed": "DomainRenewalFailed", "domain.auto-renew.changed": "DomainAutoRenewChanged", "deployment.created": "DeploymentCreated", "deployment.cleanup": "DeploymentCleanup", "deployment.error": "DeploymentError", "deployment.canceled": "DeploymentCanceled", "deployment.succeeded": "DeploymentSucceeded", "deployment.ready": "DeploymentReady", "deployment.check-rerequested": "DeploymentCheckRerequested", "deployment.promoted": "DeploymentPromoted", "deployment.integration.action.start": "DeploymentIntegrationActionStart", "deployment.integration.action.cancel": "DeploymentIntegrationActionCancel", "deployment.integration.action.cleanup": "DeploymentIntegrationActionCleanup", "deployment.checkrun.start": "DeploymentCheckrunStart", "deployment.checkrun.cancel": "DeploymentCheckrunCancel", "edge-config.created": "EdgeConfigCreated", "edge-config.deleted": "EdgeConfigDeleted", "edge-config.items.updated": "EdgeConfigItemsUpdated", "firewall.attack": "FirewallAttack", "integration-configuration.permission-upgraded": "IntegrationConfigurationPermissionUpgraded", "integration-configuration.removed": "IntegrationConfigurationRemoved", "integration-configuration.scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmed", "integration-resource.project-connected": "IntegrationResourceProjectConnected", "integration-resource.project-disconnected": "IntegrationResourceProjectDisconnected", "project.created": "ProjectCreated", "project.removed": "ProjectRemoved", "project.domain.created": "ProjectDomainCreated", "project.domain.updated": "ProjectDomainUpdated", "project.domain.deleted": "ProjectDomainDeleted", "project.domain.verified": "ProjectDomainVerified", "project.domain.unverified": "ProjectDomainUnverified", "project.domain.moved": "ProjectDomainMoved", "project.rolling-release.started": "ProjectRollingReleaseStarted", "project.rolling-release.aborted": "ProjectRollingReleaseAborted", "project.rolling-release.completed": "ProjectRollingReleaseCompleted", "project.rolling-release.approved": "ProjectRollingReleaseApproved", "deployment.checks.failed": "DeploymentChecksFailed", "deployment.checks.succeeded": "DeploymentChecksSucceeded", "deployment-checks-completed": "DeploymentChecksCompleted", "deployment-ready": "DeploymentReadyHyphen", "deployment-prepared": "DeploymentPreparedHyphen", "deployment-error": "DeploymentErrorHyphen", "deployment-check-rerequested": "DeploymentCheckRerequestedHyphen", "deployment-canceled": "DeploymentCanceledHyphen", "project-created": "ProjectCreatedHyphen", "project-removed": "ProjectRemovedHyphen", "domain-created": "DomainCreatedHyphen", "deployment": "Deployment", "integration-configuration-permission-updated": "IntegrationConfigurationPermissionUpdatedHyphen", "integration-configuration-removed": "IntegrationConfigurationRemovedHyphen", "integration-configuration-scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmedHyphen", "marketplace.invoice.created": "MarketplaceInvoiceCreated", "marketplace.invoice.paid": "MarketplaceInvoicePaid", "marketplace.invoice.notpaid": "MarketplaceInvoiceNotpaid", "marketplace.invoice.refunded": "MarketplaceInvoiceRefunded", "observability.anomaly": "ObservabilityAnomaly", "observability.anomaly-error": "ObservabilityAnomalyError", "test-webhook": "TestWebhook" } }, "type": "array", "description": "The webhooks events", "example": "deployment.created" }, "id": { "type": "string", "description": "The webhook id", "example": "account_hook_GflD6EYyo7F4ViYS" }, "ownerId": { "type": "string", "description": "The unique ID of the team the webhook belongs to", "example": "ZspSRT4ljIEEmMHgoDwKWDei" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The ID of the projects the webhook is associated with", "example": [ "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" ] }, "projectsMetadata": { "nullable": true, "items": { "properties": { "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "id": { "type": "string" }, "latestDeployment": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" }, "updatedAt": { "type": "number", "description": "A number containing the date when the webhook was updated in in milliseconds", "example": 1567024758130 }, "url": { "type": "string", "description": "A string with the URL of the webhook", "example": "https://my-webhook.com" } }, "required": [ "createdAt", "events", "id", "ownerId", "projectsMetadata", "updatedAt", "url" ], "type": "object" }, "type": "array" }, { "items": { "properties": { "alertRuleIds": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number", "description": "A number containing the date when the webhook was created in in milliseconds", "example": 1567024758130 }, "events": { "items": { "type": "string", "enum": [ "ai-gateway.auto-reload.limit-reached", "ai-gateway.balance-depleted", "alerts.triggered", "botid.anomaly", "budget.reached", "comment.created", "comment.deleted", "comment.mentioned", "comment.reaction-added", "comment.reaction-removed", "comment.resolved", "comment.unresolved", "comment.updated", "deployment", "deployment-canceled", "deployment-check-rerequested", "deployment-checks-completed", "deployment-error", "deployment-prepared", "deployment-ready", "deployment.blocked", "deployment.build-requested", "deployment.canceled", "deployment.check-rerequested", "deployment.checkrun.cancel", "deployment.checkrun.start", "deployment.checks.failed", "deployment.checks.succeeded", "deployment.cleanup", "deployment.created", "deployment.error", "deployment.integration.action.cancel", "deployment.integration.action.cleanup", "deployment.integration.action.start", "deployment.promoted", "deployment.ready", "deployment.rollback", "deployment.succeeded", "domain-created", "domain.auto-renew.changed", "domain.certificate.add", "domain.certificate.add.failed", "domain.certificate.deleted", "domain.certificate.renew", "domain.certificate.renew.failed", "domain.created", "domain.dns.records.changed", "domain.renewal", "domain.renewal.failed", "domain.transfer-in.completed", "domain.transfer-in.failed", "domain.transfer-in.started", "edge-config.created", "edge-config.deleted", "edge-config.items.updated", "firewall.attack", "firewall.custom-rule-anomaly", "firewall.system-rule-anomaly", "flag.created", "flag.deleted", "flag.segment.created", "flag.segment.deleted", "flag.segment.updated", "flag.updated", "function.archival-required", "function.removal-required", "integration-configuration-permission-updated", "integration-configuration-removed", "integration-configuration-scope-change-confirmed", "integration-configuration.permission-upgraded", "integration-configuration.removed", "integration-configuration.scope-change-confirmed", "integration-configuration.transferred", "integration-resource.project-connected", "integration-resource.project-disconnected", "marketplace.invoice.created", "marketplace.invoice.notpaid", "marketplace.invoice.overdue", "marketplace.invoice.paid", "marketplace.invoice.refunded", "marketplace.member.changed", "message.created", "message.deleted", "message.mentioned", "message.reaction-added", "message.reaction-removed", "message.updated", "observability.anomaly", "observability.anomaly-error", "observability.error-anomaly", "observability.usage-anomaly", "project-created", "project-removed", "project.created", "project.domain.created", "project.domain.deleted", "project.domain.moved", "project.domain.unverified", "project.domain.updated", "project.domain.verified", "project.env-variable.created", "project.env-variable.deleted", "project.env-variable.updated", "project.removed", "project.renamed", "project.rolling-release.aborted", "project.rolling-release.approved", "project.rolling-release.completed", "project.rolling-release.started", "test-webhook", "thread.resolved", "thread.unresolved" ], "example": "deployment.created", "description": "The webhooks events", "x-speakeasy-enums": { "budget.reached": "BudgetReached", "domain.created": "DomainCreated", "domain.dns.records.changed": "DomainDnsRecordsChanged", "domain.transfer-in.started": "DomainTransferInStarted", "domain.transfer-in.completed": "DomainTransferInCompleted", "domain.transfer-in.failed": "DomainTransferInFailed", "domain.certificate.add": "DomainCertificateAdd", "domain.certificate.add.failed": "DomainCertificateAddFailed", "domain.certificate.renew": "DomainCertificateRenew", "domain.certificate.renew.failed": "DomainCertificateRenewFailed", "domain.certificate.deleted": "DomainCertificateDeleted", "domain.renewal": "DomainRenewal", "domain.renewal.failed": "DomainRenewalFailed", "domain.auto-renew.changed": "DomainAutoRenewChanged", "deployment.created": "DeploymentCreated", "deployment.cleanup": "DeploymentCleanup", "deployment.error": "DeploymentError", "deployment.canceled": "DeploymentCanceled", "deployment.succeeded": "DeploymentSucceeded", "deployment.ready": "DeploymentReady", "deployment.check-rerequested": "DeploymentCheckRerequested", "deployment.promoted": "DeploymentPromoted", "deployment.integration.action.start": "DeploymentIntegrationActionStart", "deployment.integration.action.cancel": "DeploymentIntegrationActionCancel", "deployment.integration.action.cleanup": "DeploymentIntegrationActionCleanup", "deployment.checkrun.start": "DeploymentCheckrunStart", "deployment.checkrun.cancel": "DeploymentCheckrunCancel", "edge-config.created": "EdgeConfigCreated", "edge-config.deleted": "EdgeConfigDeleted", "edge-config.items.updated": "EdgeConfigItemsUpdated", "firewall.attack": "FirewallAttack", "integration-configuration.permission-upgraded": "IntegrationConfigurationPermissionUpgraded", "integration-configuration.removed": "IntegrationConfigurationRemoved", "integration-configuration.scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmed", "integration-resource.project-connected": "IntegrationResourceProjectConnected", "integration-resource.project-disconnected": "IntegrationResourceProjectDisconnected", "project.created": "ProjectCreated", "project.removed": "ProjectRemoved", "project.domain.created": "ProjectDomainCreated", "project.domain.updated": "ProjectDomainUpdated", "project.domain.deleted": "ProjectDomainDeleted", "project.domain.verified": "ProjectDomainVerified", "project.domain.unverified": "ProjectDomainUnverified", "project.domain.moved": "ProjectDomainMoved", "project.rolling-release.started": "ProjectRollingReleaseStarted", "project.rolling-release.aborted": "ProjectRollingReleaseAborted", "project.rolling-release.completed": "ProjectRollingReleaseCompleted", "project.rolling-release.approved": "ProjectRollingReleaseApproved", "deployment.checks.failed": "DeploymentChecksFailed", "deployment.checks.succeeded": "DeploymentChecksSucceeded", "deployment-checks-completed": "DeploymentChecksCompleted", "deployment-ready": "DeploymentReadyHyphen", "deployment-prepared": "DeploymentPreparedHyphen", "deployment-error": "DeploymentErrorHyphen", "deployment-check-rerequested": "DeploymentCheckRerequestedHyphen", "deployment-canceled": "DeploymentCanceledHyphen", "project-created": "ProjectCreatedHyphen", "project-removed": "ProjectRemovedHyphen", "domain-created": "DomainCreatedHyphen", "deployment": "Deployment", "integration-configuration-permission-updated": "IntegrationConfigurationPermissionUpdatedHyphen", "integration-configuration-removed": "IntegrationConfigurationRemovedHyphen", "integration-configuration-scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmedHyphen", "marketplace.invoice.created": "MarketplaceInvoiceCreated", "marketplace.invoice.paid": "MarketplaceInvoicePaid", "marketplace.invoice.notpaid": "MarketplaceInvoiceNotpaid", "marketplace.invoice.refunded": "MarketplaceInvoiceRefunded", "observability.anomaly": "ObservabilityAnomaly", "observability.anomaly-error": "ObservabilityAnomalyError", "test-webhook": "TestWebhook" } }, "type": "array", "description": "The webhooks events", "example": "deployment.created" }, "id": { "type": "string", "description": "The webhook id", "example": "account_hook_GflD6EYyo7F4ViYS" }, "ownerId": { "type": "string", "description": "The unique ID of the team the webhook belongs to", "example": "ZspSRT4ljIEEmMHgoDwKWDei" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The ID of the projects the webhook is associated with", "example": [ "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" ] }, "updatedAt": { "type": "number", "description": "A number containing the date when the webhook was updated in in milliseconds", "example": 1567024758130 }, "url": { "type": "string", "description": "A string with the URL of the webhook", "example": "https://my-webhook.com" } }, "required": [ "createdAt", "events", "id", "ownerId", "updatedAt", "url" ], "type": "object" }, "type": "array" } ] } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "projectId", "in": "query", "schema": { "pattern": "^[a-zA-z0-9_]+$", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getWebhooks", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webhooks.getWebhooks({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getWebhooks", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Webhooks.GetWebhooks(ctx, nil, nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.OneOf != nil {\n // handle response\n }\n}" } ] } }, "/v1/webhooks/{id}": { "get": { "description": "Get a webhook", "operationId": "getWebhook", "security": [ { "bearerToken": [] } ], "summary": "Get a webhook", "tags": [ "webhooks" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "alertRuleIds": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number", "description": "A number containing the date when the webhook was created in in milliseconds", "example": 1567024758130 }, "events": { "items": { "type": "string", "enum": [ "ai-gateway.auto-reload.limit-reached", "ai-gateway.balance-depleted", "alerts.triggered", "botid.anomaly", "budget.reached", "comment.created", "comment.deleted", "comment.mentioned", "comment.reaction-added", "comment.reaction-removed", "comment.resolved", "comment.unresolved", "comment.updated", "deployment", "deployment-canceled", "deployment-check-rerequested", "deployment-checks-completed", "deployment-error", "deployment-prepared", "deployment-ready", "deployment.blocked", "deployment.build-requested", "deployment.canceled", "deployment.check-rerequested", "deployment.checkrun.cancel", "deployment.checkrun.start", "deployment.checks.failed", "deployment.checks.succeeded", "deployment.cleanup", "deployment.created", "deployment.error", "deployment.integration.action.cancel", "deployment.integration.action.cleanup", "deployment.integration.action.start", "deployment.promoted", "deployment.ready", "deployment.rollback", "deployment.succeeded", "domain-created", "domain.auto-renew.changed", "domain.certificate.add", "domain.certificate.add.failed", "domain.certificate.deleted", "domain.certificate.renew", "domain.certificate.renew.failed", "domain.created", "domain.dns.records.changed", "domain.renewal", "domain.renewal.failed", "domain.transfer-in.completed", "domain.transfer-in.failed", "domain.transfer-in.started", "edge-config.created", "edge-config.deleted", "edge-config.items.updated", "firewall.attack", "firewall.custom-rule-anomaly", "firewall.system-rule-anomaly", "flag.created", "flag.deleted", "flag.segment.created", "flag.segment.deleted", "flag.segment.updated", "flag.updated", "function.archival-required", "function.removal-required", "integration-configuration-permission-updated", "integration-configuration-removed", "integration-configuration-scope-change-confirmed", "integration-configuration.permission-upgraded", "integration-configuration.removed", "integration-configuration.scope-change-confirmed", "integration-configuration.transferred", "integration-resource.project-connected", "integration-resource.project-disconnected", "marketplace.invoice.created", "marketplace.invoice.notpaid", "marketplace.invoice.overdue", "marketplace.invoice.paid", "marketplace.invoice.refunded", "marketplace.member.changed", "message.created", "message.deleted", "message.mentioned", "message.reaction-added", "message.reaction-removed", "message.updated", "observability.anomaly", "observability.anomaly-error", "observability.error-anomaly", "observability.usage-anomaly", "project-created", "project-removed", "project.created", "project.domain.created", "project.domain.deleted", "project.domain.moved", "project.domain.unverified", "project.domain.updated", "project.domain.verified", "project.env-variable.created", "project.env-variable.deleted", "project.env-variable.updated", "project.removed", "project.renamed", "project.rolling-release.aborted", "project.rolling-release.approved", "project.rolling-release.completed", "project.rolling-release.started", "test-webhook", "thread.resolved", "thread.unresolved" ], "example": "deployment.created", "description": "The webhooks events", "x-speakeasy-enums": { "budget.reached": "BudgetReached", "domain.created": "DomainCreated", "domain.dns.records.changed": "DomainDnsRecordsChanged", "domain.transfer-in.started": "DomainTransferInStarted", "domain.transfer-in.completed": "DomainTransferInCompleted", "domain.transfer-in.failed": "DomainTransferInFailed", "domain.certificate.add": "DomainCertificateAdd", "domain.certificate.add.failed": "DomainCertificateAddFailed", "domain.certificate.renew": "DomainCertificateRenew", "domain.certificate.renew.failed": "DomainCertificateRenewFailed", "domain.certificate.deleted": "DomainCertificateDeleted", "domain.renewal": "DomainRenewal", "domain.renewal.failed": "DomainRenewalFailed", "domain.auto-renew.changed": "DomainAutoRenewChanged", "deployment.created": "DeploymentCreated", "deployment.cleanup": "DeploymentCleanup", "deployment.error": "DeploymentError", "deployment.canceled": "DeploymentCanceled", "deployment.succeeded": "DeploymentSucceeded", "deployment.ready": "DeploymentReady", "deployment.check-rerequested": "DeploymentCheckRerequested", "deployment.promoted": "DeploymentPromoted", "deployment.integration.action.start": "DeploymentIntegrationActionStart", "deployment.integration.action.cancel": "DeploymentIntegrationActionCancel", "deployment.integration.action.cleanup": "DeploymentIntegrationActionCleanup", "deployment.checkrun.start": "DeploymentCheckrunStart", "deployment.checkrun.cancel": "DeploymentCheckrunCancel", "edge-config.created": "EdgeConfigCreated", "edge-config.deleted": "EdgeConfigDeleted", "edge-config.items.updated": "EdgeConfigItemsUpdated", "firewall.attack": "FirewallAttack", "integration-configuration.permission-upgraded": "IntegrationConfigurationPermissionUpgraded", "integration-configuration.removed": "IntegrationConfigurationRemoved", "integration-configuration.scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmed", "integration-resource.project-connected": "IntegrationResourceProjectConnected", "integration-resource.project-disconnected": "IntegrationResourceProjectDisconnected", "project.created": "ProjectCreated", "project.removed": "ProjectRemoved", "project.domain.created": "ProjectDomainCreated", "project.domain.updated": "ProjectDomainUpdated", "project.domain.deleted": "ProjectDomainDeleted", "project.domain.verified": "ProjectDomainVerified", "project.domain.unverified": "ProjectDomainUnverified", "project.domain.moved": "ProjectDomainMoved", "project.rolling-release.started": "ProjectRollingReleaseStarted", "project.rolling-release.aborted": "ProjectRollingReleaseAborted", "project.rolling-release.completed": "ProjectRollingReleaseCompleted", "project.rolling-release.approved": "ProjectRollingReleaseApproved", "deployment.checks.failed": "DeploymentChecksFailed", "deployment.checks.succeeded": "DeploymentChecksSucceeded", "deployment-checks-completed": "DeploymentChecksCompleted", "deployment-ready": "DeploymentReadyHyphen", "deployment-prepared": "DeploymentPreparedHyphen", "deployment-error": "DeploymentErrorHyphen", "deployment-check-rerequested": "DeploymentCheckRerequestedHyphen", "deployment-canceled": "DeploymentCanceledHyphen", "project-created": "ProjectCreatedHyphen", "project-removed": "ProjectRemovedHyphen", "domain-created": "DomainCreatedHyphen", "deployment": "Deployment", "integration-configuration-permission-updated": "IntegrationConfigurationPermissionUpdatedHyphen", "integration-configuration-removed": "IntegrationConfigurationRemovedHyphen", "integration-configuration-scope-change-confirmed": "IntegrationConfigurationScopeChangeConfirmedHyphen", "marketplace.invoice.created": "MarketplaceInvoiceCreated", "marketplace.invoice.paid": "MarketplaceInvoicePaid", "marketplace.invoice.notpaid": "MarketplaceInvoiceNotpaid", "marketplace.invoice.refunded": "MarketplaceInvoiceRefunded", "observability.anomaly": "ObservabilityAnomaly", "observability.anomaly-error": "ObservabilityAnomalyError", "test-webhook": "TestWebhook" } }, "type": "array", "description": "The webhooks events", "example": "deployment.created" }, "id": { "type": "string", "description": "The webhook id", "example": "account_hook_GflD6EYyo7F4ViYS" }, "ownerId": { "type": "string", "description": "The unique ID of the team the webhook belongs to", "example": "ZspSRT4ljIEEmMHgoDwKWDei" }, "projectIds": { "items": { "type": "string" }, "type": "array", "description": "The ID of the projects the webhook is associated with", "example": [ "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" ] }, "updatedAt": { "type": "number", "description": "A number containing the date when the webhook was updated in in milliseconds", "example": 1567024758130 }, "url": { "type": "string", "description": "A string with the URL of the webhook", "example": "https://my-webhook.com" } }, "required": [ "createdAt", "events", "id", "ownerId", "updatedAt", "url" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getWebhook", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.webhooks.getWebhook({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getWebhook", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Webhooks.GetWebhook(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "delete": { "description": "Deletes a webhook", "operationId": "deleteWebhook", "security": [ { "bearerToken": [] } ], "summary": "Deletes a webhook", "tags": [ "webhooks" ], "responses": { "204": { "description": "" }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteWebhook", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.webhooks.deleteWebhook({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" }, { "lang": "go", "label": "deleteWebhook", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Webhooks.DeleteWebhook(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res != nil {\n // handle response\n }\n}" } ] } }, "/v2/deployments/{id}/aliases": { "get": { "description": "Retrieves all Aliases for the Deployment with the given ID. The authenticated user or team must own the deployment.", "operationId": "listDeploymentAliases", "security": [ { "bearerToken": [] } ], "summary": "List Deployment Aliases", "tags": [ "aliases" ], "responses": { "200": { "description": "The list of aliases assigned to the deployment", "content": { "application/json": { "schema": { "properties": { "aliases": { "items": { "properties": { "alias": { "type": "string", "description": "The alias name, it could be a `.vercel.app` subdomain or a custom domain", "example": "my-alias.vercel.app" }, "created": { "type": "string", "format": "date-time", "description": "The date when the alias was created", "example": "2017-04-26T23:00:34.232Z" }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "expires": { "type": "number" }, "scope": { "type": "string", "enum": [ "shareable-link" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "access": { "type": "string", "enum": [ "granted", "requested" ] }, "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "user" ] } }, "required": [ "access", "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "alias-protection-override" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "email_invite" ] } }, "required": [ "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" } ] }, "type": "object", "description": "The protection bypass for the alias" }, "redirect": { "nullable": true, "type": "string", "description": "Target destination domain for redirect when the alias is a redirect" }, "uid": { "type": "string", "description": "The unique identifier of the alias", "example": "2WjyKQmM8ZnGcJsPWMrHRHrE" } }, "required": [ "alias", "created", "uid" ], "type": "object", "description": "A list of the aliases assigned to the deployment" }, "type": "array", "description": "A list of the aliases assigned to the deployment" } }, "required": [ "aliases" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "for-deployment" ] }, "parameters": [ { "name": "id", "description": "The ID of the deployment the aliases should be listed for", "in": "path", "required": true, "schema": { "example": "dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa", "description": "The ID of the deployment the aliases should be listed for", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listDeploymentAliases", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.listDeploymentAliases({\n id: \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listDeploymentAliases", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Aliases.ListDeploymentAliases(ctx, \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] }, "post": { "description": "Creates a new alias for the deployment resolved from the given deployment or alias ID or URL. The authenticated user or team must own this deployment. If the desired alias is already assigned to another deployment, then it will be removed from the old deployment and assigned to the new one.", "operationId": "assignAlias", "security": [ { "bearerToken": [] } ], "summary": "Assign an Alias", "tags": [ "aliases" ], "responses": { "200": { "description": "The alias was successfully assigned to the deployment", "content": { "application/json": { "schema": { "properties": { "alias": { "type": "string", "description": "The assigned alias name", "example": "my-alias.vercel.app" }, "created": { "type": "string", "format": "date-time", "description": "The date when the alias was created", "example": "2017-04-26T23:00:34.232Z" }, "oldDeploymentId": { "nullable": true, "type": "string", "description": "The unique identifier of the previously aliased deployment, only received when the alias was used before", "example": "dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa" }, "uid": { "type": "string", "description": "The unique identifier of the alias", "example": "2WjyKQmM8ZnGcJsPWMrHRHrE" } }, "required": [ "alias", "created", "uid" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid.\nThe cert for the provided alias is not ready\nThe deployment is not READY and can not be aliased\nThe supplied alias is invalid" }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource.\nIf no .vercel.app alias exists then we fail (nothing to mirror)" }, "404": { "description": "The domain used for the alias was not found\nThe deployment was not found" }, "409": { "description": "The provided alias is already assigned to the given deployment\nThe domain is not allowed to be used" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "The deployment or alias ID or URL to assign from", "in": "path", "required": true, "schema": { "description": "The deployment or alias ID or URL to assign from", "example": "dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa", "oneOf": [ { "type": "string" } ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "alias": { "description": "The alias we want to assign to the deployment defined in the URL", "example": "my-alias.vercel.app", "type": "string" }, "redirect": { "description": "The redirect property will take precedence over the deployment id from the URL and consists of a hostname (like test.com) to which the alias should redirect using status code 307", "example": null, "type": "string", "nullable": true } }, "type": "object" } } }, "required": true }, "x-codeSamples": [ { "lang": "typescript", "label": "assignAlias", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.assignAlias({\n id: \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n requestBody: {\n alias: \"my-alias.vercel.app\",\n redirect: null,\n },\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "assignAlias", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Aliases.AssignAlias(ctx, \"\", nil, nil, &operations.AssignAliasRequestBody{\n Alias: vercel.String(\"my-alias.vercel.app\"),\n Redirect: nil,\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v4/aliases": { "get": { "description": "Retrieves a list of aliases for the authenticated User or Team. When `domain` is provided, only aliases for that domain will be returned. When `projectId` is provided, it will only return the given project aliases.", "operationId": "listAliases", "security": [ { "bearerToken": [] } ], "summary": "List aliases", "tags": [ "aliases" ], "responses": { "200": { "description": "The paginated list of aliases", "content": { "application/json": { "schema": { "properties": { "aliases": { "items": { "properties": { "alias": { "type": "string", "description": "The alias name, it could be a `.vercel.app` subdomain or a custom domain", "example": "my-alias.vercel.app" }, "created": { "type": "string", "format": "date-time", "description": "The date when the alias was created", "example": "2017-04-26T23:00:34.232Z" }, "createdAt": { "type": "number", "description": "The date when the alias was created in milliseconds since the UNIX epoch", "example": 1540095775941 }, "creator": { "properties": { "email": { "type": "string", "description": "Email of the user who created the alias", "example": "john-doe@gmail.com" }, "uid": { "type": "string", "description": "ID of the user who created the alias", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "Username of the user who created the alias", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information of the user who created the alias" }, "deletedAt": { "type": "number", "description": "The date when the alias was deleted in milliseconds since the UNIX epoch", "example": 1540095775941, "nullable": true }, "deployment": { "properties": { "id": { "type": "string", "description": "The deployment unique identifier", "example": "dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx" }, "meta": { "type": "string", "description": "The deployment metadata", "example": {} }, "url": { "type": "string", "description": "The deployment unique URL", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "id" ], "type": "object", "description": "A map with the deployment ID, URL and metadata" }, "deploymentId": { "nullable": true, "type": "string", "description": "The deployment ID", "example": "dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx" }, "microfrontends": { "properties": { "applications": { "oneOf": [ { "items": { "properties": { "fallbackHost": { "type": "string", "description": "This is always set. In production it is used as a pointer to each apps production deployment. For pre-production, it's used as the fallback if there is no deployment for the branch." }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "fallbackHost", "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." }, { "items": { "properties": { "branchAlias": { "type": "string", "description": "Could point to a branch without a deployment if the project was never deployed. The proxy will fallback to the fallbackHost if there is no deployment." }, "fallbackHost": { "type": "string", "description": "This is always set. For branch aliases, it's used as the fallback if there is no deployment for the branch." }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "branchAlias", "fallbackHost", "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." }, { "items": { "properties": { "branchAlias": { "type": "string" }, "branchDeploymentId": { "type": "string", "description": "This is the latest non-cancelled deployment of the branch alias at the time the commit alias was created. It is possible there is no deployment for the branch, or this was set before the deployment was canceled, in which case this will point to a cancelled deployment, in either case the proxy will fallback to the fallbackDeploymentId." }, "deploymentId": { "type": "string", "description": "This is the deployment for the same commit, it could be a cancelled deployment. The proxy will fallback to the branchDeploymentId and then the fallbackDeploymentId." }, "fallbackDeploymentId": { "type": "string", "description": "This is the deployment of the fallback host at the time the commit alias was created. It is possible for this to be a deleted deployment, in which case the proxy will show that the deployment is deleted. It will not use the fallbackHost, as a future deployment on the fallback host could be invalid for this deployment, and it could lead to confusion / incorrect behavior for the commit alias." }, "fallbackHost": { "type": "string", "description": "Temporary for backwards compatibility. Can remove when metadata change is released" }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." } ] }, "defaultApp": { "properties": { "projectId": { "type": "string" } }, "required": [ "projectId" ], "type": "object" } }, "required": [ "applications", "defaultApp" ], "type": "object", "description": "The microfrontends for the alias including the routing configuration" }, "projectId": { "nullable": true, "type": "string", "description": "The unique identifier of the project", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "expires": { "type": "number" }, "scope": { "type": "string", "enum": [ "shareable-link" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "access": { "type": "string", "enum": [ "granted", "requested" ] }, "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "user" ] } }, "required": [ "access", "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "alias-protection-override" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "email_invite" ] } }, "required": [ "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" } ] }, "type": "object", "description": "The protection bypass for the alias" }, "redirect": { "nullable": true, "type": "string", "description": "Target destination domain for redirect when the alias is a redirect" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ], "description": "Status code to be used on redirect" }, "uid": { "type": "string", "description": "The unique identifier of the alias" }, "updatedAt": { "type": "number", "description": "The date when the alias was updated in milliseconds since the UNIX epoch", "example": 1540095775941 } }, "required": [ "alias", "created", "deploymentId", "projectId", "uid" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "aliases", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "list" ] }, "parameters": [ { "name": "domain", "description": "Get only aliases of the given domain name", "in": "query", "schema": { "description": "Get only aliases of the given domain name", "example": "my-test-domain.com", "maxItems": 20, "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "string" } ] } }, { "name": "from", "description": "Get only aliases created after the provided timestamp", "in": "query", "schema": { "deprecated": true, "description": "Get only aliases created after the provided timestamp", "example": 1540095775951, "type": "number" } }, { "name": "limit", "description": "Maximum number of aliases to list from a request", "in": "query", "schema": { "description": "Maximum number of aliases to list from a request", "example": 10, "type": "number" } }, { "name": "projectId", "description": "Filter aliases from the given `projectId`", "in": "query", "schema": { "description": "Filter aliases from the given `projectId`", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "type": "string" } }, { "name": "since", "description": "Get aliases created after this JavaScript timestamp", "in": "query", "schema": { "description": "Get aliases created after this JavaScript timestamp", "example": 1540095775941, "type": "number" } }, { "name": "until", "description": "Get aliases created before this JavaScript timestamp", "in": "query", "schema": { "description": "Get aliases created before this JavaScript timestamp", "example": 1540095775951, "type": "number" } }, { "name": "rollbackDeploymentId", "description": "Get aliases that would be rolled back for the given deployment", "in": "query", "schema": { "description": "Get aliases that would be rolled back for the given deployment", "example": "dpl_XXX", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listAliases", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.listAliases({\n domain: \"my-test-domain.com\",\n from: 1540095775951,\n limit: 10,\n projectId: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n since: 1540095775941,\n until: 1540095775951,\n rollbackDeploymentId: \"dpl_XXX\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listAliases", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Aliases.ListAliases(ctx, operations.ListAliasesRequest{\n Domain: vercel.Pointer(operations.CreateDomainStr(\n \"my-test-domain.com\",\n )),\n From: vercel.Float64(1540095775951),\n Limit: vercel.Float64(10),\n ProjectID: vercel.String(\"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"),\n Since: vercel.Float64(1540095775941),\n Until: vercel.Float64(1540095775951),\n RollbackDeploymentID: vercel.String(\"dpl_XXX\"),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v4/aliases/{idOrAlias}": { "get": { "description": "Retrieves an Alias for the given host name or alias ID.", "operationId": "getAlias", "security": [ { "bearerToken": [] } ], "summary": "Get an Alias", "tags": [ "aliases" ], "responses": { "200": { "description": "The alias information", "content": { "application/json": { "schema": { "properties": { "alias": { "type": "string", "description": "The alias name, it could be a `.vercel.app` subdomain or a custom domain", "example": "my-alias.vercel.app" }, "created": { "type": "string", "format": "date-time", "description": "The date when the alias was created", "example": "2017-04-26T23:00:34.232Z" }, "createdAt": { "type": "number", "description": "The date when the alias was created in milliseconds since the UNIX epoch", "example": 1540095775941, "nullable": true }, "creator": { "properties": { "email": { "type": "string", "description": "Email of the user who created the alias", "example": "john-doe@gmail.com" }, "uid": { "type": "string", "description": "ID of the user who created the alias", "example": "96SnxkFiMyVKsK3pnoHfx3Hz" }, "username": { "type": "string", "description": "Username of the user who created the alias", "example": "john-doe" } }, "required": [ "uid" ], "type": "object", "description": "Information of the user who created the alias" }, "deletedAt": { "type": "number", "description": "The date when the alias was deleted in milliseconds since the UNIX epoch", "example": 1540095775941, "nullable": true }, "deployment": { "properties": { "id": { "type": "string", "description": "The deployment unique identifier", "example": "dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx" }, "meta": { "type": "string", "description": "The deployment metadata", "example": {} }, "url": { "type": "string", "description": "The deployment unique URL", "example": "my-instant-deployment-3ij3cxz9qr.now.sh" } }, "required": [ "id" ], "type": "object", "description": "A map with the deployment ID, URL and metadata" }, "deploymentId": { "nullable": true, "type": "string", "description": "The deployment ID", "example": "dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx" }, "microfrontends": { "properties": { "applications": { "oneOf": [ { "items": { "properties": { "fallbackHost": { "type": "string", "description": "This is always set. In production it is used as a pointer to each apps production deployment. For pre-production, it's used as the fallback if there is no deployment for the branch." }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "fallbackHost", "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." }, { "items": { "properties": { "branchAlias": { "type": "string", "description": "Could point to a branch without a deployment if the project was never deployed. The proxy will fallback to the fallbackHost if there is no deployment." }, "fallbackHost": { "type": "string", "description": "This is always set. For branch aliases, it's used as the fallback if there is no deployment for the branch." }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "branchAlias", "fallbackHost", "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." }, { "items": { "properties": { "branchAlias": { "type": "string" }, "branchDeploymentId": { "type": "string", "description": "This is the latest non-cancelled deployment of the branch alias at the time the commit alias was created. It is possible there is no deployment for the branch, or this was set before the deployment was canceled, in which case this will point to a cancelled deployment, in either case the proxy will fallback to the fallbackDeploymentId." }, "deploymentId": { "type": "string", "description": "This is the deployment for the same commit, it could be a cancelled deployment. The proxy will fallback to the branchDeploymentId and then the fallbackDeploymentId." }, "fallbackDeploymentId": { "type": "string", "description": "This is the deployment of the fallback host at the time the commit alias was created. It is possible for this to be a deleted deployment, in which case the proxy will show that the deployment is deleted. It will not use the fallbackHost, as a future deployment on the fallback host could be invalid for this deployment, and it could lead to confusion / incorrect behavior for the commit alias." }, "fallbackHost": { "type": "string", "description": "Temporary for backwards compatibility. Can remove when metadata change is released" }, "projectId": { "type": "string", "description": "The project ID of the microfrontends application." } }, "required": [ "projectId" ], "type": "object", "description": "A list of the deployment routing information for each project." }, "type": "array", "description": "A list of the deployment routing information for each project." } ] }, "defaultApp": { "properties": { "projectId": { "type": "string" } }, "required": [ "projectId" ], "type": "object" } }, "required": [ "applications", "defaultApp" ], "type": "object", "description": "The microfrontends for the alias including the routing configuration" }, "projectId": { "nullable": true, "type": "string", "description": "The unique identifier of the project", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB" }, "protectionBypass": { "additionalProperties": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "expires": { "type": "number" }, "scope": { "type": "string", "enum": [ "shareable-link" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "access": { "type": "string", "enum": [ "granted", "requested" ] }, "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "user" ] } }, "required": [ "access", "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "alias-protection-override" ] } }, "required": [ "createdAt", "createdBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" }, { "properties": { "createdAt": { "type": "number" }, "lastUpdatedAt": { "type": "number" }, "lastUpdatedBy": { "type": "string" }, "scope": { "type": "string", "enum": [ "email_invite" ] } }, "required": [ "createdAt", "lastUpdatedAt", "lastUpdatedBy", "scope" ], "type": "object", "description": "The protection bypass for the alias" } ] }, "type": "object", "description": "The protection bypass for the alias" }, "redirect": { "nullable": true, "type": "string", "description": "Target destination domain for redirect when the alias is a redirect" }, "redirectStatusCode": { "nullable": true, "type": "number", "enum": [ 301, 302, 307, 308, null ], "description": "Status code to be used on redirect" }, "uid": { "type": "string", "description": "The unique identifier of the alias" }, "updatedAt": { "type": "number", "description": "The date when the alias was updated in milliseconds since the UNIX epoch", "example": 1540095775941, "nullable": true } }, "required": [ "alias", "created", "deploymentId", "projectId", "uid" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The alias was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "from", "description": "Get the alias only if it was created after the provided timestamp", "in": "query", "required": false, "schema": { "deprecated": true, "description": "Get the alias only if it was created after the provided timestamp", "example": 1540095775951, "type": "number" } }, { "name": "idOrAlias", "description": "The alias or alias ID to be retrieved", "in": "path", "required": true, "schema": { "description": "The alias or alias ID to be retrieved", "example": "example.vercel.app", "type": "string" } }, { "name": "projectId", "description": "Get the alias only if it is assigned to the provided project ID", "in": "query", "required": false, "schema": { "description": "Get the alias only if it is assigned to the provided project ID", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "type": "string" } }, { "name": "since", "description": "Get the alias only if it was created after this JavaScript timestamp", "in": "query", "required": false, "schema": { "description": "Get the alias only if it was created after this JavaScript timestamp", "example": 1540095775941, "type": "number" } }, { "name": "until", "description": "Get the alias only if it was created before this JavaScript timestamp", "in": "query", "required": false, "schema": { "description": "Get the alias only if it was created before this JavaScript timestamp", "example": 1540095775951, "type": "number" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getAlias", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.getAlias({\n from: 1540095775951,\n idOrAlias: \"example.vercel.app\",\n projectId: \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n since: 1540095775941,\n until: 1540095775951,\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "getAlias", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"github.com/vercel/vercel/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Aliases.GetAlias(ctx, operations.GetAliasRequest{\n From: vercel.Float64(1540095775951),\n IDOrAlias: \"example.vercel.app\",\n ProjectID: vercel.String(\"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"),\n Since: vercel.Float64(1540095775941),\n Until: vercel.Float64(1540095775951),\n })\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/v2/aliases/{aliasId}": { "delete": { "description": "Delete an Alias with the specified ID.", "operationId": "deleteAlias", "security": [ { "bearerToken": [] } ], "summary": "Delete an Alias", "tags": [ "aliases" ], "responses": { "200": { "description": "The alias was successfully removed", "content": { "application/json": { "schema": { "properties": { "status": { "type": "string", "enum": [ "SUCCESS" ] } }, "required": [ "status" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The alias was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "aliasId", "description": "The ID or alias that will be removed", "in": "path", "required": true, "schema": { "example": "2WjyKQmM8ZnGcJsPWMrHRHrE", "description": "The ID or alias that will be removed", "oneOf": [ { "type": "string" } ] } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteAlias", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.deleteAlias({\n aliasId: \"2WjyKQmM8ZnGcJsPWMrHRHrE\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteAlias", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Aliases.DeleteAlias(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } }, "/aliases/{id}/protection-bypass": { "patch": { "description": "Update the protection bypass for the alias or deployment URL (used for user access & comment access for deployments). Used as shareable links and user scoped access for Vercel Authentication and also to allow external (logged in) people to comment on previews for Preview Comments (next-live-mode).", "operationId": "patchUrlProtectionBypass", "security": [ { "bearerToken": [] } ], "summary": "Update the protection bypass for a URL", "tags": [ "aliases" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "additionalProperties": true, "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid.\nOne of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "409": { "description": "" }, "410": { "description": "" }, "428": { "description": "" } }, "parameters": [ { "name": "id", "description": "The alias or deployment ID", "in": "path", "required": true, "schema": { "type": "string", "description": "The alias or deployment ID" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "properties": { "ttl": { "description": "Optional time the shareable link is valid for in seconds. If not provided, the shareable link will never expire.", "type": "number", "maximum": 6.3072e+07 }, "revoke": { "description": "Optional instructions for revoking and regenerating a shareable link", "type": "object", "properties": { "secret": { "description": "Sharebale link to revoked", "type": "string" }, "regenerate": { "description": "Whether or not a new shareable link should be created after the provided secret is revoked", "type": "boolean" } }, "required": [ "secret", "regenerate" ] } }, "additionalProperties": false }, { "type": "object", "properties": { "scope": { "description": "Instructions for creating a user scoped protection bypass", "type": "object", "properties": { "userId": { "type": "string", "description": "Specified user id for the scoped bypass." }, "email": { "type": "string", "format": "email", "description": "Specified email for the scoped bypass." }, "access": { "enum": [ "denied", "granted" ], "description": "Invitation status for the user scoped bypass." } }, "allOf": [ { "anyOf": [ { "required": [ "userId" ] }, { "required": [ "email" ] } ] }, { "required": [ "access" ] } ] } }, "required": [ "scope" ], "additionalProperties": false }, { "type": "object", "properties": { "override": { "type": "object", "properties": { "scope": { "enum": [ "alias-protection-override" ] }, "action": { "enum": [ "create", "revoke" ] } }, "required": [ "scope", "action" ] } }, "required": [ "override" ], "additionalProperties": false } ] } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "patchUrlProtectionBypass", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.aliases.patchUrlProtectionBypass({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v8/certs/{id}": { "get": { "description": "Get cert by id", "operationId": "getCertById", "security": [ { "bearerToken": [] } ], "summary": "Get cert by id", "tags": [ "certs" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "autoRenew": { "type": "boolean", "enum": [ false, true ] }, "cns": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "id": { "type": "string" } }, "required": [ "autoRenew", "cns", "createdAt", "expiresAt", "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "id", "description": "The cert id", "in": "path", "required": true, "schema": { "description": "The cert id", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getCertById", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.certs.getCertById({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "delete": { "description": "Remove cert", "operationId": "removeCert", "security": [ { "bearerToken": [] } ], "summary": "Remove cert", "tags": [ "certs" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false }, "parameters": [ { "name": "id", "description": "The cert id to remove", "in": "path", "required": true, "schema": { "description": "The cert id to remove", "type": "string" }, "x-vercel-cli": { "kind": "argument" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "removeCert", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.certs.removeCert({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v8/certs": { "get": { "description": "Get certs", "operationId": "getCerts", "security": [ { "bearerToken": [] } ], "summary": "Get certs", "tags": [ "certs" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "certs": { "items": { "properties": { "autoRenew": { "type": "boolean", "enum": [ false, true ] }, "cns": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "id": { "type": "string" } }, "required": [ "autoRenew", "cns", "createdAt", "expiresAt", "id" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "certs", "pagination" ], "type": "object" } } } }, "400": { "description": "" }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getCerts", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.certs.getCerts({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "post": { "description": "Issue a new cert", "operationId": "issueCert", "security": [ { "bearerToken": [] } ], "summary": "Issue a new cert", "tags": [ "certs" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "autoRenew": { "type": "boolean", "enum": [ false, true ] }, "cns": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "id": { "type": "string" } }, "required": [ "autoRenew", "cns", "createdAt", "expiresAt", "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "The account is missing a payment so payment method must be updated" }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "449": { "description": "" }, "500": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "issue" ], "bodyArguments": [ "cns" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "cns": { "description": "The common names the cert should be issued for", "type": "array", "items": { "type": "string" } } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "issueCert", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.certs.issueCert({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] }, "put": { "description": "Upload a cert", "operationId": "uploadCert", "security": [ { "bearerToken": [] } ], "summary": "Upload a cert", "tags": [ "certs" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "autoRenew": { "type": "boolean", "enum": [ false, true ] }, "cns": { "items": { "type": "string" }, "type": "array" }, "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "id": { "type": "string" } }, "required": [ "autoRenew", "cns", "createdAt", "expiresAt", "id" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request body is invalid." }, "401": { "description": "The request is not authorized." }, "402": { "description": "This feature is only available for Enterprise customers." }, "403": { "description": "You do not have permission to access this resource." }, "410": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "add" ] }, "parameters": [ { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "ca", "key", "cert" ], "additionalProperties": false, "properties": { "ca": { "type": "string", "description": "The certificate authority" }, "key": { "type": "string", "description": "The certificate key" }, "cert": { "type": "string", "description": "The certificate" }, "skipValidation": { "type": "boolean", "description": "Skip validation of the certificate" } } } } } }, "x-codeSamples": [ { "lang": "typescript", "label": "uploadCert", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.certs.uploadCert({\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v6/deployments/{id}/files": { "get": { "description": "Allows to retrieve the file structure of the source code of a deployment by supplying the deployment unique identifier. If the deployment was created with the Vercel CLI or the API directly with the `files` key, it will have a file tree that can be retrievable.", "operationId": "listDeploymentFiles", "security": [ { "bearerToken": [] } ], "summary": "List Deployment Files", "tags": [ "deployments" ], "responses": { "200": { "description": "Retrieved the file tree successfully", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/FileTree" }, "type": "array" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "File tree not found\nDeployment not found" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "The unique deployment identifier", "in": "path", "required": true, "schema": { "description": "The unique deployment identifier", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "listDeploymentFiles", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.listDeploymentFiles({\n id: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "listDeploymentFiles", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.ListDeploymentFiles(ctx, \"\", nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.FileTrees != nil {\n // handle response\n }\n}" } ] } }, "/v8/deployments/{id}/files/{fileId}": { "get": { "description": "Allows to retrieve the content of a file by supplying the file identifier and the deployment unique identifier. The response body will contain a JSON response containing the contents of the file encoded as base64.", "operationId": "getDeploymentFileContents", "security": [ { "bearerToken": [] } ], "summary": "Get Deployment File Contents", "tags": [ "deployments" ], "responses": { "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "File not found\nDeployment not found" }, "410": { "description": "Invalid API version." } }, "parameters": [ { "name": "id", "description": "The unique deployment identifier", "in": "path", "required": true, "schema": { "description": "The unique deployment identifier", "type": "string" } }, { "name": "fileId", "description": "The unique file identifier", "in": "path", "required": true, "schema": { "description": "The unique file identifier", "type": "string" } }, { "name": "path", "description": "Path to the file to fetch (only for Git deployments)", "in": "query", "required": false, "schema": { "description": "Path to the file to fetch (only for Git deployments)", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeploymentFileContents", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n await vercel.deployments.getDeploymentFileContents({\n id: \"\",\n fileId: \"\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n\n}\n\nrun();" } ] } }, "/v7/deployments": { "get": { "description": "List deployments under the authenticated user or team. If a deployment hasn't finished uploading (is incomplete), the `url` property will have a value of `null`.", "operationId": "getDeployments", "security": [ { "bearerToken": [] } ], "summary": "List deployments", "tags": [ "deployments" ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "properties": { "deployments": { "items": { "properties": { "aliasAssigned": { "nullable": true, "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "aliasError": { "nullable": true, "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object", "description": "An error object in case aliasing of the deployment failed." }, "attribution": { "properties": { "commitMeta": { "properties": { "email": { "type": "string", "description": "Email from git commit author" }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Whether the commit was signed/verified (GitHub only, others return undefined)" }, "name": { "type": "string", "description": "Name from git commit author" } }, "type": "object", "description": "Commit metadata from the git commit author" }, "gitUser": { "properties": { "id": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "login": { "type": "string", "description": "Git provider username/login" }, "provider": { "type": "string", "description": "The git provider (github, gitlab, bitbucket)" }, "type": { "type": "string", "description": "User type" } }, "required": [ "id", "login" ], "type": "object", "description": "Git provider user associated with the commit author email (only set if resolved)" }, "vercelUser": { "properties": { "id": { "type": "string", "description": "Vercel user ID" }, "teamRoles": { "items": { "type": "string" }, "type": "array", "description": "Team roles at time of deployment" }, "username": { "type": "string", "description": "Vercel username" } }, "required": [ "id", "username" ], "type": "object", "description": "Vercel user linked to the git provider account (only set if resolved)" } }, "type": "object", "description": "Commit attribution metadata" }, "buildingAt": { "type": "number", "description": "Timestamp of when the deployment started building at.", "example": 1609492210000 }, "checks": { "properties": { "deployment-alias": { "properties": { "completedAt": { "type": "number" }, "startedAt": { "type": "number" }, "state": { "type": "string", "enum": [ "failed", "pending", "succeeded" ] } }, "required": [ "startedAt", "state" ], "type": "object", "description": "Detailed information about v2 deployment checks. Includes information about blocked workflows in the deployment lifecycle." } }, "required": [ "deployment-alias" ], "type": "object", "description": "Detailed information about v2 deployment checks. Includes information about blocked workflows in the deployment lifecycle." }, "checksConclusion": { "type": "string", "enum": [ "canceled", "failed", "skipped", "succeeded" ], "description": "Conclusion for checks" }, "checksState": { "type": "string", "enum": [ "completed", "registered", "running" ], "description": "State of all registered checks" }, "connectBuildsEnabled": { "type": "boolean", "enum": [ false, true ], "description": "The flag saying if Secure Compute network is used for builds" }, "connectConfigurationId": { "type": "string", "description": "The ID of Secure Compute network used for this deployment" }, "created": { "type": "number", "description": "Timestamp of when the deployment got created.", "example": 1609492210000 }, "createdAt": { "type": "number" }, "creator": { "properties": { "email": { "type": "string", "description": "The email address of the user.", "example": "example@example.com" }, "githubLogin": { "type": "string", "description": "The GitHub login of the user.", "example": "johndoe" }, "gitlabLogin": { "type": "string", "description": "The GitLab login of the user.", "example": "johndoe" }, "type": { "type": "string", "enum": [ "app", "integration", "system", "user" ], "description": "Principal type of the deployment creator. Defaults to `\"user\"` if absent (legacy deployments created before principal attribution was recorded)." }, "uid": { "type": "string", "description": "Stable creator id across principal types. This may be a user ID, an app ID, an integration configuration ID, or `system`.", "example": "eLrCnEgbKhsHyfbiNR7E8496" }, "username": { "type": "string", "description": "The username of the user.", "example": "johndoe" } }, "required": [ "uid" ], "type": "object", "description": "Metadata information of the deployment creator." }, "customEnvironment": { "properties": { "id": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "The custom environment used for this deployment, if any" }, "defaultRoute": { "type": "string", "description": "The default route that should be used for screenshots and links if configured with microfrontends.", "example": "/docs" }, "deleted": { "type": "number", "description": "Timestamp of when the deployment got deleted.", "example": 1609492210000 }, "errorCode": { "type": "string", "description": "Error code when the deployment is in an error state.", "example": "BUILD_FAILED" }, "errorMessage": { "nullable": true, "type": "string", "description": "Error message when the deployment is in an canceled or error state.", "example": "The Deployment has been canceled because this project was not affected" }, "expiration": { "type": "number", "description": "The expiration configured by the project retention policy" }, "inspectorUrl": { "nullable": true, "type": "string", "description": "Vercel URL to inspect the deployment.", "example": "https://vercel.com/acme/nextjs/J1hXN00qjUeoYfpEEf7dnDtpSiVq" }, "isRollbackCandidate": { "nullable": true, "type": "boolean", "enum": [ false, true, null ], "description": "Deployment can be used for instant rollback" }, "manualProvisioning": { "properties": { "completedAt": { "type": "number", "description": "Timestamp when manual provisioning completed" }, "state": { "type": "string", "enum": [ "COMPLETE", "PENDING", "TIMEOUT" ], "description": "Current provisioning state" } }, "required": [ "state" ], "type": "object" }, "meta": { "additionalProperties": { "type": "string", "description": "Metadata information from the Git provider." }, "type": "object", "description": "Metadata information from the Git provider." }, "name": { "type": "string", "description": "The name of the deployment.", "example": "docs" }, "oomReport": { "type": "string", "enum": [ "out-of-memory" ], "description": "Indicates if the deployment encountered an out-of-memory error.", "example": "out-of-memory" }, "passiveConnectConfigurationId": { "type": "string", "description": "The ID of Secure Compute network used for this deployment's passive functions" }, "platform": { "properties": { "creator": { "properties": { "avatar": { "type": "string", "description": "URL of the platform user's avatar image." }, "name": { "type": "string", "description": "Display name of the platform user." } }, "required": [ "name" ], "type": "object", "description": "The user on the external platform who triggered the deployment." }, "meta": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Arbitrary key-value metadata provided by the platform." }, "origin": { "properties": { "type": { "type": "string", "enum": [ "id", "url" ], "description": "Whether the value is an opaque identifier or a URL." }, "value": { "type": "string", "description": "The identifier or URL pointing to the originating entity." } }, "required": [ "type", "value" ], "type": "object", "description": "Reference back to the entity on the platform that initiated the deployment." }, "source": { "properties": { "name": { "type": "string", "description": "Display name of the platform." } }, "required": [ "name" ], "type": "object", "description": "The external platform that created the deployment (e.g. its display name)." } }, "required": [ "creator", "origin", "source" ], "type": "object", "description": "Metadata about the source platform that triggered the deployment." }, "prebuilt": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string", "description": "The project ID of the deployment" }, "projectSettings": { "properties": { "buildCommand": { "nullable": true, "type": "string" }, "commandForIgnoringBuildStep": { "nullable": true, "type": "string" }, "createdAt": { "type": "number" }, "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "devCommand": { "nullable": true, "type": "string" }, "framework": { "nullable": true, "type": "string", "enum": [ "actix-web", "angular", "ash", "astro", "axum", "blitzjs", "brunch", "bun", "container", "create-react-app", "django", "docusaurus", "docusaurus-2", "dojo", "eleventy", "elysia", "ember", "eve", "express", "factory-eve", "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 ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on commits" }, "onPullRequest": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Vercel bot should comment on PRs" } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June '23" }, "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "installCommand": { "nullable": true, "type": "string" }, "nodeVersion": { "type": "string", "enum": [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "8.10.x" ] }, "outputDirectory": { "nullable": true, "type": "string" }, "rootDirectory": { "nullable": true, "type": "string" }, "skipGitConnectDuringLink": { "type": "boolean", "enum": [ false, true ] }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] }, "speedInsights": { "properties": { "canceledAt": { "type": "number" }, "dataReceivedAt": { "type": "number", "description": "When the first free (not Speed Insights Plus) production data point was observed, in ms. Set once by subscriber-analytics-events; projects that already had data before this field shipped get it backfilled on their next batch, so it reads \"first free data point observed\", not necessarily \"first ever\"." }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "paidAt": { "type": "number" } }, "required": [ "id" ], "type": "object" }, "webAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "type": "object", "description": "The project settings which was used for this deployment" }, "proposedExpiration": { "type": "number", "description": "The expiration proposed to replace the existing expiration" }, "ready": { "type": "number", "description": "Timestamp of when the deployment got ready.", "example": 1609492210000 }, "readyState": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "DELETED", "ERROR", "INITIALIZING", "QUEUED", "READY" ] }, "readySubstate": { "type": "string", "enum": [ "PROMOTED", "ROLLING", "STAGED" ], "description": "Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of gradually transitioning production traffic - PROMOTED: has seen production traffic" }, "seatBlock": { "properties": { "blockCode": { "type": "string", "enum": [ "COMMIT_AUTHOR_REQUIRED", "TEAM_ACCESS_REQUIRED" ], "description": "The NSNB decision code for the seat block. TODO: We should consolidate block types." }, "gitProvider": { "type": "string", "enum": [ "bitbucket", "github", "gitlab" ], "description": "The git provider type associated with gitUserId." }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "isVerified": { "type": "boolean", "enum": [ false, true ], "description": "Determines if the user was verified during the block. In the git integration case, the commit sender was the author." }, "userId": { "type": "string", "description": "The blocked vercel user ID." } }, "required": [ "blockCode" ], "type": "object", "description": "NSNB Blocked metadata" }, "softDeletedByRetention": { "type": "boolean", "enum": [ false, true ], "description": "Optional flag to indicate if the deployment was soft deleted by retention policy.", "example": true }, "source": { "type": "string", "enum": [ "api-trigger-git-deploy", "cli", "clone/repo", "drop", "git", "git-deploy-hook", "import", "import/repo", "redeploy", "v0-web" ], "description": "The source of the deployment.", "example": "cli" }, "state": { "type": "string", "enum": [ "BLOCKED", "BUILDING", "CANCELED", "DELETED", "ERROR", "INITIALIZING", "QUEUED", "READY" ], "description": "In which state is the deployment.", "example": "READY" }, "target": { "nullable": true, "type": "string", "enum": [ "production", "staging", null ], "description": "On which environment has the deployment been deployed to.", "example": "production" }, "type": { "type": "string", "enum": [ "LAMBDAS" ], "description": "The type of the deployment.", "example": "LAMBDAS" }, "uid": { "type": "string", "description": "The unique identifier of the deployment.", "example": "dpl_2euZBFqxYdDMDG1jTrHFnNZ2eUVa" }, "undeleted": { "type": "number", "description": "Timestamp of when the deployment was undeleted.", "example": 1609492210000 }, "url": { "type": "string", "description": "The URL of the deployment.", "example": "docs-9jaeg38me.vercel.app" } }, "required": [ "created", "createdAt", "creator", "inspectorUrl", "name", "projectId", "readyState", "type", "uid", "url" ], "type": "object" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/Pagination" } }, "required": [ "deployments", "pagination" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "" }, "410": { "description": "" }, "422": { "description": "" } }, "x-vercel-cli": { "supportedSubcommands": true, "supportedProduction": false, "aliases": [ "ls", "list" ] }, "parameters": [ { "name": "app", "description": "Name of the deployment.", "in": "query", "schema": { "description": "Name of the deployment.", "type": "string", "example": "docs" } }, { "name": "from", "description": "Gets the deployment created after this Date timestamp. (default: current time)", "in": "query", "schema": { "description": "Gets the deployment created after this Date timestamp. (default: current time)", "type": "number", "example": 1612948664566, "deprecated": true } }, { "name": "limit", "description": "Maximum number of deployments to list from a request.", "in": "query", "schema": { "description": "Maximum number of deployments to list from a request.", "type": "number", "example": 10 } }, { "name": "projectId", "description": "Filter deployments from the given ID or name.", "in": "query", "schema": { "description": "Filter deployments from the given ID or name.", "type": "string", "example": "QmXGTs7mvAMMC7WW5ebrM33qKG32QK3h4vmQMjmY" } }, { "name": "projectIds", "description": "Filter deployments from the given project IDs. Cannot be used when projectId is specified.", "in": "query", "schema": { "description": "Filter deployments from the given project IDs. Cannot be used when projectId is specified.", "type": "array", "items": { "type": "string" }, "example": [ "prj_123", "prj_456" ], "minItems": 1, "maxItems": 20 } }, { "name": "target", "description": "Filter deployments based on the environment.", "in": "query", "schema": { "description": "Filter deployments based on the environment.", "type": "string", "example": "production" } }, { "name": "to", "description": "Gets the deployment created before this Date timestamp. (default: current time)", "in": "query", "schema": { "description": "Gets the deployment created before this Date timestamp. (default: current time)", "type": "number", "example": 1612948664566, "deprecated": true } }, { "name": "users", "description": "Filter out deployments based on users who have created the deployment.", "in": "query", "schema": { "description": "Filter out deployments based on users who have created the deployment.", "type": "string", "example": "kr1PsOIzqEL5Xg6M4VZcZosf,K4amb7K9dAt5R2vBJWF32bmY" } }, { "name": "since", "description": "Get Deployments created after this JavaScript timestamp.", "in": "query", "schema": { "description": "Get Deployments created after this JavaScript timestamp.", "type": "number", "example": 1540095775941 } }, { "name": "until", "description": "Get Deployments created before this JavaScript timestamp.", "in": "query", "schema": { "description": "Get Deployments created before this JavaScript timestamp.", "type": "number", "example": 1540095775951 } }, { "name": "state", "description": "Filter deployments based on their state (`BUILDING`, `ERROR`, `INITIALIZING`, `QUEUED`, `READY`, `CANCELED`, `BLOCKED`)", "in": "query", "schema": { "description": "Filter deployments based on their state (`BUILDING`, `ERROR`, `INITIALIZING`, `QUEUED`, `READY`, `CANCELED`, `BLOCKED`)", "type": "string", "example": "BUILDING,READY" } }, { "name": "rollbackCandidate", "description": "Filter deployments based on their rollback candidacy", "in": "query", "schema": { "description": "Filter deployments based on their rollback candidacy", "type": "boolean" } }, { "name": "branch", "description": "Filter deployments based on the branch name", "in": "query", "schema": { "description": "Filter deployments based on the branch name", "type": "string" } }, { "name": "sha", "description": "Filter deployments based on the SHA", "in": "query", "schema": { "description": "Filter deployments based on the SHA", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "getDeployments", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.getDeployments({\n app: \"docs\",\n from: 1612948664566,\n limit: 10,\n projectId: \"QmXGTs7mvAMMC7WW5ebrM33qKG32QK3h4vmQMjmY\",\n projectIds: [\n \"prj_123\",\n \"prj_456\",\n ],\n target: \"production\",\n to: 1612948664566,\n users: \"kr1PsOIzqEL5Xg6M4VZcZosf,K4amb7K9dAt5R2vBJWF32bmY\",\n since: 1540095775941,\n until: 1540095775951,\n state: \"BUILDING,READY\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" } ] } }, "/v13/deployments/{id}": { "delete": { "description": "This API allows you to delete a deployment, either by supplying its `id` in the URL or the `url` of the deployment as a query parameter. You can obtain the ID, for example, by listing all deployments.", "operationId": "deleteDeployment", "security": [ { "bearerToken": [] } ], "summary": "Delete a Deployment", "tags": [ "deployments" ], "responses": { "200": { "description": "The deployment was successfully deleted", "content": { "application/json": { "schema": { "properties": { "state": { "type": "string", "enum": [ "DELETED" ], "description": "A constant with the final state of the deployment." }, "uid": { "type": "string", "description": "The removed deployment ID.", "example": "dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd" } }, "required": [ "state", "uid" ], "type": "object" } } } }, "400": { "description": "One of the provided values in the request query is invalid." }, "401": { "description": "The request is not authorized." }, "403": { "description": "You do not have permission to access this resource." }, "404": { "description": "The deployment was not found" }, "410": { "description": "" } }, "parameters": [ { "name": "id", "description": "The ID of the deployment to be deleted", "in": "path", "required": true, "schema": { "description": "The ID of the deployment to be deleted", "example": "dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd", "type": "string" } }, { "name": "url", "description": "A Deployment or Alias URL. In case it is passed, the ID will be ignored", "in": "query", "required": false, "schema": { "description": "A Deployment or Alias URL. In case it is passed, the ID will be ignored", "example": "https://files-orcin-xi.vercel.app/", "type": "string" } }, { "description": "The Team identifier to perform the request on behalf of.", "in": "query", "name": "teamId", "schema": { "type": "string", "example": "team_1a2b3c4d5e6f7g8h9i0j1k2l" } }, { "description": "The Team slug to perform the request on behalf of.", "in": "query", "name": "slug", "schema": { "type": "string", "example": "my-team-url-slug" } } ], "x-codeSamples": [ { "lang": "typescript", "label": "deleteDeployment", "source": "import { Vercel } from \"@vercel/sdk\";\n\nconst vercel = new Vercel({\n bearerToken: \"\",\n});\n\nasync function run() {\n const result = await vercel.deployments.deleteDeployment({\n id: \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n url: \"https://files-orcin-xi.vercel.app/\",\n teamId: \"team_1a2b3c4d5e6f7g8h9i0j1k2l\",\n slug: \"my-team-url-slug\",\n });\n\n console.log(result);\n}\n\nrun();" }, { "lang": "go", "label": "deleteDeployment", "source": "package main\n\nimport(\n\t\"os\"\n\t\"github.com/vercel/vercel\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := vercel.New(\n vercel.WithSecurity(os.Getenv(\"VERCEL_BEARER_TOKEN\")),\n )\n\n ctx := context.Background()\n res, err := s.Deployments.DeleteDeployment(ctx, \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\", vercel.String(\"https://files-orcin-xi.vercel.app/\"), nil, nil)\n if err != nil {\n log.Fatal(err)\n }\n if res.Object != nil {\n // handle response\n }\n}" } ] } } }, "components": { "schemas": { "AiGatewayProviderOptionBag": { "additionalProperties": true, "type": "object", "description": "Arbitrary per-provider AI SDK options, keyed by gateway provider slug." }, "AiGatewayVirtualModelConfig": { "properties": { "allowFallbackFromFast": { "type": "boolean", "enum": [ false, true ], "description": "Allow fallback from fast to standard providers on failure." }, "baseUrl": { "type": "string", "description": "For kind=relay: URL the gateway forwards requests to as a transparent proxy." }, "byokCredentialIds": { "items": { "type": "string" }, "type": "array", "description": "BYOK credential IDs allowed for this VMC." }, "caching": { "type": "string", "enum": [ "auto" ], "description": "Use caching if available." }, "createdAt": { "type": "number", "description": "Creation timestamp (epoch ms)." }, "deleted": { "type": "boolean", "enum": [ false, true ], "description": "Whether this VMC is soft-deleted." }, "description": { "type": "string", "description": "Optional description for UI." }, "disallowPromptTraining": { "type": "boolean", "enum": [ false, true ], "description": "Only use providers that will not train on your prompts." }, "displayName": { "type": "string", "description": "Human-readable name for UI." }, "has": { "items": { "type": "string", "enum": [ "implicit-caching", "vision" ], "description": "Limit providers to those with these features." }, "type": "array", "description": "Limit providers to those with these features." }, "hipaaCompliant": { "type": "boolean", "enum": [ false, true ], "description": "Only use HIPAA-compliant providers." }, "inferenceRegion": { "properties": { "geoRegion": { "type": "string", "description": "Geo zone (e.g. \"us\", \"eu\")." }, "providerRegion": { "type": "string", "description": "Provider-specific region identifier." }, "providers": { "additionalProperties": { "nullable": true, "properties": { "geoRegion": { "type": "string", "description": "Geo zone (e.g. \"us\", \"eu\")." }, "providerRegion": { "type": "string", "description": "Provider-specific region identifier." }, "scope": { "type": "string", "enum": [ "global", "specific", "zone" ], "description": "Pin scope: `specific` (one provider region), `zone` (geo zone), or `global`." } }, "type": "object", "description": "Per-provider region overrides keyed by provider slug." }, "type": "object", "description": "Per-provider region overrides keyed by provider slug." }, "scope": { "type": "string", "enum": [ "global", "specific", "zone" ], "description": "Pin scope: `specific` (one provider region), `zone` (geo zone), or `global`." } }, "type": "object", "description": "Region pinned on the VMC for system-credential routing (alias/router only)." }, "instanceId": { "type": "string", "description": "The concrete model-provider instance this VMC resolves to." }, "kind": { "type": "string", "description": "VMC kind: alias, relay, or router." }, "models": { "items": { "type": "string" }, "type": "array", "description": "For kind=router: ordered candidates, model slugs or router references. Otherwise: fallback models." }, "modelSlug": { "type": "string", "description": "Canonical model slug this VMC maps to (e.g. \"creator/model\"). Not used by kind=router." }, "observabilityTags": { "items": { "type": "string" }, "type": "array", "description": "Observability tags attached to requests through this VMC." }, "ownerId": { "type": "string", "description": "Team (owner) that owns this VMC." }, "providerOnly": { "items": { "type": "string" }, "type": "array", "description": "Restrict routing to only these providers." }, "providerOptions": { "additionalProperties": { "$ref": "#/components/schemas/AiGatewayProviderOptionBag" }, "type": "object", "description": "Arbitrary per-provider AI SDK options, keyed by gateway provider slug." }, "providerOrder": { "items": { "type": "string" }, "type": "array", "description": "Ordered list of providers to try as fallbacks on failure." }, "providerTimeouts": { "properties": { "byok": { "additionalProperties": { "type": "number" }, "type": "object" } }, "type": "object", "description": "Per-request provider timeouts in ms, keyed by provider slug for BYOK credentials." }, "requires": { "items": { "type": "string" }, "type": "array", "description": "For kind=router: capability tags a candidate must have." }, "selector": { "type": "string", "enum": [ "cost", "priority", "tps", "ttft" ], "description": "For kind=router: how to order candidates." }, "serviceTier": { "type": "string", "enum": [ "fast", "flex", "priority" ], "description": "Service tier for providers that support it." }, "sort": { "type": "string", "enum": [ "cost", "latency", "price", "throughput", "tps", "ttft" ], "description": "Rank eligible providers by an attribute." }, "speed": { "type": "string", "enum": [ "fast" ], "description": "Only use fastest providers with short timeouts." }, "status": { "type": "string", "description": "UI lifecycle status: draft, active, or archived." }, "updatedAt": { "type": "number", "description": "Last update timestamp (epoch ms)." }, "updatedBy": { "type": "string", "description": "User id that last updated this VMC." }, "virtualModelSlug": { "type": "string", "description": "Client-facing alias used as the model slug in Gateway calls." }, "visibility": { "type": "string", "description": "Visibility in listings: public, internal, or stealth." }, "zeroDataRetention": { "type": "boolean", "enum": [ false, true ], "description": "Only use providers with zero data retention." } }, "required": [ "createdAt", "deleted", "kind", "ownerId", "status", "updatedAt", "virtualModelSlug" ], "type": "object", "description": "Public response shape for virtual model configs. Used so OpenAPI generation can avoid ElectroDB's recursive EntityItem types." }, "AiGatewayVirtualModelConfigList": { "properties": { "cursor": { "nullable": true, "type": "string", "description": "Cursor for the next page, or null when no more pages remain." }, "virtualModelConfigs": { "items": { "$ref": "#/components/schemas/AiGatewayVirtualModelConfig" }, "type": "array", "description": "The page of VMCs." } }, "required": [ "cursor", "virtualModelConfigs" ], "type": "object" }, "AiGatewayRule": { "properties": { "action": { "properties": { "reason": { "type": "string" }, "rewriteModel": { "type": "string" } }, "type": "object" }, "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "deleted": { "type": "boolean", "enum": [ false, true ] }, "description": { "type": "string" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "match": { "properties": { "model": { "type": "string" } }, "type": "object" }, "ownerId": { "type": "string" }, "ruleId": { "type": "string" }, "type": { "type": "string", "enum": [ "deny", "rewrite" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "type": "string" } }, "required": [ "createdAt", "enabled", "ownerId", "ruleId", "type", "updatedAt" ], "type": "object", "description": "Public response shape for AI Gateway routing rules. Used so OpenAPI generation can avoid ElectroDB's recursive EntityItem types." }, "AiGatewayRuleList": { "properties": { "rules": { "items": { "$ref": "#/components/schemas/AiGatewayRule" }, "type": "array" } }, "required": [ "rules" ], "type": "object" }, "Network": { "properties": { "awsAccountId": { "type": "string", "description": "The ID of the AWS Account in which the network exists." }, "awsAvailabilityZoneIds": { "items": { "type": "string" }, "type": "array", "description": "The IDs of the AWS Availability Zones in which the network exists, if specified during creation." }, "awsRegion": { "type": "string", "description": "The AWS Region in which the network exists." }, "cidr": { "type": "string", "description": "The CIDR range of the Network." }, "createdAt": { "type": "number", "description": "The date at which the Network was created, represented as a UNIX timestamp since EPOCH." }, "egressIpAddresses": { "items": { "type": "string" }, "type": "array" }, "hostedZones": { "properties": { "count": { "type": "number", "description": "The number of AWS Route53 Hosted Zones associated with the Network." } }, "required": [ "count" ], "type": "object", "description": "Metadata about any AWS Route53 Hosted Zones associated with the Network." }, "id": { "type": "string", "description": "The unique identifier of the Network." }, "name": { "type": "string", "description": "The name of the network." }, "peeringConnections": { "properties": { "count": { "type": "number", "description": "The number of AWS Route53 Hosted Zones associated with the Network." } }, "required": [ "count" ], "type": "object", "description": "Metadata about any AWS Route53 Hosted Zones associated with the Network." }, "projects": { "properties": { "count": { "type": "number" }, "ids": { "items": { "type": "string" }, "type": "array" } }, "required": [ "count", "ids" ], "type": "object", "description": "Metadata about any projects associated with the Network." }, "region": { "type": "string", "description": "The Vercel region in which the Network exists." }, "status": { "type": "string", "enum": [ "create_in_progress", "delete_in_progress", "error", "ready" ], "description": "The status of the Network." }, "teamId": { "type": "string", "description": "The unique identifier of the Team that owns the Network." }, "vpcId": { "type": "string", "description": "The ID of the VPC which hosts the network." } }, "required": [ "awsAccountId", "awsRegion", "cidr", "createdAt", "id", "name", "status", "teamId" ], "type": "object" }, "PrivateLinkEndpoint": { "properties": { "awsDnsEntries": { "items": { "type": "string" }, "type": "array", "description": "The regional DNS names assigned to the endpoint by AWS. Use these to reach the service when private DNS is not enabled.", "example": [ "vpce-0123456789abcdef0-a1b2c3d4.vpce-svc-0123456789abcdef0.us-east-1.vpce.amazonaws.com" ] }, "awsServiceName": { "type": "string", "description": "The AWS VPC endpoint service the endpoint connects to.", "example": "com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0" }, "createdAt": { "type": "number", "description": "Timestamp in milliseconds since the UNIX epoch for when the endpoint was created.", "example": 1610963878358 }, "endpointId": { "type": "string", "description": "The unique identifier of the PrivateLink endpoint.", "example": "ple_a1b2c3d4e5f6g7h8" }, "name": { "type": "string", "description": "The name of the PrivateLink endpoint, shown in the Vercel dashboard.", "example": "payments-db" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array", "description": "The private DNS names of the endpoint service, populated when private DNS is enabled for the endpoint.", "example": [ "payments.internal.example.com" ] }, "projectId": { "type": "string", "description": "The identifier of the project the PrivateLink endpoint belongs to.", "example": "prj_a1b2c3d4e5f6g7h8" }, "status": { "type": "string", "enum": [ "available", "creating", "deleting", "failed", "pending-acceptance", "provisioning", "rejected" ], "description": "The current state of the endpoint. - `creating`: the endpoint is being created. - `pending-acceptance`: waiting for the endpoint service owner to accept the connection. Only occurs for services that require manual acceptance. - `provisioning`: the connection was accepted and AWS is finishing setup. - `available`: the endpoint is fully provisioned and ready to use. - `rejected`: the endpoint service owner rejected the connection. - `failed`: the endpoint could not be provisioned. - `deleting`: the endpoint is being deleted.", "example": "available" }, "statusMessage": { "type": "string", "description": "A human-readable explanation of why the endpoint could not be provisioned. Only set when `status` is `failed`, and absent for every other status including `rejected`, since AWS does not report a rejection reason.", "example": "Endpoint did not become available in time. Try deleting and recreating, or visit https://vercel.com/help if the issue persists." }, "teamId": { "type": "string", "description": "The identifier of the team that owns the PrivateLink endpoint.", "example": "team_a1b2c3d4e5f6g7h8" }, "updatedAt": { "type": "number", "description": "Timestamp in milliseconds since the UNIX epoch for when the endpoint was last updated.", "example": 1610963878358 }, "vercelRegion": { "type": "string", "description": "The Vercel region the endpoint is provisioned in.", "example": "iad1" }, "vpcEndpointId": { "type": "string", "description": "The identifier of the underlying AWS VPC endpoint. Absent until AWS has created the endpoint.", "example": "vpce-0123456789abcdef0" } }, "required": [ "awsServiceName", "createdAt", "endpointId", "name", "projectId", "status", "teamId", "updatedAt", "vercelRegion" ], "type": "object", "description": "A PrivateLink endpoint, which connects a project to an AWS VPC endpoint service in a single region so that traffic reaches the service over AWS PrivateLink rather than the public internet." }, "ConnectTriggerDestination": { "properties": { "branch": { "type": "string", "description": "Git branch used to select a preview deployment." }, "customEnvironmentId": { "type": "string", "description": "Stable custom-environment ID to route this destination to. Mutually exclusive with `branch`; omitted destinations keep the legacy production behavior." }, "path": { "type": "string", "description": "Route path that receives the forwarded trigger request." }, "projectId": { "type": "string", "description": "Vercel project that receives matching trigger requests." } }, "required": [ "projectId" ], "type": "object", "description": "Destinations that incoming triggers should be forwarded to. Limited to 3 entries. Set the initial destination with `triggerDestination` during creation. Replace the complete set with `PATCH /v1/connect/connectors/{connector}/trigger-destinations`." }, "ConnectTriggerConfiguration": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether incoming triggers are enabled for the connector." } }, "required": [ "enabled" ], "type": "object", "description": "Incoming trigger configuration. Only present when enabled." }, "ConnectConnector": { "properties": { "accentColor": { "type": "string", "description": "Hex accent color (e.g., `#000000`) for branding." }, "appTokens": { "properties": { "crossInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether one app token can be used across installations." }, "permissionsUrl": { "type": "string", "description": "Link to the page on the service where this connector's app-level permissions are declared and granted, when the service has one and it differs from `clientUrl`." }, "requiresReinstallation": { "type": "boolean", "enum": [ false, true ], "description": "True when changing app token grants requires reinstalling the app, so tokens cannot be partitioned independently by requester environment." }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "Known allowed app-level scopes. For Slack this is the bot scope set configured on the app; for OAuth it is the connector's enabled `clientCredentials.scopes` configuration." }, "supportedAuthorizationDetails": { "items": { "type": "string" }, "type": "array", "description": "Supported OAuth authorization-detail type names." }, "supportsRefinement": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can narrow app-token grants per request." }, "supportsResources": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can request resource-specific app tokens." } }, "required": [ "crossInstallation", "supportsRefinement" ], "type": "object", "description": "App-token capabilities and known grants for the connector." }, "backgroundColor": { "type": "string", "description": "Hex background color (e.g., `#000000`) for branding." }, "clientUrl": { "nullable": true, "type": "string", "description": "Provider-side URL for viewing or managing the resource represented by the connector. The destination can be an app, account, phone line, or service instance, depending on the connector type." }, "connectionMethod": { "type": "string", "description": "The connection method this connector was created from, when the create request named one." }, "createdAt": { "type": "number", "description": "Creation time in epoch milliseconds." }, "createdBy": { "oneOf": [ { "properties": { "id": { "type": "string", "description": "Vercel user ID." }, "type": { "type": "string", "enum": [ "user" ], "description": "Principal kind." } }, "required": [ "id", "type" ], "type": "object", "description": "Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all." }, { "properties": { "environment": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "development", "preview", "production" ] } ], "description": "Deployment environment of the project principal." }, "id": { "type": "string", "description": "Vercel project ID." }, "type": { "type": "string", "enum": [ "project" ], "description": "Principal kind." } }, "required": [ "environment", "id", "type" ], "type": "object", "description": "Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all." } ], "description": "Principal that created the connector." }, "creationMode": { "type": "string", "enum": [ "managed", "manual" ], "description": "How the connector row was originally created. New create paths stamp this explicitly; older rows may omit it." }, "defaultInstallationId": { "type": "string", "description": "Installation used when a token request does not specify an installation." }, "devsite": { "type": "string", "description": "Developer website for the connected service." }, "displayName": { "type": "string", "description": "Human-readable connector name." }, "docsite": { "type": "string", "description": "Developer documentation for the connected service." }, "events": { "items": { "type": "string" }, "type": "array", "description": "Known events this connector subscribes to (e.g. Slack bot events, GitHub webhook events). Names are type-specific and validated by the managed-create flow when forwarded to the third-party service." }, "icon": { "type": "string", "description": "Connector branding icon. SHA-1 hash that resolves to the uploaded icon through the Vercel avatar service. Consumers render this with `https://vercel.com/api/www/avatar/{icon}`." }, "id": { "type": "string", "description": "Stable `scl_` connector ID. Use this value directly in `{connector}`." }, "knownStale": { "type": "boolean", "enum": [ false, true ], "description": "Whether the connector is known to have been edited since the app package it publishes to the provider was last built, so that package no longer matches it. Absent when it was not computed, or when the connector type publishes no such package. Derived on every read rather than marked at edit time, so reverting an edit clears it. Only reported by connector types that publish a package a user has to re-publish by hand — Microsoft Teams today." }, "managed": { "properties": { "sync": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel synchronizes provider-side configuration." } }, "type": "object", "description": "Managed connector metadata exposed without leaking the manager connector or installation identifiers." }, "name": { "type": "string", "description": "Connector name within the owning team." }, "redirectUri": { "type": "string", "description": "Redirect URI registered with the third-party service for this connector, if any. Used by `startAuthorization`/`startInstallation` to replay the exact URI back to the provider's token endpoint. Absent on connectors created before this field was introduced; those callers fall back to the `https://connect.vercel.com/callback` default." }, "reinstallAt": { "type": "number", "description": "Time when this connector started requiring reinstallation because an installation-affecting app-token grant changed." }, "service": { "type": "string", "description": "Best-effort identifier of the third-party service this connector represents, independent of `type`. Examples: `'slack'`, `'mcp.linear.app'`, and `'auth.example.com'`. Always present in API responses." }, "supportedSubjectTypes": { "items": { "type": "string" }, "type": "array", "description": "Token subject types supported by the connector." }, "supportsIcon": { "enum": [ false, "maybe", true ], "description": "Whether the connector icon can propagate to the provider." }, "supportsInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether the connector supports an installation flow." }, "supportsRevocation": { "type": "boolean", "enum": [ false, true ], "description": "Whether Connect can revoke tokens for this connector." }, "supportsTriggers": { "type": "boolean", "enum": [ false, true ], "description": "Whether this connector type supports trigger webhooks. Derived from the type definition; indicates that `triggers` and `triggerDestinations` may be meaningful for this connector." }, "target": { "type": "string", "description": "Which of the service's products/surfaces this connector points at." }, "triggerDestinations": { "items": { "$ref": "#/components/schemas/ConnectTriggerDestination" }, "type": "array", "description": "Destinations that incoming triggers should be forwarded to. Limited to 3 entries. Set the initial destination with `triggerDestination` during creation. Replace the complete set with `PATCH /v1/connect/connectors/{connector}/trigger-destinations`." }, "triggers": { "$ref": "#/components/schemas/ConnectTriggerConfiguration", "description": "Incoming trigger configuration for the connector." }, "type": { "type": "string", "enum": [ "api-key", "aws-alpha", "custom", "discord", "github", "linear", "linq", "microsoft-entra", "microsoft-teams", "oauth", "photon", "salesforce", "sendblue", "slack", "snowflake", "snowflake-wif" ], "description": "Connector implementation type." }, "typeIcon": { "type": "string", "description": "Icon identifier supplied by the connector type." }, "typeName": { "type": "string", "description": "Human-readable name of the connector type." }, "uid": { "type": "string", "description": "Team-scoped UID. URL-encode this value before using it in `{connector}`." }, "updatedAt": { "type": "number", "description": "Last update time in epoch milliseconds." }, "updatedBy": { "oneOf": [ { "properties": { "id": { "type": "string", "description": "Vercel user ID." }, "type": { "type": "string", "enum": [ "user" ], "description": "Principal kind." } }, "required": [ "id", "type" ], "type": "object", "description": "Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update." }, { "properties": { "environment": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "development", "preview", "production" ] } ], "description": "Deployment environment of the project principal." }, "id": { "type": "string", "description": "Vercel project ID." }, "type": { "type": "string", "enum": [ "project" ], "description": "Principal kind." } }, "required": [ "environment", "id", "type" ], "type": "object", "description": "Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update." } ], "description": "Principal that most recently updated the connector." }, "userTokens": { "properties": { "crossInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether one user token can be used across installations." }, "manualCredentialInput": { "type": "boolean", "enum": [ false, true ], "description": "User authorization is completed by the Connect consent screen submitting a credential instead of an OAuth redirect." }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "Known allowed user-level scopes. For Slack this is the user scope set configured on the app; for OAuth it is the connector's enabled `userAuthorization.scopes` configuration." }, "supportedAuthorizationDetails": { "items": { "type": "string" }, "type": "array", "description": "Supported OAuth authorization-detail type names." }, "supportsRefinement": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can narrow user-token grants per request." }, "supportsResources": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can request resource-specific user tokens." } }, "required": [ "crossInstallation", "supportsRefinement" ], "type": "object", "description": "User-token capabilities and known grants for the connector." }, "website": { "type": "string", "description": "Public website for the connected service." } }, "required": [ "createdAt", "displayName", "id", "name", "service", "supportedSubjectTypes", "supportsIcon", "supportsInstallation", "supportsRevocation", "supportsTriggers", "type", "typeName", "uid", "updatedAt" ], "type": "object", "description": "A connector that defines how Vercel accesses an external service." }, "ConnectPagination": { "properties": { "next": { "nullable": true, "type": "string", "description": "Opaque value to pass as `cursor` on the next request." } }, "required": [ "next" ], "type": "object", "description": "Cursor for the next page." }, "ConnectConnectorList": { "properties": { "connectors": { "items": { "$ref": "#/components/schemas/ConnectConnector" }, "type": "array", "description": "Connectors in this page." }, "pagination": { "$ref": "#/components/schemas/ConnectPagination", "description": "Cursor for the next page." } }, "required": [ "connectors", "pagination" ], "type": "object", "description": "Page of connectors." }, "ConnectConnectorCreateResult": { "properties": { "accentColor": { "type": "string", "description": "Hex accent color (e.g., `#000000`) for branding." }, "appTokens": { "properties": { "crossInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether one app token can be used across installations." }, "permissionsUrl": { "type": "string", "description": "Link to the page on the service where this connector's app-level permissions are declared and granted, when the service has one and it differs from `clientUrl`." }, "requiresReinstallation": { "type": "boolean", "enum": [ false, true ], "description": "True when changing app token grants requires reinstalling the app, so tokens cannot be partitioned independently by requester environment." }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "Known allowed app-level scopes. For Slack this is the bot scope set configured on the app; for OAuth it is the connector's enabled `clientCredentials.scopes` configuration." }, "supportedAuthorizationDetails": { "items": { "type": "string" }, "type": "array", "description": "Supported OAuth authorization-detail type names." }, "supportsRefinement": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can narrow app-token grants per request." }, "supportsResources": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can request resource-specific app tokens." } }, "required": [ "crossInstallation", "supportsRefinement" ], "type": "object", "description": "App-token capabilities and known grants for the connector." }, "backgroundColor": { "type": "string", "description": "Hex background color (e.g., `#000000`) for branding." }, "clientUrl": { "nullable": true, "type": "string", "description": "Provider-side URL for viewing or managing the resource represented by the connector. The destination can be an app, account, phone line, or service instance, depending on the connector type." }, "connectionMethod": { "type": "string", "description": "The connection method this connector was created from, when the create request named one." }, "createdAt": { "type": "number", "description": "Creation time in epoch milliseconds." }, "createdBy": { "oneOf": [ { "properties": { "id": { "type": "string", "description": "Vercel user ID." }, "type": { "type": "string", "enum": [ "user" ], "description": "Principal kind." } }, "required": [ "id", "type" ], "type": "object", "description": "Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all." }, { "properties": { "environment": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "development", "preview", "production" ], "x-speakeasy-name-override": "created_by_environment" } ], "description": "Deployment environment of the project principal.", "title": "CreatedByEnvironmentTarget" }, "id": { "type": "string", "description": "Vercel project ID." }, "type": { "type": "string", "enum": [ "project" ], "description": "Principal kind." } }, "required": [ "environment", "id", "type" ], "type": "object", "description": "Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all." } ], "description": "Principal that created the connector." }, "creationMode": { "type": "string", "enum": [ "managed", "manual" ], "description": "How the connector row was originally created. New create paths stamp this explicitly; older rows may omit it." }, "defaultInstallationId": { "type": "string", "description": "Installation used when a token request does not specify an installation." }, "devsite": { "type": "string", "description": "Developer website for the connected service." }, "displayName": { "type": "string", "description": "Human-readable connector name." }, "docsite": { "type": "string", "description": "Developer documentation for the connected service." }, "events": { "items": { "type": "string" }, "type": "array", "description": "Known events this connector subscribes to (e.g. Slack bot events, GitHub webhook events). Names are type-specific and validated by the managed-create flow when forwarded to the third-party service." }, "icon": { "type": "string", "description": "Connector branding icon. SHA-1 hash that resolves to the uploaded icon through the Vercel avatar service. Consumers render this with `https://vercel.com/api/www/avatar/{icon}`." }, "id": { "type": "string", "description": "Stable `scl_` connector ID. Use this value directly in `{connector}`." }, "knownStale": { "type": "boolean", "enum": [ false, true ], "description": "Whether the connector is known to have been edited since the app package it publishes to the provider was last built, so that package no longer matches it. Absent when it was not computed, or when the connector type publishes no such package. Derived on every read rather than marked at edit time, so reverting an edit clears it. Only reported by connector types that publish a package a user has to re-publish by hand — Microsoft Teams today." }, "managed": { "properties": { "sync": { "type": "boolean", "enum": [ false, true ], "description": "Whether Vercel synchronizes provider-side configuration." } }, "type": "object", "description": "Managed connector metadata exposed without leaking the manager connector or installation identifiers." }, "name": { "type": "string", "description": "Connector name within the owning team." }, "redirectUri": { "type": "string", "description": "Redirect URI registered with the third-party service for this connector, if any. Used by `startAuthorization`/`startInstallation` to replay the exact URI back to the provider's token endpoint. Absent on connectors created before this field was introduced; those callers fall back to the `https://connect.vercel.com/callback` default." }, "reinstallAt": { "type": "number", "description": "Time when this connector started requiring reinstallation because an installation-affecting app-token grant changed." }, "service": { "type": "string", "description": "Best-effort identifier of the third-party service this connector represents, independent of `type`. Examples: `'slack'`, `'mcp.linear.app'`, and `'auth.example.com'`. Always present in API responses." }, "supportedSubjectTypes": { "items": { "type": "string" }, "type": "array", "description": "Token subject types supported by the connector." }, "supportsIcon": { "enum": [ false, "maybe", true ], "description": "Whether the connector icon can propagate to the provider." }, "supportsInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether the connector supports an installation flow." }, "supportsRevocation": { "type": "boolean", "enum": [ false, true ], "description": "Whether Connect can revoke tokens for this connector." }, "supportsTriggers": { "type": "boolean", "enum": [ false, true ], "description": "Whether this connector type supports trigger webhooks. Derived from the type definition; indicates that `triggers` and `triggerDestinations` may be meaningful for this connector." }, "target": { "type": "string", "description": "Which of the service's products/surfaces this connector points at." }, "triggerDestinations": { "items": { "$ref": "#/components/schemas/ConnectTriggerDestination" }, "type": "array", "description": "Destinations that incoming triggers should be forwarded to. Limited to 3 entries. Set the initial destination with `triggerDestination` during creation. Replace the complete set with `PATCH /v1/connect/connectors/{connector}/trigger-destinations`." }, "triggers": { "$ref": "#/components/schemas/ConnectTriggerConfiguration", "description": "Incoming trigger configuration for the connector." }, "type": { "type": "string", "enum": [ "api-key", "aws-alpha", "custom", "discord", "github", "linear", "linq", "microsoft-entra", "microsoft-teams", "oauth", "photon", "salesforce", "sendblue", "slack", "snowflake", "snowflake-wif" ], "description": "Connector implementation type." }, "typeIcon": { "type": "string", "description": "Icon identifier supplied by the connector type." }, "typeName": { "type": "string", "description": "Human-readable name of the connector type." }, "uid": { "type": "string", "description": "Team-scoped UID. URL-encode this value before using it in `{connector}`." }, "updatedAt": { "type": "number", "description": "Last update time in epoch milliseconds." }, "updatedBy": { "oneOf": [ { "properties": { "id": { "type": "string", "description": "Vercel user ID." }, "type": { "type": "string", "enum": [ "user" ], "description": "Principal kind." } }, "required": [ "id", "type" ], "type": "object", "description": "Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update." }, { "properties": { "environment": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "development", "preview", "production" ], "x-speakeasy-name-override": "updated_by_environment" } ], "description": "Deployment environment of the project principal.", "title": "UpdatedByEnvironmentTarget" }, "id": { "type": "string", "description": "Vercel project ID." }, "type": { "type": "string", "enum": [ "project" ], "description": "Principal kind." } }, "required": [ "environment", "id", "type" ], "type": "object", "description": "Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update." } ], "description": "Principal that most recently updated the connector." }, "userTokens": { "properties": { "crossInstallation": { "type": "boolean", "enum": [ false, true ], "description": "Whether one user token can be used across installations." }, "manualCredentialInput": { "type": "boolean", "enum": [ false, true ], "description": "User authorization is completed by the Connect consent screen submitting a credential instead of an OAuth redirect." }, "scopes": { "items": { "type": "string" }, "type": "array", "description": "Known allowed user-level scopes. For Slack this is the user scope set configured on the app; for OAuth it is the connector's enabled `userAuthorization.scopes` configuration." }, "supportedAuthorizationDetails": { "items": { "type": "string" }, "type": "array", "description": "Supported OAuth authorization-detail type names." }, "supportsRefinement": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can narrow user-token grants per request." }, "supportsResources": { "type": "boolean", "enum": [ false, true ], "description": "Whether callers can request resource-specific user tokens." } }, "required": [ "crossInstallation", "supportsRefinement" ], "type": "object", "description": "User-token capabilities and known grants for the connector." }, "website": { "type": "string", "description": "Public website for the connected service." } }, "required": [ "createdAt", "displayName", "id", "name", "service", "supportedSubjectTypes", "supportsIcon", "supportsInstallation", "supportsRevocation", "supportsTriggers", "type", "typeName", "uid", "updatedAt" ], "type": "object", "description": "Connector created by the request." }, "ConnectConnectorCreateData": { "description": "Provider configuration. With type, provide the complete configuration for that type. With service and connectionMethod, provide only credentials and preferences; Connect supplies the type, endpoints, templates, and defaults. Other connector types accept an arbitrary object.", "anyOf": [ { "type": "object", "properties": { "serverUrl": { "type": "string", "description": "Authorization server base URL used for discovery." }, "serverConfig": { "description": "Authorization server metadata. Values override discovered metadata. Empty known string fields remove their stored overrides.", "type": "object", "properties": { "issuer": { "type": "string", "description": "Authorization server issuer URL." }, "authorization_endpoint": { "type": "string", "description": "OAuth authorization endpoint URL." }, "token_endpoint": { "type": "string", "description": "OAuth token endpoint URL." }, "userinfo_endpoint": { "type": "string", "description": "OpenID Connect UserInfo endpoint URL." }, "jwks_uri": { "type": "string", "description": "URL of the authorization server JSON Web Key Set." }, "jwks": { "description": "Inline authorization server JSON Web Key Set.", "type": "object", "properties": { "keys": { "type": "array", "items": { "type": "object", "properties": { "kty": { "type": "string", "description": "JSON Web Key type." }, "kid": { "type": "string", "description": "JSON Web Key identifier." }, "use": { "type": "string", "enum": [ "sig", "enc" ], "description": "Intended key use: signing or encryption." }, "key_ops": { "type": "array", "items": { "type": "string" }, "description": "Operations permitted for this key." }, "alg": { "type": "string", "description": "Algorithm intended for this key." } }, "required": [ "kty" ], "additionalProperties": true }, "description": "JSON Web Keys published by the authorization server." } }, "required": [ "keys" ], "additionalProperties": true }, "revocation_endpoint": { "type": "string", "description": "OAuth token revocation endpoint URL." }, "introspection_endpoint": { "type": "string", "description": "OAuth token introspection endpoint URL." }, "end_session_endpoint": { "type": "string", "description": "OpenID Connect session termination endpoint URL." }, "device_authorization_endpoint": { "type": "string", "description": "OAuth device authorization endpoint URL." }, "registration_endpoint": { "type": "string", "description": "OAuth dynamic client registration endpoint URL." }, "response_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth response types supported by the server." }, "token_endpoint_auth_methods_supported": { "type": "array", "items": { "type": "string" }, "description": "Token endpoint client authentication methods supported by the server." }, "token_endpoint_auth_signing_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Signing algorithms supported for token endpoint authentication." }, "scopes_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes supported by the server." }, "grant_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth grant types supported by the server." }, "response_modes_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth response modes supported by the server." }, "subject_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OpenID Connect subject identifier types supported by the server." }, "id_token_signing_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Signing algorithms supported for ID tokens." }, "id_token_encryption_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Key management algorithms supported for encrypted ID tokens." }, "id_token_encryption_enc_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Content encryption algorithms supported for encrypted ID tokens." }, "claim_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OpenID Connect claim value types supported by the server." }, "claims_supported": { "type": "array", "items": { "type": "string" }, "description": "Claims that the authorization server can return." }, "code_challenge_methods_supported": { "type": "array", "items": { "type": "string" }, "description": "PKCE code challenge methods supported by the server." }, "prompt_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Authorization prompt values supported by the server." }, "claims_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use the claims parameter." }, "request_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use signed request objects." }, "request_uri_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use request_uri." }, "require_request_uri_registration": { "type": "boolean", "description": "Whether request_uri values must be registered in advance." }, "service_documentation": { "type": "string", "description": "Authorization server documentation URL." }, "op_policy_uri": { "type": "string", "description": "Authorization server privacy policy URL." }, "op_tos_uri": { "type": "string", "description": "Authorization server terms of service URL." }, "logo_uri": { "type": "string", "description": "Authorization server logo URL." }, "client_id_metadata_document_supported": { "type": "boolean", "description": "Whether the server supports OAuth client ID metadata documents." }, "authorization_details_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth authorization-detail types supported by the server." } }, "additionalProperties": true, "default": {} }, "clientId": { "type": "string", "description": "OAuth client ID assigned by the provider." }, "clientName": { "type": "string", "description": "OAuth client name." }, "clientSecret": { "type": "string", "description": "OAuth client secret.", "writeOnly": true }, "tokenEndpointAuthMethod": { "type": "string", "description": "OAuth token endpoint authentication method. Common values are client_secret_post, client_secret_basic, none, and private_key_jwt. If omitted, Vercel selects a supported method from serverConfig and otherwise uses client_secret_post." }, "responseType": { "type": "string", "description": "OAuth authorization response type. Defaults to code. Other provider-supported values are accepted. An empty string clears the configured type." }, "pkceRequired": { "type": "boolean", "description": "Whether user authorization must use PKCE." }, "codeChallengeMethod": { "type": "string", "description": "PKCE code challenge method. Supported values are S256 and plain. Vercel prefers S256 when the provider supports it. An empty string clears the configured method." }, "userAuthorization": { "description": "User authorization grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } } }, "required": [ "enabled" ], "additionalProperties": false }, "refreshTokens": { "description": "Refresh token settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." } }, "required": [ "enabled" ], "additionalProperties": false }, "clientCredentials": { "description": "Client credentials grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } } }, "required": [ "enabled" ], "additionalProperties": false }, "forwardedClaims": { "type": "object", "additionalProperties": false, "description": "Allow-list of extra claims to propagate, keyed by source (idToken). Only claims named here and present in that source are exposed.", "properties": { "idToken": { "type": "array", "items": { "type": "string" }, "description": "ID token claim names that Connect can expose." } } }, "defaultAudience": { "type": "string", "description": "Default audience used when a token request omits one. An empty string clears the default." }, "defaultTokenExpiresIn": { "type": "number", "minimum": 60, "description": "Default token lifetime in seconds to use when the token response omits expires_in." }, "authorizationUrlParams": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Extra query parameters added to authorization URLs." }, "jwtBearer": { "description": "JWT bearer grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether JWT bearer grants are enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } }, "sub": { "type": "string", "description": "Default JWT subject claim." }, "iss": { "type": "string", "description": "Default JWT issuer claim." }, "aud": { "type": "string", "description": "Default JWT audience claim." }, "additionalClaims": { "type": "object", "additionalProperties": {}, "description": "Additional claims included in generated JWT assertions." }, "ttl": { "type": "number", "description": "JWT lifetime in seconds.", "minimum": 0, "exclusiveMinimum": true }, "useClientCredentials": { "type": "boolean", "description": "Whether JWT bearer requests also use client credentials." } }, "additionalProperties": false }, "clientAssertion": { "description": "`private_key_jwt` client assertion settings.", "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "description": "OAuth client assertion type. Defaults to urn:ietf:params:oauth:client-assertion-type:jwt-bearer. An empty string clears the configured type." }, "ttl": { "type": "number", "description": "Client assertion lifetime in seconds.", "minimum": 0, "exclusiveMinimum": true }, "claims": { "type": "object", "additionalProperties": {}, "description": "Additional claims included in the client assertion." } } } }, "required": [ "clientId" ], "additionalProperties": false, "title": "type:oauth" }, { "type": "object", "properties": { "subjectType": { "type": "string", "enum": [ "app", "user" ], "description": "Which subject the connector issues tokens for. Defaults to \\\"app\\\" (connector-level keys). \\\"user\\\" connectors store no connector-level values; each user supplies their own key during authorization." }, "values": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "description": "API key value.", "writeOnly": true }, "scope": { "type": "string", "description": "Optional scope associated with the API key value." }, "expiresAt": { "type": "integer", "description": "The timestamp when the API key value expires in milliseconds.", "minimum": 0, "exclusiveMinimum": true } }, "required": [ "value" ], "additionalProperties": false }, "description": "Initial API key values stored by the connector." }, "serviceUrls": { "type": "array", "minItems": 1, "maxItems": 8, "items": { "type": "string", "format": "uri" }, "description": "The HTTPS resources the API key authenticates against." }, "instructions": { "type": "string", "maxLength": 4000, "description": "Markdown instructions shown to each user on the authorization screen, explaining how to obtain the key they should paste." } }, "additionalProperties": false, "title": "type:api-key" }, { "type": "object", "properties": { "appId": { "type": "integer", "description": "GitHub App numeric ID.", "minimum": 0, "exclusiveMinimum": true }, "appSlug": { "type": "string", "description": "GitHub App slug." }, "appName": { "type": "string", "description": "GitHub App display name." }, "clientId": { "type": "string", "description": "OAuth client ID assigned by GitHub." }, "owner": { "description": "GitHub App owner.", "type": "object", "properties": { "type": { "type": "string", "enum": [ "user", "organization", "User", "Organization" ], "description": "GitHub App owner type." }, "id": { "type": "integer", "description": "GitHub App owner numeric ID." }, "slug": { "type": "string", "description": "GitHub App owner login." }, "name": { "type": "string", "description": "GitHub App owner display name." } }, "required": [ "type", "id", "slug" ], "additionalProperties": false }, "clientSecret": { "type": "string", "description": "GitHub App OAuth client secret.", "writeOnly": true }, "privateKeyPem": { "type": "string", "description": "GitHub App private key in PEM format.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "GitHub App webhook secret.", "writeOnly": true }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "required": [ "appId", "appSlug", "appName", "clientId" ], "additionalProperties": false, "title": "type:github" }, { "type": "object", "properties": { "appId": { "type": "string", "description": "Linear application ID." }, "appName": { "type": "string", "description": "Linear application name." }, "clientId": { "type": "string", "description": "OAuth client ID assigned by Linear." }, "clientSecret": { "type": "string", "description": "Linear OAuth client secret.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "Linear webhook verification secret.", "writeOnly": true }, "appScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Linear application tokens." }, "userScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Linear user tokens." }, "ownerOrganization": { "description": "Linear organization that owns the OAuth application.", "type": "object", "properties": { "id": { "type": "string", "description": "Linear organization ID." }, "slug": { "type": "string", "description": "Linear organization slug." }, "name": { "type": "string", "description": "Linear organization name." }, "logoUrl": { "type": "string", "description": "Linear organization logo URL.", "nullable": true } }, "required": [ "id", "slug", "name" ], "additionalProperties": false }, "application": { "description": "Linear OAuth application metadata.", "type": "object", "properties": { "id": { "type": "string", "description": "Linear OAuth application ID." }, "clientId": { "type": "string", "description": "Linear OAuth client ID." }, "name": { "type": "string", "description": "Linear OAuth application name." }, "description": { "type": "string", "description": "Linear OAuth application description.", "nullable": true }, "developer": { "type": "string", "description": "Linear OAuth application developer name.", "nullable": true }, "developerUrl": { "type": "string", "description": "Linear OAuth application developer URL.", "nullable": true }, "imageUrl": { "type": "string", "description": "Linear OAuth application image URL.", "nullable": true }, "redirectUris": { "type": "array", "items": { "type": "string" }, "description": "Registered redirect URIs for the Linear OAuth application." }, "distribution": { "type": "string", "description": "Linear OAuth application distribution mode.", "nullable": true }, "webhookResourceTypes": { "type": "array", "items": { "type": "string" }, "description": "Linear resource types delivered to the webhook." }, "webhookUrl": { "type": "string", "description": "Linear webhook URL.", "nullable": true }, "webhookEnabled": { "type": "boolean", "description": "Whether the Linear webhook is enabled." }, "createdAt": { "type": "string", "description": "Linear OAuth application creation timestamp." }, "updatedAt": { "type": "string", "description": "Linear OAuth application update timestamp." } }, "required": [ "id", "clientId", "name" ], "additionalProperties": false }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "required": [ "clientId", "clientSecret" ], "additionalProperties": false, "title": "type:linear" }, { "type": "object", "properties": { "apiToken": { "type": "string", "description": "Linq partner API token for the shared line.", "writeOnly": true }, "phoneNumbers": { "type": "array", "items": { "type": "string", "pattern": "^\\\\+[1-9]\\\\d{1,14}$" } } }, "required": [ "apiToken" ], "additionalProperties": false, "title": "type:linq" }, { "type": "object", "properties": { "consumerKey": { "type": "string", "description": "Salesforce connected app consumer key." }, "consumerSecret": { "type": "string", "description": "Salesforce connected app consumer secret.", "writeOnly": true }, "loginHost": { "type": "string", "description": "Salesforce login host, such as login.salesforce.com." } }, "required": [ "consumerKey", "consumerSecret", "loginHost" ], "additionalProperties": false, "title": "type:salesforce" }, { "type": "object", "properties": { "apiKeyId": { "type": "string", "description": "Sendblue API key id (`sb-api-key-id`)." }, "apiSecretKey": { "type": "string", "description": "Sendblue API secret key (`sb-api-secret-key`).", "writeOnly": true }, "phoneNumbers": { "description": "E.164 Sendblue lines this connector sends and receives on. Used as the connector's display name, and the only lines its webhooks are registered for; an empty array clears them, which also removes the webhook subscription.", "type": "array", "items": { "type": "string", "pattern": "^\\\\+[1-9]\\\\d{1,14}$" } } }, "required": [ "apiKeyId", "apiSecretKey" ], "additionalProperties": false, "title": "type:sendblue" }, { "type": "object", "properties": { "appId": { "type": "string", "description": "Slack app ID." }, "appName": { "type": "string", "description": "Slack app display name." }, "clientId": { "type": "string", "description": "OAuth client ID assigned by Slack." }, "clientSecret": { "type": "string", "description": "Slack app OAuth client secret.", "writeOnly": true }, "slackTeam": { "description": "Slack workspace metadata.", "type": "object", "properties": { "id": { "type": "string", "description": "Slack workspace ID." }, "name": { "type": "string", "description": "Slack workspace name." }, "domain": { "type": "string", "description": "Slack workspace domain." } }, "required": [ "id" ], "additionalProperties": false }, "signingSecret": { "type": "string", "description": "Slack request signing secret.", "writeOnly": true }, "verificationToken": { "type": "string", "description": "Legacy Slack webhook verification token.", "writeOnly": true }, "botScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Slack bot tokens." }, "userScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Slack user tokens." }, "slashCommands": { "type": "array", "maxItems": 50, "items": { "type": "object", "properties": { "command": { "type": "string", "pattern": "^\\\\/", "maxLength": 32, "description": "Slash command including its leading slash." }, "description": { "type": "string", "maxLength": 2000, "description": "Description shown for the slash command in Slack." }, "usageHint": { "type": "string", "maxLength": 1000, "description": "Optional usage hint shown for the slash command." }, "shouldEscape": { "type": "boolean", "description": "Whether Slack should escape command arguments." } }, "required": [ "command", "description" ], "additionalProperties": false }, "description": "Slash commands configured for the managed Slack app." }, "shortcuts": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "global", "message" ], "description": "Where Slack exposes the shortcut." }, "name": { "type": "string", "description": "Shortcut display name." }, "callbackId": { "type": "string", "maxLength": 255, "description": "Identifier included in the shortcut callback." }, "description": { "type": "string", "maxLength": 150, "description": "Description shown for the shortcut in Slack." } }, "required": [ "type", "name", "callbackId", "description" ], "additionalProperties": false }, "description": "Global and message shortcuts configured for the Slack app." }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "required": [ "appId", "appName", "clientId", "clientSecret" ], "additionalProperties": false, "title": "type:slack" }, { "type": "object", "properties": { "clientName": { "type": "string", "description": "Snowflake OAuth client name." }, "accountIdentifier": { "type": "string", "description": "Snowflake account identifier." }, "defaultSessionRole": { "type": "string", "description": "Default Snowflake role for created sessions." }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "required": [ "accountIdentifier" ], "additionalProperties": false, "title": "type:snowflake" }, { "type": "object", "properties": { "clientName": { "type": "string", "description": "Snowflake client name." }, "accountIdentifier": { "type": "string", "description": "Snowflake account identifier." }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "additionalProperties": false, "title": "type:snowflake-wif" }, { "type": "object", "properties": { "projectId": { "type": "string", "description": "Photon project ID." }, "projectSecret": { "type": "string", "description": "Photon project secret.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "Photon webhook verification secret.", "writeOnly": true } }, "required": [ "projectId", "projectSecret" ], "additionalProperties": false, "title": "type:photon" }, { "title": "type:other", "type": "object", "additionalProperties": true } ] }, "ConnectCreateConnectorRequest": { "type": "object", "required": [ "data" ], "properties": { "data": { "$ref": "#/components/schemas/ConnectConnectorCreateData", "description": "Provider configuration for the selected connector type or connection method." }, "icon": { "type": "string", "description": "SHA-1 digest of a PNG or JPEG icon that is at least 640 by 640 pixels. This field does not accept a URL or image bytes.\n\nFirst compute the digest and upload the raw image with [POST /v2/files](https://vercel.com/docs/rest-api/deployments/upload-deployment-files). Send `Content-Length` and the same 40-character digest in `x-vercel-digest`. Then set `icon` to that digest.\n\n```js\nimport { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\n\nconst VERCEL_TOKEN = process.env.VERCEL_TOKEN;\nconst connectorId = 'scl_...';\nconst bytes = await readFile('icon.png');\nconst digest = createHash('sha1').update(bytes).digest('hex');\n\nawait fetch('https://api.vercel.com/v2/files', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${VERCEL_TOKEN}`,\n 'Content-Type': 'application/octet-stream',\n 'Content-Length': String(bytes.length),\n 'x-vercel-digest': digest,\n },\n body: bytes,\n});\n\nawait fetch(`https://api.vercel.com/v2/connect/connectors/${connectorId}`, {\n method: 'PATCH',\n headers: {\n Authorization: `Bearer ${VERCEL_TOKEN}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ icon: digest }),\n});\n```\n", "pattern": "^[0-9a-fA-F]{40}$" }, "backgroundColor": { "type": "string", "description": "Branding background color (6-digit hex, for example", "pattern": "^#[0-9a-fA-F]{6}$" }, "accentColor": { "type": "string", "description": "Branding accent color (6-digit hex, for example", "pattern": "^#[0-9a-fA-F]{6}$" }, "type": { "type": "string", "description": "Connector implementation type for full configuration. Known types: api-key, discord, github, linear, linq, microsoft-entra, oauth, photon, salesforce, sendblue, slack, snowflake, snowflake-wif. Optional when service and connectionMethod select the type." }, "service": { "type": "string", "description": "Service slug or URL for which the connector is used. Required when connectionMethod is set. Service alone does not enable preset configuration." }, "connectionMethod": { "type": "string", "maxLength": 64, "description": "Connection method slug of the service. Use it with service to select preset configuration." }, "params": { "type": "object", "maxProperties": 16, "additionalProperties": { "type": "string", "maxLength": 256 }, "description": "Values for the selected connection method's template fields. Requires connectionMethod." }, "target": { "type": "string", "maxLength": 64, "description": "Which of the service's targets this connector is for. Requires \\\"connectionMethod\\\" and must be one that method serves. Optional." }, "uid": { "type": "string", "description": "Optional team-scoped unique identifier for the connector. If omitted or empty, Connect generates a value." }, "name": { "type": "string", "description": "Connector name. The value is trimmed and cannot contain control characters. If omitted or empty, the project name is used. A name or projectId is required. API key connectors require name." }, "projectId": { "type": "string", "description": "Project to connect during creation. If environments is omitted, the connection uses development, preview, and production." }, "environments": { "minItems": 1, "description": "Environments for the project connection. Requires projectId. Use one or more built-in environment names or stable custom environment IDs that belong to the project. Duplicate values are accepted and removed.", "type": "array", "items": { "anyOf": [ { "type": "string", "enum": [ "development", "preview", "production" ] }, { "type": "string", "pattern": "^env_" } ], "description": "A built-in environment name or the stable env_* ID of a custom environment." } }, "triggers": { "description": "Whether the triggers are enabled for this connector.", "type": "boolean" }, "triggerDestination": { "description": "Initial trigger destination. Requires triggers to be enabled and a projectId here or at the top level. Connector responses expose the resulting set as triggerDestinations. Replace the complete set with PATCH /v1/connect/connectors/{connector}/trigger-destinations.", "oneOf": [ { "title": "Default deployment", "type": "object", "minProperties": 1, "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives triggers. During connector creation, omit it to use the top-level projectId.", "minLength": 1 }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } }, { "title": "Branch", "type": "object", "required": [ "branch" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives triggers. During connector creation, omit it to use the top-level projectId.", "minLength": 1 }, "branch": { "type": "string", "maxLength": 250, "description": "Git branch used to select a preview deployment.", "minLength": 1 }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } }, { "title": "Custom environment", "type": "object", "required": [ "customEnvironmentId" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives triggers. During connector creation, omit it to use the top-level projectId.", "minLength": 1 }, "customEnvironmentId": { "description": "Stable custom environment ID that belongs to the destination project.", "type": "string", "pattern": "^env_" }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } } ] }, "events": { "type": "array", "description": "Default trigger events for this connector.", "items": { "type": "string" } } }, "description": "Create a connector with full provider configuration or with a known service connection method.", "anyOf": [ { "title": "Full configuration", "required": [ "type" ] }, { "title": "Preset configuration", "required": [ "service", "connectionMethod" ] } ] }, "ConnectReconsent": { "properties": { "scope": { "type": "string", "enum": [ "user" ], "description": "The affected authorization scope. user means each affected user must authorize again." } }, "required": [ "scope" ], "type": "object", "description": "Existing authorizations no longer cover the connector's configured scopes, so they must be re-authorized." }, "ConnectServiceSyncError": { "properties": { "fields": { "items": { "type": "string" }, "type": "array", "description": "Connector fields that caused the synchronization error." }, "message": { "type": "string", "description": "Human-readable provider synchronization error." }, "vendor": { "additionalProperties": true, "type": "object", "description": "Provider-specific error details that are safe to expose." } }, "required": [ "message" ], "type": "object", "description": "Provider synchronization errors, when synchronization is required." }, "ConnectServiceSync": { "properties": { "errors": { "items": { "$ref": "#/components/schemas/ConnectServiceSyncError" }, "type": "array", "description": "Provider synchronization errors. Present when serviceSync.status is required." }, "status": { "type": "string", "enum": [ "done", "required" ], "description": "done means the external service was updated. required means the Vercel update was saved, but provider-side configuration still needs attention." } }, "required": [ "status" ], "type": "object", "description": "Provider-side configuration synchronization result." }, "ConnectConnectorUpdateResult": { "properties": { "connector": { "$ref": "#/components/schemas/ConnectConnector", "description": "Updated connector." }, "reconsentNeeded": { "$ref": "#/components/schemas/ConnectReconsent", "description": "Present when affected users must authorize the connector's new permissions." }, "reinstallNeeded": { "type": "boolean", "enum": [ false, true ], "description": "When true, prompt a team owner or administrator to reinstall the connector before relying on the change." }, "serviceSync": { "$ref": "#/components/schemas/ConnectServiceSync", "description": "Result of synchronizing the change with the external service." } }, "required": [ "connector" ], "type": "object", "description": "Updated connector and any required provider follow-up actions." }, "ConnectConnectorUpdateData": { "description": "Provider configuration fields for the connector type.", "anyOf": [ { "type": "object", "properties": { "serverUrl": { "type": "string", "description": "Authorization server base URL used for discovery." }, "serverConfig": { "description": "Authorization server metadata. Values override discovered metadata. Empty known string fields remove their stored overrides.", "type": "object", "properties": { "issuer": { "type": "string", "description": "Authorization server issuer URL." }, "authorization_endpoint": { "type": "string", "description": "OAuth authorization endpoint URL." }, "token_endpoint": { "type": "string", "description": "OAuth token endpoint URL." }, "userinfo_endpoint": { "type": "string", "description": "OpenID Connect UserInfo endpoint URL." }, "jwks_uri": { "type": "string", "description": "URL of the authorization server JSON Web Key Set." }, "jwks": { "description": "Inline authorization server JSON Web Key Set.", "type": "object", "properties": { "keys": { "type": "array", "items": { "type": "object", "properties": { "kty": { "type": "string", "description": "JSON Web Key type." }, "kid": { "type": "string", "description": "JSON Web Key identifier." }, "use": { "type": "string", "enum": [ "sig", "enc" ], "description": "Intended key use: signing or encryption." }, "key_ops": { "type": "array", "items": { "type": "string" }, "description": "Operations permitted for this key." }, "alg": { "type": "string", "description": "Algorithm intended for this key." } }, "required": [ "kty" ], "additionalProperties": true }, "description": "JSON Web Keys published by the authorization server." } }, "required": [ "keys" ], "additionalProperties": true }, "revocation_endpoint": { "type": "string", "description": "OAuth token revocation endpoint URL." }, "introspection_endpoint": { "type": "string", "description": "OAuth token introspection endpoint URL." }, "end_session_endpoint": { "type": "string", "description": "OpenID Connect session termination endpoint URL." }, "device_authorization_endpoint": { "type": "string", "description": "OAuth device authorization endpoint URL." }, "registration_endpoint": { "type": "string", "description": "OAuth dynamic client registration endpoint URL." }, "response_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth response types supported by the server." }, "token_endpoint_auth_methods_supported": { "type": "array", "items": { "type": "string" }, "description": "Token endpoint client authentication methods supported by the server." }, "token_endpoint_auth_signing_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Signing algorithms supported for token endpoint authentication." }, "scopes_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes supported by the server." }, "grant_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth grant types supported by the server." }, "response_modes_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth response modes supported by the server." }, "subject_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OpenID Connect subject identifier types supported by the server." }, "id_token_signing_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Signing algorithms supported for ID tokens." }, "id_token_encryption_alg_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Key management algorithms supported for encrypted ID tokens." }, "id_token_encryption_enc_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Content encryption algorithms supported for encrypted ID tokens." }, "claim_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OpenID Connect claim value types supported by the server." }, "claims_supported": { "type": "array", "items": { "type": "string" }, "description": "Claims that the authorization server can return." }, "code_challenge_methods_supported": { "type": "array", "items": { "type": "string" }, "description": "PKCE code challenge methods supported by the server." }, "prompt_values_supported": { "type": "array", "items": { "type": "string" }, "description": "Authorization prompt values supported by the server." }, "claims_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use the claims parameter." }, "request_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use signed request objects." }, "request_uri_parameter_supported": { "type": "boolean", "description": "Whether authorization requests can use request_uri." }, "require_request_uri_registration": { "type": "boolean", "description": "Whether request_uri values must be registered in advance." }, "service_documentation": { "type": "string", "description": "Authorization server documentation URL." }, "op_policy_uri": { "type": "string", "description": "Authorization server privacy policy URL." }, "op_tos_uri": { "type": "string", "description": "Authorization server terms of service URL." }, "logo_uri": { "type": "string", "description": "Authorization server logo URL." }, "client_id_metadata_document_supported": { "type": "boolean", "description": "Whether the server supports OAuth client ID metadata documents." }, "authorization_details_types_supported": { "type": "array", "items": { "type": "string" }, "description": "OAuth authorization-detail types supported by the server." } }, "additionalProperties": true, "default": {} }, "clientId": { "type": "string", "description": "OAuth client ID." }, "clientName": { "type": "string", "description": "OAuth client name." }, "clientSecret": { "type": "string", "description": "OAuth client secret.", "writeOnly": true }, "tokenEndpointAuthMethod": { "type": "string", "description": "OAuth token endpoint authentication method. Common values are client_secret_post, client_secret_basic, none, and private_key_jwt. If omitted, Vercel selects a supported method from serverConfig and otherwise uses client_secret_post." }, "responseType": { "type": "string", "description": "OAuth authorization response type. Defaults to code. Other provider-supported values are accepted. An empty string clears the configured type." }, "pkceRequired": { "type": "boolean", "description": "Whether user authorization must use PKCE." }, "codeChallengeMethod": { "type": "string", "description": "PKCE code challenge method. Supported values are S256 and plain. Vercel prefers S256 when the provider supports it. An empty string clears the configured method." }, "userAuthorization": { "description": "User authorization grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } } }, "required": [ "enabled" ], "additionalProperties": false }, "refreshTokens": { "description": "Refresh token settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." } }, "required": [ "enabled" ], "additionalProperties": false }, "clientCredentials": { "description": "Client credentials grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether this OAuth grant is enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } } }, "required": [ "enabled" ], "additionalProperties": false }, "forwardedClaims": { "type": "object", "additionalProperties": false, "description": "Allow-list of extra claims to propagate, keyed by source (idToken). Only claims named here and present in that source are exposed.", "properties": { "idToken": { "type": "array", "items": { "type": "string" }, "description": "ID token claim names that Connect can expose." } } }, "defaultAudience": { "type": "string", "description": "Default audience used when a token request omits one. An empty string clears the default." }, "defaultTokenExpiresIn": { "type": "number", "minimum": 60, "description": "Default token lifetime in seconds to use when the token response omits expires_in." }, "authorizationUrlParams": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Extra query parameters added to authorization URLs." }, "jwtBearer": { "description": "JWT bearer grant settings.", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether JWT bearer grants are enabled." }, "scopes": { "type": "array", "description": "Default scopes to request when token params specify scopes: [\\\"*\\\"].", "items": { "type": "string" } }, "sub": { "type": "string", "description": "Default JWT subject claim." }, "iss": { "type": "string", "description": "Default JWT issuer claim." }, "aud": { "type": "string", "description": "Default JWT audience claim." }, "additionalClaims": { "type": "object", "additionalProperties": {}, "description": "Additional claims included in generated JWT assertions." }, "ttl": { "type": "number", "description": "JWT lifetime in seconds.", "minimum": 0, "exclusiveMinimum": true }, "useClientCredentials": { "type": "boolean", "description": "Whether JWT bearer requests also use client credentials." } }, "additionalProperties": false }, "clientAssertion": { "description": "`private_key_jwt` client assertion settings.", "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "description": "OAuth client assertion type. Defaults to urn:ietf:params:oauth:client-assertion-type:jwt-bearer. An empty string clears the configured type." }, "ttl": { "type": "number", "description": "Client assertion lifetime in seconds.", "minimum": 0, "exclusiveMinimum": true }, "claims": { "type": "object", "additionalProperties": {}, "description": "Additional claims included in the client assertion." } } } }, "additionalProperties": false, "title": "type:oauth" }, { "type": "object", "properties": { "toDelete": { "type": "array", "items": { "type": "string" }, "description": "Stored API key value IDs to delete." }, "toAdd": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "description": "API key value.", "writeOnly": true }, "scope": { "type": "string", "description": "Optional scope associated with the API key value." }, "expiresAt": { "type": "integer", "description": "The timestamp when the API key value expires in milliseconds.", "minimum": 0, "exclusiveMinimum": true } }, "required": [ "value" ], "additionalProperties": false }, "description": "API key values to add." }, "toUpdate": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Stored API key value ID." }, "value": { "anyOf": [ { "type": "string" }, { "type": "string" } ], "description": "Replacement API key value. Use null to keep the stored value.", "writeOnly": true }, "scope": { "anyOf": [ { "type": "string" }, { "type": "string" } ], "description": "Replacement scope. Use null to remove the scope." }, "expiresAt": { "anyOf": [ { "type": "integer", "minimum": 0, "exclusiveMinimum": true }, { "type": "string" } ], "description": "The timestamp when the API key value expires in milliseconds." } }, "required": [ "id" ], "additionalProperties": false }, "description": "Existing API key values to update." }, "instructions": { "anyOf": [ { "type": "string", "maxLength": 4000 }, { "type": "string" } ], "description": "Markdown instructions shown to each user on the authorization screen, explaining how to obtain the key they should paste." } }, "additionalProperties": false, "title": "type:api-key" }, { "type": "object", "properties": { "appId": { "type": "integer", "description": "GitHub App numeric ID.", "minimum": 0, "exclusiveMinimum": true }, "appSlug": { "type": "string", "description": "GitHub App slug." }, "appName": { "type": "string", "description": "GitHub App display name." }, "clientId": { "type": "string", "description": "GitHub App OAuth client ID." }, "owner": { "description": "GitHub App owner.", "type": "object", "properties": { "type": { "type": "string", "enum": [ "user", "organization", "User", "Organization" ], "description": "GitHub App owner type." }, "id": { "type": "integer", "description": "GitHub App owner numeric ID." }, "slug": { "type": "string", "description": "GitHub App owner login." }, "name": { "type": "string", "description": "GitHub App owner display name." } }, "required": [ "type", "id", "slug" ], "additionalProperties": false }, "clientSecret": { "type": "string", "description": "GitHub App OAuth client secret.", "writeOnly": true }, "privateKeyPem": { "type": "string", "description": "GitHub App private key in PEM format.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "GitHub App webhook secret.", "writeOnly": true }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "additionalProperties": false, "title": "type:github" }, { "type": "object", "properties": { "appId": { "type": "string", "description": "Linear application ID." }, "appName": { "type": "string", "description": "Linear application name." }, "clientId": { "type": "string", "description": "Linear OAuth client ID." }, "clientSecret": { "type": "string", "description": "Linear OAuth client secret.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "Linear webhook verification secret.", "writeOnly": true }, "appScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Linear application tokens." }, "userScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Linear user tokens." }, "ownerOrganization": { "description": "Linear organization that owns the OAuth application.", "type": "object", "properties": { "id": { "type": "string", "description": "Linear organization ID." }, "slug": { "type": "string", "description": "Linear organization slug." }, "name": { "type": "string", "description": "Linear organization name." }, "logoUrl": { "type": "string", "description": "Linear organization logo URL.", "nullable": true } }, "required": [ "id", "slug", "name" ], "additionalProperties": false }, "application": { "description": "Linear OAuth application metadata.", "type": "object", "properties": { "id": { "type": "string", "description": "Linear OAuth application ID." }, "clientId": { "type": "string", "description": "Linear OAuth client ID." }, "name": { "type": "string", "description": "Linear OAuth application name." }, "description": { "type": "string", "description": "Linear OAuth application description.", "nullable": true }, "developer": { "type": "string", "description": "Linear OAuth application developer name.", "nullable": true }, "developerUrl": { "type": "string", "description": "Linear OAuth application developer URL.", "nullable": true }, "imageUrl": { "type": "string", "description": "Linear OAuth application image URL.", "nullable": true }, "redirectUris": { "type": "array", "items": { "type": "string" }, "description": "Registered redirect URIs for the Linear OAuth application." }, "distribution": { "type": "string", "description": "Linear OAuth application distribution mode.", "nullable": true }, "webhookResourceTypes": { "type": "array", "items": { "type": "string" }, "description": "Linear resource types delivered to the webhook." }, "webhookUrl": { "type": "string", "description": "Linear webhook URL.", "nullable": true }, "webhookEnabled": { "type": "boolean", "description": "Whether the Linear webhook is enabled." }, "createdAt": { "type": "string", "description": "Linear OAuth application creation timestamp." }, "updatedAt": { "type": "string", "description": "Linear OAuth application update timestamp." } }, "required": [ "id", "clientId", "name" ], "additionalProperties": false }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "additionalProperties": false, "title": "type:linear" }, { "type": "object", "properties": { "consumerKey": { "type": "string", "description": "Salesforce connected app consumer key." }, "consumerSecret": { "type": "string", "description": "Salesforce connected app consumer secret.", "writeOnly": true }, "loginHost": { "type": "string", "description": "Salesforce login host, such as login.salesforce.com." } }, "additionalProperties": false, "title": "type:salesforce" }, { "type": "object", "properties": { "appId": { "type": "string", "description": "Slack app ID." }, "appName": { "type": "string", "description": "Slack app display name." }, "clientId": { "type": "string", "description": "Slack app OAuth client ID." }, "clientSecret": { "type": "string", "description": "Slack app OAuth client secret.", "writeOnly": true }, "slackTeam": { "description": "Slack workspace metadata.", "type": "object", "properties": { "id": { "type": "string", "description": "Slack workspace ID." }, "name": { "type": "string", "description": "Slack workspace name." }, "domain": { "type": "string", "description": "Slack workspace domain." } }, "required": [ "id" ], "additionalProperties": false }, "signingSecret": { "type": "string", "description": "Slack request signing secret.", "writeOnly": true }, "verificationToken": { "type": "string", "description": "Legacy Slack webhook verification token.", "writeOnly": true }, "botScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Slack bot tokens." }, "userScopes": { "type": "array", "items": { "type": "string" }, "description": "OAuth scopes requested for Slack user tokens." }, "slashCommands": { "type": "array", "maxItems": 50, "items": { "type": "object", "properties": { "command": { "type": "string", "pattern": "^\\\\/", "maxLength": 32, "description": "Slash command including its leading slash." }, "description": { "type": "string", "maxLength": 2000, "description": "Description shown for the slash command in Slack." }, "usageHint": { "type": "string", "maxLength": 1000, "description": "Optional usage hint shown for the slash command." }, "shouldEscape": { "type": "boolean", "description": "Whether Slack should escape command arguments." } }, "required": [ "command", "description" ], "additionalProperties": false }, "description": "Slash commands configured for the managed Slack app." }, "shortcuts": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "global", "message" ], "description": "Where Slack exposes the shortcut." }, "name": { "type": "string", "description": "Shortcut display name." }, "callbackId": { "type": "string", "maxLength": 255, "description": "Identifier included in the shortcut callback." }, "description": { "type": "string", "maxLength": 150, "description": "Description shown for the shortcut in Slack." } }, "required": [ "type", "name", "callbackId", "description" ], "additionalProperties": false }, "description": "Global and message shortcuts configured for the Slack app." }, "extras": { "type": "object", "additionalProperties": {}, "description": "Additional provider metadata stored with the connector." } }, "additionalProperties": false, "title": "type:slack" }, { "type": "object", "properties": { "accountIdentifier": { "type": "string", "description": "Snowflake account identifier." }, "defaultSessionRole": { "type": "string", "description": "Default Snowflake role for created sessions." } }, "additionalProperties": false, "title": "type:snowflake" }, { "type": "object", "properties": { "accountIdentifier": { "type": "string", "description": "Snowflake account identifier." } }, "additionalProperties": false, "title": "type:snowflake-wif" }, { "type": "object", "properties": { "apiToken": { "type": "string", "description": "Linq partner API token for the shared line.", "writeOnly": true }, "phoneNumbers": { "type": "array", "items": { "type": "string", "pattern": "^\\\\+[1-9]\\\\d{1,14}$" } } }, "additionalProperties": false, "title": "type:linq" }, { "type": "object", "properties": { "apiKeyId": { "type": "string", "description": "Sendblue API key id (`sb-api-key-id`)." }, "apiSecretKey": { "type": "string", "description": "Sendblue API secret key (`sb-api-secret-key`).", "writeOnly": true }, "phoneNumbers": { "description": "E.164 Sendblue lines this connector sends and receives on. Used as the connector's display name, and the only lines its webhooks are registered for; an empty array clears them, which also removes the webhook subscription.", "type": "array", "items": { "type": "string", "pattern": "^\\\\+[1-9]\\\\d{1,14}$" } } }, "additionalProperties": false, "title": "type:sendblue" }, { "type": "object", "properties": { "projectSecret": { "type": "string", "description": "Photon project secret.", "writeOnly": true }, "webhookSecret": { "type": "string", "description": "Photon webhook verification secret.", "writeOnly": true }, "repairWebhook": { "type": "boolean", "description": "Whether Connect should recreate the Photon webhook." } }, "additionalProperties": false, "title": "type:photon" }, { "title": "type:other", "type": "object", "additionalProperties": true } ] }, "ConnectUpdateConnectorRequest": { "type": "object", "minProperties": 1, "additionalProperties": false, "properties": { "triggers": { "description": "Whether the triggers are enabled for this connector.", "type": "boolean" }, "events": { "type": "array", "description": "Default trigger events for this connector.", "items": { "type": "string" } }, "data": { "$ref": "#/components/schemas/ConnectConnectorUpdateData", "description": "Provider configuration fields to update." }, "icon": { "type": "string", "description": "SHA-1 digest of a PNG or JPEG icon that is at least 640 by 640 pixels. This field does not accept a URL or image bytes.\n\nFirst compute the digest and upload the raw image with [POST /v2/files](https://vercel.com/docs/rest-api/deployments/upload-deployment-files). Send `Content-Length` and the same 40-character digest in `x-vercel-digest`. Then set `icon` to that digest.\n\n```js\nimport { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\n\nconst VERCEL_TOKEN = process.env.VERCEL_TOKEN;\nconst connectorId = 'scl_...';\nconst bytes = await readFile('icon.png');\nconst digest = createHash('sha1').update(bytes).digest('hex');\n\nawait fetch('https://api.vercel.com/v2/files', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${VERCEL_TOKEN}`,\n 'Content-Type': 'application/octet-stream',\n 'Content-Length': String(bytes.length),\n 'x-vercel-digest': digest,\n },\n body: bytes,\n});\n\nawait fetch(`https://api.vercel.com/v2/connect/connectors/${connectorId}`, {\n method: 'PATCH',\n headers: {\n Authorization: `Bearer ${VERCEL_TOKEN}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ icon: digest }),\n});\n```\n", "pattern": "^[0-9a-fA-F]{40}$" }, "backgroundColor": { "type": "string" }, "accentColor": { "type": "string" }, "uid": { "type": "string", "description": "Full team-scoped UID, such as `slack/my-bot`. It cannot contain whitespace, `%`, `#`, control characters, or Vercel-owned namespaces. Changing it breaks callers that use the old UID. The stable connector ID does not change." }, "name": { "type": "string", "description": "Display name for the connector. It is trimmed and cannot be empty or contain control characters." } }, "description": "Connector fields to update." }, "ConnectTriggerDestinationInput": { "description": "A destination in the complete replacement set. Each destination targets the default deployment, a branch, or a custom environment.", "oneOf": [ { "title": "Default deployment", "type": "object", "required": [ "projectId" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives matching trigger requests.", "minLength": 1 }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } }, { "title": "Branch", "type": "object", "required": [ "projectId", "branch" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives matching trigger requests.", "minLength": 1 }, "branch": { "type": "string", "maxLength": 250, "description": "Git branch used to select a preview deployment.", "minLength": 1 }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } }, { "title": "Custom environment", "type": "object", "required": [ "projectId", "customEnvironmentId" ], "additionalProperties": false, "properties": { "projectId": { "type": "string", "description": "Project that receives matching trigger requests.", "minLength": 1 }, "customEnvironmentId": { "description": "Stable custom environment ID that belongs to the destination project.", "type": "string", "pattern": "^env_" }, "path": { "type": "string", "maxLength": 2048, "description": "Route path on the linked project that receives forwarded trigger requests.", "minLength": 1 } } } ] }, "ConnectReplaceTriggerDestinationsRequest": { "type": "object", "required": [ "destinations" ], "additionalProperties": false, "properties": { "destinations": { "type": "array", "maxItems": 3, "description": "Complete replacement set of trigger destinations. An empty array removes all destinations. Connector get and list responses expose the saved set as triggerDestinations.", "items": { "$ref": "#/components/schemas/ConnectTriggerDestinationInput" } } }, "description": "Complete replacement set of trigger destinations." }, "ConnectProjectConnection": { "properties": { "connectorId": { "type": "string", "description": "Stable `scl_` connector ID, even when the request used a UID." }, "createdAt": { "type": "number", "description": "Time when the project connection was created, in epoch milliseconds." }, "enabledEnvironments": { "items": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "development", "preview", "production" ] } ] }, "type": "array", "description": "Environments where the connector is enabled for the project." }, "project": { "properties": { "customEnvironments": { "items": { "properties": { "id": { "type": "string", "description": "Stable custom environment ID." }, "slug": { "type": "string", "description": "Current human-readable custom environment slug." } }, "required": [ "id", "slug" ], "type": "object", "description": "Custom environments available on the project. This list can include environments where the connector is not enabled." }, "type": "array", "description": "Custom environments available on the project. This list can include environments where the connector is not enabled." }, "id": { "type": "string", "description": "Same Vercel project ID as the connection's top-level `projectId`." }, "name": { "type": "string", "description": "Current Vercel project name." } }, "required": [ "id", "name" ], "type": "object", "description": "Vercel project connected to the connector." }, "updatedAt": { "type": "number", "description": "Time when the project connection was last updated, in epoch milliseconds." } }, "required": [ "connectorId", "createdAt", "enabledEnvironments", "project", "updatedAt" ], "type": "object", "description": "A connection between a connector and a Vercel project, including the environments where the connector is enabled." }, "ConnectConnectorProjectConnectionList": { "properties": { "pagination": { "$ref": "#/components/schemas/ConnectPagination", "description": "Cursor for the next page." }, "projects": { "items": { "$ref": "#/components/schemas/ConnectProjectConnection" }, "type": "array", "description": "Project connections in this page." } }, "required": [ "pagination", "projects" ], "type": "object", "description": "Page of projects connected to a connector." }, "ConnectUpsertProjectConnectionRequest": { "type": "object", "required": [ "environments" ], "properties": { "environments": { "minItems": 1, "description": "One or more built-in environment names or stable custom environment IDs that belong to the project. Duplicate values are accepted and removed.", "type": "array", "items": { "anyOf": [ { "type": "string", "enum": [ "development", "preview", "production" ] }, { "type": "string", "pattern": "^env_" } ], "description": "A built-in environment name or the stable env_* ID of a custom environment." } } }, "description": "Environments enabled for a connector project connection." }, "ConnectProjectConnectorConnectionList": { "properties": { "connectors": { "items": { "$ref": "#/components/schemas/ConnectProjectConnection" }, "type": "array", "description": "Connector connections in this page." }, "pagination": { "$ref": "#/components/schemas/ConnectPagination", "description": "Cursor for the next page." } }, "required": [ "connectors", "pagination" ], "type": "object", "description": "Page of connectors connected to a project." }, "ConnectError": { "type": "object", "description": "Error response returned by a Connect API operation.", "required": [ "error" ], "additionalProperties": false, "properties": { "error": { "type": "object", "required": [ "code", "message" ], "additionalProperties": true, "properties": { "code": { "type": "string", "description": "Stable machine-readable error code." }, "message": { "type": "string", "description": "Human-readable error message." } }, "description": "Error details." } } }, "ConnectEnvironment": { "description": "A built-in Vercel environment or a stable custom environment ID.", "oneOf": [ { "type": "string", "enum": [ "development", "preview", "production" ] }, { "type": "string", "pattern": "^env_" } ] }, "FlagJSONValue": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "items": { "$ref": "#/components/schemas/FlagJSONValue" }, "type": "array", "description": "TODO: The following types will eventually be exported by a more relevant package." }, { "additionalProperties": { "$ref": "#/components/schemas/FlagJSONValue" }, "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] }, "Pagination": { "properties": { "count": { "type": "number", "description": "Amount of items in the current page.", "example": 20 }, "next": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the next page.", "example": 1540095775951 }, "prev": { "nullable": true, "type": "number", "description": "Timestamp that must be used to request the previous page.", "example": 1540095775951 } }, "required": [ "count", "next", "prev" ], "type": "object", "description": "This object contains information related to the pagination of the current request, including the necessary parameters to get the next or previous page of data." }, "TldName": { "type": "string", "description": "A valid TLD name" }, "HttpApiDecodeError": { "type": "object", "required": [ "issues", "message" ], "properties": { "issues": { "type": "array", "items": { "$ref": "#/components/schemas/Issue" } }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The request did not match the expected schema" }, "Issue": { "type": "object", "required": [ "path", "message" ], "properties": { "path": { "type": "array", "items": { "$ref": "#/components/schemas/PropertyKey" }, "description": "The path to the property where the issue occurred" }, "message": { "type": "string", "description": "A descriptive message explaining the issue" } }, "additionalProperties": false, "description": "Represents an error encountered while parsing a value to match the schema" }, "PropertyKey": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "object", "required": [ "_tag", "key" ], "properties": { "_tag": { "type": "string", "enum": [ "symbol" ] }, "key": { "type": "string" } }, "additionalProperties": false, "description": "an object to be decoded into a globally shared symbol" } ] }, "TooManyRequests": { "type": "object", "required": [ "status", "code", "message", "retryAfter", "limit" ], "properties": { "status": { "type": "number", "enum": [ 429 ] }, "code": { "type": "string", "enum": [ "too_many_requests" ] }, "message": { "type": "string" }, "retryAfter": { "type": "object", "required": [ "value", "str" ], "properties": { "value": { "type": "number" }, "str": { "type": "string" } }, "additionalProperties": false }, "limit": { "type": "object", "required": [ "total", "remaining", "reset" ], "properties": { "total": { "type": "number" }, "remaining": { "type": "number" }, "reset": { "type": "number" } }, "additionalProperties": false } }, "additionalProperties": false }, "Unauthorized": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 401 ] }, "code": { "type": "string", "enum": [ "unauthorized" ] }, "message": { "type": "string" }, "reason": { "type": "string" } }, "additionalProperties": false }, "NotAuthorizedForScope": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 403 ] }, "code": { "type": "string", "enum": [ "not_authorized_for_scope" ] }, "message": { "type": "string" } }, "additionalProperties": false }, "InternalServerError": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 500 ] }, "code": { "type": "string", "enum": [ "internal_server_error" ] }, "message": { "type": "string" } }, "additionalProperties": false }, "TldNotSupported": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "tld_not_supported" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The TLD is not currently supported." }, "DomainName": { "type": "string", "description": "A valid domain name" }, "NotFound": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 404 ] }, "code": { "type": "string", "enum": [ "not_found" ] }, "message": { "type": "string" } }, "additionalProperties": false }, "DomainTooShort": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_too_short" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain name (excluding the TLD) is too short." }, "BadRequest": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "bad_request" ] }, "message": { "type": "string" } }, "additionalProperties": false }, "RegistrantField": { "anyOf": [ { "type": "object", "required": [ "description", "required", "type" ], "properties": { "description": { "type": "string" }, "required": { "type": "boolean" }, "label": { "type": "string" }, "validation": { "type": "string" }, "required_when": { "anyOf": [ { "type": "string" }, { "type": "object", "required": [ "value_in" ], "properties": { "value_in": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } ] }, "type": { "type": "string", "enum": [ "string" ] }, "options": { "type": "array", "items": { "type": "object", "required": [ "value", "label" ], "properties": { "value": { "type": "string" }, "label": { "type": "string" }, "fields": { "type": "object", "properties": {} } }, "additionalProperties": false } }, "fields": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "object", "required": [ "description", "required", "type", "options" ], "properties": { "description": { "type": "string" }, "required": { "type": "boolean" }, "label": { "type": "string" }, "validation": { "type": "string" }, "required_when": { "anyOf": [ { "type": "string" }, { "type": "object", "required": [ "value_in" ], "properties": { "value_in": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } ] }, "type": { "type": "string", "enum": [ "enum" ] }, "options": { "type": "array", "items": { "type": "object", "required": [ "value", "label" ], "properties": { "value": { "type": "string" }, "label": { "type": "string" }, "fields": { "type": "object", "properties": {} } }, "additionalProperties": false } }, "fields": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "object", "required": [ "description", "required", "type" ], "properties": { "description": { "type": "string" }, "required": { "type": "boolean" }, "label": { "type": "string" }, "validation": { "type": "string" }, "required_when": { "anyOf": [ { "type": "string" }, { "type": "object", "required": [ "value_in" ], "properties": { "value_in": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } ] }, "type": { "type": "string", "enum": [ "acknowledgement" ] }, "value": { "type": "string" } }, "additionalProperties": false }, { "type": "object", "required": [ "description", "required", "type" ], "properties": { "description": { "type": "string" }, "required": { "type": "boolean" }, "label": { "type": "string" }, "validation": { "type": "string" }, "required_when": { "anyOf": [ { "type": "string" }, { "type": "object", "required": [ "value_in" ], "properties": { "value_in": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } ] }, "type": { "type": "string", "enum": [ "notice" ] } }, "additionalProperties": false } ], "description": "Schema definition for registrant fields." }, "NonEmptyTrimmedString": { "type": "string", "description": "a non empty string", "title": "nonEmptyString", "pattern": "^\\S[\\s\\S]*\\S$|^\\S$|^$", "minLength": 1 }, "DomainNotRegistered": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_not_registered" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain is not registered with Vercel." }, "DomainNotFound": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 404 ] }, "code": { "type": "string", "enum": [ "domain_not_found" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain was not found in our system." }, "DomainCannotBeTransferedOutUntil": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 409 ] }, "code": { "type": "string", "enum": [ "domain_cannot_be_transfered_out_until" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain cannot be transfered out until the specified date." }, "Forbidden": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 403 ] }, "code": { "type": "string", "enum": [ "forbidden" ] }, "message": { "type": "string" } }, "additionalProperties": false }, "EmailAddress": { "type": "string", "description": "A valid RFC 5322 email address", "title": "nonEmptyString", "minLength": 1 }, "E164PhoneNumber": { "type": "string", "description": "A valid E.164 phone number", "title": "nonEmptyString", "minLength": 1, "pattern": "^(?=(?:\\D*\\d){8,15}$)\\+[1-9]\\d{0,2}\\.?\\d+$" }, "CountryCode": { "type": "string", "description": "A valid ISO 3166-1 alpha-2 country code" }, "OrderId": { "type": "string", "description": "A valid order ID" }, "LanguageCodeRequired": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "language_code_required" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "A language code is required for punycode domains." }, "EmojiTldNotSupported": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "emoji_tld_not_supported" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The TLD does not support emoji domain names." }, "DomainNotAvailable": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_not_available" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain is not available." }, "ExpectedPriceMismatch": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "expected_price_mismatch" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The expected price passed does not match the actual price." }, "AdditionalContactInfoRequired": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "additional_contact_info_required" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "Additional contact information is required for the TLD." }, "InvalidAdditionalContactInfo": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "invalid_additional_contact_info" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "Additional contact information provided for the TLD is invalid." }, "OrderTooExpensive": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "order_too_expensive" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The total price of the order is too high." }, "DuplicateDomains": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "duplicate_domains" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "Duplicate domains were provided." }, "TooManyDomains": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "too_many_domains" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The number of domains in the order is too high." }, "DNSSECEnabled": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "dnssec_enabled" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The operation cannot be completed because DNSSEC is enabled for the domain." }, "DomainAlreadyOwned": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_already_owned" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain is already owned by another team or user." }, "DomainNotRenewable": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_not_renewable" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain is not renewable." }, "DomainAlreadyRenewing": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "domain_already_renewing" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain is already renewing." }, "Nameserver": { "type": "string", "description": "A valid nameserver" }, "ContactVerified": { "type": "object", "required": [ "verified" ], "properties": { "verified": { "type": "boolean", "enum": [ true ] } }, "additionalProperties": false, "description": "The registrant contact has been verified.", "title": "Verified" }, "ContactPendingVerification": { "type": "object", "required": [ "verified", "verifyBy", "email" ], "properties": { "verified": { "type": "boolean", "enum": [ false ] }, "verifyBy": { "$ref": "#/components/schemas/DateFromString" }, "email": { "type": "string" } }, "additionalProperties": false, "description": "The registrant contact has not yet been verified. The contact must be verified by `verifyBy`, and a verification email is sent to `email`.", "title": "Pending verification" }, "DateFromString": { "type": "string", "description": "a string to be decoded into a Date" }, "BoughtTooRecently": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "number", "enum": [ 400 ] }, "code": { "type": "string", "enum": [ "bought_too_recently" ] }, "message": { "type": "string" } }, "additionalProperties": false, "description": "The domain was bought too recently to determine verification status." }, "GlobalConfigItemValue": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "additionalProperties": { "$ref": "#/components/schemas/GlobalConfigItemValue" }, "type": "object" }, { "items": { "$ref": "#/components/schemas/GlobalConfigItemValue" }, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] }, "GlobalConfigItem": { "properties": { "createdAt": { "type": "number" }, "description": { "type": "string" }, "edgeConfigId": { "type": "string" }, "key": { "type": "string" }, "updatedAt": { "type": "number" }, "value": { "$ref": "#/components/schemas/GlobalConfigItemValue" } }, "required": [ "createdAt", "edgeConfigId", "key", "updatedAt", "value" ], "type": "object", "description": "The Global Config." }, "GlobalConfigToken": { "properties": { "createdAt": { "type": "number" }, "edgeConfigId": { "type": "string" }, "id": { "type": "string", "description": "This is not the token itself, but rather an id to identify the token by" }, "label": { "type": "string" }, "partialToken": { "type": "string", "description": "A partially-masked representation of the token, safe to display in UIs. The format is the first 3 characters of the token followed by a fixed 8-character `*` mask (e.g. `550e8400-e29b-41d4-a716-446655440000` → `550********`). The mask length is intentionally fixed (not proportional to the original token length) to avoid leaking the token length. Prefer this field for display/reference in UIs and logs. The full, plaintext token is only disclosed once at creation time via `POST /v1/edge-config/:edgeConfigId/token`; use `id` to reference a token in subsequent calls (e.g. when deleting)." }, "token": { "type": "string", "description": "Deprecated: the full, plaintext token. - Returned once by `POST /v1/edge-config/:edgeConfigId/token` (create). - Still returned by `GET /v1/edge-config/:edgeConfigId/token/:token` (detail) for backwards compatibility, but scheduled for removal. - **Not** returned by `GET /v1/edge-config/:edgeConfigId/tokens` (list); use `partialToken` for display and `id` to reference tokens. Do not rely on this field being present on read operations. Prefer `partialToken` for display and `id` for references." } }, "required": [ "createdAt", "edgeConfigId", "id", "label", "partialToken" ], "type": "object", "description": "The Global Config." }, "UserEvent": { "properties": { "categories": { "items": { "type": "string", "enum": [ "account", "ai", "ai-gateway", "billing", "connect", "deployment", "domain", "edge", "env-variable", "feature-flags", "firewall", "integration", "microfrontends", "network", "observability", "other", "project", "security", "storage", "team", "v0", "vercel-app", "workflow" ], "example": [ "deployment" ], "description": "The categories that group this event with related event types. An event can belong to multiple categories (e.g. a firewall event is both Firewall and Security). The first entry is the \"primary\" category. Use the `/events/types` endpoint to discover the full list of categories." }, "type": "array", "description": "The categories that group this event with related event types. An event can belong to multiple categories (e.g. a firewall event is both Firewall and Security). The first entry is the \"primary\" category. Use the `/events/types` endpoint to discover the full list of categories.", "example": [ "deployment" ] }, "createdAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the event was generated.", "example": 1632859321020 }, "entities": { "items": { "properties": { "end": { "type": "number", "description": "The index of where the entity ends within the `text` (non-inclusive).", "example": 3 }, "start": { "type": "number", "description": "The index of where the entity begins within the `text` (inclusive).", "example": 0 }, "type": { "type": "string", "enum": [ "app", "author", "bitbucket_login", "bold", "deployment_host", "deployment_inspector", "dns_record", "edge-config", "env_var_name", "flag", "flags-segment", "flags-settings", "git_link", "github_login", "gitlab_login", "hook_name", "integration", "link", "project_name", "scaling_rules", "store", "system", "target" ], "example": "author", "description": "The type of entity." } }, "required": [ "end", "start", "type" ], "type": "object", "description": "A list of \"entities\" within the event `text`. Useful for enhancing the displayed text with additional styling and links." }, "type": "array", "description": "A list of \"entities\" within the event `text`. Useful for enhancing the displayed text with additional styling and links." }, "id": { "type": "string", "description": "The unique identifier of the Event.", "example": "uev_bfmMjiMnXfnPbT97dGdpJbCN" }, "payload": { "oneOf": [ { "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "archived", "created", "deleted", "unarchived", "updated" ] }, "id": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "action", "id", "projectId", "slug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "created", "deleted", "transitioned", "updated" ] }, "id": { "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "slug": { "type": "string" }, "state": { "type": "string" } }, "required": [ "action", "id", "name", "projectId", "slug", "state" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "added", "deleted", "rotated" ] }, "environment": { "type": "string" }, "label": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "action", "environment" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "read" ] }, "environment": { "items": { "type": "string" }, "type": "array" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "action", "environment" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "policyId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "policyId", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "accountRequestId": { "type": "string" }, "teamId": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "accountRequestId", "teamId" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "teamId": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "teamId" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "teamId": { "type": "string" }, "teamSlug": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "teamId", "teamSlug" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "blockCode": { "type": "string" }, "reason": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "blockCode", "reason" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "projectName": { "type": "string" }, "resourceId": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "projectName", "resourceId" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "teamId": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "actorId", "actorType", "teamId" ] }, { "properties": { "provider": { "type": "string", "enum": [ "chatgpt", "stripe" ], "description": "Present on new events only. Equivalent to \"stripe\" when absent." }, "providerAccount": { "type": "string", "description": "Present on new events only. Equivalent to `stripeAccount` when absent." }, "stripeAccount": { "type": "string", "description": "Present when `provider` is \"stripe\". Equivalent to `providerAccount`." }, "stripeOrganisation": { "type": "string", "description": "Present when `provider` is \"stripe\"." }, "fromPlan": { "type": "string", "enum": [ "hobby", "pro" ] }, "resourceId": { "type": "string" }, "teamId": { "type": "string" }, "toPlan": { "type": "string", "enum": [ "hobby", "pro" ] } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "fromPlan", "resourceId", "teamId", "toPlan" ] }, { "properties": { "apiKey": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "budget": { "nullable": true, "properties": { "alertThresholds": { "items": { "type": "number" }, "type": "array" }, "limitAmount": { "type": "number", "description": "Spend cap, in dollars." }, "refreshPeriod": { "type": "string", "enum": [ "daily", "monthly", "none", "weekly" ] } }, "required": [ "limitAmount", "refreshPeriod" ], "type": "object", "description": "Spend budget on an AI Gateway API key, as surfaced in activity messages. Defined locally (rather than imported from `@api/pubsub-types`) because `@api/pubsub-types` already depends on `@api/events`; importing it here would create a circular dependency. Must stay structurally aligned with `APIKeyBudget` in `@api/pubsub-types/event-payloads/api-keys`." }, "bypassAll": { "type": "boolean", "enum": [ false, true ], "description": "True when the key was created to bypass all of the team's restrictions (the ZDR-only model restriction and the provider/model allowlist)." }, "zdrExemption": { "type": "boolean", "enum": [ false, true ], "description": "True when the key was created with a ZDR exemption." } }, "required": [ "apiKey" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "apiKey": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "apiKey" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "apiKey": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "budget": { "nullable": true, "properties": { "alertThresholds": { "items": { "type": "number" }, "type": "array" }, "limitAmount": { "type": "number", "description": "Spend cap, in dollars." }, "refreshPeriod": { "type": "string", "enum": [ "daily", "monthly", "none", "weekly" ] } }, "required": [ "limitAmount", "refreshPeriod" ], "type": "object", "description": "Spend budget on an AI Gateway API key, as surfaced in activity messages. Defined locally (rather than imported from `@api/pubsub-types`) because `@api/pubsub-types` already depends on `@api/events`; importing it here would create a circular dependency. Must stay structurally aligned with `APIKeyBudget` in `@api/pubsub-types/event-payloads/api-keys`." }, "change": { "type": "string", "enum": [ "disable", "enable", "remove", "set" ] } }, "required": [ "apiKey", "change" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "change": { "type": "string", "enum": [ "disable", "disable-commitment", "enable", "enable-commitment", "update" ] }, "commitment": { "properties": { "deferredInvoiceTargetBalance": { "type": "string" }, "maximumMonthlySpend": { "nullable": true, "type": "string" } }, "required": [ "deferredInvoiceTargetBalance", "maximumMonthlySpend" ], "type": "object" }, "previous": { "properties": { "maximumMonthlySpend": { "nullable": true, "type": "string" }, "minimumBalance": { "type": "string" }, "targetBalance": { "type": "string" } }, "required": [ "maximumMonthlySpend", "minimumBalance", "targetBalance" ], "type": "object" }, "settings": { "properties": { "maximumMonthlySpend": { "nullable": true, "type": "string" }, "minimumBalance": { "type": "string" }, "targetBalance": { "type": "string" } }, "required": [ "maximumMonthlySpend", "minimumBalance", "targetBalance" ], "type": "object" } }, "required": [ "change" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "nullable": true, "properties": { "alertThresholds": { "items": { "type": "number" }, "type": "array" }, "limitAmount": { "type": "number", "description": "Spend cap, in dollars." }, "refreshPeriod": { "type": "string", "enum": [ "daily", "monthly", "none", "weekly" ] } }, "required": [ "limitAmount", "refreshPeriod" ], "type": "object", "description": "Spend budget on an AI Gateway API key, as surfaced in activity messages. Defined locally (rather than imported from `@api/pubsub-types`) because `@api/pubsub-types` already depends on `@api/events`; importing it here would create a circular dependency. Must stay structurally aligned with `APIKeyBudget` in `@api/pubsub-types/event-payloads/api-keys`." }, "change": { "type": "string", "enum": [ "disable", "enable", "remove", "set" ] }, "scopeType": { "type": "string", "enum": [ "api-key", "project", "team", "user" ] } }, "required": [ "change", "scopeType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "nullable": true, "properties": { "alertThresholds": { "items": { "type": "number" }, "type": "array" }, "limitAmount": { "type": "number", "description": "Spend cap, in dollars." }, "refreshPeriod": { "type": "string", "enum": [ "daily", "monthly", "none", "weekly" ] } }, "required": [ "limitAmount", "refreshPeriod" ], "type": "object", "description": "Spend budget on an AI Gateway API key, as surfaced in activity messages. Defined locally (rather than imported from `@api/pubsub-types`) because `@api/pubsub-types` already depends on `@api/events`; importing it here would create a circular dependency. Must stay structurally aligned with `APIKeyBudget` in `@api/pubsub-types/event-payloads/api-keys`." }, "change": { "type": "string", "enum": [ "disable", "enable", "remove", "set" ] }, "projectId": { "type": "string", "description": "Associates the event with a project for filtering; not rendered." }, "projectName": { "type": "string" }, "scopeType": { "type": "string", "enum": [ "project", "team", "user" ] }, "userId": { "type": "string", "description": "Associates the event with a member for filtering; not rendered." }, "userName": { "type": "string" } }, "required": [ "change", "scopeType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "credential": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "providerSlug": { "type": "string" } }, "required": [ "id", "name", "providerSlug" ], "type": "object" } }, "required": [ "credential" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "added": { "items": { "type": "string" }, "type": "array" }, "changed": { "items": { "type": "string" }, "type": "array" }, "credential": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "providerSlug": { "type": "string" } }, "required": [ "id", "name", "providerSlug" ], "type": "object" }, "removed": { "items": { "type": "string" }, "type": "array" } }, "required": [ "added", "changed", "credential", "removed" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "amount": { "type": "string" }, "purchaseIntentId": { "type": "string" } }, "required": [ "amount", "purchaseIntentId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "added": { "items": { "type": "string" }, "type": "array" }, "removed": { "items": { "type": "string" }, "type": "array" } }, "required": [ "added", "removed" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "privateModel": { "properties": { "providerSlug": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "providerSlug", "slug" ], "type": "object" } }, "required": [ "privateModel" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "privateModel": { "properties": { "slug": { "type": "string" } }, "required": [ "slug" ], "type": "object" } }, "required": [ "privateModel" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "privateProvider": { "properties": { "slug": { "type": "string" } }, "required": [ "slug" ], "type": "object" } }, "required": [ "privateProvider" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "moderationPolicyCount": { "type": "number" }, "piiRedaction": { "properties": { "from": { "type": "boolean", "enum": [ false, true ] }, "to": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "from", "to" ], "type": "object" }, "policiesAdded": { "items": { "type": "string" }, "type": "array" }, "policiesModified": { "items": { "type": "string" }, "type": "array" }, "policiesRemoved": { "items": { "type": "string" }, "type": "array" } }, "required": [ "moderationPolicyCount", "piiRedaction", "policiesAdded", "policiesModified", "policiesRemoved" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "regions" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "retention": { "properties": { "ceilingDays": { "type": "number" }, "ceilingMode": { "type": "string", "enum": [ "days", "until-requested" ] }, "defaultDays": { "type": "number" }, "defaultMode": { "type": "string", "enum": [ "days", "until-requested" ] } }, "required": [ "ceilingMode", "defaultMode" ], "type": "object" } }, "required": [ "retention" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "rule": { "properties": { "id": { "type": "string" }, "model": { "type": "string" }, "rewriteModel": { "type": "string" }, "type": { "type": "string" } }, "required": [ "id", "type" ], "type": "object" } }, "required": [ "rule" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "rule": { "properties": { "id": { "type": "string" }, "model": { "type": "string" }, "type": { "type": "string" } }, "required": [ "id", "type" ], "type": "object" } }, "required": [ "rule" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "rule": { "properties": { "id": { "type": "string" }, "model": { "type": "string" }, "type": { "type": "string" } }, "required": [ "id", "type" ], "type": "object" } }, "required": [ "rule" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "virtualModelConfig": { "properties": { "displayName": { "type": "string" }, "id": { "type": "string" }, "modelSlug": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "virtualModelConfig" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "accessGroup": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "entitlements": { "items": { "type": "string" }, "type": "array" }, "teamPermissions": { "items": { "type": "string" }, "type": "array" }, "teamRoles": { "items": { "type": "string" }, "type": "array" } }, "required": [ "accessGroup" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "accessGroup": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "author": { "type": "string" } }, "required": [ "accessGroup", "author" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "accessGroup": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "next_role": { "nullable": true, "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER", null ] }, "previous_role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accessGroup", "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "accessGroup": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "entitlementsAdded": { "items": { "type": "string" }, "type": "array" }, "entitlementsRemoved": { "items": { "type": "string" }, "type": "array" }, "name": { "type": "string" }, "previousName": { "type": "string" }, "previousTeamPermissions": { "items": { "type": "string" }, "type": "array" }, "previousTeamRoles": { "items": { "type": "string" }, "type": "array" }, "teamPermissions": { "items": { "type": "string" }, "type": "array" }, "teamRoles": { "items": { "type": "string" }, "type": "array" } }, "required": [ "accessGroup" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "accessGroup": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "directoryType": { "type": "string" }, "user": { "properties": { "id": { "type": "string" }, "username": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "accessGroup", "user" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "currency": { "type": "string" }, "price": { "type": "number" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "aliasId": { "type": "string" }, "aliasUpdatedAt": { "type": "number" }, "deployment": { "nullable": true, "properties": { "allowListedReadyStateReasonInternal": { "type": "string", "enum": [ "EARLY_IGNORE_STEP", "IGNORE_STEP", "NAMESPACE_PRUNED", "UNAFFECTED_PROJECT", "UNVERIFIED_COMMIT" ], "description": "A narrowed subset of the deployment's `readyStateReasonInternal` — only values in the public allowlist are permitted here. Callers should run their raw reason through `toAllowListedReadyStateReasonInternal` from `@api/events` before assigning. This keeps abuse / moderation / admin reasons out of the public activity log." }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "readyState": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "meta", "name", "url" ], "type": "object" }, "deploymentId": { "nullable": true, "type": "string" }, "deploymentUrl": { "type": "string" }, "oldDeploymentId": { "nullable": true, "type": "string" }, "redirect": { "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number" }, "ruleCount": { "type": "number" }, "system": { "type": "boolean", "enum": [ false, true ] }, "target": { "nullable": true, "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "aliasCount": { "type": "number" }, "deployment": { "nullable": true, "properties": { "allowListedReadyStateReasonInternal": { "type": "string", "enum": [ "EARLY_IGNORE_STEP", "IGNORE_STEP", "NAMESPACE_PRUNED", "UNAFFECTED_PROJECT", "UNVERIFIED_COMMIT" ], "description": "A narrowed subset of the deployment's `readyStateReasonInternal` — only values in the public allowlist are permitted here. Callers should run their raw reason through `toAllowListedReadyStateReasonInternal` from `@api/events` before assigning. This keeps abuse / moderation / admin reasons out of the public activity log." }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "readyState": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "meta", "name", "url" ], "type": "object" }, "projectId": { "type": "string" } }, "required": [ "aliasCount", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "name": { "type": "string" }, "newTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "oldTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } }, "required": [ "alias" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "aliasId": { "type": "string" }, "deploymentId": { "nullable": true, "type": "string" }, "name": { "type": "string" } }, "required": [ "alias", "aliasId", "deploymentId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "email": { "type": "string" }, "username": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "email": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "aliasId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "created", "removed" ] }, "alias": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "action", "alias", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "deploymentUrl": { "type": "string" } }, "required": [ "alias", "deploymentUrl" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "aliasId": { "type": "string" }, "userId": { "type": "string" }, "username": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "appId": { "type": "string" }, "appName": { "type": "string" }, "permissions": { "items": { "type": "string", "enum": [ "*", "manage:speed-insights", "manage:web-analytics", "read-write:ai-gateway-api-key", "read-write:ai-gateway-guardrails", "read-write:ai-gateway-private-models", "read-write:ai-gateway-rules", "read-write:ai-gateway-virtual-model-configs", "read-write:alerts", "read-write:automations", "read-write:billing", "read-write:blob", "read-write:connect", "read-write:deployment", "read-write:domain", "read-write:domain-registrar", "read-write:drains", "read-write:edge-cache", "read-write:edge-config", "read-write:firewall", "read-write:integration-configuration", "read-write:integration-resource", "read-write:kms", "read-write:project", "read-write:project-env-vars", "read-write:project-env-vars-non-production", "read-write:project-env-vars-production", "read-write:project-flags-non-production", "read-write:project-flags-production", "read-write:project-protection-bypass", "read-write:remote-cache", "read-write:sandbox", "read-write:schedule", "read-write:team-members", "read-write:vcr", "read:access-group", "read:ai-gateway-guardrails", "read:ai-gateway-private-models", "read:ai-gateway-rules", "read:ai-gateway-virtual-model-configs", "read:alerts", "read:automations", "read:billing", "read:connect", "read:deployment", "read:domain", "read:event", "read:firewall", "read:integration-configuration", "read:integration-resource", "read:kms", "read:monitoring", "read:project", "read:project-env-vars-non-production", "read:project-env-vars-production", "read:project-flags", "read:remote-cache", "read:sandbox", "read:schedule", "read:speed-insights", "read:team", "read:user", "read:vcr", "read:web-analytics", "read:webhooks", "use:ai-gateway" ] }, "type": "array" }, "scopes": { "items": { "type": "string", "enum": [ "email", "offline_access", "openid", "profile" ] }, "type": "array" } }, "required": [ "appName", "scopes" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "appId": { "type": "string" }, "appName": { "type": "string" } }, "required": [ "appName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "appId": { "type": "string" }, "appName": { "type": "string" }, "nextPermissions": { "items": { "type": "string", "enum": [ "*", "manage:speed-insights", "manage:web-analytics", "read-write:ai-gateway-api-key", "read-write:ai-gateway-guardrails", "read-write:ai-gateway-private-models", "read-write:ai-gateway-rules", "read-write:ai-gateway-virtual-model-configs", "read-write:alerts", "read-write:automations", "read-write:billing", "read-write:blob", "read-write:connect", "read-write:deployment", "read-write:domain", "read-write:domain-registrar", "read-write:drains", "read-write:edge-cache", "read-write:edge-config", "read-write:firewall", "read-write:integration-configuration", "read-write:integration-resource", "read-write:kms", "read-write:project", "read-write:project-env-vars", "read-write:project-env-vars-non-production", "read-write:project-env-vars-production", "read-write:project-flags-non-production", "read-write:project-flags-production", "read-write:project-protection-bypass", "read-write:remote-cache", "read-write:sandbox", "read-write:schedule", "read-write:team-members", "read-write:vcr", "read:access-group", "read:ai-gateway-guardrails", "read:ai-gateway-private-models", "read:ai-gateway-rules", "read:ai-gateway-virtual-model-configs", "read:alerts", "read:automations", "read:billing", "read:connect", "read:deployment", "read:domain", "read:event", "read:firewall", "read:integration-configuration", "read:integration-resource", "read:kms", "read:monitoring", "read:project", "read:project-env-vars-non-production", "read:project-env-vars-production", "read:project-flags", "read:remote-cache", "read:sandbox", "read:schedule", "read:speed-insights", "read:team", "read:user", "read:vcr", "read:web-analytics", "read:webhooks", "use:ai-gateway" ] }, "type": "array" }, "nextScopes": { "items": { "type": "string", "enum": [ "email", "offline_access", "openid", "profile" ] }, "type": "array" } }, "required": [ "appName", "nextScopes" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "after": { "properties": { "permissions": { "items": { "type": "string", "enum": [ "manage:speed-insights", "manage:web-analytics", "read-write:ai-gateway-api-key", "read-write:ai-gateway-guardrails", "read-write:ai-gateway-private-models", "read-write:ai-gateway-rules", "read-write:ai-gateway-virtual-model-configs", "read-write:alerts", "read-write:automations", "read-write:billing", "read-write:blob", "read-write:connect", "read-write:deployment", "read-write:domain", "read-write:domain-registrar", "read-write:drains", "read-write:edge-cache", "read-write:edge-config", "read-write:firewall", "read-write:integration-configuration", "read-write:integration-resource", "read-write:kms", "read-write:project", "read-write:project-env-vars", "read-write:project-env-vars-non-production", "read-write:project-env-vars-production", "read-write:project-flags-non-production", "read-write:project-flags-production", "read-write:project-protection-bypass", "read-write:remote-cache", "read-write:sandbox", "read-write:schedule", "read-write:team-members", "read-write:vcr", "read:access-group", "read:ai-gateway-guardrails", "read:ai-gateway-private-models", "read:ai-gateway-rules", "read:ai-gateway-virtual-model-configs", "read:alerts", "read:automations", "read:billing", "read:connect", "read:deployment", "read:domain", "read:event", "read:firewall", "read:integration-configuration", "read:integration-resource", "read:kms", "read:monitoring", "read:project", "read:project-env-vars-non-production", "read:project-env-vars-production", "read:project-flags", "read:remote-cache", "read:sandbox", "read:schedule", "read:speed-insights", "read:team", "read:vcr", "read:web-analytics", "read:webhooks", "use:ai-gateway" ] }, "type": "array" }, "resources": { "properties": { "projectIds": { "properties": { "items": { "properties": { "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "required": { "type": "boolean", "enum": [ true ] }, "type": { "type": "string", "enum": [ "list" ] } }, "required": [ "items", "required", "type" ], "type": "object", "description": "Specific project IDs or all projects on the team (`['*']`)." } }, "required": [ "projectIds" ], "type": "object" } }, "type": "object" }, "appId": { "type": "string" }, "appName": { "type": "string" }, "before": { "properties": { "permissions": { "items": { "type": "string", "enum": [ "manage:speed-insights", "manage:web-analytics", "read-write:ai-gateway-api-key", "read-write:ai-gateway-guardrails", "read-write:ai-gateway-private-models", "read-write:ai-gateway-rules", "read-write:ai-gateway-virtual-model-configs", "read-write:alerts", "read-write:automations", "read-write:billing", "read-write:blob", "read-write:connect", "read-write:deployment", "read-write:domain", "read-write:domain-registrar", "read-write:drains", "read-write:edge-cache", "read-write:edge-config", "read-write:firewall", "read-write:integration-configuration", "read-write:integration-resource", "read-write:kms", "read-write:project", "read-write:project-env-vars", "read-write:project-env-vars-non-production", "read-write:project-env-vars-production", "read-write:project-flags-non-production", "read-write:project-flags-production", "read-write:project-protection-bypass", "read-write:remote-cache", "read-write:sandbox", "read-write:schedule", "read-write:team-members", "read-write:vcr", "read:access-group", "read:ai-gateway-guardrails", "read:ai-gateway-private-models", "read:ai-gateway-rules", "read:ai-gateway-virtual-model-configs", "read:alerts", "read:automations", "read:billing", "read:connect", "read:deployment", "read:domain", "read:event", "read:firewall", "read:integration-configuration", "read:integration-resource", "read:kms", "read:monitoring", "read:project", "read:project-env-vars-non-production", "read:project-env-vars-production", "read:project-flags", "read:remote-cache", "read:sandbox", "read:schedule", "read:speed-insights", "read:team", "read:vcr", "read:web-analytics", "read:webhooks", "use:ai-gateway" ] }, "type": "array" }, "resources": { "properties": { "projectIds": { "properties": { "items": { "properties": { "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "required": { "type": "boolean", "enum": [ true ] }, "type": { "type": "string", "enum": [ "list" ] } }, "required": [ "items", "required", "type" ], "type": "object", "description": "Specific project IDs or all projects on the team (`['*']`)." } }, "required": [ "projectIds" ], "type": "object" } }, "type": "object" }, "installationId": { "type": "string" } }, "required": [ "appName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "appId": { "type": "string" }, "appName": { "type": "string" }, "permissions": { "items": { "type": "string", "enum": [ "manage:speed-insights", "manage:web-analytics", "read-write:ai-gateway-api-key", "read-write:ai-gateway-guardrails", "read-write:ai-gateway-private-models", "read-write:ai-gateway-rules", "read-write:ai-gateway-virtual-model-configs", "read-write:alerts", "read-write:automations", "read-write:billing", "read-write:blob", "read-write:connect", "read-write:deployment", "read-write:domain", "read-write:domain-registrar", "read-write:drains", "read-write:edge-cache", "read-write:edge-config", "read-write:firewall", "read-write:integration-configuration", "read-write:integration-resource", "read-write:kms", "read-write:project", "read-write:project-env-vars", "read-write:project-env-vars-non-production", "read-write:project-env-vars-production", "read-write:project-flags-non-production", "read-write:project-flags-production", "read-write:project-protection-bypass", "read-write:remote-cache", "read-write:sandbox", "read-write:schedule", "read-write:team-members", "read-write:vcr", "read:access-group", "read:ai-gateway-guardrails", "read:ai-gateway-private-models", "read:ai-gateway-rules", "read:ai-gateway-virtual-model-configs", "read:alerts", "read:automations", "read:billing", "read:connect", "read:deployment", "read:domain", "read:event", "read:firewall", "read:integration-configuration", "read:integration-resource", "read:kms", "read:monitoring", "read:project", "read:project-env-vars-non-production", "read:project-env-vars-production", "read:project-flags", "read:remote-cache", "read:sandbox", "read:schedule", "read:speed-insights", "read:team", "read:vcr", "read:web-analytics", "read:webhooks", "use:ai-gateway" ] }, "type": "array" }, "resources": { "properties": { "projectIds": { "properties": { "items": { "properties": { "type": { "type": "string", "enum": [ "string" ] } }, "required": [ "type" ], "type": "object" }, "required": { "type": "boolean", "enum": [ true ] }, "type": { "type": "string", "enum": [ "list" ] } }, "required": [ "items", "required", "type" ], "type": "object", "description": "Specific project IDs or all projects on the team (`['*']`)." } }, "required": [ "projectIds" ], "type": "object" } }, "required": [ "appName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "appId": { "type": "string" }, "appName": { "type": "string" }, "secretLastFourChars": { "type": "string" } }, "required": [ "appName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "app": { "properties": { "id": { "type": "string", "description": "The App's ID." }, "name": { "type": "string", "description": "The App's name at the moment this even was published (it may have changed since then)." } }, "required": [ "id", "name" ], "type": "object", "description": "Note that not all historical events have this field." }, "appId": { "type": "string", "description": "The App's ID. Note that not all historical events have this field." }, "appName": { "type": "string", "description": "The App's name at the moment this even was published (it may have changed since then)." }, "issuedBefore": { "type": "number", "description": "UNIX timestamp in seconds. Tokens issued before this timestamp will be revoked. Note that not all historical events have this field." } }, "required": [ "appName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "attackModeActiveUntil": { "nullable": true, "type": "number" }, "attackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "prevAttackModeActiveUntil": { "nullable": true, "type": "number" }, "prevAttackModeEnabled": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" } }, "required": [ "attackModeEnabled", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "autoExposeSystemEnvs": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "autoExposeSystemEnvs", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "avatar": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "amount": { "type": "number" }, "invoiceId": { "type": "string" }, "lineItemCount": { "type": "number" }, "refundReason": { "type": "string" } }, "required": [ "amount", "invoiceId", "lineItemCount", "refundReason" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "amount": { "type": "number" }, "invoiceId": { "type": "string" }, "newInvoiceId": { "type": "string" }, "settlementMethod": { "type": "string", "enum": [ "credited-paid", "credited-payment-pending", "refunded-paid", "refunded-payment-pending" ] } }, "required": [ "amount", "invoiceId", "newInvoiceId", "settlementMethod" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "brand": { "type": "string" }, "last4": { "type": "string" }, "paymentMethodId": { "type": "string" } }, "required": [ "paymentMethodId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "changedFields": { "items": { "type": "string", "enum": [ "address", "email", "language", "name", "purchaseOrder", "tax" ] }, "type": "array" } }, "required": [ "changedFields" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "subscriptionId": { "type": "string" }, "planSlug": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "planSlug" ] }, { "properties": { "subscriptionId": { "type": "string" }, "action": { "type": "string", "enum": [ "cancel_plan" ] }, "data": { "properties": { "planSlug": { "type": "string", "enum": [ "v0_business", "v0_teams" ] }, "reason": { "type": "string", "enum": [ "non-payment" ] } }, "required": [ "planSlug" ], "type": "object" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "action", "data" ] }, { "properties": { "subscriptionId": { "type": "string" }, "action": { "type": "string", "enum": [ "resume_plan" ] }, "data": { "properties": { "planSlug": { "type": "string", "enum": [ "v0_business", "v0_teams" ] } }, "required": [ "planSlug" ], "type": "object" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "action", "data" ] }, { "properties": { "subscriptionId": { "type": "string" }, "action": { "type": "string", "enum": [ "mutate" ] }, "data": { "additionalProperties": true, "type": "object" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "action", "data" ] }, { "properties": { "subscriptionId": { "type": "string" }, "productAliases": { "items": { "type": "string" }, "type": "array" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "productAliases" ] }, { "properties": { "bulkRedirectsLimit": { "type": "number" }, "prevBulkRedirectsLimit": { "type": "number" }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "bulkRedirectsLimit", "prevBulkRedirectsLimit", "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "versionId": { "type": "string" } }, "required": [ "project", "versionId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cn": { "type": "string" }, "cns": { "items": { "type": "string" }, "type": "array" }, "custom": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" } }, "required": [ "custom" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cns": { "items": { "type": "string" }, "type": "array" }, "custom": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" } }, "required": [ "cns", "custom", "id" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cn": { "type": "string" }, "cns": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "id": { "type": "string" }, "newTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "oldTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } }, "required": [ "id" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "dst": { "type": "string" }, "src": { "type": "string" } }, "required": [ "dst", "src" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cn": { "type": "string" }, "cns": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cn": { "type": "string" }, "cns": { "items": { "type": "string" }, "type": "array" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitOwnerName": { "type": "string" }, "gitRepositoryName": { "type": "string" }, "next": { "properties": { "autoAddReviewers": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "autoAddReviewers", "enabled" ], "type": "object" }, "previous": { "properties": { "autoAddReviewers": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "autoAddReviewers", "enabled" ], "type": "object" } }, "required": [ "gitOwnerName", "gitRepositoryName", "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "documentId": { "type": "string" }, "fingerprint": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" } }, "required": [ "documentId", "fingerprint", "slug", "title" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "count": { "type": "number" }, "documents": { "items": { "properties": { "documentId": { "type": "string" }, "fingerprint": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" } }, "required": [ "documentId", "fingerprint", "slug", "title" ], "type": "object", "description": "A single document included in a bulk compliance download." }, "type": "array" } }, "required": [ "count", "documents" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "project", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "passive": { "type": "boolean", "enum": [ false, true ] }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "project", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "project", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "newName": { "type": "string" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "newName", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "githubLogin": { "type": "string" }, "host": { "type": "string" } }, "required": [ "githubLogin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "githubLogin": { "type": "string" } }, "required": [ "githubLogin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "githubLogin": { "type": "string" }, "host": { "type": "string" } }, "required": [ "githubLogin", "host" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitlabEmail": { "type": "string" }, "gitlabLogin": { "type": "string" }, "gitlabName": { "type": "string" }, "zeitAccount": { "type": "string" }, "zeitAccountType": { "type": "string" } }, "required": [ "gitlabEmail", "gitlabLogin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitlabLogin": { "type": "string" }, "gitlabUserId": { "type": "number" } }, "required": [ "gitlabLogin", "gitlabUserId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketEmail": { "type": "string" }, "bitbucketLogin": { "type": "string" }, "bitbucketName": { "type": "string" } }, "required": [ "bitbucketEmail", "bitbucketLogin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketAccountId": { "type": "string" }, "bitbucketLogin": { "type": "string" } }, "required": [ "bitbucketAccountId", "bitbucketLogin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "acceptedTokenCount": { "type": "number" }, "clientId": { "type": "string" }, "clientName": { "type": "string" }, "clientUid": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array" }, "fields": { "items": { "type": "string" }, "type": "array" }, "importedTokenCount": { "type": "number" }, "installationId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "subjectType": { "type": "string", "enum": [ "app", "user" ] }, "tokenCount": { "type": "number" }, "tokensDeleted": { "type": "number" }, "triggerDestinationCount": { "type": "number" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "prevPurchasedAmount": { "type": "number" }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "purchasedAmount": { "type": "number" } }, "required": [ "prevPurchasedAmount", "project", "purchasedAmount" ], "type": "object", "description": "The payload of the event, if requested." }, { "additionalProperties": true, "type": "object", "description": "The payload of the event, if requested.", "properties": { "metricName": { "type": "string" } }, "required": [ "metricName" ] }, { "properties": { "reason": { "type": "string" }, "suffix": { "type": "string" } }, "required": [ "suffix" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "status": { "type": "string" }, "suffix": { "type": "string" } }, "required": [ "status", "suffix" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "suffix": { "type": "string" } }, "required": [ "suffix" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "hookName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "hookName", "projectId", "projectName", "ref" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "job": { "properties": { "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "state": { "type": "string" } }, "required": [ "deployHook", "state" ], "type": "object" }, "project": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } }, "required": [ "job", "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "checkId": { "type": "string" }, "checkName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "checkId", "checkName", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "items": { "type": "string" }, "type": "array" }, "deployment": { "nullable": true, "properties": { "allowListedReadyStateReasonInternal": { "type": "string", "enum": [ "EARLY_IGNORE_STEP", "IGNORE_STEP", "NAMESPACE_PRUNED", "UNAFFECTED_PROJECT", "UNVERIFIED_COMMIT" ], "description": "A narrowed subset of the deployment's `readyStateReasonInternal` — only values in the public allowlist are permitted here. Callers should run their raw reason through `toAllowListedReadyStateReasonInternal` from `@api/events` before assigning. This keeps abuse / moderation / admin reasons out of the public activity log." }, "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "readyState": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "meta", "name", "url" ], "type": "object" }, "deploymentId": { "type": "string" }, "forced": { "type": "boolean", "enum": [ false, true ] }, "gitCredentialSource": { "type": "string", "enum": [ "external-token" ] }, "name": { "type": "string" }, "plan": { "type": "string" }, "project": { "type": "string" }, "projectId": { "type": "string" }, "regions": { "items": { "type": "string" }, "type": "array" }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string" }, "url": { "type": "string" } }, "required": [ "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "job": { "oneOf": [ { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "forceNew": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "headInfo": { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "owner", "ref", "repoUuid", "sha", "slug" ], "type": "object" }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "name": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "owner": { "type": "string" }, "prId": { "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket" ] }, "ref": { "type": "string" }, "repoPushedAt": { "nullable": true, "type": "number" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "silent": { "type": "boolean", "enum": [ false, true ] }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "slug": { "type": "string" }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket-push" ] }, "url": { "type": "string" }, "withCache": { "type": "boolean", "enum": [ false, true ] }, "workspaceUuid": { "type": "string" } }, "required": [ "headInfo", "name", "owner", "provider", "ref", "repoUuid", "sha", "slug", "type", "workspaceUuid" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "headInfo": { "properties": { "owner": { "type": "string" }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "owner", "ref", "repoUuid", "sha", "slug" ], "type": "object" }, "linkedProjectId": { "type": "string" }, "name": { "type": "string" }, "owner": { "type": "string" }, "prId": { "type": "number" }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket" ] }, "ref": { "type": "string" }, "repoUuid": { "type": "string" }, "sha": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "bitbucket-now-comment" ] }, "workspaceUuid": { "type": "string" } }, "required": [ "headInfo", "name", "owner", "prId", "provider", "ref", "repoUuid", "sha", "slug", "type", "workspaceUuid" ], "type": "object", "description": "Represents the payload for a Bitbucket comment job This interface defines the structure of data needed when creating a job to handle comments on Bitbucket pull requests or commits." }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "beforeSha": { "type": "string" }, "committerGitUserId": { "type": "number", "description": "Remote account id of the committer details (github id etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed." }, "committerGitUserType": { "type": "string", "description": "Remote account type of the committer details (github type etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed." }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "customHost": { "type": "string" }, "defaultBranch": { "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "forceNew": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "githubDeploymentId": { "type": "string" }, "headInfo": { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" } }, "required": [ "org", "ref", "repo", "repoId", "sha" ], "type": "object", "description": "Information about the head commit/branch for a GitHub repository" }, "installationId": { "type": "number" }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "isPrivate": { "type": "boolean", "enum": [ false, true ] }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "org": { "type": "string" }, "prId": { "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "github", "github-custom-host", "github-limited" ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "pr" ] }, "url": { "type": "string" }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "headInfo", "installationId", "isPrivate", "org", "prId", "provider", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "beforeSha": { "type": "string" }, "commitInfo": { "properties": { "earliestSha": { "type": "string" }, "total": { "type": "number" } }, "required": [ "total" ], "type": "object" }, "committerGitUserId": { "type": "number", "description": "Remote account id of the committer details (github id etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed." }, "committerGitUserType": { "type": "string", "description": "Remote account type of the committer details (github type etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed." }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "customHost": { "type": "string" }, "defaultBranch": { "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "forced": { "type": "boolean", "enum": [ false, true ] }, "forceNew": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "githubDeploymentId": { "type": "string" }, "headInfo": { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" } }, "required": [ "org", "ref", "repo", "repoId", "sha" ], "type": "object", "description": "Information about the head commit/branch for a GitHub repository" }, "installationId": { "type": "number" }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "isPrivate": { "type": "boolean", "enum": [ false, true ] }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "github", "github-custom-host", "github-limited" ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "repoPushedAt": { "nullable": true, "type": "number" }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "push" ] }, "url": { "type": "string" }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "headInfo", "installationId", "isPrivate", "org", "prId", "provider", "repo", "repoId", "repoPushedAt", "type" ], "type": "object" }, { "properties": { "beforeSha": { "type": "string" }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true }, "customHost": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "headInfo": { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "sha": { "type": "string" } }, "required": [ "org", "ref", "repo", "repoId", "sha" ], "type": "object", "description": "Information about the head commit/branch for a GitHub repository" }, "installationId": { "type": "number" }, "isPrivate": { "type": "boolean", "enum": [ false, true ] }, "linkedProjectId": { "type": "string" }, "org": { "type": "string" }, "prId": { "type": "number" }, "projectId": { "nullable": true }, "provider": { "type": "string", "enum": [ "github", "github-custom-host", "github-limited" ] }, "repo": { "type": "string" }, "repoId": { "type": "number" }, "type": { "type": "string", "enum": [ "now-comment" ] } }, "required": [ "headInfo", "installationId", "isPrivate", "org", "prId", "projectId", "provider", "repo", "repoId", "type" ], "type": "object" }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "commit": { "properties": { "authorAvatar": { "nullable": true, "type": "string" }, "authorEmail": { "nullable": true, "type": "string" }, "authorId": { "nullable": true, "type": "number" }, "authorLogin": { "nullable": true, "type": "string" }, "authorName": { "nullable": true, "type": "string" }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "forceNew": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "headInfo": { "properties": { "project": { "properties": { "defaultBranch": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "nullable": true, "type": "string" }, "namespace": { "nullable": true, "type": "string" }, "path": { "nullable": true, "type": "string" }, "url": { "nullable": true, "type": "string" } }, "required": [ "id" ], "type": "object" }, "ref": { "type": "string" }, "sha": { "type": "string" } }, "required": [ "project", "ref", "sha" ], "type": "object", "description": "GitLab" }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "prId": { "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "project": { "properties": { "defaultBranch": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "nullable": true, "type": "string" }, "namespace": { "nullable": true, "type": "string" }, "path": { "nullable": true, "type": "string" }, "url": { "nullable": true, "type": "string" } }, "required": [ "id" ], "type": "object" }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] }, "ref": { "type": "string" }, "repoPushedAt": { "nullable": true, "type": "number" }, "sha": { "type": "string" }, "silent": { "type": "boolean", "enum": [ false, true ] }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "gitlab-push" ] }, "url": { "type": "string" }, "withCache": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "headInfo", "project", "provider", "ref", "sha", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "headInfo": { "properties": { "project": { "properties": { "defaultBranch": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "nullable": true, "type": "string" }, "namespace": { "nullable": true, "type": "string" }, "path": { "nullable": true, "type": "string" }, "url": { "nullable": true, "type": "string" } }, "required": [ "id" ], "type": "object" }, "ref": { "type": "string" }, "sha": { "type": "string" } }, "required": [ "project", "ref", "sha" ], "type": "object", "description": "GitLab" }, "linkedProjectId": { "type": "string" }, "prId": { "type": "number" }, "project": { "properties": { "defaultBranch": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "nullable": true, "type": "string" }, "namespace": { "nullable": true, "type": "string" }, "path": { "nullable": true, "type": "string" }, "url": { "nullable": true, "type": "string" } }, "required": [ "id" ], "type": "object" }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] }, "ref": { "type": "string" }, "sha": { "type": "string" }, "type": { "type": "string", "enum": [ "gitlab-now-comment" ] } }, "required": [ "headInfo", "prId", "project", "provider", "ref", "sha", "type" ], "type": "object" }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "customEnvId": { "nullable": true, "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "headInfo": { "properties": { "org": { "type": "string" }, "ref": { "type": "string" }, "repo": { "type": "string" }, "sha": { "type": "string" } }, "required": [ "org", "ref", "repo", "sha" ], "type": "object", "description": "Vercel" }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "org": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "vercel" ] }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoPushedAt": { "nullable": true, "type": "number" }, "sha": { "type": "string" }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "vercel-push" ] }, "url": { "type": "string" } }, "required": [ "headInfo", "org", "provider", "ref", "repo", "sha", "type" ], "type": "object" }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "authorizedBy": { "type": "string" }, "beforeSha": { "type": "string" }, "commitVerification": { "type": "string", "enum": [ "unknown", "unverified", "verified" ], "description": "Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported" }, "connectedProjectCount": { "type": "number", "description": "Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow." }, "createdAt": { "type": "number" }, "customEnvId": { "nullable": true, "type": "string" }, "defaultBranch": { "type": "string" }, "deployHook": { "properties": { "createdAt": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "ref": { "type": "string" } }, "required": [ "createdAt", "id", "name", "ref" ], "type": "object" }, "deploymentId": { "type": "string" }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "forced": { "type": "boolean", "enum": [ false, true ] }, "forceNew": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object", "description": "Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json." }, "gitHashtagVercel": { "items": { "type": "string", "enum": [ "#VERCEL_BUILD_MACHINE=TURBO", "#VERCEL_BUILD_PRIO_1", "#VERCEL_BUILD_PRIO_10", "#VERCEL_BUILD_PRIO_2", "#VERCEL_BUILD_PRIO_3", "#VERCEL_BUILD_PRIO_4", "#VERCEL_BUILD_PRIO_5", "#VERCEL_BUILD_PRIO_6", "#VERCEL_BUILD_PRIO_7", "#VERCEL_BUILD_PRIO_8", "#VERCEL_BUILD_PRIO_9", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL", "#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR", "#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR", "#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR", "#VERCEL_SKIP", "#VERCEL_V0_MESSAGE" ], "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "type": "array", "description": "Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING" }, "headInfo": { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`)." }, "ref": { "type": "string" }, "repo": { "type": "string", "description": "Repository name, e.g. `api`." }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" } }, "required": [ "owner", "ownerId", "ref", "repo", "repoId", "sha" ], "type": "object", "description": "Cursor Origin" }, "installationId": { "type": "string", "description": "Origin installation id (`i_…`) used to resolve the credential." }, "isManualGitDeploy": { "type": "boolean", "enum": [ false, true ], "description": "Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment" }, "jobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "type": "array", "description": "Since December 2022 Pairs of projects and owner ids to build for this build request." }, "jobProjectIds": { "items": { "type": "string" }, "type": "array", "description": "Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project." }, "linkedProjectId": { "type": "string" }, "nsnbSideEffect": { "properties": { "action": { "type": "string", "enum": [ "auto-approved-member", "auto-approved-pending-invite" ] }, "gitUserLogin": { "type": "string" } }, "required": [ "action", "gitUserLogin" ], "type": "object", "description": "Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy." }, "owner": { "type": "string" }, "prId": { "nullable": true, "type": "number" }, "prIdOrZero": { "type": "number", "description": "Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater." }, "projectId": { "type": "string" }, "provider": { "type": "string", "enum": [ "cursor-origin" ] }, "ref": { "type": "string" }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "repoPushedAt": { "nullable": true, "type": "number" }, "sha": { "type": "string" }, "skippedJobPairs": { "items": { "items": { "oneOf": [ { "type": "string" }, { "type": "string" } ] }, "maxItems": 2, "minItems": 2, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "type": "array", "description": "Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state." }, "target": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin-push" ] }, "url": { "type": "string" } }, "required": [ "headInfo", "installationId", "owner", "provider", "ref", "repo", "repoId", "sha", "type" ], "type": "object" }, { "properties": { "createdAt": { "type": "number" }, "customEnvId": { "nullable": true }, "eventful": { "type": "boolean", "enum": [ false, true ] }, "gitComments": { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "onPullRequest": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "onCommit", "onPullRequest" ], "type": "object" }, "headInfo": { "properties": { "owner": { "type": "string", "description": "Owner (namespace) slug, e.g. `acme`." }, "ownerId": { "type": "string", "description": "Origin namespace id (`ns_…`)." }, "ref": { "type": "string" }, "repo": { "type": "string", "description": "Repository name, e.g. `api`." }, "repoId": { "type": "string", "description": "Origin repository id." }, "sha": { "type": "string" } }, "required": [ "owner", "ownerId", "ref", "repo", "repoId", "sha" ], "type": "object", "description": "Cursor Origin" }, "installationId": { "type": "string", "description": "Origin installation id (`i_…`) used to resolve the credential." }, "linkedProjectId": { "type": "string" }, "owner": { "type": "string" }, "prId": { "type": "number" }, "projectId": { "nullable": true }, "provider": { "type": "string", "enum": [ "cursor-origin" ] }, "repo": { "type": "string" }, "repoId": { "type": "string" }, "type": { "type": "string", "enum": [ "cursor-origin-now-comment" ] } }, "required": [ "headInfo", "installationId", "owner", "prId", "projectId", "provider", "repo", "repoId", "type" ], "type": "object" } ] } }, "required": [ "job" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "oldTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "url": { "type": "string" } }, "required": [ "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitCommitterName": { "type": "string" }, "gitUserPlatform": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "reason": { "type": "string", "enum": [ "ip_allow_list" ] }, "sha": { "type": "string" }, "source": { "type": "string" } }, "required": [ "gitCommitterName", "gitUserPlatform", "projectName", "sha", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deployment": { "properties": { "id": { "type": "string" }, "meta": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "meta", "name", "url" ], "type": "object" }, "deploymentId": { "type": "string" }, "url": { "type": "string" } }, "required": [ "deployment", "deploymentId", "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deploymentId": { "type": "string", "description": "The blocked deployment's id (e.g. `dpl_…`). When present, the message links it to the deployment details (inspector) page. Optional so events emitted before this field was added still render." }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "ruleName": { "type": "string", "enum": [ "deploymentSources", "gitSources" ], "description": "Which rule blocked the deploy." }, "ruleProvenance": { "type": "string", "enum": [ "default", "project", "team" ], "description": "Team-level or project-level rule." }, "source": { "type": "string", "description": "Classified deploy source, e.g. 'cli', 'git', 'integration'." } }, "required": [ "projectName", "ruleName", "ruleProvenance", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deploymentId": { "type": "string" }, "deploymentName": { "nullable": true, "type": "string" }, "deploymentUrl": { "nullable": true, "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "deploymentId", "deploymentName", "deploymentUrl", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "configurationId", "integrationId", "integrationName", "integrationSlug", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "id": { "type": "string" }, "mxPriority": { "type": "number" }, "name": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "id", "name", "type", "value" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "add", "delete", "update" ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "initiator": { "type": "string", "enum": [ "system", "user" ] }, "mxPriority": { "type": "number" }, "name": { "type": "string" }, "previousValue": { "type": "string" }, "source": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "action", "domain", "id", "initiator", "name", "type", "value" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } }, "required": [ "domain", "id", "name", "type", "value" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "zone": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "currency": { "type": "string" }, "name": { "type": "string" }, "price": { "type": "number" } }, "required": [ "name", "price" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cdnEnabled": { "type": "boolean", "enum": [ false, true ] }, "name": { "type": "string" } }, "required": [ "cdnEnabled", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "newTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "oldTeam": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } }, "required": [ "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "ownerName": { "type": "string" }, "teamId": { "type": "string" }, "userId": { "type": "string" } }, "required": [ "name", "ownerName", "teamId", "userId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domainId": { "type": "string" }, "name": { "type": "string" } }, "required": [ "domainId", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "nameservers": { "items": { "type": "string" }, "type": "array" }, "previousServiceType": { "type": "string" }, "serviceType": { "type": "string" } }, "required": [ "id", "name", "nameservers", "previousServiceType", "serviceType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customNameservers": { "nullable": true, "items": { "type": "string" }, "type": "array" }, "domain": { "type": "string" }, "prevCustomNameservers": { "nullable": true, "items": { "type": "string" }, "type": "array" } }, "required": [ "customNameservers", "domain", "prevCustomNameservers" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" } }, "required": [ "domain" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "echMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ] }, "previousEchMode": { "type": "string", "enum": [ "auto", "disabled", "enabled" ] } }, "required": [ "domain", "echMode", "previousEchMode" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "zone": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "domain", "zone" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "initiator": { "type": "string", "enum": [ "system", "user" ] }, "previousZone": { "type": "boolean", "enum": [ false, true ] }, "source": { "type": "string" }, "zone": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "domain", "initiator", "zone" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "fromId": { "nullable": true, "type": "string" }, "fromName": { "nullable": true, "type": "string" }, "name": { "type": "string" } }, "required": [ "fromId", "fromName", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "destinationId": { "nullable": true, "type": "string" }, "destinationName": { "nullable": true, "type": "string" }, "name": { "type": "string" } }, "required": [ "destinationId", "destinationName", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "destinationId": { "type": "string" }, "destinationName": { "type": "string" }, "name": { "type": "string" } }, "required": [ "destinationId", "destinationName", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "renew": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "domain" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "currency": { "type": "string" }, "name": { "type": "string" }, "price": { "type": "number" } }, "required": [ "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "drainName": { "nullable": true, "type": "string" }, "drainUrl": { "nullable": true, "type": "string" }, "integrationName": { "type": "string" } }, "required": [ "drainName", "drainUrl" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "drainUrl": { "nullable": true, "type": "string" }, "integrationName": { "type": "string" } }, "required": [ "drainUrl" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "srcImages": { "items": { "type": "string" }, "type": "array" } }, "required": [ "projectId", "projectName", "srcImages" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "tags": { "items": { "type": "string" }, "type": "array" }, "target": { "type": "string" } }, "required": [ "projectId", "projectName", "tags" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "path": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "path", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigDigest": { "type": "string" }, "edgeConfigId": { "type": "string" }, "edgeConfigSlug": { "type": "string" } }, "required": [ "edgeConfigDigest", "edgeConfigId", "edgeConfigSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigDigest": { "type": "string" }, "edgeConfigId": { "type": "string" }, "edgeConfigSlug": { "type": "string" }, "edgeConfigBackupVersionId": { "type": "string" } }, "required": [ "edgeConfigBackupVersionId", "edgeConfigDigest", "edgeConfigId", "edgeConfigSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigId": { "type": "string" }, "edgeConfigSchema": { "type": "object" }, "edgeConfigSlug": { "type": "string" } }, "required": [ "edgeConfigId", "edgeConfigSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigDigest": { "type": "string" }, "edgeConfigId": { "type": "string" }, "edgeConfigSlug": { "type": "string" } }, "required": [ "edgeConfigId", "edgeConfigSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfig": { "properties": { "id": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "slug" ], "type": "object" }, "fromAccount": { "properties": { "id": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "team", "user" ] }, "username": { "type": "string" } }, "required": [ "id", "type" ], "type": "object" }, "toAccount": { "properties": { "id": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "team", "user" ] }, "username": { "type": "string" } }, "required": [ "id", "type" ], "type": "object" } }, "required": [ "edgeConfig", "fromAccount", "toAccount" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigId": { "type": "string" }, "edgeConfigSlug": { "type": "string" }, "edgeConfigTokenId": { "type": "string" }, "label": { "type": "string" } }, "required": [ "edgeConfigId", "edgeConfigSlug", "edgeConfigTokenId", "label" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "edgeConfigId": { "type": "string" }, "edgeConfigSlug": { "type": "string" }, "edgeConfigTokenIds": { "items": { "type": "string" }, "type": "array", "description": "ids of deleted tokens" } }, "required": [ "edgeConfigId", "edgeConfigSlug", "edgeConfigTokenIds" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "name": { "type": "string" } }, "required": [ "email", "name" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "previousRule": { "properties": { "email": { "type": "string" } }, "required": [ "email" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "previousRule", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "nextRule": { "properties": { "email": { "type": "string" } }, "required": [ "email" ], "type": "object" }, "previousRule": { "properties": { "email": { "type": "string" } }, "required": [ "email" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deletedUid": { "type": "string" }, "deletedUser": { "properties": { "email": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "username" ], "type": "object" }, "emailDomain": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentSlugs": { "items": { "type": "string" }, "type": "array" }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "ipAddress": { "type": "string" }, "key": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "source": { "type": "string" }, "target": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentSlugs": { "items": { "type": "string" }, "type": "array" }, "edgeConfigId": { "nullable": true, "type": "string" }, "edgeConfigTokenId": { "nullable": true, "type": "string" }, "gitBranch": { "type": "string" }, "id": { "type": "string" }, "ipAddress": { "type": "string" }, "key": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "source": { "type": "string" }, "target": { "oneOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "deploymentId": { "type": "string" }, "deploymentUrl": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "deploymentId", "deploymentUrl" ] }, { "properties": { "changedFields": { "items": { "type": "string" }, "type": "array" }, "key": { "type": "string" }, "organizationId": { "type": "string" }, "provider": { "type": "string" }, "repository": { "type": "string" }, "visibility": { "type": "string", "enum": [ "config", "secret" ] } }, "required": [ "key", "organizationId", "provider", "repository", "visibility" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." }, "ipAddress": { "type": "string" }, "projectNames": { "items": { "type": "string" }, "type": "array" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "envId": { "type": "string" }, "envKey": { "type": "string" }, "organizationId": { "type": "string" }, "provider": { "type": "string" }, "repository": { "type": "string" }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ] }, "type": "array" } }, "required": [ "envId", "envKey", "organizationId", "provider", "repository", "target" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newEnvVar": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "type": "object" }, "oldEnvVar": { "properties": { "applyToAllCustomEnvironments": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env varible applies to custom environments" }, "comment": { "type": "string", "description": "A user provided comment that describes what this Shared Env Var is for." }, "created": { "type": "string", "format": "date-time", "description": "The date when the Shared Env Var was created.", "example": "2021-02-10T13:11:49.180Z" }, "createdAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was created.", "example": 1609492210000 }, "createdBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who created the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "customEnvironmentIds": { "items": { "type": "string" }, "type": "array", "description": "The custom environment IDs that this Shared Env Var is scoped to." }, "decrypted": { "type": "boolean", "enum": [ false, true ], "description": "whether or not this env variable is decrypted" }, "deletedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was (soft) deleted.", "example": 1609492210000 }, "deletedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who deleted the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "id": { "type": "string", "description": "The unique identifier of the Shared Env Var.", "example": "env_XCG7t7AIHuO2SBA8667zNUiM" }, "key": { "type": "string", "description": "The name of the Shared Env Var.", "example": "my-api-key" }, "lastEditedByDisplayName": { "type": "string", "description": "The last editor full name or username." }, "ownerId": { "nullable": true, "type": "string", "description": "The unique identifier of the owner (team) the Shared Env Var was created for.", "example": "team_LLHUOMOoDlqOp8wPE4kFo9pE" }, "projectId": { "items": { "type": "string" }, "type": "array", "description": "The unique identifiers of the projects which the Shared Env Var is linked to.", "example": [ "prj_2WjyKQmM8ZnGcJsPWMrHRHrE", "prj_2WjyKQmM8ZnGcJsPWMrasEFg" ] }, "target": { "items": { "type": "string", "enum": [ "development", "preview", "production" ], "example": "production", "description": "environments this env variable targets" }, "type": "array", "description": "environments this env variable targets", "example": "production" }, "type": { "type": "string", "enum": [ "encrypted", "plain", "sensitive", "system" ], "description": "The type of this cosmos doc instance, if blank, assume secret.", "example": "encrypted" }, "updatedAt": { "type": "number", "description": "Timestamp for when the Shared Env Var was last updated.", "example": 1609492210000 }, "updatedBy": { "nullable": true, "type": "string", "description": "The unique identifier of the user who last updated the Shared Env Var.", "example": "2qDDuGFTWXBLDNnqZfWPDp1A" }, "value": { "type": "string", "description": "The value of the Shared Env Var." } }, "type": "object" }, "updateDiff": { "properties": { "changedValue": { "type": "boolean", "enum": [ false, true ] }, "id": { "type": "string" }, "key": { "type": "string" }, "newCustomEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "newKey": { "type": "string" }, "newProjects": { "items": { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId" ], "type": "object" }, "type": "array" }, "newTarget": { "items": { "type": "string", "enum": [ "development", "preview", "production" ] }, "type": "array" }, "newType": { "type": "string" }, "oldCustomEnvironmentIds": { "items": { "type": "string" }, "type": "array" }, "oldProjects": { "items": { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId" ], "type": "object" }, "type": "array" }, "oldTarget": { "items": { "type": "string", "enum": [ "development", "preview", "production" ] }, "type": "array" }, "oldType": { "type": "string" } }, "required": [ "changedValue", "id" ], "type": "object" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "expiresAt": { "nullable": true, "type": "number" }, "projectId": { "type": "string" }, "scope": { "type": "string" }, "source": { "type": "string" } }, "required": [ "projectId", "scope", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "scope": { "type": "string" }, "source": { "type": "string" } }, "required": [ "projectId", "scope", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configVersion": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "configVersion", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configVersion": { "oneOf": [ { "type": "string" }, { "type": "number" } ] } }, "required": [ "configVersion" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configChangeCount": { "type": "number" }, "configChanges": { "items": { "type": "object" }, "type": "array" }, "configVersion": { "oneOf": [ { "type": "string" }, { "type": "number" } ] } }, "required": [ "configVersion" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configChangeCount": { "type": "number" }, "configChanges": { "items": { "type": "object" }, "type": "array" }, "configVersion": { "type": "number" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "restore": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "configChangeCount", "configChanges", "configVersion", "projectId", "restore" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "ruleGroups": { "additionalProperties": { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "active" ], "type": "object" }, "type": "object" }, "rulesetName": { "type": "string" } }, "required": [ "projectId", "ruleGroups", "rulesetName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "challenge", "deny", "log" ] }, "active": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "rulesetName": { "type": "string" } }, "required": [ "active", "projectId", "rulesetName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newOwnerId": { "type": "string" }, "previousOwnerId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "newOwnerId", "previousOwnerId", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "disable", "enable" ] } }, "required": [ "action" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "source": { "type": "string", "enum": [ "create", "enable", "upgrade" ] } }, "required": [ "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorAccountId": { "nullable": true, "type": "string", "description": "Stable account id on `provider`." }, "actorLogin": { "nullable": true, "type": "string", "description": "Display name only. Logins are mutable; join on `actorAccountId`." }, "destinationBranch": { "nullable": true, "type": "string", "description": "Branch actually pushed to, or the requested one if blocked." }, "destinationRepo": { "type": "string", "description": "\"owner/name\", or the raw request value if blocked before it resolved." }, "failureCode": { "type": "string", "description": "Sanitized code, never a raw error message." }, "failureStage": { "type": "string", "enum": [ "authorization", "push", "unexpected", "unknown", "validation" ], "description": "Mirrors `PushFailureStage` in `@api/git-push-repo`." }, "installationId": { "nullable": true, "type": "string", "description": "Set only when an App installation token was minted (GitHub only)." }, "outcome": { "type": "string", "enum": [ "failure", "success" ] }, "provider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "gitlab" ] }, "resultCommitSha": { "nullable": true, "type": "string" }, "sourceCommitSha": { "nullable": true, "type": "string" }, "sourceRepo": { "nullable": true, "type": "string", "description": "Source repository, \"owner/name\". Null when the pushed content was generated in-request (push-files-to-repo) rather than copied from a repository." }, "usedAppToken": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "actorAccountId", "actorLogin", "destinationBranch", "destinationRepo", "installationId", "outcome", "provider", "resultCommitSha", "sourceCommitSha", "sourceRepo", "usedAppToken" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "fromDeploymentId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "reason": { "type": "string" }, "toDeploymentId": { "type": "string" } }, "required": [ "fromDeploymentId", "projectId", "projectName", "toDeploymentId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" } }, "required": [ "configurationId", "integrationId", "integrationName", "integrationSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" }, "newOwner": { "nullable": true, "properties": { "abuse": { "properties": { "blockHistory": { "items": { "properties": { "action": { "type": "string", "enum": [ "blocked", "hard-blocked", "soft-blocked", "unblocked" ] }, "actor": { "type": "string" }, "caseId": { "type": "string" }, "comment": { "type": "string" }, "createdAt": { "type": "number" }, "ineligibleForAppeal": { "type": "boolean", "enum": [ false, true ] }, "reason": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "action", "createdAt", "reason" ], "type": "object", "description": "Since June 2023" }, "type": "array", "description": "Since June 2023" }, "gitAuthHistory": { "items": { "type": "string" }, "type": "array", "description": "Since March 2022. Helps abuse checks by tracking git auths. Format: `::`" }, "gitLineageBlocks": { "type": "number", "description": "Since September 2023. How often did this owner trigger an actual git lineage deploy block?" }, "gitLineageBlocksDry": { "type": "number", "description": "Since September 2023. How often did this owner trigger a git lineage deploy block dry run?" }, "history": { "items": { "properties": { "at": { "type": "number" }, "by": { "type": "string" }, "byId": { "type": "string" }, "reason": { "type": "string" }, "scanner": { "type": "string" } }, "required": [ "at", "by", "byId", "reason", "scanner" ], "type": "object", "description": "(scanner history). Since November 2021. First element is newest." }, "type": "array", "description": "(scanner history). Since November 2021. First element is newest." }, "scanner": { "type": "string", "description": "Since November 2021. Guides the abuse scanner in build container." }, "scheduledBlock": { "properties": { "caseId": { "type": "string", "description": "Absent from the automated evaluation path, which has no case." }, "createdAt": { "type": "number", "description": "Unix ms timestamp of when the marker was written." }, "executeAt": { "type": "number", "description": "Unix ms timestamp of the scheduled EventBridge execution." }, "reason": { "type": "string", "description": "Violation reason (string value of the `Violation` enum)." }, "scheduleName": { "type": "string", "description": "EventBridge schedule name, persisted so the pending event can be cancelled." }, "source": { "type": "string", "description": "What triggered the scheduled block (string value of `TeamBlockSource`)." } }, "required": [ "createdAt", "executeAt", "reason", "source" ], "type": "object", "description": "Since June 2026. A hard block that is scheduled (the delay varies by source; see `executeAt`) but not yet executed. Powers admin visibility, scheduler dedup, and cancellation. Cleared on execution or when the team is unblocked/reviewed before `executeAt`; the executor treats its absence as \"block cancelled\"." }, "scheduledUnblockAt": { "type": "string", "description": "Since December 2025. UTC timestamp string of when an auto-unblock is scheduled. Format: \"Wed, 03 Dec 2025 20:32:13 GMT\"" }, "updatedAt": { "type": "number", "description": "Since November 2021" }, "creationIp": { "type": "string" }, "creationUserAgent": { "type": "string" }, "removedPhoneNumbers": { "type": "string" } }, "required": [ "updatedAt" ], "type": "object" }, "acceptanceState": { "type": "string" }, "acceptedAt": { "type": "number" }, "activeDashboardViews": { "items": { "properties": { "favoritesViewPreference": { "nullable": true, "type": "string", "enum": [ "closed", "open", null ] }, "recentsViewPreference": { "nullable": true, "type": "string", "enum": [ "closed", "open", null ] }, "scopeId": { "type": "string" }, "viewPreference": { "nullable": true, "type": "string", "enum": [ "cards", "list", null ] } }, "required": [ "scopeId" ], "type": "object" }, "type": "array" }, "avatar": { "type": "string" }, "billing": { "type": "object", "properties": { "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] } }, "required": [ "plan" ] }, "blocked": { "nullable": true, "type": "number" }, "blockReason": { "type": "string" }, "created": { "type": "number" }, "createdAt": { "type": "number" }, "credentials": { "items": { "oneOf": [ { "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "github-oauth", "github-oauth-limited", "gitlab", "google", "vercel" ] } }, "required": [ "id", "type" ], "type": "object" }, { "properties": { "host": { "type": "string" }, "id": { "type": "string" }, "type": { "type": "string", "enum": [ "github-oauth-custom-host" ] } }, "required": [ "host", "id", "type" ], "type": "object" } ] }, "type": "array" }, "customerId": { "nullable": true, "type": "string" }, "dataCache": { "properties": { "excessBillingEnabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "defaultTeamId": { "type": "string" }, "deletedAt": { "nullable": true, "type": "number" }, "deploymentSecret": { "type": "string" }, "dismissedTeams": { "items": { "type": "string" }, "type": "array" }, "dismissedToasts": { "items": { "properties": { "dismissals": { "items": { "properties": { "createdAt": { "type": "number" }, "scopeId": { "type": "string" } }, "required": [ "createdAt", "scopeId" ], "type": "object" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "dismissals", "name" ], "type": "object" }, "type": "array" }, "email": { "type": "string" }, "emailDomains": { "items": { "type": "string" }, "type": "array" }, "emailNotifications": { "properties": { "rules": { "additionalProperties": { "properties": { "email": { "type": "string" } }, "required": [ "email" ], "type": "object" }, "type": "object" } }, "type": "object" }, "enablePreviewFeedback": { "type": "string", "enum": [ "default", "default-force", "off", "off-force", "on", "on-force" ], "description": "Whether the Vercel Toolbar is enabled for preview deployments." }, "favoriteProjectsAndSpaces": { "items": { "properties": { "projectId": { "type": "string" }, "teamId": { "type": "string" } }, "required": [ "projectId", "teamId" ], "type": "object" }, "type": "array" }, "featureBlocks": { "properties": { "blob": { "oneOf": [ { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "overageReason": { "type": "string", "enum": [ "analyticsUsage", "artifacts", "bandwidth", "blobDataTransfer", "blobTotalAdvancedRequests", "blobTotalAvgSizeInBytes", "blobTotalGetResponseObjectSizeInBytes", "blobTotalSimpleRequests", "connectDataTransfer", "dataCacheRead", "dataCacheWrite", "edgeConfigRead", "edgeConfigWrite", "edgeFunctionExecutionUnits", "edgeMiddlewareInvocations", "edgeRequest", "edgeRequestAdditionalCpuDuration", "elasticConcurrencyBuildSlots", "fastDataTransfer", "fastOriginTransfer", "fluidCpuDuration", "fluidDuration", "functionDuration", "functionInvocation", "imageOptimizationCacheRead", "imageOptimizationCacheWrite", "imageOptimizationTransformation", "logDrainsVolume", "monitoringMetric", "observabilityEvent", "onDemandConcurrencyMinutes", "runtimeCacheRead", "runtimeCacheWrite", "serverlessFunctionExecution", "sourceImages", "wafOwaspExcessBytes", "wafOwaspRequests", "wafRateLimitRequest", "webAnalyticsEvent" ] } }, "required": [ "blockReason", "overageReason", "updatedAt" ], "type": "object" }, { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" } ] }, "connexForwardTriggers": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "connexTokenRequests": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "dataCache": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "imageOptimizationTransformation": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "kmsOperations": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "microfrontendsRequest": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "monitoring": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "blockType": { "type": "string", "enum": [ "hard", "soft" ] } }, "required": [ "blockReason", "blockType", "updatedAt" ], "type": "object", "description": "A soft block indicates a temporary pause in data collection (ex limit exceeded for the current cycle) A hard block indicates a stoppage in data collection that requires manual intervention (ex upgrading a pro trial)" }, "observabilityPlus": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "blockType": { "type": "string", "enum": [ "hard", "soft" ] } }, "required": [ "blockReason", "blockType", "updatedAt" ], "type": "object" }, "postgres": { "oneOf": [ { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "overageReason": { "type": "string", "enum": [ "analyticsUsage", "artifacts", "bandwidth", "blobDataTransfer", "blobTotalAdvancedRequests", "blobTotalAvgSizeInBytes", "blobTotalGetResponseObjectSizeInBytes", "blobTotalSimpleRequests", "connectDataTransfer", "dataCacheRead", "dataCacheWrite", "edgeConfigRead", "edgeConfigWrite", "edgeFunctionExecutionUnits", "edgeMiddlewareInvocations", "edgeRequest", "edgeRequestAdditionalCpuDuration", "elasticConcurrencyBuildSlots", "fastDataTransfer", "fastOriginTransfer", "fluidCpuDuration", "fluidDuration", "functionDuration", "functionInvocation", "imageOptimizationCacheRead", "imageOptimizationCacheWrite", "imageOptimizationTransformation", "logDrainsVolume", "monitoringMetric", "observabilityEvent", "onDemandConcurrencyMinutes", "runtimeCacheRead", "runtimeCacheWrite", "serverlessFunctionExecution", "sourceImages", "wafOwaspExcessBytes", "wafOwaspRequests", "wafRateLimitRequest", "webAnalyticsEvent" ] } }, "required": [ "blockReason", "overageReason", "updatedAt" ], "type": "object" }, { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" } ] }, "redis": { "oneOf": [ { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "overageReason": { "type": "string", "enum": [ "analyticsUsage", "artifacts", "bandwidth", "blobDataTransfer", "blobTotalAdvancedRequests", "blobTotalAvgSizeInBytes", "blobTotalGetResponseObjectSizeInBytes", "blobTotalSimpleRequests", "connectDataTransfer", "dataCacheRead", "dataCacheWrite", "edgeConfigRead", "edgeConfigWrite", "edgeFunctionExecutionUnits", "edgeMiddlewareInvocations", "edgeRequest", "edgeRequestAdditionalCpuDuration", "elasticConcurrencyBuildSlots", "fastDataTransfer", "fastOriginTransfer", "fluidCpuDuration", "fluidDuration", "functionDuration", "functionInvocation", "imageOptimizationCacheRead", "imageOptimizationCacheWrite", "imageOptimizationTransformation", "logDrainsVolume", "monitoringMetric", "observabilityEvent", "onDemandConcurrencyMinutes", "runtimeCacheRead", "runtimeCacheWrite", "serverlessFunctionExecution", "sourceImages", "wafOwaspExcessBytes", "wafOwaspRequests", "wafRateLimitRequest", "webAnalyticsEvent" ] } }, "required": [ "blockReason", "overageReason", "updatedAt" ], "type": "object" }, { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" } ] }, "sandboxStorage": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "sourceImages": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "speedInsightsFree": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object", "description": "Pauses Speed Insights free data-point ingestion when the team-wide free allocation is exhausted. The block lasts at least 14 days and is extended while rolling usage stays above half of the allocation." }, "tracing": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "vcr": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "webAnalytics": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" }, "graceEmailSentAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "workflowEvents": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" }, "workflowStorageWrite": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "updatedAt": { "type": "number" } }, "required": [ "blockReason", "updatedAt" ], "type": "object" } }, "type": "object", "description": "Information about which features are blocked for a user. Blocks can be either soft (the user can still access the feature, but with a warning, e.g. prompting an upgrade) or hard (the user cannot access the feature at all)." }, "id": { "type": "string" }, "importFlowGitNamespace": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "importFlowGitNamespaceId": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "importFlowGitProvider": { "nullable": true, "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "vercel", null ] }, "isDomainReseller": { "type": "boolean", "enum": [ false, true ] }, "isEnterpriseManaged": { "type": "boolean", "enum": [ false, true ], "description": "Indicates that the underlying user entity is a managed user for the enterprise it's associated with The intention is that this field is only set to true for users that are provisioned by the enterprise which means that the domain associated with the user's email is the same domain associated with the team Allowing us to query information about the user's team at login time through the domain verification service" }, "isMFAEnforced": { "type": "boolean", "enum": [ false, true ], "description": "Whether MFA is enforced for this user. Set to true when the user has a" }, "isZeitPub": { "type": "boolean", "enum": [ false, true ] }, "maxActiveSlots": { "type": "number" }, "maxTrials": { "type": "number", "description": "Introduced 2022-04-19 Number of maximum trials to allocate to a user. When undefined, defaults to MAX_TRIALS in utils/api-teams/user-has-trial-available.ts. This is set to trialTeamIds + 1 by services/api-backoffice/src/handlers/add-additional-trial.ts." }, "mfaConfiguration": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "enabledAt": { "type": "number" }, "history": { "items": { "properties": { "action": { "type": "string", "enum": [ "disabled", "enabled" ], "description": "The action that occurred" }, "actorId": { "type": "string", "description": "ID of the actor who made the change - For user actions: the user's own ID - For admin actions: the admin's user ID" }, "actorType": { "type": "string", "enum": [ "admin", "user" ], "description": "Type of actor" }, "method": { "type": "string", "enum": [ "admin_removal", "passkey", "self_serve_recovery", "totp", "unknown", "user_disabled" ], "description": "Method used for the state change - 'totp': User set up TOTP authenticator - 'passkey': User registered a passkey - 'user_disabled': User disabled their own MFA - 'admin_removal': Admin removed MFA via backoffice - 'self_serve_recovery': User disabled their own MFA through the self-serve MFA disable recovery flow (a \"Locked Out User\" with only a passkey) - 'unknown': Method unknown (for pre-tracking events)" }, "reason": { "type": "string", "description": "Optional: Additional context or reason e.g., \"Account recovery request - ticket #12345\"" }, "timestamp": { "nullable": true, "type": "number", "description": "Unix timestamp (milliseconds) when the change occurred. May be null for events that occurred before history tracking was implemented." } }, "required": [ "action", "actorId", "actorType", "method", "timestamp" ], "type": "object", "description": "History of MFA state changes (enabled/disabled events). Most recent events first." }, "type": "array", "description": "History of MFA state changes (enabled/disabled events). Most recent events first." }, "recoveryCodes": { "items": { "type": "string" }, "type": "array" }, "totp": { "properties": { "createdAt": { "type": "number" }, "secret": { "type": "string" } }, "required": [ "createdAt", "secret" ], "type": "object" } }, "required": [ "enabled", "recoveryCodes" ], "type": "object", "description": "MFA configuration. When enabled, the user will be required to provide a second factor of authentication when logging in." }, "name": { "type": "string" }, "northstarMigration": { "properties": { "endTime": { "type": "number", "description": "The migration end time timestamp for this user." }, "integrationClients": { "type": "number", "description": "The number of integration clients migrated for this user." }, "integrationConfigurations": { "type": "number", "description": "The number of integration configurations migrated for this user." }, "projects": { "type": "number", "description": "The number of projects migrated for this user." }, "startTime": { "type": "number", "description": "The migration start time timestamp for this user." }, "stores": { "type": "number", "description": "The number of stores migrated for this user." }, "teamId": { "type": "string", "description": "The ID of the team we created for this user." } }, "required": [ "endTime", "integrationClients", "integrationConfigurations", "projects", "startTime", "stores", "teamId" ], "type": "object", "description": "An archive of information about the Northstar migration, derived from the old (deprecated) property, `northstarMigrationEvents`." }, "opportunityId": { "type": "string", "description": "The salesforce opportunity ID that this user is linked to. This is used to automatically associate a team of the user's choosing with the opportunity." }, "orbCustomerId": { "nullable": true, "type": "string" }, "overageMetadata": { "properties": { "dailyOverageSummaryEmailSentAt": { "type": "number", "description": "Tracks the last time we sent a daily summary email." }, "firstTimeOnDemandNotificationSentAt": { "type": "number", "description": "Tracks if the first time on-demand overage email has been sent." }, "increasedOnDemandEmailAttemptedAt": { "type": "number", "description": "Tracks the last time we attempted to send an increased on-demand email. This check is to limit the number of attempts per day." }, "increasedOnDemandEmailSentAt": { "type": "number", "description": "Tracks the last time we sent a increased on-demand email." }, "overageSummaryExpiresAt": { "type": "number", "description": "Tracks when the overage summary email will stop auto-sending. We currently lock the user into email for a month after the last on-demand usage." }, "weeklyOverageSummaryEmailSentAt": { "type": "number", "description": "Tracks the last time we sent a weekly summary email." } }, "type": "object", "description": "Contains the timestamps for usage summary emails." }, "overageUsageAlerts": { "properties": { "analyticsUsage": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "artifacts": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "bandwidth": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "blobDataTransfer": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "blobTotalAdvancedRequests": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "blobTotalAvgSizeInBytes": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "blobTotalGetResponseObjectSizeInBytes": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "blobTotalSimpleRequests": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "connectDataTransfer": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "dataCacheRead": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "dataCacheWrite": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeConfigRead": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeConfigWrite": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeFunctionExecutionUnits": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeMiddlewareInvocations": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeRequest": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "edgeRequestAdditionalCpuDuration": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "elasticConcurrencyBuildSlots": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "fastDataTransfer": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "fastOriginTransfer": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "fluidCpuDuration": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "fluidDuration": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "functionDuration": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "functionInvocation": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "imageOptimizationCacheRead": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "imageOptimizationCacheWrite": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "imageOptimizationTransformation": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "logDrainsVolume": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "monitoringMetric": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "observabilityEvent": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "onDemandConcurrencyMinutes": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "runtimeCacheRead": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "runtimeCacheWrite": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "serverlessFunctionExecution": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "sourceImages": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "wafOwaspExcessBytes": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "wafOwaspRequests": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "wafRateLimitRequest": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" }, "webAnalyticsEvent": { "properties": { "blockedAt": { "nullable": true, "type": "number" }, "blockGracePeriodStartedAt": { "nullable": true, "type": "number" }, "currentThreshold": { "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "required": [ "currentThreshold" ], "type": "object" } }, "type": "object" }, "phoneNumber": { "type": "string" }, "platformVersion": { "nullable": true, "type": "number" }, "preferredScopesAndGitNamespaces": { "items": { "properties": { "gitNamespaceId": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "scopeId": { "type": "string" } }, "required": [ "gitNamespaceId", "scopeId" ], "type": "object" }, "type": "array" }, "preventAutoBlocking": { "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "projectCardWidgetPreferences": { "items": { "properties": { "config": { "properties": { "url": { "type": "string" } }, "required": [ "url" ], "type": "object" }, "projectId": { "type": "string" }, "widget": { "type": "string", "enum": [ "analytics-online", "analytics-page-views", "analytics-visitors", "firewall-allowed", "firewall-denied", "observability-alert", "observability-edge-requests", "observability-error-rate", "observability-function-invocations", "shortcut", "speed-insights-cls", "speed-insights-lcp", "speed-insights-res" ] } }, "required": [ "projectId", "widget" ], "type": "object" }, "type": "array" }, "projectDomainsLimit": { "type": "number", "description": "Overrides our DEFAULT project domains limit per account or per project." }, "remoteCaching": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Represents configuration for remote caching" }, "removedAliasesAt": { "type": "number" }, "removedBillingSubscriptionAt": { "type": "number" }, "removedConfigurationsAt": { "type": "number" }, "removedDeploymentsAt": { "type": "number" }, "removedDomiansAt": { "type": "number" }, "removedEdgeConfigsAt": { "type": "number" }, "removedEventsAt": { "type": "number" }, "removedProjectsAt": { "type": "number" }, "removedSecretsAt": { "type": "number" }, "removedSharedEnvVarsAt": { "type": "number" }, "resourceConfig": { "properties": { "awsAccountIds": { "items": { "type": "string" }, "type": "array" }, "awsAccountType": { "type": "string" }, "blobStores": { "type": "number" }, "buildEntitlements": { "properties": { "enhancedBuilds": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] } }, "type": "object" }, "bulkRedirectsFreeLimitOverride": { "type": "number" }, "cfZoneName": { "type": "string" }, "concurrentBuilds": { "type": "number" }, "cronJobsPerProject": { "type": "number" }, "customEnvironmentsPerProject": { "type": "number" }, "edgeConfigs": { "type": "number" }, "edgeConfigSize": { "type": "number" }, "edgeFunctionExecutionTimeoutMs": { "type": "number" }, "edgeFunctionMaxSizeBytes": { "type": "number" }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "flagsExplorerOverridesThreshold": { "type": "number" }, "flagsExplorerUnlimitedOverrides": { "type": "boolean", "enum": [ false, true ] }, "imageOptimizationType": { "type": "string" }, "integrationStores": { "type": "number" }, "kvDatabases": { "type": "number" }, "microfrontendGroupsPerTeam": { "type": "number" }, "microfrontendProjectsPerGroup": { "type": "number" }, "nodeType": { "type": "string" }, "postgresDatabases": { "type": "number" }, "security": { "properties": { "customRules": { "type": "number" }, "ipBlocks": { "type": "number" }, "ipBypass": { "type": "number" }, "rateLimit": { "type": "number" } }, "type": "object" }, "serverlessFunctionMaxDuration": { "type": "number" }, "serverlessFunctionMaxMemorySize": { "type": "number" }, "buildMachine": { "properties": { "default": { "type": "string", "enum": [ "basic", "elastic", "enhanced", "standard", "turbo" ], "description": "Default build machine type for new deployments. This must be used in combination with the buildEntitlements field. It is respected over Vercel's notion of the default build machine, and was originally implemented to allow Teams to \"downgrade\". - Hobby customers cannot set this, because they only have access to one machine type - Pro customers get Turbo machines by default, so this field is effectively for downgrading - ENT customers cannot set this (yet), because their default is based on their contract. https://linear.app/vercel/project/self-serve-build-machines-for-enterprise-customers-0cbc357e26d2/overview" } }, "type": "object", "description": "Build machine configuration recorded on a team or user `resourceConfig`. This is deliberately separate from the build machine config recorded on a deployment (`DeploymentBuildMachine` in `@api/deployments-types`). A team/user only expresses its default machine for new deployments; the per-build fields (`purchaseType`, `defaultPurchaseType`, `machineSelectionType`, `cores`, `memory`) are recorded on the deployment record when a build actually runs and never belong on a team/user document." } }, "type": "object" }, "resourceLimits": { "additionalProperties": { "oneOf": [ { "properties": { "duration": { "type": "number" }, "max": { "type": "number" } }, "required": [ "duration", "max" ], "type": "object", "description": "Override for a token-bucket rate limit: a fixed quantity per duration." }, { "properties": { "maxRate": { "type": "number" }, "minRate": { "type": "number" }, "stepPerMinute": { "type": "number" } }, "type": "object", "description": "Overrides for a ramp (slew-rate) admission limit, which bounds how quickly the allowed rate may change over time rather than capping a fixed quantity. All three are expressed in units per minute. - `minRate`: the floor the allowed rate never drops below. Also the cold-start rate a new or idle consumer begins at. - `maxRate`: the ceiling the allowed rate may climb to. - `stepPerMinute`: how much the allowed rate moves per minute of activity — the slope at which it ramps up toward `maxRate` (and, where supported, decays back down toward `minRate`)." } ] }, "type": "object", "description": "User | Team resource limits. Each entry overrides either a token-bucket rate limit or a ramp admission limit, never both." }, "secondaryEmails": { "items": { "properties": { "email": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "email", "verified" ], "type": "object" }, "type": "array" }, "sfdcId": { "type": "string" }, "siftRoute": { "properties": { "name": { "type": "string", "enum": [ "string" ] } }, "required": [ "name" ], "type": "object" }, "siftScore": { "type": "number" }, "siftScores": { "additionalProperties": { "properties": { "reasons": { "items": { "properties": { "name": { "type": "string" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "score": { "type": "number" } }, "required": [ "reasons", "score" ], "type": "object" }, "type": "object" }, "softBlock": { "nullable": true, "properties": { "blockedAt": { "type": "number" }, "blockedDueToOverageType": { "type": "string", "enum": [ "analyticsUsage", "artifacts", "bandwidth", "blobDataTransfer", "blobTotalAdvancedRequests", "blobTotalAvgSizeInBytes", "blobTotalGetResponseObjectSizeInBytes", "blobTotalSimpleRequests", "connectDataTransfer", "dataCacheRead", "dataCacheWrite", "edgeConfigRead", "edgeConfigWrite", "edgeFunctionExecutionUnits", "edgeMiddlewareInvocations", "edgeRequest", "edgeRequestAdditionalCpuDuration", "elasticConcurrencyBuildSlots", "fastDataTransfer", "fastOriginTransfer", "fluidCpuDuration", "fluidDuration", "functionDuration", "functionInvocation", "imageOptimizationCacheRead", "imageOptimizationCacheWrite", "imageOptimizationTransformation", "logDrainsVolume", "monitoringMetric", "observabilityEvent", "onDemandConcurrencyMinutes", "runtimeCacheRead", "runtimeCacheWrite", "serverlessFunctionExecution", "sourceImages", "wafOwaspExcessBytes", "wafOwaspRequests", "wafRateLimitRequest", "webAnalyticsEvent" ] }, "reason": { "type": "string", "enum": [ "BLOCKED_FOR_PLATFORM_ABUSE", "DOMAIN_OWNER_DELETION_REQUEST", "ENTERPRISE_TRIAL_ENDED", "ENTERPRISE_UNPAID_INVOICE", "EXPOSURE_CAP_EXCEEDED", "FAIR_USE_LIMITS_EXCEEDED", "SUBSCRIPTION_CANCELED", "SUBSCRIPTION_EXPIRED", "UNPAID_INVOICE" ] }, "unpauseAt": { "type": "number", "description": "Since September 2026. Set only by `billing-usage-alerts` for usage plans with a `blockDurationMs`; its presence marks a pause that expires on its own." } }, "required": [ "blockedAt", "reason" ], "type": "object" }, "speedInsightsFreeUsageAlert": { "properties": { "currentThreshold": { "type": "number", "description": "Highest allocation percentage threshold notified (e.g. 75 or 100)." }, "notifiedAt": { "type": "number", "description": "When the notification for `currentThreshold` was sent." } }, "required": [ "currentThreshold", "notifiedAt" ], "type": "object", "description": "Tracks notifications sent for the team-wide Speed Insights free allocation. The allocation is measured over a rolling window (not a billing period), so deduplication is time-based rather than reset at period start." }, "stagingPrefix": { "type": "string" }, "sysToken": { "type": "string" }, "teams": { "items": { "properties": { "accessRequestedAt": { "type": "number" }, "confirmed": { "type": "boolean", "enum": [ true ] }, "confirmedAt": { "type": "number" }, "created": { "type": "number" }, "createdAt": { "type": "number" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "teamId": { "type": "string" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" } }, "required": [ "confirmed", "confirmedAt", "created", "createdAt", "role", "teamId" ], "type": "object" }, "type": "array", "description": "A helper that allows to describe a relationship attribute. It receives the shape of a relationship plus the foreignKey name to make it mandatory in the resulting type." }, "testAccountExpiresAt": { "type": "number" }, "trialTeamId": { "type": "string", "description": "Deprecated on 2022-04-12 in favor of trialTeamIds and using utils/api-teams/user-has-trial-available.ts." }, "trialTeamIds": { "items": { "type": "string" }, "type": "array", "description": "Introduced 2022-04-12 An array of teamIds (for trial teams created after 2022-04-01), created by the user in question. Used in determining whether the team has a trial available in utils/api-teams/user-has-trial-available.ts." }, "type": { "type": "string", "enum": [ "user" ] }, "updatedAt": { "type": "number" }, "usageAlerts": { "nullable": true, "properties": { "blockingAt": { "nullable": true, "type": "number" }, "warningAt": { "nullable": true, "type": "number" } }, "type": "object", "description": "Contains the timestamps when a user was notified about their usage" }, "username": { "type": "string" }, "version": { "type": "string", "enum": [ "northstar" ] } }, "required": [ "billing", "blocked", "createdAt", "deploymentSecret", "email", "id", "platformVersion", "stagingPrefix", "sysToken", "type", "updatedAt", "username", "version" ], "type": "object" }, "userId": { "type": "string" } }, "required": [ "configurationId", "integrationId", "integrationSlug", "newOwner", "userId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "confirmedScopes": { "items": { "type": "string" }, "type": "array" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "configurationId", "confirmedScopes", "integrationId", "integrationName", "integrationSlug", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "configurationId", "id", "name", "slug" ], "type": "object" }, "destinationTeamId": { "type": "string" }, "destinationTeamName": { "type": "string" } }, "required": [ "destinationTeamId", "destinationTeamName", "integration" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "integration": { "properties": { "configurationId": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "configurationId", "id", "name", "slug" ], "type": "object" }, "originTeamId": { "type": "string" }, "originTeamName": { "type": "string" } }, "required": [ "integration", "originTeamId", "originTeamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurations": { "items": { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" } }, "required": [ "configurationId", "integrationId", "integrationSlug" ], "type": "object" }, "type": "array" }, "ownerId": { "type": "string" } }, "required": [ "configurations", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "billingPlanId": { "type": "string" }, "billingPlanName": { "type": "string" }, "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" }, "ownerId": { "type": "string" } }, "required": [ "billingPlanId", "configurationId", "integrationId", "integrationName", "integrationSlug", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" }, "ownerId": { "type": "string" }, "projectIds": { "oneOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "string", "enum": [ "all" ] } ] } }, "required": [ "configurationId", "integrationId", "integrationName", "integrationSlug", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "databaseName": { "type": "string" }, "errorCode": { "nullable": true, "type": "string" }, "failedQueryIndex": { "nullable": true, "type": "number" }, "integrationId": { "type": "string" }, "integrationProductSlug": { "type": "string" }, "integrationSlug": { "type": "string" }, "queries": { "items": { "properties": { "command": { "nullable": true, "type": "string" }, "primaryKey": { "items": { "properties": { "column": { "type": "string" }, "value": { "nullable": true, "type": "string" } }, "required": [ "column", "value" ], "type": "object" }, "type": "array" }, "rowCount": { "type": "number" }, "tables": { "items": { "type": "string" }, "type": "array" } }, "required": [ "command" ], "type": "object" }, "type": "array" }, "queryCount": { "type": "number" }, "queryType": { "type": "string", "enum": [ "data-edit", "data-view", "schema", "user" ] }, "readonly": { "type": "boolean", "enum": [ false, true ] }, "resourceId": { "type": "string" }, "rolledBack": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "configurationId", "databaseName", "errorCode", "failedQueryIndex", "integrationId", "integrationProductSlug", "integrationSlug", "queries", "queryCount", "queryType", "readonly", "resourceId", "rolledBack" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "errorCode": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductSlug": { "type": "string" }, "integrationSlug": { "type": "string" }, "resourceId": { "type": "string" }, "commands": { "items": { "properties": { "command": { "type": "string" }, "errorCode": { "type": "string" } }, "required": [ "command" ], "type": "object" }, "type": "array" }, "errorIndex": { "type": "number" }, "readonly": { "type": "boolean", "enum": [ false, true ] }, "requestKind": { "type": "string", "enum": [ "raw_commands" ] } }, "required": [ "commands", "configurationId", "integrationId", "integrationProductSlug", "integrationSlug", "readonly", "requestKind", "resourceId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "errorCode": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductSlug": { "type": "string" }, "integrationSlug": { "type": "string" }, "resourceId": { "type": "string" }, "pattern": { "type": "string" }, "requestKind": { "type": "string", "enum": [ "list_keys" ] }, "type": { "type": "string" } }, "required": [ "configurationId", "integrationId", "integrationProductSlug", "integrationSlug", "requestKind", "resourceId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "errorCode": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductSlug": { "type": "string" }, "integrationSlug": { "type": "string" }, "resourceId": { "type": "string" }, "keys": { "items": { "type": "string" }, "type": "array" }, "requestKind": { "type": "string", "enum": [ "get_keys_metadata" ] } }, "required": [ "configurationId", "integrationId", "integrationProductSlug", "integrationSlug", "keys", "requestKind", "resourceId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configurationId": { "type": "string" }, "errorCode": { "type": "string" }, "integrationId": { "type": "string" }, "integrationProductSlug": { "type": "string" }, "integrationSlug": { "type": "string" }, "resourceId": { "type": "string" }, "key": { "type": "string" }, "requestKind": { "type": "string", "enum": [ "get_key_data" ] } }, "required": [ "configurationId", "integrationId", "integrationProductSlug", "integrationSlug", "key", "requestKind", "resourceId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "integrationId": { "type": "string" }, "integrationName": { "type": "string" }, "integrationSlug": { "type": "string" } }, "required": [ "integrationId", "integrationName", "integrationSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "algorithm": { "type": "string" }, "issuerId": { "type": "string" }, "issuerName": { "type": "string" }, "managedBy": { "type": "string" }, "origin": { "type": "string" } }, "required": [ "algorithm", "issuerId", "issuerName", "origin" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "issuerId": { "type": "string" }, "issuerName": { "type": "string" }, "managedBy": { "type": "string" } }, "required": [ "issuerId", "issuerName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "issuerId": { "type": "string" }, "issuerName": { "type": "string" }, "keyId": { "type": "string" } }, "required": [ "issuerId", "issuerName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "clientId": { "type": "string" }, "environments": { "items": { "type": "string" }, "type": "array" }, "issuerId": { "type": "string" }, "issuerName": { "type": "string" }, "kind": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "issuerId", "issuerName", "kind" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "issuerId": { "type": "string" }, "issuerName": { "type": "string" }, "kind": { "type": "string" }, "policyKey": { "type": "string" } }, "required": [ "issuerId", "issuerName", "kind", "policyKey" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "integrationName": { "type": "string" }, "logDrainUrl": { "nullable": true, "type": "string" } }, "required": [ "logDrainUrl" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "integrationName": { "type": "string" }, "logDrainUrl": { "type": "string" } }, "required": [ "logDrainUrl" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "login": { "type": "string" }, "provider": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "github", "github-custom-host", "github-limited", "gitlab", "google", "saml" ] } }, "required": [ "login", "provider" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "provider": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "github", "github-custom-host", "github-limited", "gitlab", "google", "saml" ] } }, "required": [ "provider" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "env": { "type": "string" }, "factors": { "oneOf": [ { "items": { "oneOf": [ { "properties": { "legacy": { "type": "boolean", "enum": [ false, true ] }, "origin": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "email", "emu-recovery", "github", "gitlab", "google", "invite", "magic-link", "otp", "otp-link", "saml", "webauthn" ] }, "ssoType": { "type": "string" }, "teamId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "origin" ], "type": "object" } ] }, "maxItems": 1, "minItems": 1, "type": "array" }, { "items": { "oneOf": [ { "properties": { "legacy": { "type": "boolean", "enum": [ false, true ] }, "origin": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "email", "emu-recovery", "github", "gitlab", "google", "invite", "magic-link", "otp", "otp-link", "saml", "webauthn" ] }, "ssoType": { "type": "string" }, "teamId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, { "properties": { "origin": { "type": "string", "enum": [ "recovery-code", "totp", "webauthn" ] } }, "required": [ "origin" ], "type": "object" } ] }, "maxItems": 2, "minItems": 2, "type": "array" } ] }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object" }, "loginSessionId": { "type": "string", "description": "Browser login correlation ID. This is not an authentication credential." }, "os": { "type": "string" }, "ssoType": { "type": "string" }, "userAgent": { "type": "string" }, "username": { "type": "string" }, "viaApple": { "type": "boolean", "enum": [ false, true ] }, "viaBitbucket": { "type": "boolean", "enum": [ false, true ] }, "viaGithub": { "type": "boolean", "enum": [ false, true ] }, "viaGitlab": { "type": "boolean", "enum": [ false, true ] }, "viaGoogle": { "type": "boolean", "enum": [ false, true ] }, "viaOTP": { "type": "boolean", "enum": [ false, true ] }, "viaPasskey": { "type": "boolean", "enum": [ false, true ] }, "viaSamlSso": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "toDeploymentId": { "type": "string" } }, "required": [ "projectId", "projectName", "toDeploymentId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "periods": { "items": { "properties": { "endDate": { "type": "string" }, "percent": { "type": "string" }, "periodNumber": { "type": "number" }, "startDate": { "type": "string" } }, "required": [ "endDate", "percent", "periodNumber", "startDate" ], "type": "object" }, "type": "array" } }, "required": [ "periods" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "allowedIntegrationCount": { "type": "number" }, "allowedIntegrationIds": { "items": { "type": "string" }, "type": "array" }, "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enablePolyrepoBranchRouting": { "type": "boolean", "enum": [ false, true ] }, "fallbackEnvironment": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "prev": { "properties": { "enablePolyrepoBranchRouting": { "type": "boolean", "enum": [ false, true ] }, "fallbackEnvironment": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "fallbackEnvironment", "name", "slug" ], "type": "object" }, "slug": { "type": "string" } }, "required": [ "id", "prev" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "group": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object" }, "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "group", "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "group": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object" }, "prev": { "properties": { "project": { "properties": { "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] } }, "type": "object" } }, "required": [ "project" ], "type": "object" }, "project": { "properties": { "id": { "type": "string" }, "microfrontends": { "oneOf": [ { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ true ] }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "isDefaultApp", "updatedAt" ], "type": "object" }, { "properties": { "defaultRoute": { "type": "string", "description": "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`" }, "doNotRouteWithMicrofrontendsRouting": { "type": "boolean", "enum": [ false, true ], "description": "Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend." }, "enabled": { "type": "boolean", "enum": [ true ], "description": "Whether microfrontends are enabled for this project." }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ], "description": "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." }, "groupIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "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." }, "isDefaultApp": { "type": "boolean", "enum": [ false ] }, "routeObservabilityToThisProject": { "type": "boolean", "enum": [ false, true ], "description": "Whether observability data should be routed to this microfrontend project or a root project." }, "updatedAt": { "type": "number", "description": "Timestamp when the microfrontends settings were last updated." } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" }, { "properties": { "enabled": { "type": "boolean", "enum": [ false ] }, "freeProjectForLegacyLimits": { "type": "boolean", "enum": [ false, true ] }, "groupIds": { "type": "array", "items": {}, "minItems": 0, "maxItems": 0 }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "groupIds", "updatedAt" ], "type": "object" } ] }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "group", "prev", "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alertId": { "type": "string" }, "alertName": { "type": "string" } }, "required": [ "alertId", "alertName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "organizationId": { "type": "string" }, "rootTeamId": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "name", "organizationId", "rootTeamId", "slug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryGroupId": { "type": "string" }, "directoryId": { "type": "string" }, "groupName": { "type": "string" }, "next": { "properties": { "default": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "roles": { "additionalProperties": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "object" } }, "required": [ "roles" ], "type": "object" }, "organizationId": { "type": "string" } }, "required": [ "directoryGroupId", "directoryId", "groupName", "next", "organizationId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryGroupId": { "type": "string" }, "directoryId": { "type": "string" }, "organizationId": { "type": "string" } }, "required": [ "directoryGroupId", "directoryId", "organizationId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "enforcedTeamIds": { "items": { "type": "string" }, "type": "array" }, "organizationId": { "type": "string" }, "previousEnabled": { "type": "boolean", "enum": [ false, true ] }, "trigger": { "type": "string", "enum": [ "directory_sync_updated", "domain_deleted", "domain_verified", "saml_updated", "team_attached", "team_participation_updated", "toggle" ] }, "unenforcedTeamIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "enabled", "enforcedTeamIds", "organizationId", "previousEnabled", "trigger", "unenforcedTeamIds" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "organizationId": { "type": "string" }, "teamId": { "type": "string" }, "teamSlug": { "type": "string" } }, "required": [ "enabled", "organizationId", "teamId", "teamSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "organizationId": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "organizationId", "slug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "billingPlan": { "type": "string", "enum": [ "enterprise", "platform" ] }, "organizationId": { "type": "string" }, "teamId": { "type": "string" } }, "required": [ "billingPlan", "organizationId", "teamId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "mode": { "type": "string", "enum": [ "organization", "team" ] }, "organizationId": { "type": "string" }, "previousMode": { "type": "string", "enum": [ "organization", "team" ] }, "teamId": { "type": "string" }, "teamName": { "type": "string" } }, "required": [ "mode", "organizationId", "previousMode", "teamId", "teamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "blockReason": { "type": "string" }, "cause": { "type": "string" }, "ownerId": { "type": "string" }, "siftRoute": { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "source": { "type": "string" } }, "required": [ "cause", "ownerId", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cause": { "type": "string" }, "ownerId": { "type": "string" }, "reason": { "nullable": true, "type": "string" }, "source": { "type": "string" } }, "required": [ "cause", "ownerId", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "blockReason": { "type": "string" }, "cause": { "type": "string" }, "ownerId": { "type": "string" }, "source": { "type": "string" } }, "required": [ "cause", "ownerId", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "cause": { "type": "string" }, "ownerId": { "type": "string" }, "source": { "type": "string" } }, "required": [ "cause", "ownerId", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "allowUnsafeScriptSrcKeywords": { "type": "boolean", "enum": [ false, true ] }, "computedConnectSrc": { "type": "string" }, "computedConnectSrcPreview": { "type": "string" }, "computedScriptSrc": { "type": "string" }, "computedScriptSrcPreview": { "type": "string" }, "connectSrcNotificationsEnabled": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "enforcementScope": { "type": "string", "enum": [ "all", "preview" ] }, "enforcePercentage": { "type": "number" }, "mode": { "type": "string" }, "newResourceBlockingPolicy": { "type": "string", "enum": [ "allow", "block" ] }, "omitScriptNonce": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "allowUnsafeScriptSrcKeywords", "enabled", "enforcePercentage", "mode", "newResourceBlockingPolicy" ], "type": "object" }, "previous": { "nullable": true, "properties": { "allowUnsafeScriptSrcKeywords": { "type": "boolean", "enum": [ false, true ] }, "computedConnectSrc": { "type": "string" }, "computedConnectSrcPreview": { "type": "string" }, "computedScriptSrc": { "type": "string" }, "computedScriptSrcPreview": { "type": "string" }, "connectSrcNotificationsEnabled": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "enforcementScope": { "type": "string", "enum": [ "all", "preview" ] }, "enforcePercentage": { "type": "number" }, "mode": { "type": "string" }, "newResourceBlockingPolicy": { "type": "string", "enum": [ "allow", "block" ] }, "omitScriptNonce": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "allowUnsafeScriptSrcKeywords", "enabled", "enforcePercentage", "mode", "newResourceBlockingPolicy" ], "type": "object" }, "projectId": { "type": "string" } }, "required": [ "next", "previous", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "headerName": { "type": "string" }, "justification": { "type": "string" }, "previousStatus": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "headerName", "justification", "previousStatus", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "headerName": { "type": "string" }, "justification": { "nullable": true, "type": "string" }, "previousStatus": { "type": "string" }, "projectId": { "type": "string" } }, "required": [ "headerName", "justification", "previousStatus", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "connectSrcCount": { "type": "number" }, "connectSrcNormalizationRulesCleared": { "type": "boolean", "enum": [ false, true ] }, "connectSrcOriginCount": { "type": "number" }, "connectSrcUserNormalizationRuleCount": { "type": "number" }, "deletedCount": { "type": "number" }, "headerCount": { "type": "number" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "scriptCount": { "type": "number" } }, "required": [ "connectSrcCount", "connectSrcOriginCount", "deletedCount", "headerCount", "projectId", "projectName", "scriptCount" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "approvalScope": { "type": "string", "enum": [ "all", "preview" ] }, "justification": { "type": "string" }, "kind": { "type": "string", "enum": [ "connectSrc", "script" ] }, "previousStatus": { "type": "string" }, "projectId": { "type": "string" }, "url": { "type": "string" } }, "required": [ "justification", "previousStatus", "projectId", "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "resourceUrl": { "type": "string" }, "type": { "type": "string", "enum": [ "script" ] } }, "required": [ "projectId", "resourceUrl", "type" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "headerName": { "type": "string" }, "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "header" ] } }, "required": [ "headerName", "projectId", "type" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "resourceUrl": { "type": "string" }, "type": { "type": "string", "enum": [ "connectSrc" ] } }, "required": [ "projectId", "resourceUrl", "type" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "headerName": { "type": "string" }, "justification": { "nullable": true, "type": "string" }, "kind": { "type": "string", "enum": [ "connectSrc", "script" ] }, "previousStatus": { "type": "string" }, "projectId": { "type": "string" }, "url": { "type": "string" } }, "required": [ "justification", "previousStatus", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "additionalProperties": true, "type": "object", "description": "The payload of the event, if requested.", "properties": { "justification": { "type": "string" }, "pattern": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "justification", "pattern", "projectId", "projectName" ] }, { "properties": { "newName": { "type": "string" }, "oldName": { "type": "string" } }, "required": [ "newName", "oldName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "connectorId": { "type": "string" }, "connectorService": { "type": "string" }, "connectorType": { "type": "string" }, "emailVerified": { "type": "boolean", "enum": [ false, true ] }, "environment": { "type": "string" }, "externalIssuer": { "type": "string" }, "externalSubject": { "type": "string" }, "host": { "type": "string" }, "installationId": { "type": "string" }, "projectId": { "type": "string" }, "sessionId": { "type": "string" }, "tenantId": { "type": "string" } }, "required": [ "connectorId", "connectorService", "connectorType", "environment", "externalIssuer", "externalSubject", "host", "projectId", "sessionId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" } }, "type": "object" }, "previous": { "properties": { "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" } }, "type": "object" }, "previous": { "properties": { "passport": { "nullable": true, "properties": { "connectorId": { "type": "string" }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "connectorId", "deploymentType" ], "type": "object" } }, "type": "object" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "automated": { "type": "boolean", "enum": [ false, true ], "description": "Whether the plan change was system-initiated rather than human-initiated." }, "isDowngrade": { "type": "boolean", "enum": [ false, true ] }, "isReactivate": { "type": "boolean", "enum": [ false, true ] }, "isTrialUpgrade": { "type": "boolean", "enum": [ false, true ] }, "plan": { "type": "string" }, "prevPlan": { "type": "string" }, "priorPlan": { "type": "string" }, "reason": { "type": "string", "description": "Why the plan changed. For downgrades, this is a {@link DowngradeReason} from `@api/pubsub-types` (e.g. `user_downgrade`, `trial_expired`)." }, "removedMemberCount": { "type": "number" }, "removedUsers": { "additionalProperties": { "properties": { "confirmed": { "type": "boolean", "enum": [ false, true ] }, "confirmedAt": { "type": "number" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } }, "required": [ "confirmed", "role" ], "type": "object" }, "type": "object" }, "timestamp": { "type": "number" }, "userAgent": { "type": "string" } }, "required": [ "plan" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "automated": { "type": "boolean", "enum": [ false, true ], "description": "Whether the plan change was system-initiated rather than human-initiated." }, "isDowngrade": { "type": "boolean", "enum": [ false, true ] }, "isReactivate": { "type": "boolean", "enum": [ false, true ] }, "isTrialUpgrade": { "type": "boolean", "enum": [ false, true ] }, "plan": { "type": "string" }, "prevPlan": { "type": "string" }, "priorPlan": { "type": "string" }, "reason": { "type": "string", "description": "Why the plan changed. For downgrades, this is a {@link DowngradeReason} from `@api/pubsub-types` (e.g. `user_downgrade`, `trial_expired`)." }, "removedMemberCount": { "type": "number" }, "removedUsers": { "additionalProperties": { "properties": { "confirmed": { "type": "boolean", "enum": [ false, true ] }, "confirmedAt": { "type": "number" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } }, "required": [ "confirmed", "role" ], "type": "object" }, "type": "object" }, "timestamp": { "type": "number" }, "userAgent": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType", "plan" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "currency": { "type": "string" }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "price": { "type": "number" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "previewDeploymentSuffix": { "nullable": true, "type": "string" }, "previousPreviewDeploymentSuffix": { "nullable": true, "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "endpoint": { "properties": { "awsServiceName": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array" }, "projectId": { "type": "string" }, "vercelRegion": { "type": "string" } }, "required": [ "awsServiceName", "id", "name", "projectId", "vercelRegion" ], "type": "object" }, "projectName": { "type": "string" } }, "required": [ "endpoint" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "privateLinkEndpoint": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "privateLinkEndpoint", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "current": { "properties": { "awsServiceName": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array" }, "projectId": { "type": "string" }, "vercelRegion": { "type": "string" } }, "required": [ "awsServiceName", "id", "name", "projectId", "vercelRegion" ], "type": "object" }, "prev": { "properties": { "awsServiceName": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array" }, "projectId": { "type": "string" }, "vercelRegion": { "type": "string" } }, "required": [ "awsServiceName", "id", "name", "projectId", "vercelRegion" ], "type": "object" }, "projectName": { "type": "string" } }, "required": [ "current", "prev" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "previousEndpoint": { "properties": { "environmentIds": { "items": { "type": "string" }, "type": "array" }, "name": { "type": "string" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array" } }, "required": [ "name" ], "type": "object" }, "privateLinkEndpoint": { "properties": { "id": { "type": "string" }, "environmentIds": { "items": { "type": "string" }, "type": "array" }, "name": { "type": "string" }, "privateDnsNames": { "items": { "type": "string" }, "type": "array" } }, "required": [ "id", "name" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "previousEndpoint", "privateLinkEndpoint", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "branch": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "branch", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryListing": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "directoryListing", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "prevProjectAnalytics": { "nullable": true, "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "projectAnalytics": { "nullable": true, "properties": { "canceledAt": { "nullable": true, "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "id": { "type": "string" }, "paidAt": { "type": "number" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "disabledAt", "enabledAt", "id" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "prevProjectAnalytics", "projectAnalytics", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "prevProjectAnalytics": { "nullable": true, "additionalProperties": true, "type": "object" }, "projectAnalytics": { "additionalProperties": true, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "disabled", "enabled", "regenerated", "updated" ] }, "isEnvVar": { "type": "boolean", "enum": [ false, true ] }, "note": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "action", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "avatar": { "nullable": true, "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enableAffectedProjectsDeployments": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "enableAffectedProjectsDeployments", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enableExternalRewriteCaching": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "enableExternalRewriteCaching", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "type": "object" }, "previous": { "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "productionDeploymentsFastLane": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "productionDeploymentsFastLane", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "sourceFilesOutsideRootDirectory": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "projectId", "projectName", "sourceFilesOutsideRootDirectory" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deploymentId": { "type": "string", "description": "Deployment whose outcome caused a system-initiated elastic resize." }, "isSystemInitiated": { "type": "boolean", "enum": [ false, true ] }, "nextBuildMachineSelection": { "type": "string" }, "nextBuildMachineType": { "type": "string" }, "previousBuildMachineSelection": { "type": "string" }, "previousBuildMachineType": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "reason": { "type": "string", "description": "For system-initiated (elastic) changes, why the build machine was upgraded/downgraded. Stored as the raw reason code (see `ElasticChangeReason` in `@api/build-machines-types`) and rendered as a human-readable clause in the activity/audit log." } }, "required": [ "nextBuildMachineSelection", "nextBuildMachineType", "previousBuildMachineSelection", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "widget": { "nullable": true, "type": "string", "enum": [ "alert", "analytics-online", "analytics-page-views", "analytics-visitors", "firewall-allowed", "firewall-denied", "observability-alert", "observability-edge-requests", "observability-error-rate", "observability-function-invocations", "online", "res", "shortcut", "speed-insights-cls", "speed-insights-lcp", "speed-insights-res", null ] } }, "required": [ "projectId", "projectName", "widget" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "certId": { "type": "string" }, "origin": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "target": { "items": { "type": "string" }, "type": "array" }, "updated": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "newConnectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" }, "oldConnectConfigurations": { "nullable": true, "items": { "properties": { "aws": { "properties": { "securityGroupId": { "type": "string" }, "subnetIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "subnetIds" ], "type": "object" }, "buildsEnabled": { "type": "boolean", "enum": [ false, true ] }, "connectConfigurationId": { "type": "string" }, "createdAt": { "type": "number" }, "dc": { "type": "string" }, "envId": { "oneOf": [ { "type": "string" }, { "type": "string", "enum": [ "preview", "production" ] } ] }, "passive": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "buildsEnabled", "connectConfigurationId", "createdAt", "envId", "passive", "updatedAt" ], "type": "object" }, "type": "array" } }, "required": [ "id", "newConnectConfigurations", "oldConnectConfigurations" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "project", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "disabled", "enabled" ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "action", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "ownerId": { "type": "string" } }, "required": [ "name", "ownerId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "buildQueueConfiguration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "oldBuildQueueConfiguration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ] }, "oldElasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "elasticConcurrencyEnabled", "oldElasticConcurrencyEnabled", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "autoAssignCustomDomains": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "autoAssignCustomDomains", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "previewDeploymentsEnabled": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "previewDeploymentsEnabled", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentId": { "type": "string" }, "customEnvironmentSlug": { "type": "string" }, "next": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" } }, "type": "object" }, "previous": { "properties": { "branchMatcher": { "properties": { "pattern": { "type": "string", "description": "The pattern to match against branch names" }, "type": { "type": "string", "enum": [ "endsWith", "equals", "startsWith" ], "description": "The type of matching to perform" } }, "required": [ "pattern", "type" ], "type": "object" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "customEnvironmentId", "customEnvironmentSlug", "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentId": { "type": "string" }, "customEnvironmentSlug": { "type": "string" }, "enableSchedulesByDefault": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "customEnvironmentId", "customEnvironmentSlug", "enableSchedulesByDefault", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentId": { "type": "string" }, "customEnvironmentSlug": { "type": "string" }, "enableSchedulesByDefault": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "customEnvironmentId", "customEnvironmentSlug", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customEnvironmentId": { "type": "string" }, "customEnvironmentSlug": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "customEnvironmentId", "customEnvironmentSlug", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enableFunctionsBeta": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "enableFunctionsBeta", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "functionDefaultTimeout": { "type": "number" } }, "required": [ "functionDefaultTimeout" ], "type": "object" }, "previous": { "properties": { "functionDefaultTimeout": { "nullable": true, "type": "number" } }, "required": [ "functionDefaultTimeout" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "functionDefaultMemoryType": { "type": "string" } }, "required": [ "functionDefaultMemoryType" ], "type": "object" }, "previous": { "properties": { "functionDefaultMemoryType": { "nullable": true, "type": "string" } }, "required": [ "functionDefaultMemoryType" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "functionDefaultRegions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "functionDefaultRegions" ], "type": "object" }, "previous": { "properties": { "functionDefaultRegions": { "nullable": true, "items": { "type": "string" }, "type": "array" } }, "required": [ "functionDefaultRegions" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "functionZeroConfigFailover": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "functionZeroConfigFailover" ], "type": "object" }, "previous": { "properties": { "functionZeroConfigFailover": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] } }, "required": [ "functionZeroConfigFailover" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "previewDeploymentSuffix": { "nullable": true, "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "previewDeploymentSuffix", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newProjectName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "newProjectName", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "gitProvider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "v0", "vercel" ] }, "gitRepoId": { "type": "string" }, "gitRepositoryName": { "type": "string" } }, "required": [ "gitProvider", "gitRepoId", "gitRepositoryName" ], "type": "object" }, "previous": { "properties": { "gitProvider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "v0", "vercel" ] }, "gitRepoId": { "type": "string" }, "gitRepositoryName": { "type": "string" } }, "required": [ "gitProvider", "gitRepoId", "gitRepositoryName" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitProvider": { "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "v0", "vercel" ] }, "gitRepoId": { "type": "string" }, "gitRepositoryName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "gitProvider", "gitRepoId", "gitRepositoryName", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "onPullRequest": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "onPullRequest", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "onCommit": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "onCommit", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "disableRepositoryDispatchEvents": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "disableRepositoryDispatchEvents", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "createDeployments": { "type": "string", "enum": [ "disabled", "enabled" ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "createDeployments", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "requireVerifiedCommits": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] } }, "required": [ "projectId", "projectName", "requireVerifiedCommits" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "requireVerifiedCommits" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "disableRepositoryDispatchEvents": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "disableRepositoryDispatchEvents" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitCommitStatus": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "gitCommitStatus", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitLFS": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "gitLFS", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "consolidatedGitCommitStatus": { "nullable": true, "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "propagateFailures": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "propagateFailures" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "consolidatedGitCommitStatus", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "commandForIgnoringBuildStep": { "type": "string" } }, "type": "object" }, "previous": { "properties": { "commandForIgnoringBuildStep": { "type": "string" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuredBy": { "type": "string" }, "domain": { "type": "string" }, "gitBranch": { "nullable": true, "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number" }, "target": { "type": "string" } }, "required": [ "domain", "gitBranch", "projectId", "projectName", "redirect", "redirectStatusCode", "target" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number" }, "target": { "type": "string" } }, "required": [ "domain", "projectId", "projectName", "target" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "newProjectId": { "type": "string" }, "newProjectName": { "type": "string" }, "oldProjectId": { "type": "string" }, "oldProjectName": { "type": "string" } }, "required": [ "domain", "newProjectId", "newProjectName", "oldProjectId", "oldProjectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "redirect": { "nullable": true, "type": "string" }, "redirectStatusCode": { "nullable": true, "type": "number" } }, "required": [ "domain", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryType": { "type": "string" }, "projects": { "items": { "properties": { "membershipCreatedAt": { "type": "number" }, "projectId": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] } }, "required": [ "membershipCreatedAt", "projectId", "role" ], "type": "object" }, "type": "array" }, "teamMembership": { "properties": { "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "uid" ], "type": "object" } }, "required": [ "projects" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuredBy": { "nullable": true, "type": "string" }, "domain": { "type": "string" }, "prevConfiguredBy": { "nullable": true, "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "target": { "type": "string" } }, "required": [ "domain", "projectId", "projectName", "target" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "projectMembership": { "nullable": true, "properties": { "createdAt": { "type": "number" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "createdAt", "role", "uid" ], "type": "object" } }, "required": [ "project", "projectMembership" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "invitedUserId": { "type": "string" }, "invitedUserName": { "type": "string" }, "name": { "type": "string" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] } }, "required": [ "invitedUserName", "name", "role" ], "type": "object" } }, "required": [ "project" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "removedMembership": { "properties": { "createdAt": { "type": "number" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "createdAt", "role", "uid" ], "type": "object" } }, "required": [ "project", "removedMembership" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "project": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "projectMembership": { "properties": { "createdAt": { "type": "number" }, "role": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "uid": { "type": "string" }, "previousRole": { "type": "string", "enum": [ "ADMIN", "PROJECT_DEVELOPER", "PROJECT_GUEST", "PROJECT_VIEWER" ] }, "username": { "type": "string" } }, "type": "object" } }, "required": [ "project", "projectMembership" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newProjectId": { "type": "string" }, "newProjectName": { "type": "string" }, "originAccountName": { "type": "string" }, "previousProjectId": { "type": "string" }, "previousProjectName": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "newProjectName", "originAccountName", "previousProjectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "destinationAccountName": { "nullable": true, "type": "string" }, "previousProjectId": { "type": "string" }, "projectName": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "destinationAccountName", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "destinationAccountId": { "type": "string" }, "destinationAccountName": { "type": "string" }, "originAccountName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "destinationAccountId", "destinationAccountName", "originAccountName", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "destinationAccountName": { "type": "string" }, "newProjectId": { "type": "string" }, "newProjectName": { "type": "string" }, "previousProjectId": { "type": "string" }, "previousProjectName": { "type": "string" }, "transferId": { "type": "string" } }, "required": [ "destinationAccountName", "newProjectName", "previousProjectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "source": { "type": "string" } }, "required": [ "projectId", "projectName", "source" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "oldOptionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "optionsAllowlist": { "nullable": true, "properties": { "paths": { "items": { "properties": { "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" } }, "required": [ "paths" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "oldPasswordProtection": { "nullable": true, "oneOf": [ { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } ] }, "passwordChanged": { "type": "boolean", "enum": [ false, true ] }, "passwordProtection": { "nullable": true, "oneOf": [ { "properties": { "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "oldPasswordProtection", "passwordProtection" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" } }, "required": [ "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "expiresAt": { "type": "number" }, "projectId": { "type": "string" } }, "required": [ "expiresAt", "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string", "description": "Display name for Activity links. Optional for events stored before it was published." }, "reasonCode": { "type": "string", "enum": [ "BACKOFFICE", "BUDGET_REACHED", "PUBLIC_API" ] } }, "required": [ "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "consent": { "type": "string", "enum": [ "granted", "refused" ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "consent", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deploymentId": { "type": "string" }, "projectAccountId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "rollbackDescription": { "properties": { "createdAt": { "type": "number", "description": "Timestamp of when the rollback was requested." }, "description": { "type": "string", "description": "User-supplied explanation of why they rolled back the project. Limited to 250 characters." }, "userId": { "type": "string", "description": "The user who rolled back the project." }, "username": { "type": "string", "description": "The username of the user who rolled back the project." } }, "required": [ "createdAt", "description", "userId", "username" ], "type": "object", "description": "Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback." } }, "required": [ "deploymentId", "projectAccountId", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "targetDeploymentId": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "targetDeploymentId": { "type": "string" }, "newTargetPercentage": { "type": "number" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "targetDeploymentId": { "type": "string" }, "action": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": {}, "type": "array" }, "gitSources": { "nullable": true, "items": {}, "type": "array" } }, "type": "object" }, "previous": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": {}, "type": "array" }, "gitSources": { "nullable": true, "items": {}, "type": "array" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "failoverRegions": { "items": { "type": "string" }, "type": "array" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "region": { "type": "string" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "issuerMode": { "type": "string", "enum": [ "global", "team" ] } }, "required": [ "issuerMode" ], "type": "object" }, "previous": { "properties": { "issuerMode": { "type": "string", "enum": [ "global", "team" ] } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customerSupportCodeVisibility": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "customerSupportCodeVisibility", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitForkProtection": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "gitForkProtection", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "protectedSourcemaps": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "projectId", "projectName", "protectedSourcemaps" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "inheritDeploymentProtection": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "inheritDeploymentProtection", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "publicSource": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "projectId", "projectName", "publicSource" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "expiration": { "type": "string" }, "expirationCanceled": { "type": "string" }, "expirationErrored": { "type": "string" }, "expirationProduction": { "type": "string" } }, "type": "object" }, "previous": { "properties": { "expiration": { "type": "string" }, "expirationCanceled": { "type": "string" }, "expirationErrored": { "type": "string" }, "expirationProduction": { "type": "string" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "skewProtectionBoundaryAt": { "type": "number" } }, "required": [ "skewProtectionBoundaryAt" ], "type": "object" }, "previous": { "properties": { "skewProtectionBoundaryAt": { "type": "number" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "skewProtectionMaxAge": { "type": "number" } }, "required": [ "skewProtectionMaxAge" ], "type": "object" }, "previous": { "properties": { "skewProtectionMaxAge": { "type": "number" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" } }, "required": [ "skewProtectionAllowedDomains" ], "type": "object" }, "previous": { "properties": { "skewProtectionAllowedDomains": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "oldSsoProtection": { "nullable": true, "oneOf": [ { "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "ssoProtection": { "nullable": true, "oneOf": [ { "properties": { "april2026SecurityIncidentMigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "cve55182MigrationAppliedFrom": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", null ] }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } }, "required": [ "deploymentType" ], "type": "object" }, { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ] } ] } }, "required": [ "oldSsoProtection", "ssoProtection" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "project": { "properties": { "id": { "type": "string" }, "staticIps": { "properties": { "buildRegion": { "type": "string" }, "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "enabled" ], "type": "object" } }, "required": [ "staticIps" ], "type": "object" } }, "required": [ "project" ], "type": "object" }, "previous": { "properties": { "project": { "properties": { "id": { "type": "string" }, "staticIps": { "properties": { "buildRegion": { "type": "string" }, "builds": { "type": "boolean", "enum": [ false, true ] }, "enabled": { "type": "boolean", "enum": [ false, true ] }, "regions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "enabled" ], "type": "object" } }, "required": [ "staticIps" ], "type": "object" } }, "required": [ "project" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "next", "previous", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "addedAddresses": { "nullable": true, "items": { "type": "string" }, "type": "array" }, "oldTrustedIps": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production", null ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "removedAddresses": { "nullable": true, "items": { "type": "string" }, "type": "array" }, "trustedIps": { "nullable": true, "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews", "production", null ] } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "addedProjects": { "items": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" }, "addedProviders": { "items": { "type": "string" }, "type": "array" }, "enableVercelCiSameRepository": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "removedProjects": { "items": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" }, "removedProviders": { "items": { "type": "string" }, "type": "array" } }, "required": [ "addedProjects", "addedProviders", "projectId", "projectName", "removedProjects", "removedProviders" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string", "description": "Display name for Activity links. Optional for events stored before it was published." }, "reasonCode": { "type": "string", "enum": [ "BACKOFFICE", "PUBLIC_API" ] } }, "required": [ "projectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "prevProjectWebAnalytics": { "nullable": true, "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "projectWebAnalytics": { "properties": { "canceledAt": { "type": "number" }, "disabledAt": { "type": "number" }, "enabledAt": { "type": "number" }, "hasData": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "gitProvider": { "type": "string" }, "gitProviderGroupDescriptor": { "type": "string" }, "gitScope": { "type": "string" } }, "required": [ "gitProvider", "gitProviderGroupDescriptor", "gitScope" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "connectionId": { "type": "string" }, "connectionType": { "type": "string" } }, "required": [ "connectionId", "connectionType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "alias": { "type": "string" }, "projectId": { "type": "string" }, "sandboxId": { "type": "string" }, "sandboxName": { "type": "string" } }, "required": [ "alias", "sandboxName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "driveName": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "region": { "type": "string" } }, "required": [ "driveName", "projectId", "projectName", "region" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "snapshotId": { "type": "string" }, "targetRegions": { "items": { "type": "string" }, "type": "array" } }, "required": [ "projectId", "projectName", "snapshotId", "targetRegions" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "projectId": { "type": "string" }, "sandboxId": { "type": "string" } }, "required": [ "email", "name", "projectId", "sandboxId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "instances": { "type": "number" }, "url": { "type": "string" } }, "required": [ "instances", "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "email", "verified" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "verified": { "type": "boolean", "enum": [ false, true ] }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType", "email", "verified" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" } }, "required": [ "email" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "oneOf": [ { "type": "string" }, { "properties": { "name": { "type": "string" } }, "required": [ "name" ], "type": "object" } ] }, "uid": { "type": "string" } }, "required": [ "name", "uid" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "newName": { "type": "string" }, "oldName": { "type": "string" }, "uid": { "type": "string" } }, "required": [ "newName", "oldName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "firstEnabledAt": { "type": "number" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "updatedAt" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bio": { "type": "string" } }, "required": [ "bio" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "max": { "type": "number" }, "min": { "type": "number" }, "scalingRules": { "additionalProperties": { "properties": { "max": { "type": "number" }, "min": { "type": "number" } }, "required": [ "max", "min" ], "type": "object" }, "type": "object" }, "url": { "type": "string" } }, "required": [ "max", "min", "scalingRules", "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "env": { "type": "string" }, "factors": { "items": { "oneOf": [ { "properties": { "legacy": { "type": "boolean", "enum": [ false, true ] }, "origin": { "type": "string", "enum": [ "apple", "bitbucket", "chatgpt", "email", "github", "gitlab", "google", "otp", "saml" ] }, "ssoType": { "type": "string" }, "teamId": { "type": "string" }, "username": { "type": "string" } }, "required": [ "origin" ], "type": "object" } ] }, "maxItems": 1, "minItems": 1, "type": "array" }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object" }, "os": { "type": "string" }, "ssoType": { "type": "string" }, "userAgent": { "type": "string" }, "username": { "type": "string" }, "viaApple": { "type": "boolean", "enum": [ false, true ] }, "viaBitbucket": { "type": "boolean", "enum": [ false, true ] }, "viaGithub": { "type": "boolean", "enum": [ false, true ] }, "viaGitlab": { "type": "boolean", "enum": [ false, true ] }, "viaGoogle": { "type": "boolean", "enum": [ false, true ] }, "viaOTP": { "type": "boolean", "enum": [ false, true ] }, "viaPasskey": { "type": "boolean", "enum": [ false, true ] }, "viaSamlSso": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketEmail": { "type": "string" }, "bitbucketLogin": { "type": "string" }, "bitbucketName": { "type": "string" }, "email": { "type": "string" }, "zeitAccount": { "type": "string" }, "zeitAccountType": { "type": "string" } }, "required": [ "bitbucketEmail", "bitbucketLogin", "bitbucketName", "email", "zeitAccount", "zeitAccountType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "githubLogin": { "type": "string" }, "zeitAccount": { "type": "string" }, "zeitAccountType": { "type": "string" } }, "required": [ "email", "githubLogin", "zeitAccount", "zeitAccountType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "gitlabEmail": { "type": "string" }, "gitlabLogin": { "type": "string" }, "gitlabName": { "type": "string" }, "zeitAccount": { "type": "string" }, "zeitAccountType": { "type": "string" } }, "required": [ "email", "gitlabEmail", "gitlabLogin", "gitlabName", "zeitAccount", "zeitAccountType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "analyticsId": { "type": "string" }, "previous": { "properties": { "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "sampleRatePercent", "spendLimitInDollars" ], "type": "object" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "sampleRatePercent": { "nullable": true, "type": "number" }, "spendLimitInDollars": { "nullable": true, "type": "number" } }, "required": [ "previous", "sampleRatePercent", "spendLimitInDollars" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "properties": { "budgetItem": { "properties": { "createdAt": { "type": "number", "description": "Date time when budget is created" }, "fixedBudget": { "type": "number", "description": "Budget amount (USD / dollars)" }, "id": { "type": "string", "description": "Sort key that needs to be unique per teamId" }, "isActive": { "type": "boolean", "enum": [ false, true ], "description": "Is the budget currently active for a customer" }, "notifiedAt": { "items": { "type": "number" }, "type": "array", "description": "Array of 50, 75, 100 to keep track of notifications sent out" }, "pauseProjects": { "type": "boolean", "enum": [ false, true ], "description": "Should all projects be paused if budget is exceeded" }, "previousSpend": { "items": { "type": "number" }, "type": "array", "description": "Array of the last 3 months of spend data" }, "pricingPlan": { "type": "string", "enum": [ "flex", "legacy", "platform", "plus", "unbundled" ], "description": "The acive pricing plan the team is billed with" }, "scope": { "type": "string", "enum": [ "organization", "project", "team" ], "description": "Which budget this is. Matches Copper SDK `BudgetScope`. Omitted on events published before team/org/project scopes existed (treat as team)." }, "scopeId": { "type": "string", "description": "Project id when `scope` is `project`." }, "teamId": { "type": "string", "description": "Partition key" }, "type": { "type": "string", "enum": [ "fixed" ], "description": "The budget type" }, "updatedAt": { "type": "number", "description": "Date time when budget is updated last" }, "webhookId": { "type": "string", "description": "Webhook id that corresponds to a webhook in Cosmos webhook collection" }, "webhookNotified": { "type": "boolean", "enum": [ false, true ], "description": "Keep track if the webhook has been called for the month" } }, "required": [ "createdAt", "fixedBudget", "id", "isActive", "notifiedAt", "previousSpend", "teamId", "type" ], "type": "object", "description": "Represents a budget for tracking and notifying teams on their spending." } }, "required": [ "budgetItem" ], "type": "object" } }, "required": [ "budget" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "properties": { "createdAt": { "type": "number", "description": "Date time when budget is created" }, "fixedBudget": { "type": "number", "description": "Budget amount (USD / dollars)" }, "id": { "type": "string", "description": "Sort key that needs to be unique per teamId" }, "isActive": { "type": "boolean", "enum": [ false, true ], "description": "Is the budget currently active for a customer" }, "notifiedAt": { "items": { "type": "number" }, "type": "array", "description": "Array of 50, 75, 100 to keep track of notifications sent out" }, "pauseProjects": { "type": "boolean", "enum": [ false, true ], "description": "Should all projects be paused if budget is exceeded" }, "previousSpend": { "items": { "type": "number" }, "type": "array", "description": "Array of the last 3 months of spend data" }, "pricingPlan": { "type": "string", "enum": [ "flex", "legacy", "platform", "plus", "unbundled" ], "description": "The acive pricing plan the team is billed with" }, "scope": { "type": "string", "enum": [ "organization", "project", "team" ], "description": "Which budget this is. Matches Copper SDK `BudgetScope`. Omitted on events published before team/org/project scopes existed (treat as team)." }, "scopeId": { "type": "string", "description": "Project id when `scope` is `project`." }, "teamId": { "type": "string", "description": "Partition key" }, "type": { "type": "string", "enum": [ "fixed" ], "description": "The budget type" }, "updatedAt": { "type": "number", "description": "Date time when budget is updated last" }, "webhookId": { "type": "string", "description": "Webhook id that corresponds to a webhook in Cosmos webhook collection" }, "webhookNotified": { "type": "boolean", "enum": [ false, true ], "description": "Keep track if the webhook has been called for the month" } }, "required": [ "createdAt", "fixedBudget", "id", "isActive", "notifiedAt", "previousSpend", "teamId", "type" ], "type": "object", "description": "Represents a budget for tracking and notifying teams on their spending." } }, "required": [ "budget" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "properties": { "createdAt": { "type": "number", "description": "Date time when budget is created" }, "fixedBudget": { "type": "number", "description": "Budget amount (USD / dollars)" }, "id": { "type": "string", "description": "Sort key that needs to be unique per teamId" }, "isActive": { "type": "boolean", "enum": [ false, true ], "description": "Is the budget currently active for a customer" }, "notifiedAt": { "items": { "type": "number" }, "type": "array", "description": "Array of 50, 75, 100 to keep track of notifications sent out" }, "pauseProjects": { "type": "boolean", "enum": [ false, true ], "description": "Should all projects be paused if budget is exceeded" }, "previousSpend": { "items": { "type": "number" }, "type": "array", "description": "Array of the last 3 months of spend data" }, "pricingPlan": { "type": "string", "enum": [ "flex", "legacy", "platform", "plus", "unbundled" ], "description": "The acive pricing plan the team is billed with" }, "scope": { "type": "string", "enum": [ "organization", "project", "team" ], "description": "Which budget this is. Matches Copper SDK `BudgetScope`. Omitted on events published before team/org/project scopes existed (treat as team)." }, "scopeId": { "type": "string", "description": "Project id when `scope` is `project`." }, "teamId": { "type": "string", "description": "Partition key" }, "type": { "type": "string", "enum": [ "fixed" ], "description": "The budget type" }, "updatedAt": { "type": "number", "description": "Date time when budget is updated last" }, "webhookId": { "type": "string", "description": "Webhook id that corresponds to a webhook in Cosmos webhook collection" }, "webhookNotified": { "type": "boolean", "enum": [ false, true ], "description": "Keep track if the webhook has been called for the month" } }, "required": [ "createdAt", "fixedBudget", "id", "isActive", "notifiedAt", "previousSpend", "teamId", "type" ], "type": "object", "description": "Represents a budget for tracking and notifying teams on their spending." }, "webhookUrl": { "type": "string" } }, "required": [ "budget" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "budget": { "properties": { "createdAt": { "type": "number", "description": "Date time when budget is created" }, "fixedBudget": { "type": "number", "description": "Budget amount (USD / dollars)" }, "id": { "type": "string", "description": "Sort key that needs to be unique per teamId" }, "isActive": { "type": "boolean", "enum": [ false, true ], "description": "Is the budget currently active for a customer" }, "notifiedAt": { "items": { "type": "number" }, "type": "array", "description": "Array of 50, 75, 100 to keep track of notifications sent out" }, "pauseProjects": { "type": "boolean", "enum": [ false, true ], "description": "Should all projects be paused if budget is exceeded" }, "previousSpend": { "items": { "type": "number" }, "type": "array", "description": "Array of the last 3 months of spend data" }, "pricingPlan": { "type": "string", "enum": [ "flex", "legacy", "platform", "plus", "unbundled" ], "description": "The acive pricing plan the team is billed with" }, "scope": { "type": "string", "enum": [ "organization", "project", "team" ], "description": "Which budget this is. Matches Copper SDK `BudgetScope`. Omitted on events published before team/org/project scopes existed (treat as team)." }, "scopeId": { "type": "string", "description": "Project id when `scope` is `project`." }, "teamId": { "type": "string", "description": "Partition key" }, "type": { "type": "string", "enum": [ "fixed" ], "description": "The budget type" }, "updatedAt": { "type": "number", "description": "Date time when budget is updated last" }, "webhookId": { "type": "string", "description": "Webhook id that corresponds to a webhook in Cosmos webhook collection" }, "webhookNotified": { "type": "boolean", "enum": [ false, true ], "description": "Keep track if the webhook has been called for the month" } }, "required": [ "createdAt", "fixedBudget", "id", "isActive", "notifiedAt", "previousSpend", "teamId", "type" ], "type": "object", "description": "Represents a budget for tracking and notifying teams on their spending." }, "prevBudget": { "properties": { "createdAt": { "type": "number", "description": "Date time when budget is created" }, "fixedBudget": { "type": "number", "description": "Budget amount (USD / dollars)" }, "id": { "type": "string", "description": "Sort key that needs to be unique per teamId" }, "isActive": { "type": "boolean", "enum": [ false, true ], "description": "Is the budget currently active for a customer" }, "notifiedAt": { "items": { "type": "number" }, "type": "array", "description": "Array of 50, 75, 100 to keep track of notifications sent out" }, "pauseProjects": { "type": "boolean", "enum": [ false, true ], "description": "Should all projects be paused if budget is exceeded" }, "previousSpend": { "items": { "type": "number" }, "type": "array", "description": "Array of the last 3 months of spend data" }, "pricingPlan": { "type": "string", "enum": [ "flex", "legacy", "platform", "plus", "unbundled" ], "description": "The acive pricing plan the team is billed with" }, "scope": { "type": "string", "enum": [ "organization", "project", "team" ], "description": "Which budget this is. Matches Copper SDK `BudgetScope`. Omitted on events published before team/org/project scopes existed (treat as team)." }, "scopeId": { "type": "string", "description": "Project id when `scope` is `project`." }, "teamId": { "type": "string", "description": "Partition key" }, "type": { "type": "string", "enum": [ "fixed" ], "description": "The budget type" }, "updatedAt": { "type": "number", "description": "Date time when budget is updated last" }, "webhookId": { "type": "string", "description": "Webhook id that corresponds to a webhook in Cosmos webhook collection" }, "webhookNotified": { "type": "boolean", "enum": [ false, true ], "description": "Keep track if the webhook has been called for the month" } }, "required": [ "createdAt", "fixedBudget", "id", "isActive", "notifiedAt", "previousSpend", "teamId", "type" ], "type": "object", "description": "Represents a budget for tracking and notifying teams on their spending." }, "prevWebhookUrl": { "type": "string" }, "webhookUrl": { "type": "string" } }, "required": [ "budget" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "webhookUrl": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "storeType": { "type": "string", "enum": [ "postgres", "redis" ] } }, "required": [ "storeType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "store": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "blob", "edge-config", "integration", "postgres", "redis" ] } }, "required": [ "id", "type" ], "type": "object" }, "transferRequestCode": { "type": "string" } }, "required": [ "store", "transferRequestCode" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "store": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "blob", "edge-config", "integration", "postgres", "redis" ] } }, "required": [ "id", "type" ], "type": "object" }, "transferRequestCode": { "type": "string" }, "destinationTeamId": { "type": "string" }, "destinationTeamName": { "type": "string" } }, "required": [ "destinationTeamId", "destinationTeamName", "store", "transferRequestCode" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "store": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "blob", "edge-config", "integration", "postgres", "redis" ] } }, "required": [ "id", "type" ], "type": "object" }, "transferRequestCode": { "type": "string" }, "originTeamId": { "type": "string" }, "originTeamName": { "type": "string" } }, "required": [ "originTeamId", "originTeamName", "store", "transferRequestCode" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "access": { "type": "string", "enum": [ "private", "public" ] }, "computeUnitsMax": { "type": "number" }, "computeUnitsMin": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "suspendTimeoutSeconds": { "type": "number" }, "type": { "type": "string", "enum": [ "blob", "edge-config", "integration", "postgres", "redis" ] } }, "required": [ "id", "type" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "ownerId": { "type": "string" }, "store": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "store" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "access": { "type": "string", "enum": [ "private", "public" ] }, "computeUnitsMax": { "type": "number" }, "computeUnitsMin": { "type": "number" }, "id": { "type": "string" }, "name": { "type": "string" }, "suspendTimeoutSeconds": { "type": "number" }, "type": { "type": "string", "enum": [ "blob", "edge-config", "integration", "postgres", "redis" ] }, "locked": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "id", "locked", "type" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin", "user" ] }, "caseNumber": { "type": "string" }, "client": { "type": "string" }, "reason": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "slug": { "type": "string" } }, "required": [ "slug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automatic code reviews are enabled" }, "includeDrafts": { "type": "boolean", "enum": [ false, true ], "description": "Whether to include draft pull requests in automatic reviews" }, "scope": { "type": "string", "enum": [ "all", "private", "public", "selected_repos" ], "description": "Which repository visibilities get automatic reviews" }, "selectedRepos": { "nullable": true, "items": { "type": "string" }, "type": "array", "description": "GitHub repos to scope automatic reviews to. Format: \"owner/repo\" (lowercase). Only used when scope='selected_repos'." } }, "required": [ "enabled", "includeDrafts", "scope" ], "type": "object", "description": "Automatic code review settings" }, "previous": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether automatic code reviews are enabled" }, "includeDrafts": { "type": "boolean", "enum": [ false, true ], "description": "Whether to include draft pull requests in automatic reviews" }, "scope": { "type": "string", "enum": [ "all", "private", "public", "selected_repos" ], "description": "Which repository visibilities get automatic reviews" }, "selectedRepos": { "nullable": true, "items": { "type": "string" }, "type": "array", "description": "GitHub repos to scope automatic reviews to. Format: \"owner/repo\" (lowercase). Only used when scope='selected_repos'." } }, "required": [ "enabled", "includeDrafts", "scope" ], "type": "object", "description": "Automatic code review settings" } }, "required": [ "next" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "amount": { "type": "string" }, "currency": { "type": "string" }, "expiresAt": { "type": "string" }, "trialCreditsIssuedAt": { "type": "number" } }, "required": [ "amount", "currency", "expiresAt", "trialCreditsIssuedAt" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "eventId": { "type": "string" }, "occurredAt": { "type": "number" }, "sessionId": { "type": "string" }, "sessionKind": { "type": "string", "description": "Currently emitted session kinds: chat, investigation." }, "surface": { "type": "string", "description": "Currently emitted surfaces: dashboard, internal, slack, automation, github." } }, "required": [ "eventId", "occurredAt", "sessionId", "sessionKind", "surface" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "eventId": { "type": "string" }, "occurredAt": { "type": "number" }, "sessionId": { "type": "string" }, "sessionKind": { "type": "string", "description": "Currently emitted session kinds: chat, investigation." }, "surface": { "type": "string", "description": "Currently emitted surfaces: dashboard, internal, slack, automation, github." }, "elevatedScopeCount": { "type": "number" }, "elevatedScopes": { "items": { "type": "string" }, "type": "array", "description": "Requested Vercel scopes that are not included in the baseline token." }, "githubScopeCount": { "type": "number" }, "githubScopes": { "items": { "type": "string" }, "type": "array", "description": "External GitHub scopes requested by the plan; these are not Vercel token scopes." }, "mergedScopeCount": { "type": "number" }, "mergedScopes": { "items": { "type": "string" }, "type": "array", "description": "Baseline plus elevated Vercel scopes used when minting scoped tokens." }, "planId": { "type": "string" }, "requestedScopeCount": { "type": "number" }, "requestedScopes": { "items": { "type": "string" }, "type": "array", "description": "Scopes requested by the model-authored plan." } }, "required": [ "elevatedScopeCount", "elevatedScopes", "eventId", "githubScopeCount", "githubScopes", "mergedScopeCount", "mergedScopes", "occurredAt", "planId", "requestedScopeCount", "requestedScopes", "sessionId", "sessionKind", "surface" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "nullable": true, "type": "string", "enum": [ "auto-approval", "block", "manual-approval", null ] }, "previous": { "nullable": true, "type": "string", "enum": [ "auto-approval", "block", "manual-approval", null ] }, "teamSlug": { "type": "string" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "isSystemInitiated": { "type": "boolean", "enum": [ false, true ] }, "next": { "type": "string", "enum": [ "basic", "elastic", "enhanced", "standard", "turbo" ] }, "previous": { "type": "string", "enum": [ "basic", "elastic", "enhanced", "standard", "turbo" ] }, "reason": { "type": "string", "enum": [ "basic-floor", "build-timeout-failure", "enospc-failure", "enterprise-floor", "high-peak-disk", "high-peak-memory", "long-build-duration", "oom-failure", "plan-change", "project-transfer", "short-build-duration", "sustained-high-cpu" ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "by": { "type": "string" }, "byUid": { "type": "string" }, "reasons": { "items": { "properties": { "description": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "description", "slug" ], "type": "object" }, "type": "array" }, "removedMemberCount": { "type": "number" }, "removedUsers": { "additionalProperties": { "properties": { "confirmed": { "type": "boolean", "enum": [ false, true ] }, "confirmedAt": { "type": "number" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } }, "required": [ "confirmed", "role" ], "type": "object" }, "type": "object" }, "slug": { "type": "string" }, "teamId": { "type": "string" }, "timestamp": { "type": "number" } }, "required": [ "by", "slug", "teamId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": {}, "type": "array" }, "gitSources": { "nullable": true, "items": {}, "type": "array" } }, "type": "object" }, "previous": { "nullable": true, "properties": { "deploymentSources": { "nullable": true, "items": {}, "type": "array" }, "gitSources": { "nullable": true, "items": {}, "type": "array" } }, "type": "object" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "nullable": true, "type": "boolean", "enum": [ false, true, null ] }, "environment": { "type": "string", "enum": [ "preview", "production" ] }, "projectId": { "type": "string" }, "projectName": { "type": "string" } }, "required": [ "enabled", "environment", "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "string", "enum": [ "default", "default-force", "off", "off-force", "on", "on-force" ] }, "environment": { "type": "string", "enum": [ "preview", "production" ] } }, "required": [ "enabled", "environment" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "emailDomain": { "nullable": true, "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deletedCount": { "type": "number" }, "inviteIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "deletedCount", "inviteIds" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryType": { "type": "string" }, "entitlements": { "items": { "type": "string" }, "type": "array" }, "invitationRole": { "type": "string" }, "invitedEmail": { "type": "string" }, "invitedUid": { "type": "string" }, "invitedUser": { "properties": { "email": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "username" ], "type": "object" }, "origin": { "type": "string" }, "ssoType": { "type": "string" }, "teamSlug": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketUsername": { "nullable": true, "type": "string" }, "githubUsername": { "nullable": true, "type": "string" }, "gitlabUsername": { "nullable": true, "type": "string" }, "gitUsername": { "type": "string" }, "teamId": { "type": "string" }, "teamName": { "type": "string" }, "updatedUid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "teamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketUsername": { "nullable": true, "type": "string" }, "githubUsername": { "nullable": true, "type": "string" }, "gitlabUsername": { "nullable": true, "type": "string" }, "gitUsername": { "nullable": true, "type": "string" }, "teamName": { "type": "string" }, "username": { "type": "string" } }, "required": [ "teamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "automated": { "type": "boolean", "enum": [ false, true ], "description": "Whether the removal was system-initiated rather than human-initiated." }, "bitbucketUsername": { "nullable": true, "type": "string" }, "deletedUid": { "type": "string" }, "deletedUser": { "properties": { "email": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "username" ], "type": "object" }, "directoryType": { "type": "string" }, "githubUsername": { "nullable": true, "type": "string" }, "gitlabUsername": { "nullable": true, "type": "string" }, "newPlan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "previousPlan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "reason": { "type": "string", "description": "Why the member was removed. When removed due to a plan downgrade, this is a {@link DowngradeReason} from `@api/pubsub-types` (e.g. `trial_expired`, `user_downgrade`)." }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "entitlement": { "type": "string" }, "user": { "properties": { "id": { "type": "string" }, "username": { "type": "string" } }, "required": [ "id", "username" ], "type": "object" } }, "required": [ "entitlement", "user" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "entitlement": { "type": "string" }, "previousCanceledAt": { "type": "string" }, "user": { "properties": { "id": { "type": "string" }, "username": { "type": "string" } }, "required": [ "id", "username" ], "type": "object" } }, "required": [ "entitlement", "user" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "entitlements": { "items": { "type": "string" }, "type": "array" }, "invitedBy": { "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "userId": { "type": "string" } }, "required": [ "email" ], "type": "object" }, "origin": { "type": "string" }, "role": { "type": "string" }, "teamPermissions": { "items": { "type": "string" }, "type": "array" }, "teamRoles": { "items": { "type": "string" }, "type": "array" }, "teamSlug": { "type": "string" }, "uid": { "type": "string" }, "updatedUid": { "type": "string" }, "updatedUser": { "properties": { "email": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "username" ], "type": "object" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "bitbucketUsername": { "type": "string" }, "githubUsername": { "type": "string" }, "gitlabUsername": { "type": "string" }, "gitUsername": { "type": "string" }, "requestedTeamName": { "type": "string" }, "requestedTeamSlug": { "type": "string" }, "requestedUserName": { "type": "string" }, "source": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] } }, "required": [ "requestedTeamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "directoryType": { "type": "string" }, "origin": { "type": "string" }, "previousRole": { "type": "string" }, "previousTeamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "previousTeamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" }, "role": { "type": "string" }, "ssoType": { "type": "string" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" }, "teamSlug": { "type": "string" }, "updatedUid": { "type": "string" }, "updatedUser": { "properties": { "email": { "type": "string" }, "username": { "type": "string" } }, "required": [ "email", "username" ], "type": "object" } }, "required": [ "previousRole" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "authorized": { "type": "boolean", "enum": [ false, true ] }, "email": { "type": "string" }, "reason": { "type": "string" } }, "required": [ "authorized" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enforced": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enforced" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "expiresAt": { "type": "string" }, "maxUses": { "type": "number" }, "name": { "type": "string" }, "publicId": { "type": "string" }, "role": { "type": "string" } }, "required": [ "expiresAt", "maxUses", "publicId", "role" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "publicId": { "type": "string" } }, "required": [ "publicId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "nextConcurrentBuilds": { "type": "number" }, "previousConcurrentBuilds": { "type": "number" } }, "required": [ "nextConcurrentBuilds", "previousConcurrentBuilds" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] }, "trial": { "nullable": true, "properties": { "end": { "type": "number" }, "start": { "type": "number" } }, "required": [ "end", "start" ], "type": "object" } }, "required": [ "plan" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "convertedFromTrial": { "type": "boolean", "enum": [ false, true ] }, "invoiceId": { "type": "string" }, "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] } }, "required": [ "convertedFromTrial", "invoiceId", "plan" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "inviteCode": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "name": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "actorId", "actorType" ] }, { "properties": { "decision": { "type": "string", "enum": [ "keep_on", "turn_off" ] }, "version": { "type": "string" } }, "required": [ "decision", "version" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "consent": { "type": "string", "enum": [ "granted", "refused" ] } }, "required": [ "consent" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "remoteCaching": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Represents configuration for remote caching" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deletedCount": { "type": "number" } }, "required": [ "deletedCount" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "string", "enum": [ "default", "off", "on" ] } }, "required": [ "enabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "scope": { "type": "string", "enum": [ "dashboard", "log-drains" ] } }, "required": [ "enabled", "scope" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "additionalProperties": { "oneOf": [ { "properties": { "accessGroupId": { "type": "string" } }, "required": [ "accessGroupId" ], "type": "object" }, { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } ] }, "type": "object" }, "previous": { "additionalProperties": { "oneOf": [ { "properties": { "accessGroupId": { "type": "string" } }, "required": [ "accessGroupId" ], "type": "object" }, { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } ] }, "type": "object" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "domain": { "type": "string" }, "ips": { "items": { "type": "string" }, "type": "array" } }, "required": [ "domain", "ips" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "tokenTypes": { "items": { "type": "string" }, "type": "array" } }, "required": [ "tokenTypes" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "exportId": { "type": "string" }, "format": { "type": "string" }, "from": { "type": "number" }, "to": { "type": "number" } }, "required": [ "exportId", "format", "from", "to" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "fileId": { "type": "string" } }, "required": [ "fileId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "slug": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "slug": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "type": "object", "description": "The payload of the event, if requested.", "required": [ "actorId", "actorType" ] }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "sampling": { "items": { "properties": { "env": { "type": "string", "enum": [ "preview", "production" ] }, "rate": { "type": "number" }, "requestPath": { "type": "string" }, "type": { "type": "string", "enum": [ "head_sampling" ] } }, "required": [ "rate", "type" ], "type": "object" }, "type": "array" } }, "required": [ "projectId", "projectName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "reason": { "type": "string", "enum": [ "limits-exceeded" ] } }, "required": [ "reason" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "teamName": { "type": "string" } }, "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorName": { "type": "string", "description": "Human-readable admin who performed the removal." }, "actorType": { "type": "string", "enum": [ "admin", "user" ] }, "reason": { "type": "string" }, "recoveryCodes": { "type": "number" }, "totp": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "recoveryCodes", "totp" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deletedAt": { "nullable": true, "type": "number" }, "username": { "type": "string" } }, "required": [ "username" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deletedAt": { "nullable": true, "type": "number" }, "username": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType", "username" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "username": { "type": "string" } }, "required": [ "username" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "teamName": { "type": "string" } }, "required": [ "teamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "teamId": { "type": "string" }, "teamName": { "type": "string" } }, "required": [ "teamId", "teamName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] }, "reason": { "type": "string" } }, "required": [ "actorId", "actorType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] }, "enabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "actorId", "actorType", "enabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] }, "autoBlockPrevented": { "type": "boolean", "enum": [ false, true ] }, "preventUntil": { "type": "number" }, "reason": { "type": "string" } }, "required": [ "actorId", "actorType", "autoBlockPrevented" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "flowId": { "type": "string" }, "loginSessionId": { "type": "string" }, "method": { "type": "string", "enum": [ "email-otp", "recovery-code", "totp", "webauthn" ] }, "reason": { "type": "string" } }, "required": [ "method", "reason" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "allowedMethods": { "items": { "type": "string", "enum": [ "recovery-code", "totp", "webauthn" ] }, "type": "array" }, "firstFactor": { "type": "string" }, "flowId": { "type": "string" }, "loginSessionId": { "type": "string" } }, "required": [ "allowedMethods", "firstFactor", "flowId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "action": { "type": "string", "enum": [ "add-passkey", "add-totp", "admin-remove", "disable", "enable", "regenerate-recovery-codes", "remove-passkey" ] }, "reason": { "type": "string" } }, "required": [ "action", "reason" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "method": { "type": "string", "enum": [ "passkey", "self_serve_recovery", "totp", "user_disabled" ] }, "next": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object" }, "previous": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "context": { "type": "string", "enum": [ "login", "sudo" ], "description": "Absent on events predating the field; those were all logins." }, "remaining": { "type": "number" } }, "required": [ "remaining" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "mfaEnabled": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "mfaEnabled" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "mfa": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object" } }, "required": [ "mfa" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "next": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object" }, "previous": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "totpVerified": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "enabled", "totpVerified" ], "type": "object" } }, "required": [ "next", "previous" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "decision": { "properties": { "authoritative": { "type": "boolean", "enum": [ false, true ] }, "basis": { "type": "string", "enum": [ "gmail", "none", "workspace-mx" ] }, "emailDomain": { "type": "string" }, "emailVerified": { "type": "boolean", "enum": [ false, true ] }, "hostedDomainMatch": { "type": "boolean", "enum": [ false, true ] }, "mxOutcome": { "type": "string", "enum": [ "google", "lookup-error", "non-google", "not-checked" ] } }, "required": [ "authoritative", "basis", "emailDomain", "emailVerified", "hostedDomainMatch", "mxOutcome" ], "type": "object" }, "outcome": { "type": "string", "enum": [ "account-matched", "linking-required" ] }, "provider": { "type": "string", "enum": [ "google" ] }, "providerSubjectId": { "type": "string" } }, "required": [ "decision", "outcome", "provider", "providerSubjectId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "prevEmail": { "type": "string" } }, "required": [ "email", "prevEmail" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "email": { "type": "string" }, "prevEmail": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType", "email", "prevEmail" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "username": { "type": "string" }, "actorId": { "type": "string", "description": "Okta user id." }, "actorName": { "type": "string" }, "actorType": { "type": "string", "enum": [ "admin" ] } }, "required": [ "actorId", "actorType", "username" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "repositoryName": { "type": "string" } }, "required": [ "projectId", "projectName", "repositoryName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "digest": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "reference": { "type": "string" }, "repositoryName": { "type": "string" } }, "required": [ "digest", "projectId", "projectName", "reference", "repositoryName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "reference": { "type": "string" }, "repositoryName": { "type": "string" } }, "required": [ "projectId", "projectName", "reference", "repositoryName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "repositoryName": { "type": "string" }, "sharedWithTeamId": { "type": "string" }, "sharedWithTeamSlug": { "type": "string" } }, "required": [ "projectId", "projectName", "repositoryName", "sharedWithTeamId", "sharedWithTeamSlug" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "repositoryName": { "type": "string" }, "sharedWithTeamId": { "type": "string" } }, "required": [ "projectId", "projectName", "repositoryName", "sharedWithTeamId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "public": { "type": "boolean", "enum": [ false, true ] }, "repositoryName": { "type": "string" } }, "required": [ "projectId", "projectName", "public", "repositoryName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "removedTeamIds": { "items": { "type": "string" }, "type": "array" }, "repositoryName": { "type": "string" } }, "required": [ "projectId", "projectName", "removedTeamIds", "repositoryName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "ruleName": { "type": "string" } }, "required": [ "ruleName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "nextProjectCount": { "nullable": true, "type": "number" }, "previousProjectCount": { "nullable": true, "type": "number" } }, "required": [ "nextProjectCount", "previousProjectCount" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "customAlertTitle": { "type": "string" } }, "required": [ "customAlertTitle" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "protectedProjectCount": { "type": "number" }, "protectionEnabled": { "type": "boolean", "enum": [ false, true ] }, "vulnerabilities": { "items": { "type": "string" }, "type": "array" } }, "required": [ "protectedProjectCount", "protectionEnabled", "vulnerabilities" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "peering": { "properties": { "accountId": { "type": "string" }, "id": { "type": "string" }, "region": { "type": "string" }, "vpcId": { "type": "string" } }, "required": [ "accountId", "id", "region", "vpcId" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "peering", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "peering": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "peering", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "configuration": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "newName": { "type": "string" }, "peering": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "team": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "configuration", "peering", "team" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "tier": { "type": "string", "enum": [ "plus", "pro" ] } }, "required": [ "tier" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "id": { "type": "string" }, "url": { "type": "string" } }, "required": [ "id", "url" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "chatId": { "type": "string" }, "chatTitle": { "type": "string" } }, "required": [ "chatId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "chatId": { "type": "string" }, "events": { "items": { "properties": { "cacheCreationInputTokens": { "type": "number" }, "cacheReadInputTokens": { "type": "number" }, "eventId": { "type": "string" }, "inputTokens": { "type": "number" }, "modelId": { "type": "string" }, "outputTokens": { "type": "number" }, "timestamp": { "type": "string" }, "totalTokens": { "type": "number" } }, "required": [ "cacheCreationInputTokens", "cacheReadInputTokens", "eventId", "inputTokens", "modelId", "outputTokens", "timestamp", "totalTokens" ], "type": "object" }, "type": "array" }, "inputTokens": { "type": "number" }, "messageId": { "type": "string" }, "model": { "type": "string" }, "outputTokens": { "type": "number" }, "timestamp": { "type": "number" }, "useCase": { "type": "string" } }, "required": [ "chatId", "events", "inputTokens", "messageId", "model", "outputTokens", "timestamp", "useCase" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "chatId": { "type": "string" }, "chatTitle": { "type": "string" }, "messageId": { "type": "string" } }, "required": [ "chatId", "messageId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "deploymentId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" }, "runId": { "type": "string" } }, "required": [ "deploymentId", "projectId", "runId" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "app": { "properties": { "clientAuthenticationUsed": { "properties": { "method": { "type": "string", "enum": [ "client_secret_basic", "client_secret_jwt", "client_secret_post", "none", "oidc_token", "private_key_jwt" ] }, "secretId": { "type": "string" } }, "required": [ "method" ], "type": "object" }, "clientId": { "type": "string" }, "name": { "type": "string", "description": "the app's name at the time the event was published (it could have changed since then)" } }, "required": [ "clientAuthenticationUsed", "clientId", "name" ], "type": "object", "description": "optional since entries prior to 2025-10-13 do not contain app information" }, "appName": { "type": "string", "description": "the app's name at the time the event was published (it could have changed since then)" }, "atTTL": { "type": "number", "description": "access_token TTL" }, "authMethod": { "type": "string", "enum": [ "app", "apple", "bitbucket", "chatgpt", "email", "emu", "github", "github-webhook", "gitlab", "google", "invite", "manual", "otp", "passkey", "saml", "sms", "token-exchange-oidc" ] }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object", "description": "optional since entries prior to 2026-04-23 do not contain this field" }, "grantType": { "type": "string", "enum": [ "authorization_code", "urn:ietf:params:oauth:grant-type:device_code", "urn:ietf:params:oauth:grant-type:token-exchange" ] }, "includesRefreshToken": { "type": "boolean", "enum": [ false, true ], "description": "optional since entries prior to 2025-10-13 do not contain this field" }, "ip": { "nullable": true, "type": "string", "description": "optional since entries prior to 2026-04-23 do not contain this field" }, "issuerUrl": { "type": "string", "description": "OIDC issuer (`iss`) of the token that authenticated the request. Present for OIDC-authenticated flows: the token-exchange grant, or `client_credentials` with the `oidc_token` client-authentication method." }, "oidcSubject": { "type": "string", "description": "`sub` claim of the OIDC token. Present for OIDC-authenticated flows (see {@link issuerUrl})." }, "policyId": { "type": "string", "description": "ID of the OIDC-exchange policy that authorized a token-exchange grant. Absent for the `client_credentials` + `oidc_token` flow, which matches an app `oidcProviders` entry rather than a policy." }, "publicId": { "type": "string", "description": "optional since entries prior to 2025-10-13 do not contain this field" }, "refreshTokenPrefix": { "type": "string", "enum": [ "vcr_" ], "description": "optional; only present when a refresh token was issued (offline_access)." }, "refreshTokenPublicId": { "type": "string", "description": "optional; only present when a refresh token was issued (offline_access)." }, "refreshTokenSuffix": { "type": "string", "description": "optional; only present when a refresh token was issued (offline_access)." }, "rtTTL": { "type": "number", "description": "refresh_token TTL" }, "scope": { "type": "string" }, "sessionId": { "type": "string", "description": "optional since entries prior to 2025-10-13 do not contain this field" }, "tokenPrefix": { "type": "string", "enum": [ "vca_" ], "description": "optional since entries prior to 2026-04-23 do not contain this field" }, "tokenSuffix": { "type": "string", "description": "optional since entries prior to 2026-04-23 do not contain this field" }, "userAgent": { "type": "string", "description": "optional since entries prior to 2026-04-23 do not contain this field" } }, "required": [ "appName", "atTTL", "authMethod", "grantType", "scope" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "policy": { "properties": { "claims": { "items": { "properties": { "name": { "type": "string" }, "values": { "items": { "properties": { "value": { "type": "string" }, "wildcards": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "value", "wildcards" ], "type": "object" }, "type": "array" } }, "required": [ "name", "values" ], "type": "object", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "type": "array", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "clientId": { "type": "string" }, "createdAt": { "type": "number", "description": "Creation time (epoch ms)." }, "issuerUrl": { "type": "string" }, "name": { "nullable": true, "type": "string", "description": "Human-readable policy name, or `null` when unnamed." }, "permissions": { "items": { "type": "string" }, "type": "array", "description": "Permission boundary (`['*']` = the app's full declared permissions)." }, "policyId": { "type": "string" }, "resources": { "nullable": true, "properties": { "projectIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "projectIds" ], "type": "object", "description": "Resource boundary, or `null` when the policy has none." }, "teamId": { "type": "string" }, "updatedAt": { "type": "number", "description": "Last-update time (epoch ms)." } }, "required": [ "claims", "clientId", "createdAt", "issuerUrl", "name", "permissions", "policyId", "resources", "teamId", "updatedAt" ], "type": "object", "description": "A full point-in-time snapshot of an OIDC exchange policy, captured on every lifecycle event so the audit trail records exactly what the policy looked like. Mirrors the management endpoints' public response shape." }, "appName": { "type": "string" } }, "required": [ "policy" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "after": { "properties": { "claims": { "items": { "properties": { "name": { "type": "string" }, "values": { "items": { "properties": { "value": { "type": "string" }, "wildcards": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "value", "wildcards" ], "type": "object" }, "type": "array" } }, "required": [ "name", "values" ], "type": "object", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "type": "array", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "clientId": { "type": "string" }, "createdAt": { "type": "number", "description": "Creation time (epoch ms)." }, "issuerUrl": { "type": "string" }, "name": { "nullable": true, "type": "string", "description": "Human-readable policy name, or `null` when unnamed." }, "permissions": { "items": { "type": "string" }, "type": "array", "description": "Permission boundary (`['*']` = the app's full declared permissions)." }, "policyId": { "type": "string" }, "resources": { "nullable": true, "properties": { "projectIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "projectIds" ], "type": "object", "description": "Resource boundary, or `null` when the policy has none." }, "teamId": { "type": "string" }, "updatedAt": { "type": "number", "description": "Last-update time (epoch ms)." } }, "required": [ "claims", "clientId", "createdAt", "issuerUrl", "name", "permissions", "policyId", "resources", "teamId", "updatedAt" ], "type": "object", "description": "A full point-in-time snapshot of an OIDC exchange policy, captured on every lifecycle event so the audit trail records exactly what the policy looked like. Mirrors the management endpoints' public response shape." }, "before": { "properties": { "claims": { "items": { "properties": { "name": { "type": "string" }, "values": { "items": { "properties": { "value": { "type": "string" }, "wildcards": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "value", "wildcards" ], "type": "object" }, "type": "array" } }, "required": [ "name", "values" ], "type": "object", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "type": "array", "description": "Claim matchers an OIDC token must satisfy to use the policy." }, "clientId": { "type": "string" }, "createdAt": { "type": "number", "description": "Creation time (epoch ms)." }, "issuerUrl": { "type": "string" }, "name": { "nullable": true, "type": "string", "description": "Human-readable policy name, or `null` when unnamed." }, "permissions": { "items": { "type": "string" }, "type": "array", "description": "Permission boundary (`['*']` = the app's full declared permissions)." }, "policyId": { "type": "string" }, "resources": { "nullable": true, "properties": { "projectIds": { "items": { "type": "string" }, "type": "array" } }, "required": [ "projectIds" ], "type": "object", "description": "Resource boundary, or `null` when the policy has none." }, "teamId": { "type": "string" }, "updatedAt": { "type": "number", "description": "Last-update time (epoch ms)." } }, "required": [ "claims", "clientId", "createdAt", "issuerUrl", "name", "permissions", "policyId", "resources", "teamId", "updatedAt" ], "type": "object", "description": "A full point-in-time snapshot of an OIDC exchange policy, captured on every lifecycle event so the audit trail records exactly what the policy looked like. Mirrors the management endpoints' public response shape." }, "appName": { "type": "string" } }, "required": [ "after", "before" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "expiresAt": { "type": "number", "description": "Unix epoch milliseconds. Absent when the token never expires." }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object" }, "hasAuthorizationDetails": { "type": "boolean", "enum": [ false, true ], "description": "Whether the token was issued with RFC 9396 authorization details." }, "ip": { "nullable": true, "type": "string" }, "origin": { "type": "string", "enum": [ "app", "apple", "bitbucket", "chatgpt", "email", "emu", "github", "github-webhook", "gitlab", "google", "invite", "manual", "otp", "passkey", "saml", "sms", "token-exchange-oidc" ], "description": "How the token was issued. Always `'manual'` for explicit PAT creation." }, "projectId": { "type": "string", "description": "Present when `scope` is `'project'`." }, "projectName": { "type": "string", "description": "Present when `scope` is `'project'`." }, "projectScope": { "type": "string", "enum": [ "account", "project-only" ], "description": "Present when `scope` is `'project'`." }, "reqId": { "type": "string" }, "reqUrl": { "type": "string" }, "scope": { "type": "string", "enum": [ "project", "team", "user" ], "description": "Scope of the token: - `'user'`: full-account token (not tied to any team). - `'team'`: scoped to a single team. - `'project'`: scoped to a single project within a team." }, "teamId": { "type": "string", "description": "Present when `scope` is `'team'` or `'project'`." }, "teamSlug": { "type": "string", "description": "Present when `scope` is `'team'` or `'project'`." }, "tokenId": { "type": "string", "description": "The token's public ID." }, "tokenName": { "type": "string", "description": "User-supplied name of the token." }, "tokenPrefix": { "type": "string", "enum": [ "vcp_" ], "description": "The token prefix used when showing a safe checksum-style fingerprint." }, "tokenSuffix": { "type": "string", "description": "The token checksum suffix." }, "userAgent": { "type": "string" } }, "required": [ "origin", "scope", "tokenId", "tokenName" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorTokenId": { "type": "string", "description": "The token's public ID." }, "expired": { "type": "boolean", "enum": [ false, true ] }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object" }, "ip": { "nullable": true, "type": "string" }, "leaked": { "type": "boolean", "enum": [ false, true ] }, "origin": { "type": "string", "enum": [ "app", "apple", "bitbucket", "chatgpt", "email", "emu", "github", "github-webhook", "gitlab", "google", "invite", "manual", "otp", "passkey", "saml", "sms", "token-exchange-oidc" ] }, "reqId": { "type": "string" }, "reqUrl": { "type": "string" }, "revoked": { "type": "boolean", "enum": [ false, true ] }, "teamId": { "type": "string" }, "tokenId": { "type": "string" }, "tokenName": { "type": "string" }, "tokenType": { "type": "string" }, "userAgent": { "type": "string" } }, "required": [ "actorTokenId", "tokenId", "tokenName", "tokenType" ], "type": "object", "description": "The payload of the event, if requested." }, { "properties": { "actorTokenId": { "type": "string", "description": "The token's public ID." }, "deletedCount": { "type": "number" }, "geolocation": { "nullable": true, "properties": { "city": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "country": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "most_specific_subdivision": { "properties": { "names": { "properties": { "en": { "type": "string" } }, "required": [ "en" ], "type": "object" } }, "required": [ "names" ], "type": "object" }, "regionName": { "type": "string" } }, "required": [ "country" ], "type": "object" }, "ip": { "nullable": true, "type": "string" }, "reqId": { "type": "string" }, "reqUrl": { "type": "string" }, "userAgent": { "type": "string" } }, "required": [ "actorTokenId", "deletedCount" ], "type": "object", "description": "The payload of the event, if requested." } ] }, "principal": { "oneOf": [ { "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "user" ] }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "avatar", "email", "uid", "username" ], "type": "object", "description": "Metadata for {@link principalId}." }, { "properties": { "clientId": { "type": "string", "description": "The OAuth 2.0 client ID, which may be a CIMD URL." }, "id": { "type": "string", "description": "The backing Vercel App ID. When absent, defaults to `clientId`." }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "clientId", "name", "type" ], "type": "object", "description": "Metadata for {@link principalId}." }, { "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "external" ] } }, "required": [ "id", "name", "type" ], "type": "object", "description": "Metadata for {@link principalId}." }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object", "description": "Metadata for {@link principalId}." } ] }, "principalId": { "type": "string", "description": "The ID of the principal who generated the event. The principal is typically a user, but it could also be an app, an integration, etc. The principal may have delegated its authority to an acting party, and so {@link viaIds} should be checked as well." }, "requestId": { "type": "string" }, "sessionId": { "type": "string", "description": "The ID of the session that the principal's token belongs to, when it belongs to one." }, "text": { "type": "string", "description": "The human-readable text of the Event.", "example": "You logged in via GitHub" }, "tokenId": { "type": "string", "description": "The public ID of the token that the principal authenticated with, when the request behind this event carried one." }, "type": { "type": "string", "enum": [ "access-group-created", "access-group-deleted", "access-group-project-updated", "access-group-updated", "access-group-user-added", "access-group-user-removed", "admin-agentic-provisioning-account-unlinked", "admin-plan-updated", "admin-secondary-email-added", "admin-secondary-email-removed", "admin-team-name-update", "admin-team-slug-update", "admin-user-delete", "admin-user-primary-email-updated", "admin-username-updated", "agentic-provisioning-account-blocked", "agentic-provisioning-account-linked", "agentic-provisioning-account-relinked", "agentic-provisioning-account-unlinked", "agentic-provisioning-credentials-rotated", "agentic-provisioning-plan-changed", "agentic-provisioning-team-created", "ai-alert-investigation", "ai-code-review", "ai-gateway-api-key-created", "ai-gateway-api-key-deleted", "ai-gateway-api-key-quota-updated", "ai-gateway-auto-reload-updated", "ai-gateway-budget-default-updated", "ai-gateway-byok-credential-created", "ai-gateway-byok-credential-deleted", "ai-gateway-byok-credential-updated", "ai-gateway-byok-model-mappings-updated", "ai-gateway-credits-purchased", "ai-gateway-guardrails-updated", "ai-gateway-hipaa-compliance-toggled", "ai-gateway-inference-regions-updated", "ai-gateway-model-allowlist-models-updated", "ai-gateway-model-allowlist-toggled", "ai-gateway-private-model-created", "ai-gateway-private-model-deleted", "ai-gateway-private-model-updated", "ai-gateway-private-provider-created", "ai-gateway-private-provider-deleted", "ai-gateway-private-provider-updated", "ai-gateway-prompt-training-opt-out-toggled", "ai-gateway-provider-allowlist-providers-updated", "ai-gateway-provider-allowlist-toggled", "ai-gateway-rule-created", "ai-gateway-rule-deleted", "ai-gateway-rule-updated", "ai-gateway-scope-budget-updated", "ai-gateway-transcripts-default-disabled", "ai-gateway-transcripts-default-enabled", "ai-gateway-transcripts-disabled", "ai-gateway-transcripts-enabled", "ai-gateway-transcripts-retention-updated", "ai-gateway-virtual-model-config-archived", "ai-gateway-virtual-model-config-created", "ai-gateway-virtual-model-config-deleted", "ai-gateway-virtual-model-config-restored", "ai-gateway-virtual-model-config-updated", "ai-gateway-zero-data-retention-toggled", "ai-omniagent", "alert-investigation-project-allowlist-updated", "alert-rule-created", "alert-rule-deleted", "alert-rule-updated", "alias", "alias-chown", "alias-delete", "alias-invite-created", "alias-invite-joined", "alias-invite-revoked", "alias-protection-bypass-created", "alias-protection-bypass-exception", "alias-protection-bypass-regenerated", "alias-protection-bypass-revoked", "alias-system", "alias-user-scoped-access-denied", "alias-user-scoped-access-granted", "alias-user-scoped-access-requested", "alias-user-scoped-access-revoked", "aliases-assigned", "attack-mode-disabled", "attack-mode-enabled", "audit-log-export-downloaded", "audit-log-export-requested", "authorize-git-deployment", "auto-expose-system-envs", "avatar", "billing-settings-updated", "bulk-redirects-settings-updated", "bulk-redirects-version-promoted", "bulk-redirects-version-restored", "cert", "cert-autorenew", "cert-chown", "cert-clone", "cert-delete", "cert-renew", "cert-replace", "cert-system-create", "code-owners-config-updated", "compliance-document-downloaded", "compliance-document-previewed", "compliance-documents-bulk-downloaded", "concurrent-builds-update", "connect-attach-project", "connect-bitbucket", "connect-bitbucket-app", "connect-configuration-created", "connect-configuration-deleted", "connect-configuration-link-updated", "connect-configuration-linked", "connect-configuration-unlinked", "connect-configuration-updated", "connect-create-connector", "connect-delete-connector", "connect-delete-installation", "connect-detach-project", "connect-github", "connect-github-custom-host", "connect-github-limited", "connect-gitlab", "connect-gitlab-app", "connect-import-tokens", "connect-revoke-all-tokens", "connect-update-connector", "connect-update-trigger-destinations", "connect-upsert-installation", "custom-alert-created", "custom-alert-deleted", "custom-alert-updated", "custom-environments-settings-updated", "custom-metric-metadata-deleted", "custom-metric-metadata-updated", "custom-suffix-clear", "custom-suffix-disable", "custom-suffix-enable", "custom-suffix-pending", "custom-suffix-ready", "deploy-hook-created", "deploy-hook-deduped", "deploy-hook-deleted", "deploy-hook-processed", "deployment", "deployment-check-created", "deployment-check-deleted", "deployment-check-updated", "deployment-chown", "deployment-creation-blocked", "deployment-delete", "deployment-policy-blocked", "deployment-undeleted", "disabled-integration-installation-removed", "disconnect-bitbucket-app", "disconnect-github", "disconnect-github-custom-host", "disconnect-github-limited", "disconnect-gitlab-app", "dns-add", "dns-delete", "dns-record-internal", "dns-update", "dns-zonefile-import", "domain", "domain-buy", "domain-cdn", "domain-chown", "domain-custom-ns-change", "domain-delegated", "domain-delete", "domain-ech-change", "domain-move-in", "domain-move-out", "domain-move-out-request-sent", "domain-renew-change", "domain-service-type-updated", "domain-transfer-in", "domain-transfer-in-canceled", "domain-transfer-in-completed", "domain-zone-change", "domain-zone-change-internal", "drain-created", "drain-deleted", "drain-disabled", "drain-enabled", "drain-updated", "edge-cache-dangerously-delete-by-src-images", "edge-cache-dangerously-delete-by-tags", "edge-cache-dangerously-delete-immutable-static", "edge-cache-invalidate-by-src-images", "edge-cache-invalidate-by-tags", "edge-cache-purge-all", "edge-cache-rollback-purge", "edge-config-backup-restored", "edge-config-created", "edge-config-deleted", "edge-config-items-updated", "edge-config-schema-deleted", "edge-config-schema-updated", "edge-config-token-created", "edge-config-token-deleted", "edge-config-transfer-in", "edge-config-transfer-out", "edge-config-updated", "email", "email-notification-rule-removed", "email-notification-rule-updated", "emu-member-removed-unverified-domain", "enforce-disjunctive-production-secrets", "enforce-sensitive-environment-variables", "env-variable-add", "env-variable-delete", "env-variable-edit", "env-variable-masked", "env-variable-read", "env-variable-read:cli:dev", "env-variable-read:cli:env:add", "env-variable-read:cli:env:ls", "env-variable-read:cli:env:pull", "env-variable-read:cli:env:rm", "env-variable-read:cli:pull", "env-variable-read:unknown-source", "env-variable-read:v0:env:pull", "env-variable-rotated", "experiment-created", "experiment-deleted", "experiment-transitioned", "experiment-updated", "firewall-bypass-created", "firewall-bypass-deleted", "firewall-config-modified", "firewall-config-promoted", "firewall-config-removed", "firewall-managed-rulegroup-updated", "firewall-managed-ruleset-updated", "flag", "flag-archived", "flag-created", "flag-deleted", "flag-unarchived", "flag-updated", "flags-explorer-subscription", "flags-sdk-key", "flags-sdk-key-added", "flags-sdk-key-deleted", "flags-sdk-key-read", "flags-segment", "flags-settings", "flags-transferred", "flat-rate-cdn-auto-upgrade-consent", "git-integration-repo-push", "git_account_integration_link_added", "global-config-backup-restored", "global-config-created", "global-config-deleted", "global-config-items-updated", "global-config-schema-deleted", "global-config-schema-updated", "global-config-token-created", "global-config-token-deleted", "global-config-transfer-in", "global-config-transfer-out", "global-config-updated", "instant-rollback-created", "integration-configuration-credential-revoked", "integration-configuration-credential-rotated", "integration-configuration-owner-changed", "integration-configuration-scope-change-confirmed", "integration-configuration-transfer-in-success", "integration-configuration-transfer-out-success", "integration-configurations-disabled", "integration-installation-billing-plan-updated", "integration-installation-completed", "integration-installation-permission-updated", "integration-installation-removed", "integration-resource-redis-command-executed", "integration-resource-sql-query-executed", "integration-scope-changed", "invoice-modified", "invoice-refunded", "kms-issuer-created", "kms-issuer-deleted", "kms-issuer-key-activated", "kms-issuer-key-created", "kms-issuer-key-revoked", "kms-issuer-key-rotated", "kms-issuer-policy-created", "kms-issuer-policy-deleted", "kms-issuer-policy-updated", "kms-issuer-updated", "log-drain-created", "log-drain-deleted", "log-drain-disabled", "log-drain-enabled", "login", "login-connection-linked", "login-connection-unlinked", "manual-deployment-promotion-created", "marketplace-flex-commit-opt-in", "marketplace-integration-allowlist-updated", "microfrontend-group-added", "microfrontend-group-deleted", "microfrontend-group-updated", "microfrontend-project-added-to-group", "microfrontend-project-removed-from-group", "microfrontend-project-updated", "monitoring-alert-updated", "monitoring-disabled", "monitoring-enabled", "oauth-app-connection-created", "oauth-app-connection-removed", "oauth-app-connection-updated", "oauth-app-created", "oauth-app-deleted", "oauth-app-secret-deleted", "oauth-app-secret-generated", "oauth-app-token-created", "oauth-app-updated", "observability-disabled", "observability-enabled", "observability-plus-project-disabled", "observability-plus-project-enabled", "oidc-policy-created", "oidc-policy-deleted", "oidc-policy-updated", "oidc-policy-used-to-obtain-app-token", "organization-create", "organization-delete", "organization-dsync-group-delete", "organization-dsync-group-upsert", "organization-emu-team-updated", "organization-emu-updated", "organization-slug-update", "organization-team-add", "organization-team-create", "organization-team-delete", "organization-team-sso-update", "owner-blocked", "owner-soft-blocked", "owner-soft-unblocked", "owner-unblocked", "page-integrity-config-updated", "page-integrity-header-approved", "page-integrity-header-rejected", "page-integrity-inventory-cleared", "page-integrity-resource-approved", "page-integrity-resource-deleted", "page-integrity-resource-rejected", "page-integrity-script-approval-rule-created", "page-integrity-script-approval-rule-deleted", "passkey-created", "passkey-deleted", "passkey-updated", "passport-access-granted", "password-protection-disabled", "password-protection-enabled", "payment-method-added", "payment-method-default-updated", "payment-method-removed", "plan", "preview-deployment-suffix-disabled", "preview-deployment-suffix-enabled", "preview-deployment-suffix-update", "privatelink-endpoint-created", "privatelink-endpoint-deleted", "privatelink-endpoint-updated", "production-branch-updated", "project-add-alias", "project-add-redirect", "project-affected-projects-deployments-updated", "project-alias-configured-change", "project-analytics-disabled", "project-analytics-enabled", "project-auto-assign-custom-production-domains-updated", "project-automation-bypass", "project-avatar-update", "project-build-command-updated", "project-build-logs-and-source-protection-updated", "project-build-machine-updated", "project-card-widget-preference-updated", "project-client-cert-delete", "project-client-cert-upload", "project-connect-configurations", "project-consolidated-git-commit-status-updated", "project-created", "project-cron-jobs-toggled", "project-custom-environment-created", "project-custom-environment-deleted", "project-custom-environment-schedules-default-updated", "project-custom-environment-updated", "project-customer-success-code-visibility-updated", "project-delete", "project-deployment-policy-updated", "project-deployment-retention-updated", "project-directory-listing", "project-domain-deleted", "project-domain-moved", "project-domain-unverified", "project-domain-updated", "project-domain-verified", "project-elastic-concurrency-updated", "project-expiration-locked", "project-expiration-reached", "project-expiration-scheduled", "project-expiration-unlocked", "project-external-rewrite-caching-updated", "project-framework-updated", "project-function-cpu-memory", "project-function-failover", "project-function-max-duration", "project-function-regions", "project-functions-beta-updated", "project-functions-fluid-disabled", "project-functions-fluid-enabled", "project-git-commit-comments-toggled", "project-git-commit-status-toggled", "project-git-create-deployments-toggled", "project-git-credential-bound-created", "project-git-credential-bound-deleted", "project-git-credential-bound-updated", "project-git-credential-grant-created", "project-git-credential-grant-deleted", "project-git-credential-grant-updated", "project-git-fork-protection-updated", "project-git-lfs-toggled", "project-git-pr-comments-toggled", "project-git-repository-connected", "project-git-repository-disconnected", "project-git-repository-dispatch-events-toggled", "project-git-require-verified-commits-toggled", "project-ignored-build-step-updated", "project-install-command-updated", "project-member-added", "project-member-invited", "project-member-removed", "project-member-removed-batch", "project-member-updated", "project-move-in-success", "project-move-out-failed", "project-move-out-started", "project-move-out-success", "project-name", "project-node-version-updated", "project-oidc-issuer-mode-updated", "project-oidc-token-created", "project-options-allowlist", "project-output-directory-updated", "project-passport-updated", "project-password-protection", "project-paused", "project-preview-deployment-suffix", "project-preview-environment-branch-tracking-updated", "project-prioritize-production-builds-updated", "project-program-enrollment-changed", "project-protected-sourcemaps-updated", "project-rollback-description-updated", "project-rolling-release-aborted", "project-rolling-release-approved", "project-rolling-release-completed", "project-rolling-release-configured", "project-rolling-release-continued", "project-rolling-release-disabled", "project-rolling-release-enabled", "project-rolling-release-paused", "project-rolling-release-started", "project-rolling-release-suggested-actions-generated", "project-rolling-release-timer", "project-root-directory-updated", "project-routes-version-promoted", "project-routes-version-restored", "project-sandbox-config-updated", "project-sandbox-url-protection-updated", "project-skew-protection-allowed-domains-updated", "project-skew-protection-max-age-updated", "project-skew-protection-threshold-updated", "project-source-files-outside-root-directory-updated", "project-speed-insights-disabled", "project-speed-insights-enabled", "project-speed-insights-free-data-started", "project-sso-protection", "project-static-ips-updated", "project-trusted-ips", "project-trusted-sources", "project-unpaused", "project-web-analytics-disabled", "project-web-analytics-enabled", "protected-git-scope-added", "protected-git-scope-removed", "repository-ci-env-variable-create", "repository-ci-env-variable-delete", "repository-ci-env-variable-update", "runtime-cache-purge-all", "saml-connection-created", "saml-connection-deleted", "sandbox-alias-assigned", "sandbox-alias-delete", "sandbox-drive-created", "sandbox-drive-deleted", "sandbox-signed-commit-identity-configured", "sandbox-snapshot-regions-updated", "scale", "scale-auto", "secondary-email-added", "secondary-email-removed", "secondary-email-verified", "secret-add", "secret-delete", "secret-rename", "security-list-created", "security-list-deleted", "security-list-updated", "security-plus-updated", "set-bio", "set-name", "set-profiles", "set-scale", "shared-env-variable-create", "shared-env-variable-delete", "shared-env-variable-read", "shared-env-variable-repo-link", "shared-env-variable-repo-unlink", "shared-env-variable-update", "show-ip-addresses", "signup", "signup-via-bitbucket", "signup-via-github", "signup-via-gitlab", "speed-insights-settings-updated", "spend-created", "spend-deleted", "spend-updated", "sso-login", "storage-accept-tos", "storage-access-token-set", "storage-accessed-data-browser", "storage-connect-project", "storage-create", "storage-delete", "storage-disconnect-project", "storage-disconnect-projects", "storage-inactive-store-deleted", "storage-reset-credentials", "storage-resource-repl-command", "storage-set-locked", "storage-transfer-in-success", "storage-transfer-out-success", "storage-transfer-request-created", "storage-update", "storage-update-project-connection", "storage-upgrade-project-connection-to-oidc", "storage-view-secret", "strict-connectors", "strict-deployment-protection-settings", "strict-password-protection-settings", "strict-shareable-links", "subscription-created", "subscription-product-added", "subscription-product-removed", "subscription-updated", "support-session-created", "team", "team-agent-billing-migration-decision-changed", "team-avatar-update", "team-collaboration-settings-updated", "team-default-build-machine-updated", "team-default-passport-updated", "team-delete", "team-deployment-policy-updated", "team-domain-verification-created", "team-domain-verification-deleted", "team-domain-verification-verified", "team-email-domain-update", "team-emu-updated", "team-ended-trial", "team-firewall-config-modified", "team-firewall-config-promoted", "team-git-repository-dispatch-events-toggled", "team-git-require-verified-commits-toggled", "team-invite-bulk-delete", "team-invite-code-reset", "team-invite-link-created", "team-invite-link-deleted", "team-ip-blocking-rules-created", "team-ip-blocking-rules-removed", "team-member-add", "team-member-confirm-request", "team-member-decline-request", "team-member-delete", "team-member-entitlement-added", "team-member-entitlement-canceled", "team-member-entitlement-reactivated", "team-member-entitlement-removed", "team-member-join", "team-member-leave", "team-member-request-access", "team-member-role-update", "team-member-sso-authorization-attempt", "team-mfa-enforcement-updated", "team-name-update", "team-paid-invoice", "team-program-enrollment-changed", "team-remote-caching-purge", "team-remote-caching-update", "team-saml-enforced", "team-saml-roles", "team-slug-update", "team-tokens-invalidated", "tracing-configured", "tracing-disabled", "tracing-paused", "tracing-resumed", "unlink-login-connection", "update-account-flow-dismissed", "update-account-flow-triggered", "user-auto-block-configured", "user-blocked", "user-delete", "user-delete-requested", "user-emu-account-archived", "user-emu-account-deleted", "user-emu-account-recovered", "user-emu-account-update-opted-in", "user-emu-account-update-opted-out", "user-emu-recovery-email-sent", "user-emu-recovery-initiated", "user-emu-toggled", "user-mfa-challenge-failed", "user-mfa-challenge-initiated", "user-mfa-challenge-verified", "user-mfa-change-failed", "user-mfa-configuration-updated", "user-mfa-recovery-code-used", "user-mfa-recovery-codes-regenerated", "user-mfa-removed", "user-mfa-setup-skipped", "user-mfa-totp-verification-started", "user-mfa-totp-verified", "user-phone-removed", "user-phone-updated", "user-primary-email-updated", "user-provider-email-claim-evaluated", "user-sudo-mode-removed", "user-token-created", "user-token-deleted", "user-tokens-deleted", "user-unblocked", "username", "v0-chat-ai-usage", "v0-chat-created", "v0-chat-message-sent", "vcr-image-deleted", "vcr-image-pushed", "vcr-repository-created", "vcr-repository-deleted", "vcr-repository-permission-added", "vcr-repository-permission-removed", "vcr-repository-permissions-cleared", "vcr-repository-visibility-changed", "vercel-agent-elevated-permissions-approved", "vercel-agent-elevated-permissions-requested", "vercel-agent-session-created", "vercel-agent-team-trial-credits-applied", "vercel-app-installation-request-dismissed", "vercel-app-installation-requested", "vercel-app-installation-updated", "vercel-app-installed", "vercel-app-tokens-revoked", "vercel-app-uninstalled", "vercel-toolbar", "vpc-peering-connection-accepted", "vpc-peering-connection-deleted", "vpc-peering-connection-rejected", "vpc-peering-connection-updated", "vulnerability-banner-dismissed", "web-analytics-tier-updated", "webhook-created", "webhook-deleted", "webhook-updated", "workflow-deployment-key-accessed" ], "description": "The type of the event.", "example": "login" }, "user": { "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "slug": { "type": "string" }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "avatar", "email", "uid", "username" ], "type": "object", "description": "Metadata for {@link userId}." }, "userId": { "type": "string", "description": "When the principal who generated the event is a user, this is their ID; otherwise, it is empty.", "example": "zTuNVUXEAvvnNN3IaqinkyMw" }, "via": { "items": { "oneOf": [ { "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "slug": { "type": "string" }, "type": { "type": "string", "enum": [ "user" ] }, "uid": { "type": "string" }, "username": { "type": "string" } }, "required": [ "avatar", "email", "uid", "username" ], "type": "object", "description": "Metadata for {@link viaIds}." }, { "properties": { "clientId": { "type": "string", "description": "The OAuth 2.0 client ID, which may be a CIMD URL." }, "id": { "type": "string", "description": "The backing Vercel App ID. When absent, defaults to `clientId`." }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "app" ] } }, "required": [ "clientId", "name", "type" ], "type": "object", "description": "Metadata for {@link viaIds}." }, { "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "external" ] } }, "required": [ "id", "name", "type" ], "type": "object", "description": "Metadata for {@link viaIds}." }, { "properties": { "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "type" ], "type": "object", "description": "Metadata for {@link viaIds}." } ] }, "type": "array", "description": "Metadata for {@link viaIds}." }, "viaIds": { "items": { "type": "string" }, "type": "array", "description": "If the principal delegated its authority (for example, a user delegating to an app), then this array contains the ID of the current actor. For example, if `principalId` is \"user123\" and `viaIds` is `[\"app456\"]`, we can say the event was triggered by - \"app456 on behalf of user123\", or - \"user123 via app4556\". Both are equivalent. Arbitrarily long chains of delegation can be represented. For example, if `principalId` is \"user123\" and `viaIds` is `[\"service1\", \"service2\"]`, we can say the event was triggered by \"user123 via service1 via service2\"." } }, "required": [ "createdAt", "entities", "id", "principalId", "text" ], "type": "object", "description": "Array of events generated by the User." }, "ListEventType": { "properties": { "categories": { "items": { "type": "string", "enum": [ "account", "ai", "ai-gateway", "billing", "connect", "deployment", "domain", "edge", "env-variable", "feature-flags", "firewall", "integration", "microfrontends", "network", "observability", "other", "project", "security", "storage", "team", "v0", "vercel-app", "workflow" ], "example": [ "deployment" ], "description": "Categories that group this event type with related event types." }, "type": "array", "description": "Categories that group this event type with related event types.", "example": [ "deployment" ] }, "deprecated": { "type": "boolean", "enum": [ false, true ], "description": "Present only when this event type is deprecated." }, "description": { "type": "string", "description": "Description of the event, visible to users in the Activity dashboard and docs." }, "name": { "type": "string", "enum": [ "access-group-created", "access-group-deleted", "access-group-project-updated", "access-group-updated", "access-group-user-added", "access-group-user-removed", "admin-agentic-provisioning-account-unlinked", "admin-plan-updated", "admin-secondary-email-added", "admin-secondary-email-removed", "admin-team-name-update", "admin-team-slug-update", "admin-user-delete", "admin-user-primary-email-updated", "admin-username-updated", "agentic-provisioning-account-blocked", "agentic-provisioning-account-linked", "agentic-provisioning-account-relinked", "agentic-provisioning-account-unlinked", "agentic-provisioning-credentials-rotated", "agentic-provisioning-plan-changed", "agentic-provisioning-team-created", "ai-alert-investigation", "ai-code-review", "ai-gateway-api-key-created", "ai-gateway-api-key-deleted", "ai-gateway-api-key-quota-updated", "ai-gateway-auto-reload-updated", "ai-gateway-budget-default-updated", "ai-gateway-byok-credential-created", "ai-gateway-byok-credential-deleted", "ai-gateway-byok-credential-updated", "ai-gateway-byok-model-mappings-updated", "ai-gateway-credits-purchased", "ai-gateway-guardrails-updated", "ai-gateway-hipaa-compliance-toggled", "ai-gateway-inference-regions-updated", "ai-gateway-model-allowlist-models-updated", "ai-gateway-model-allowlist-toggled", "ai-gateway-private-model-created", "ai-gateway-private-model-deleted", "ai-gateway-private-model-updated", "ai-gateway-private-provider-created", "ai-gateway-private-provider-deleted", "ai-gateway-private-provider-updated", "ai-gateway-prompt-training-opt-out-toggled", "ai-gateway-provider-allowlist-providers-updated", "ai-gateway-provider-allowlist-toggled", "ai-gateway-rule-created", "ai-gateway-rule-deleted", "ai-gateway-rule-updated", "ai-gateway-scope-budget-updated", "ai-gateway-transcripts-default-disabled", "ai-gateway-transcripts-default-enabled", "ai-gateway-transcripts-disabled", "ai-gateway-transcripts-enabled", "ai-gateway-transcripts-retention-updated", "ai-gateway-virtual-model-config-archived", "ai-gateway-virtual-model-config-created", "ai-gateway-virtual-model-config-deleted", "ai-gateway-virtual-model-config-restored", "ai-gateway-virtual-model-config-updated", "ai-gateway-zero-data-retention-toggled", "ai-omniagent", "alert-investigation-project-allowlist-updated", "alert-rule-created", "alert-rule-deleted", "alert-rule-updated", "alias", "alias-chown", "alias-delete", "alias-invite-created", "alias-invite-joined", "alias-invite-revoked", "alias-protection-bypass-created", "alias-protection-bypass-exception", "alias-protection-bypass-regenerated", "alias-protection-bypass-revoked", "alias-system", "alias-user-scoped-access-denied", "alias-user-scoped-access-granted", "alias-user-scoped-access-requested", "alias-user-scoped-access-revoked", "aliases-assigned", "attack-mode-disabled", "attack-mode-enabled", "audit-log-export-downloaded", "audit-log-export-requested", "authorize-git-deployment", "auto-expose-system-envs", "avatar", "billing-settings-updated", "bulk-redirects-settings-updated", "bulk-redirects-version-promoted", "bulk-redirects-version-restored", "cert", "cert-autorenew", "cert-chown", "cert-clone", "cert-delete", "cert-renew", "cert-replace", "cert-system-create", "code-owners-config-updated", "compliance-document-downloaded", "compliance-document-previewed", "compliance-documents-bulk-downloaded", "concurrent-builds-update", "connect-attach-project", "connect-bitbucket", "connect-bitbucket-app", "connect-configuration-created", "connect-configuration-deleted", "connect-configuration-link-updated", "connect-configuration-linked", "connect-configuration-unlinked", "connect-configuration-updated", "connect-create-connector", "connect-delete-connector", "connect-delete-installation", "connect-detach-project", "connect-github", "connect-github-custom-host", "connect-github-limited", "connect-gitlab", "connect-gitlab-app", "connect-import-tokens", "connect-revoke-all-tokens", "connect-update-connector", "connect-update-trigger-destinations", "connect-upsert-installation", "custom-alert-created", "custom-alert-deleted", "custom-alert-updated", "custom-environments-settings-updated", "custom-metric-metadata-deleted", "custom-metric-metadata-updated", "custom-suffix-clear", "custom-suffix-disable", "custom-suffix-enable", "custom-suffix-pending", "custom-suffix-ready", "deploy-hook-created", "deploy-hook-deduped", "deploy-hook-deleted", "deploy-hook-processed", "deployment", "deployment-check-created", "deployment-check-deleted", "deployment-check-updated", "deployment-chown", "deployment-creation-blocked", "deployment-delete", "deployment-policy-blocked", "deployment-undeleted", "disabled-integration-installation-removed", "disconnect-bitbucket-app", "disconnect-github", "disconnect-github-custom-host", "disconnect-github-limited", "disconnect-gitlab-app", "dns-add", "dns-delete", "dns-record-internal", "dns-update", "dns-zonefile-import", "domain", "domain-buy", "domain-cdn", "domain-chown", "domain-custom-ns-change", "domain-delegated", "domain-delete", "domain-ech-change", "domain-move-in", "domain-move-out", "domain-move-out-request-sent", "domain-renew-change", "domain-service-type-updated", "domain-transfer-in", "domain-transfer-in-canceled", "domain-transfer-in-completed", "domain-zone-change", "domain-zone-change-internal", "drain-created", "drain-deleted", "drain-disabled", "drain-enabled", "drain-updated", "edge-cache-dangerously-delete-by-src-images", "edge-cache-dangerously-delete-by-tags", "edge-cache-dangerously-delete-immutable-static", "edge-cache-invalidate-by-src-images", "edge-cache-invalidate-by-tags", "edge-cache-purge-all", "edge-cache-rollback-purge", "edge-config-backup-restored", "edge-config-created", "edge-config-deleted", "edge-config-items-updated", "edge-config-schema-deleted", "edge-config-schema-updated", "edge-config-token-created", "edge-config-token-deleted", "edge-config-transfer-in", "edge-config-transfer-out", "edge-config-updated", "email", "email-notification-rule-removed", "email-notification-rule-updated", "emu-member-removed-unverified-domain", "enforce-disjunctive-production-secrets", "enforce-sensitive-environment-variables", "env-variable-add", "env-variable-delete", "env-variable-edit", "env-variable-masked", "env-variable-read", "env-variable-read:cli:dev", "env-variable-read:cli:env:add", "env-variable-read:cli:env:ls", "env-variable-read:cli:env:pull", "env-variable-read:cli:env:rm", "env-variable-read:cli:pull", "env-variable-read:unknown-source", "env-variable-read:v0:env:pull", "env-variable-rotated", "experiment-created", "experiment-deleted", "experiment-transitioned", "experiment-updated", "firewall-bypass-created", "firewall-bypass-deleted", "firewall-config-modified", "firewall-config-promoted", "firewall-config-removed", "firewall-managed-rulegroup-updated", "firewall-managed-ruleset-updated", "flag", "flag-archived", "flag-created", "flag-deleted", "flag-unarchived", "flag-updated", "flags-explorer-subscription", "flags-sdk-key", "flags-sdk-key-added", "flags-sdk-key-deleted", "flags-sdk-key-read", "flags-segment", "flags-settings", "flags-transferred", "flat-rate-cdn-auto-upgrade-consent", "git-integration-repo-push", "git_account_integration_link_added", "global-config-backup-restored", "global-config-created", "global-config-deleted", "global-config-items-updated", "global-config-schema-deleted", "global-config-schema-updated", "global-config-token-created", "global-config-token-deleted", "global-config-transfer-in", "global-config-transfer-out", "global-config-updated", "instant-rollback-created", "integration-configuration-credential-revoked", "integration-configuration-credential-rotated", "integration-configuration-owner-changed", "integration-configuration-scope-change-confirmed", "integration-configuration-transfer-in-success", "integration-configuration-transfer-out-success", "integration-configurations-disabled", "integration-installation-billing-plan-updated", "integration-installation-completed", "integration-installation-permission-updated", "integration-installation-removed", "integration-resource-redis-command-executed", "integration-resource-sql-query-executed", "integration-scope-changed", "invoice-modified", "invoice-refunded", "kms-issuer-created", "kms-issuer-deleted", "kms-issuer-key-activated", "kms-issuer-key-created", "kms-issuer-key-revoked", "kms-issuer-key-rotated", "kms-issuer-policy-created", "kms-issuer-policy-deleted", "kms-issuer-policy-updated", "kms-issuer-updated", "log-drain-created", "log-drain-deleted", "log-drain-disabled", "log-drain-enabled", "login", "login-connection-linked", "login-connection-unlinked", "manual-deployment-promotion-created", "marketplace-flex-commit-opt-in", "marketplace-integration-allowlist-updated", "microfrontend-group-added", "microfrontend-group-deleted", "microfrontend-group-updated", "microfrontend-project-added-to-group", "microfrontend-project-removed-from-group", "microfrontend-project-updated", "monitoring-alert-updated", "monitoring-disabled", "monitoring-enabled", "oauth-app-connection-created", "oauth-app-connection-removed", "oauth-app-connection-updated", "oauth-app-created", "oauth-app-deleted", "oauth-app-secret-deleted", "oauth-app-secret-generated", "oauth-app-token-created", "oauth-app-updated", "observability-disabled", "observability-enabled", "observability-plus-project-disabled", "observability-plus-project-enabled", "oidc-policy-created", "oidc-policy-deleted", "oidc-policy-updated", "oidc-policy-used-to-obtain-app-token", "organization-create", "organization-delete", "organization-dsync-group-delete", "organization-dsync-group-upsert", "organization-emu-team-updated", "organization-emu-updated", "organization-slug-update", "organization-team-add", "organization-team-create", "organization-team-delete", "organization-team-sso-update", "owner-blocked", "owner-soft-blocked", "owner-soft-unblocked", "owner-unblocked", "page-integrity-config-updated", "page-integrity-header-approved", "page-integrity-header-rejected", "page-integrity-inventory-cleared", "page-integrity-resource-approved", "page-integrity-resource-deleted", "page-integrity-resource-rejected", "page-integrity-script-approval-rule-created", "page-integrity-script-approval-rule-deleted", "passkey-created", "passkey-deleted", "passkey-updated", "passport-access-granted", "password-protection-disabled", "password-protection-enabled", "payment-method-added", "payment-method-default-updated", "payment-method-removed", "plan", "preview-deployment-suffix-disabled", "preview-deployment-suffix-enabled", "preview-deployment-suffix-update", "privatelink-endpoint-created", "privatelink-endpoint-deleted", "privatelink-endpoint-updated", "production-branch-updated", "project-add-alias", "project-add-redirect", "project-affected-projects-deployments-updated", "project-alias-configured-change", "project-analytics-disabled", "project-analytics-enabled", "project-auto-assign-custom-production-domains-updated", "project-automation-bypass", "project-avatar-update", "project-build-command-updated", "project-build-logs-and-source-protection-updated", "project-build-machine-updated", "project-card-widget-preference-updated", "project-client-cert-delete", "project-client-cert-upload", "project-connect-configurations", "project-consolidated-git-commit-status-updated", "project-created", "project-cron-jobs-toggled", "project-custom-environment-created", "project-custom-environment-deleted", "project-custom-environment-schedules-default-updated", "project-custom-environment-updated", "project-customer-success-code-visibility-updated", "project-delete", "project-deployment-policy-updated", "project-deployment-retention-updated", "project-directory-listing", "project-domain-deleted", "project-domain-moved", "project-domain-unverified", "project-domain-updated", "project-domain-verified", "project-elastic-concurrency-updated", "project-expiration-locked", "project-expiration-reached", "project-expiration-scheduled", "project-expiration-unlocked", "project-external-rewrite-caching-updated", "project-framework-updated", "project-function-cpu-memory", "project-function-failover", "project-function-max-duration", "project-function-regions", "project-functions-beta-updated", "project-functions-fluid-disabled", "project-functions-fluid-enabled", "project-git-commit-comments-toggled", "project-git-commit-status-toggled", "project-git-create-deployments-toggled", "project-git-credential-bound-created", "project-git-credential-bound-deleted", "project-git-credential-bound-updated", "project-git-credential-grant-created", "project-git-credential-grant-deleted", "project-git-credential-grant-updated", "project-git-fork-protection-updated", "project-git-lfs-toggled", "project-git-pr-comments-toggled", "project-git-repository-connected", "project-git-repository-disconnected", "project-git-repository-dispatch-events-toggled", "project-git-require-verified-commits-toggled", "project-ignored-build-step-updated", "project-install-command-updated", "project-member-added", "project-member-invited", "project-member-removed", "project-member-removed-batch", "project-member-updated", "project-move-in-success", "project-move-out-failed", "project-move-out-started", "project-move-out-success", "project-name", "project-node-version-updated", "project-oidc-issuer-mode-updated", "project-oidc-token-created", "project-options-allowlist", "project-output-directory-updated", "project-passport-updated", "project-password-protection", "project-paused", "project-preview-deployment-suffix", "project-preview-environment-branch-tracking-updated", "project-prioritize-production-builds-updated", "project-program-enrollment-changed", "project-protected-sourcemaps-updated", "project-rollback-description-updated", "project-rolling-release-aborted", "project-rolling-release-approved", "project-rolling-release-completed", "project-rolling-release-configured", "project-rolling-release-continued", "project-rolling-release-disabled", "project-rolling-release-enabled", "project-rolling-release-paused", "project-rolling-release-started", "project-rolling-release-suggested-actions-generated", "project-rolling-release-timer", "project-root-directory-updated", "project-routes-version-promoted", "project-routes-version-restored", "project-sandbox-config-updated", "project-sandbox-url-protection-updated", "project-skew-protection-allowed-domains-updated", "project-skew-protection-max-age-updated", "project-skew-protection-threshold-updated", "project-source-files-outside-root-directory-updated", "project-speed-insights-disabled", "project-speed-insights-enabled", "project-speed-insights-free-data-started", "project-sso-protection", "project-static-ips-updated", "project-trusted-ips", "project-trusted-sources", "project-unpaused", "project-web-analytics-disabled", "project-web-analytics-enabled", "protected-git-scope-added", "protected-git-scope-removed", "repository-ci-env-variable-create", "repository-ci-env-variable-delete", "repository-ci-env-variable-update", "runtime-cache-purge-all", "saml-connection-created", "saml-connection-deleted", "sandbox-alias-assigned", "sandbox-alias-delete", "sandbox-drive-created", "sandbox-drive-deleted", "sandbox-signed-commit-identity-configured", "sandbox-snapshot-regions-updated", "scale", "scale-auto", "secondary-email-added", "secondary-email-removed", "secondary-email-verified", "secret-add", "secret-delete", "secret-rename", "security-list-created", "security-list-deleted", "security-list-updated", "security-plus-updated", "set-bio", "set-name", "set-profiles", "set-scale", "shared-env-variable-create", "shared-env-variable-delete", "shared-env-variable-read", "shared-env-variable-repo-link", "shared-env-variable-repo-unlink", "shared-env-variable-update", "show-ip-addresses", "signup", "signup-via-bitbucket", "signup-via-github", "signup-via-gitlab", "speed-insights-settings-updated", "spend-created", "spend-deleted", "spend-updated", "sso-login", "storage-accept-tos", "storage-access-token-set", "storage-accessed-data-browser", "storage-connect-project", "storage-create", "storage-delete", "storage-disconnect-project", "storage-disconnect-projects", "storage-inactive-store-deleted", "storage-reset-credentials", "storage-resource-repl-command", "storage-set-locked", "storage-transfer-in-success", "storage-transfer-out-success", "storage-transfer-request-created", "storage-update", "storage-update-project-connection", "storage-upgrade-project-connection-to-oidc", "storage-view-secret", "strict-connectors", "strict-deployment-protection-settings", "strict-password-protection-settings", "strict-shareable-links", "subscription-created", "subscription-product-added", "subscription-product-removed", "subscription-updated", "support-session-created", "team", "team-agent-billing-migration-decision-changed", "team-avatar-update", "team-collaboration-settings-updated", "team-default-build-machine-updated", "team-default-passport-updated", "team-delete", "team-deployment-policy-updated", "team-domain-verification-created", "team-domain-verification-deleted", "team-domain-verification-verified", "team-email-domain-update", "team-emu-updated", "team-ended-trial", "team-firewall-config-modified", "team-firewall-config-promoted", "team-git-repository-dispatch-events-toggled", "team-git-require-verified-commits-toggled", "team-invite-bulk-delete", "team-invite-code-reset", "team-invite-link-created", "team-invite-link-deleted", "team-ip-blocking-rules-created", "team-ip-blocking-rules-removed", "team-member-add", "team-member-confirm-request", "team-member-decline-request", "team-member-delete", "team-member-entitlement-added", "team-member-entitlement-canceled", "team-member-entitlement-reactivated", "team-member-entitlement-removed", "team-member-join", "team-member-leave", "team-member-request-access", "team-member-role-update", "team-member-sso-authorization-attempt", "team-mfa-enforcement-updated", "team-name-update", "team-paid-invoice", "team-program-enrollment-changed", "team-remote-caching-purge", "team-remote-caching-update", "team-saml-enforced", "team-saml-roles", "team-slug-update", "team-tokens-invalidated", "tracing-configured", "tracing-disabled", "tracing-paused", "tracing-resumed", "unlink-login-connection", "update-account-flow-dismissed", "update-account-flow-triggered", "user-auto-block-configured", "user-blocked", "user-delete", "user-delete-requested", "user-emu-account-archived", "user-emu-account-deleted", "user-emu-account-recovered", "user-emu-account-update-opted-in", "user-emu-account-update-opted-out", "user-emu-recovery-email-sent", "user-emu-recovery-initiated", "user-emu-toggled", "user-mfa-challenge-failed", "user-mfa-challenge-initiated", "user-mfa-challenge-verified", "user-mfa-change-failed", "user-mfa-configuration-updated", "user-mfa-recovery-code-used", "user-mfa-recovery-codes-regenerated", "user-mfa-removed", "user-mfa-setup-skipped", "user-mfa-totp-verification-started", "user-mfa-totp-verified", "user-phone-removed", "user-phone-updated", "user-primary-email-updated", "user-provider-email-claim-evaluated", "user-sudo-mode-removed", "user-token-created", "user-token-deleted", "user-tokens-deleted", "user-unblocked", "username", "v0-chat-ai-usage", "v0-chat-created", "v0-chat-message-sent", "vcr-image-deleted", "vcr-image-pushed", "vcr-repository-created", "vcr-repository-deleted", "vcr-repository-permission-added", "vcr-repository-permission-removed", "vcr-repository-permissions-cleared", "vcr-repository-visibility-changed", "vercel-agent-elevated-permissions-approved", "vercel-agent-elevated-permissions-requested", "vercel-agent-session-created", "vercel-agent-team-trial-credits-applied", "vercel-app-installation-request-dismissed", "vercel-app-installation-requested", "vercel-app-installation-updated", "vercel-app-installed", "vercel-app-tokens-revoked", "vercel-app-uninstalled", "vercel-toolbar", "vpc-peering-connection-accepted", "vpc-peering-connection-deleted", "vpc-peering-connection-rejected", "vpc-peering-connection-updated", "vulnerability-banner-dismissed", "web-analytics-tier-updated", "webhook-created", "webhook-deleted", "webhook-updated", "workflow-deployment-key-accessed" ], "description": "The name of the event type.", "example": "deployment-created" }, "replacedBy": { "items": { "type": "string", "enum": [ "access-group-created", "access-group-deleted", "access-group-project-updated", "access-group-updated", "access-group-user-added", "access-group-user-removed", "admin-agentic-provisioning-account-unlinked", "admin-plan-updated", "admin-secondary-email-added", "admin-secondary-email-removed", "admin-team-name-update", "admin-team-slug-update", "admin-user-delete", "admin-user-primary-email-updated", "admin-username-updated", "agentic-provisioning-account-blocked", "agentic-provisioning-account-linked", "agentic-provisioning-account-relinked", "agentic-provisioning-account-unlinked", "agentic-provisioning-credentials-rotated", "agentic-provisioning-plan-changed", "agentic-provisioning-team-created", "ai-alert-investigation", "ai-code-review", "ai-gateway-api-key-created", "ai-gateway-api-key-deleted", "ai-gateway-api-key-quota-updated", "ai-gateway-auto-reload-updated", "ai-gateway-budget-default-updated", "ai-gateway-byok-credential-created", "ai-gateway-byok-credential-deleted", "ai-gateway-byok-credential-updated", "ai-gateway-byok-model-mappings-updated", "ai-gateway-credits-purchased", "ai-gateway-guardrails-updated", "ai-gateway-hipaa-compliance-toggled", "ai-gateway-inference-regions-updated", "ai-gateway-model-allowlist-models-updated", "ai-gateway-model-allowlist-toggled", "ai-gateway-private-model-created", "ai-gateway-private-model-deleted", "ai-gateway-private-model-updated", "ai-gateway-private-provider-created", "ai-gateway-private-provider-deleted", "ai-gateway-private-provider-updated", "ai-gateway-prompt-training-opt-out-toggled", "ai-gateway-provider-allowlist-providers-updated", "ai-gateway-provider-allowlist-toggled", "ai-gateway-rule-created", "ai-gateway-rule-deleted", "ai-gateway-rule-updated", "ai-gateway-scope-budget-updated", "ai-gateway-transcripts-default-disabled", "ai-gateway-transcripts-default-enabled", "ai-gateway-transcripts-disabled", "ai-gateway-transcripts-enabled", "ai-gateway-transcripts-retention-updated", "ai-gateway-virtual-model-config-archived", "ai-gateway-virtual-model-config-created", "ai-gateway-virtual-model-config-deleted", "ai-gateway-virtual-model-config-restored", "ai-gateway-virtual-model-config-updated", "ai-gateway-zero-data-retention-toggled", "ai-omniagent", "alert-investigation-project-allowlist-updated", "alert-rule-created", "alert-rule-deleted", "alert-rule-updated", "alias", "alias-chown", "alias-delete", "alias-invite-created", "alias-invite-joined", "alias-invite-revoked", "alias-protection-bypass-created", "alias-protection-bypass-exception", "alias-protection-bypass-regenerated", "alias-protection-bypass-revoked", "alias-system", "alias-user-scoped-access-denied", "alias-user-scoped-access-granted", "alias-user-scoped-access-requested", "alias-user-scoped-access-revoked", "aliases-assigned", "attack-mode-disabled", "attack-mode-enabled", "audit-log-export-downloaded", "audit-log-export-requested", "authorize-git-deployment", "auto-expose-system-envs", "avatar", "billing-settings-updated", "bulk-redirects-settings-updated", "bulk-redirects-version-promoted", "bulk-redirects-version-restored", "cert", "cert-autorenew", "cert-chown", "cert-clone", "cert-delete", "cert-renew", "cert-replace", "cert-system-create", "code-owners-config-updated", "compliance-document-downloaded", "compliance-document-previewed", "compliance-documents-bulk-downloaded", "concurrent-builds-update", "connect-attach-project", "connect-bitbucket", "connect-bitbucket-app", "connect-configuration-created", "connect-configuration-deleted", "connect-configuration-link-updated", "connect-configuration-linked", "connect-configuration-unlinked", "connect-configuration-updated", "connect-create-connector", "connect-delete-connector", "connect-delete-installation", "connect-detach-project", "connect-github", "connect-github-custom-host", "connect-github-limited", "connect-gitlab", "connect-gitlab-app", "connect-import-tokens", "connect-revoke-all-tokens", "connect-update-connector", "connect-update-trigger-destinations", "connect-upsert-installation", "custom-alert-created", "custom-alert-deleted", "custom-alert-updated", "custom-environments-settings-updated", "custom-metric-metadata-deleted", "custom-metric-metadata-updated", "custom-suffix-clear", "custom-suffix-disable", "custom-suffix-enable", "custom-suffix-pending", "custom-suffix-ready", "deploy-hook-created", "deploy-hook-deduped", "deploy-hook-deleted", "deploy-hook-processed", "deployment", "deployment-check-created", "deployment-check-deleted", "deployment-check-updated", "deployment-chown", "deployment-creation-blocked", "deployment-delete", "deployment-policy-blocked", "deployment-undeleted", "disabled-integration-installation-removed", "disconnect-bitbucket-app", "disconnect-github", "disconnect-github-custom-host", "disconnect-github-limited", "disconnect-gitlab-app", "dns-add", "dns-delete", "dns-record-internal", "dns-update", "dns-zonefile-import", "domain", "domain-buy", "domain-cdn", "domain-chown", "domain-custom-ns-change", "domain-delegated", "domain-delete", "domain-ech-change", "domain-move-in", "domain-move-out", "domain-move-out-request-sent", "domain-renew-change", "domain-service-type-updated", "domain-transfer-in", "domain-transfer-in-canceled", "domain-transfer-in-completed", "domain-zone-change", "domain-zone-change-internal", "drain-created", "drain-deleted", "drain-disabled", "drain-enabled", "drain-updated", "edge-cache-dangerously-delete-by-src-images", "edge-cache-dangerously-delete-by-tags", "edge-cache-dangerously-delete-immutable-static", "edge-cache-invalidate-by-src-images", "edge-cache-invalidate-by-tags", "edge-cache-purge-all", "edge-cache-rollback-purge", "edge-config-backup-restored", "edge-config-created", "edge-config-deleted", "edge-config-items-updated", "edge-config-schema-deleted", "edge-config-schema-updated", "edge-config-token-created", "edge-config-token-deleted", "edge-config-transfer-in", "edge-config-transfer-out", "edge-config-updated", "email", "email-notification-rule-removed", "email-notification-rule-updated", "emu-member-removed-unverified-domain", "enforce-disjunctive-production-secrets", "enforce-sensitive-environment-variables", "env-variable-add", "env-variable-delete", "env-variable-edit", "env-variable-masked", "env-variable-read", "env-variable-read:cli:dev", "env-variable-read:cli:env:add", "env-variable-read:cli:env:ls", "env-variable-read:cli:env:pull", "env-variable-read:cli:env:rm", "env-variable-read:cli:pull", "env-variable-read:unknown-source", "env-variable-read:v0:env:pull", "env-variable-rotated", "experiment-created", "experiment-deleted", "experiment-transitioned", "experiment-updated", "firewall-bypass-created", "firewall-bypass-deleted", "firewall-config-modified", "firewall-config-promoted", "firewall-config-removed", "firewall-managed-rulegroup-updated", "firewall-managed-ruleset-updated", "flag", "flag-archived", "flag-created", "flag-deleted", "flag-unarchived", "flag-updated", "flags-explorer-subscription", "flags-sdk-key", "flags-sdk-key-added", "flags-sdk-key-deleted", "flags-sdk-key-read", "flags-segment", "flags-settings", "flags-transferred", "flat-rate-cdn-auto-upgrade-consent", "git-integration-repo-push", "git_account_integration_link_added", "global-config-backup-restored", "global-config-created", "global-config-deleted", "global-config-items-updated", "global-config-schema-deleted", "global-config-schema-updated", "global-config-token-created", "global-config-token-deleted", "global-config-transfer-in", "global-config-transfer-out", "global-config-updated", "instant-rollback-created", "integration-configuration-credential-revoked", "integration-configuration-credential-rotated", "integration-configuration-owner-changed", "integration-configuration-scope-change-confirmed", "integration-configuration-transfer-in-success", "integration-configuration-transfer-out-success", "integration-configurations-disabled", "integration-installation-billing-plan-updated", "integration-installation-completed", "integration-installation-permission-updated", "integration-installation-removed", "integration-resource-redis-command-executed", "integration-resource-sql-query-executed", "integration-scope-changed", "invoice-modified", "invoice-refunded", "kms-issuer-created", "kms-issuer-deleted", "kms-issuer-key-activated", "kms-issuer-key-created", "kms-issuer-key-revoked", "kms-issuer-key-rotated", "kms-issuer-policy-created", "kms-issuer-policy-deleted", "kms-issuer-policy-updated", "kms-issuer-updated", "log-drain-created", "log-drain-deleted", "log-drain-disabled", "log-drain-enabled", "login", "login-connection-linked", "login-connection-unlinked", "manual-deployment-promotion-created", "marketplace-flex-commit-opt-in", "marketplace-integration-allowlist-updated", "microfrontend-group-added", "microfrontend-group-deleted", "microfrontend-group-updated", "microfrontend-project-added-to-group", "microfrontend-project-removed-from-group", "microfrontend-project-updated", "monitoring-alert-updated", "monitoring-disabled", "monitoring-enabled", "oauth-app-connection-created", "oauth-app-connection-removed", "oauth-app-connection-updated", "oauth-app-created", "oauth-app-deleted", "oauth-app-secret-deleted", "oauth-app-secret-generated", "oauth-app-token-created", "oauth-app-updated", "observability-disabled", "observability-enabled", "observability-plus-project-disabled", "observability-plus-project-enabled", "oidc-policy-created", "oidc-policy-deleted", "oidc-policy-updated", "oidc-policy-used-to-obtain-app-token", "organization-create", "organization-delete", "organization-dsync-group-delete", "organization-dsync-group-upsert", "organization-emu-team-updated", "organization-emu-updated", "organization-slug-update", "organization-team-add", "organization-team-create", "organization-team-delete", "organization-team-sso-update", "owner-blocked", "owner-soft-blocked", "owner-soft-unblocked", "owner-unblocked", "page-integrity-config-updated", "page-integrity-header-approved", "page-integrity-header-rejected", "page-integrity-inventory-cleared", "page-integrity-resource-approved", "page-integrity-resource-deleted", "page-integrity-resource-rejected", "page-integrity-script-approval-rule-created", "page-integrity-script-approval-rule-deleted", "passkey-created", "passkey-deleted", "passkey-updated", "passport-access-granted", "password-protection-disabled", "password-protection-enabled", "payment-method-added", "payment-method-default-updated", "payment-method-removed", "plan", "preview-deployment-suffix-disabled", "preview-deployment-suffix-enabled", "preview-deployment-suffix-update", "privatelink-endpoint-created", "privatelink-endpoint-deleted", "privatelink-endpoint-updated", "production-branch-updated", "project-add-alias", "project-add-redirect", "project-affected-projects-deployments-updated", "project-alias-configured-change", "project-analytics-disabled", "project-analytics-enabled", "project-auto-assign-custom-production-domains-updated", "project-automation-bypass", "project-avatar-update", "project-build-command-updated", "project-build-logs-and-source-protection-updated", "project-build-machine-updated", "project-card-widget-preference-updated", "project-client-cert-delete", "project-client-cert-upload", "project-connect-configurations", "project-consolidated-git-commit-status-updated", "project-created", "project-cron-jobs-toggled", "project-custom-environment-created", "project-custom-environment-deleted", "project-custom-environment-schedules-default-updated", "project-custom-environment-updated", "project-customer-success-code-visibility-updated", "project-delete", "project-deployment-policy-updated", "project-deployment-retention-updated", "project-directory-listing", "project-domain-deleted", "project-domain-moved", "project-domain-unverified", "project-domain-updated", "project-domain-verified", "project-elastic-concurrency-updated", "project-expiration-locked", "project-expiration-reached", "project-expiration-scheduled", "project-expiration-unlocked", "project-external-rewrite-caching-updated", "project-framework-updated", "project-function-cpu-memory", "project-function-failover", "project-function-max-duration", "project-function-regions", "project-functions-beta-updated", "project-functions-fluid-disabled", "project-functions-fluid-enabled", "project-git-commit-comments-toggled", "project-git-commit-status-toggled", "project-git-create-deployments-toggled", "project-git-credential-bound-created", "project-git-credential-bound-deleted", "project-git-credential-bound-updated", "project-git-credential-grant-created", "project-git-credential-grant-deleted", "project-git-credential-grant-updated", "project-git-fork-protection-updated", "project-git-lfs-toggled", "project-git-pr-comments-toggled", "project-git-repository-connected", "project-git-repository-disconnected", "project-git-repository-dispatch-events-toggled", "project-git-require-verified-commits-toggled", "project-ignored-build-step-updated", "project-install-command-updated", "project-member-added", "project-member-invited", "project-member-removed", "project-member-removed-batch", "project-member-updated", "project-move-in-success", "project-move-out-failed", "project-move-out-started", "project-move-out-success", "project-name", "project-node-version-updated", "project-oidc-issuer-mode-updated", "project-oidc-token-created", "project-options-allowlist", "project-output-directory-updated", "project-passport-updated", "project-password-protection", "project-paused", "project-preview-deployment-suffix", "project-preview-environment-branch-tracking-updated", "project-prioritize-production-builds-updated", "project-program-enrollment-changed", "project-protected-sourcemaps-updated", "project-rollback-description-updated", "project-rolling-release-aborted", "project-rolling-release-approved", "project-rolling-release-completed", "project-rolling-release-configured", "project-rolling-release-continued", "project-rolling-release-disabled", "project-rolling-release-enabled", "project-rolling-release-paused", "project-rolling-release-started", "project-rolling-release-suggested-actions-generated", "project-rolling-release-timer", "project-root-directory-updated", "project-routes-version-promoted", "project-routes-version-restored", "project-sandbox-config-updated", "project-sandbox-url-protection-updated", "project-skew-protection-allowed-domains-updated", "project-skew-protection-max-age-updated", "project-skew-protection-threshold-updated", "project-source-files-outside-root-directory-updated", "project-speed-insights-disabled", "project-speed-insights-enabled", "project-speed-insights-free-data-started", "project-sso-protection", "project-static-ips-updated", "project-trusted-ips", "project-trusted-sources", "project-unpaused", "project-web-analytics-disabled", "project-web-analytics-enabled", "protected-git-scope-added", "protected-git-scope-removed", "repository-ci-env-variable-create", "repository-ci-env-variable-delete", "repository-ci-env-variable-update", "runtime-cache-purge-all", "saml-connection-created", "saml-connection-deleted", "sandbox-alias-assigned", "sandbox-alias-delete", "sandbox-drive-created", "sandbox-drive-deleted", "sandbox-signed-commit-identity-configured", "sandbox-snapshot-regions-updated", "scale", "scale-auto", "secondary-email-added", "secondary-email-removed", "secondary-email-verified", "secret-add", "secret-delete", "secret-rename", "security-list-created", "security-list-deleted", "security-list-updated", "security-plus-updated", "set-bio", "set-name", "set-profiles", "set-scale", "shared-env-variable-create", "shared-env-variable-delete", "shared-env-variable-read", "shared-env-variable-repo-link", "shared-env-variable-repo-unlink", "shared-env-variable-update", "show-ip-addresses", "signup", "signup-via-bitbucket", "signup-via-github", "signup-via-gitlab", "speed-insights-settings-updated", "spend-created", "spend-deleted", "spend-updated", "sso-login", "storage-accept-tos", "storage-access-token-set", "storage-accessed-data-browser", "storage-connect-project", "storage-create", "storage-delete", "storage-disconnect-project", "storage-disconnect-projects", "storage-inactive-store-deleted", "storage-reset-credentials", "storage-resource-repl-command", "storage-set-locked", "storage-transfer-in-success", "storage-transfer-out-success", "storage-transfer-request-created", "storage-update", "storage-update-project-connection", "storage-upgrade-project-connection-to-oidc", "storage-view-secret", "strict-connectors", "strict-deployment-protection-settings", "strict-password-protection-settings", "strict-shareable-links", "subscription-created", "subscription-product-added", "subscription-product-removed", "subscription-updated", "support-session-created", "team", "team-agent-billing-migration-decision-changed", "team-avatar-update", "team-collaboration-settings-updated", "team-default-build-machine-updated", "team-default-passport-updated", "team-delete", "team-deployment-policy-updated", "team-domain-verification-created", "team-domain-verification-deleted", "team-domain-verification-verified", "team-email-domain-update", "team-emu-updated", "team-ended-trial", "team-firewall-config-modified", "team-firewall-config-promoted", "team-git-repository-dispatch-events-toggled", "team-git-require-verified-commits-toggled", "team-invite-bulk-delete", "team-invite-code-reset", "team-invite-link-created", "team-invite-link-deleted", "team-ip-blocking-rules-created", "team-ip-blocking-rules-removed", "team-member-add", "team-member-confirm-request", "team-member-decline-request", "team-member-delete", "team-member-entitlement-added", "team-member-entitlement-canceled", "team-member-entitlement-reactivated", "team-member-entitlement-removed", "team-member-join", "team-member-leave", "team-member-request-access", "team-member-role-update", "team-member-sso-authorization-attempt", "team-mfa-enforcement-updated", "team-name-update", "team-paid-invoice", "team-program-enrollment-changed", "team-remote-caching-purge", "team-remote-caching-update", "team-saml-enforced", "team-saml-roles", "team-slug-update", "team-tokens-invalidated", "tracing-configured", "tracing-disabled", "tracing-paused", "tracing-resumed", "unlink-login-connection", "update-account-flow-dismissed", "update-account-flow-triggered", "user-auto-block-configured", "user-blocked", "user-delete", "user-delete-requested", "user-emu-account-archived", "user-emu-account-deleted", "user-emu-account-recovered", "user-emu-account-update-opted-in", "user-emu-account-update-opted-out", "user-emu-recovery-email-sent", "user-emu-recovery-initiated", "user-emu-toggled", "user-mfa-challenge-failed", "user-mfa-challenge-initiated", "user-mfa-challenge-verified", "user-mfa-change-failed", "user-mfa-configuration-updated", "user-mfa-recovery-code-used", "user-mfa-recovery-codes-regenerated", "user-mfa-removed", "user-mfa-setup-skipped", "user-mfa-totp-verification-started", "user-mfa-totp-verified", "user-phone-removed", "user-phone-updated", "user-primary-email-updated", "user-provider-email-claim-evaluated", "user-sudo-mode-removed", "user-token-created", "user-token-deleted", "user-tokens-deleted", "user-unblocked", "username", "v0-chat-ai-usage", "v0-chat-created", "v0-chat-message-sent", "vcr-image-deleted", "vcr-image-pushed", "vcr-repository-created", "vcr-repository-deleted", "vcr-repository-permission-added", "vcr-repository-permission-removed", "vcr-repository-permissions-cleared", "vcr-repository-visibility-changed", "vercel-agent-elevated-permissions-approved", "vercel-agent-elevated-permissions-requested", "vercel-agent-session-created", "vercel-agent-team-trial-credits-applied", "vercel-app-installation-request-dismissed", "vercel-app-installation-requested", "vercel-app-installation-updated", "vercel-app-installed", "vercel-app-tokens-revoked", "vercel-app-uninstalled", "vercel-toolbar", "vpc-peering-connection-accepted", "vpc-peering-connection-deleted", "vpc-peering-connection-rejected", "vpc-peering-connection-updated", "vulnerability-banner-dismissed", "web-analytics-tier-updated", "webhook-created", "webhook-deleted", "webhook-updated", "workflow-deployment-key-accessed" ], "description": "Event type names that supersede this deprecated event type." }, "type": "array", "description": "Event type names that supersede this deprecated event type." } }, "required": [ "categories", "description", "name" ], "type": "object", "description": "A user-facing event type." }, "ListEventTypesResponse": { "properties": { "categories": { "items": { "properties": { "label": { "type": "string" }, "name": { "type": "string", "enum": [ "account", "ai", "ai-gateway", "billing", "connect", "deployment", "domain", "edge", "env-variable", "feature-flags", "firewall", "integration", "microfrontends", "network", "observability", "other", "project", "security", "storage", "team", "v0", "vercel-app", "workflow" ] } }, "required": [ "label", "name" ], "type": "object" }, "type": "array" }, "types": { "items": { "$ref": "#/components/schemas/ListEventType" }, "type": "array" } }, "required": [ "categories", "types" ], "type": "object", "description": "Response returned by the List Event Types endpoint." }, "Flag": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "description": { "type": "string" }, "environments": { "additionalProperties": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "fallthrough": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] }, "pausedOutcome": { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, "reuse": { "properties": { "active": { "type": "boolean", "enum": [ false, true ] }, "environment": { "type": "string" } }, "required": [ "active", "environment" ], "type": "object" }, "revision": { "type": "number" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "variant" ] }, "variantId": { "type": "string" } }, "required": [ "type", "variantId" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "type": { "type": "string", "enum": [ "split" ] }, "weights": { "additionalProperties": { "type": "number" }, "type": "object" } }, "required": [ "base", "defaultVariantId", "type", "weights" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "defaultVariantId": { "type": "string" }, "rollFromVariantId": { "type": "string" }, "rollToVariantId": { "type": "string" }, "slots": { "items": { "properties": { "durationMs": { "type": "number" }, "promille": { "type": "number" } }, "required": [ "durationMs", "promille" ], "type": "object" }, "type": "array" }, "startTimestamp": { "type": "number" }, "type": { "type": "string", "enum": [ "rollout" ] } }, "required": [ "base", "defaultVariantId", "rollFromVariantId", "rollToVariantId", "slots", "startTimestamp", "type" ], "type": "object" }, { "properties": { "type": { "type": "string", "enum": [ "experiment" ] } }, "required": [ "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" }, "targets": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "type": "object" } }, "required": [ "active", "fallthrough", "pausedOutcome", "rules" ], "type": "object" }, "type": "object" }, "id": { "type": "string" }, "kind": { "type": "string", "enum": [ "boolean", "json", "number", "string" ] }, "maintainerIds": { "items": { "type": "string" }, "type": "array" }, "ownerId": { "type": "string" }, "permanent": { "type": "boolean", "enum": [ false, true ] }, "projectId": { "type": "string" }, "revision": { "type": "number" }, "seed": { "type": "number" }, "slug": { "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "tags": { "items": { "type": "string" }, "type": "array" }, "typeName": { "type": "string", "enum": [ "flag" ] }, "updatedAt": { "type": "number" }, "updatedBy": { "type": "string" }, "variants": { "items": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "value": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" }, { "additionalProperties": true, "type": "object" }, { "items": {}, "type": "array" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "id", "value" ], "type": "object" }, "type": "array" }, "metadata": { "properties": { "creator": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "type": "object" } }, "required": [ "createdAt", "createdBy", "environments", "id", "kind", "ownerId", "projectId", "revision", "seed", "slug", "state", "typeName", "updatedAt", "variants" ], "type": "object" }, "MarketplaceFlag": { "properties": { "category": { "type": "string", "enum": [ "experiment", "flag" ] }, "createdAt": { "type": "number" }, "description": { "type": "string" }, "externalId": { "type": "string" }, "id": { "type": "string" }, "integrationConfigurationId": { "type": "string" }, "name": { "type": "string" }, "origin": { "type": "string" }, "ownerId": { "type": "string" }, "projectId": { "type": "string" }, "resourceId": { "type": "string" }, "slug": { "type": "string" }, "state": { "type": "string", "enum": [ "active", "archived" ] }, "typeName": { "type": "string", "enum": [ "marketplaceFlag" ] }, "updatedAt": { "type": "number" } }, "required": [ "externalId", "id", "integrationConfigurationId", "origin", "ownerId", "projectId", "resourceId", "slug", "state", "typeName" ], "type": "object" }, "Segment": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "data": { "properties": { "exclude": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "include": { "additionalProperties": { "additionalProperties": { "items": { "properties": { "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" }, "type": "array" }, "type": "object" }, "type": "object" }, "rules": { "items": { "properties": { "conditions": { "items": { "properties": { "cmp": { "type": "string", "enum": [ "!contains", "!endsWith", "!eq", "!ex", "!oneOf", "!regex", "!startsWith", "after", "before", "contains", "containsAllOf", "containsAnyOf", "containsNoneOf", "endsWith", "eq", "ex", "gt", "gte", "lt", "lte", "oneOf", "regex", "startsWith" ] }, "cmpOptions": { "properties": { "ignoreCase": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "lhs": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "segment" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" } ] }, "rhs": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "properties": { "items": { "items": { "oneOf": [ { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "number" } }, "required": [ "value" ], "type": "object" }, { "properties": { "label": { "type": "string" }, "note": { "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } ] }, "type": "array" }, "type": { "type": "string", "enum": [ "list", "list/inline" ] } }, "required": [ "items", "type" ], "type": "object" }, { "properties": { "flags": { "type": "string" }, "pattern": { "type": "string" }, "type": { "type": "string", "enum": [ "regex" ] } }, "required": [ "flags", "pattern", "type" ], "type": "object" }, { "type": "boolean", "enum": [ false, true ] } ] } }, "required": [ "cmp", "lhs" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "outcome": { "oneOf": [ { "properties": { "type": { "type": "string", "enum": [ "all" ] } }, "required": [ "type" ], "type": "object" }, { "properties": { "base": { "properties": { "attribute": { "type": "string" }, "kind": { "type": "string" }, "type": { "type": "string", "enum": [ "entity" ] } }, "required": [ "attribute", "kind", "type" ], "type": "object" }, "passPromille": { "type": "number" }, "type": { "type": "string", "enum": [ "split" ] } }, "required": [ "base", "passPromille", "type" ], "type": "object" } ] } }, "required": [ "conditions", "id", "outcome" ], "type": "object" }, "type": "array" } }, "type": "object" }, "description": { "type": "string" }, "hint": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "projectId": { "type": "string" }, "slug": { "type": "string" }, "typeName": { "type": "string", "enum": [ "segment" ] }, "updatedAt": { "type": "number" }, "usedByFlags": { "items": { "type": "string" }, "type": "array" }, "usedBySegments": { "items": { "type": "string" }, "type": "array" }, "metadata": { "properties": { "creator": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "type": "object" } }, "required": [ "createdAt", "data", "hint", "id", "label", "projectId", "slug", "typeName", "updatedAt" ], "type": "object" }, "FlagsSdkKeyWithSecrets": { "properties": { "createdAt": { "type": "number" }, "createdBy": { "type": "string" }, "deletedAt": { "type": "number" }, "environment": { "type": "string" }, "hashKey": { "type": "string" }, "label": { "type": "string" }, "partialKeyValue": { "type": "string", "description": "Partially-masked representation of the SDK key value, safe to display in UIs. The value is the `vf__` prefix followed by the first 3 characters of the secret portion and a fixed 8-character `*` mask (e.g. `vf_server_abc********`)." }, "projectId": { "type": "string" }, "type": { "type": "string", "enum": [ "client", "mobile", "server" ] }, "updatedAt": { "type": "number" }, "keyValue": { "type": "string", "description": "Cleartext value of the SDK key." }, "tokenValue": { "type": "string", "description": "Cleartext value of the Global Config token, when the project has a Global Config connection." } }, "required": [ "createdAt", "createdBy", "environment", "hashKey", "keyValue", "partialKeyValue", "projectId", "type", "updatedAt" ], "type": "object", "description": "Representation of a Flags SDK key returned by CREATE. Includes cleartext secrets (`keyValue`, `tokenValue`, `connectionString`) which are only ever disclosed once, on creation." }, "APIKey": { "description": "Information about the newly created API key.", "type": "object", "properties": { "id": { "description": "The unique identifier of the API key.", "example": "5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391", "type": "string" }, "name": { "description": "The human-readable name of the API key.", "example": "API Key for AI Gateway", "type": "string" }, "partialKey": { "description": "The last few characters of the API key string, for helping identify the API key.", "example": "t7V", "type": "string" }, "teamId": { "description": "The ID of the team that the API key grants access to.", "example": "team_123a6c5209bc3778245d011443644c8d27dc2c50", "type": "string" }, "purpose": { "description": "The API key's purpose, i.e. what resources it can be used with.", "example": "ai-gateway", "type": "string" }, "projectId": { "description": "The ID of the project that this API key grants access to.\n\nWhen this is unset, the API key grants access to all projects in the team.", "example": "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB", "type": "string", "nullable": true }, "expiresAt": { "description": "Timestamp (in milliseconds) of when the API key expires.", "example": 1632816536002, "type": "number", "nullable": true }, "activeAt": { "description": "Timestamp (in milliseconds) of when the API key was most recently used.", "example": 1632816536002, "type": "number" }, "createdAt": { "description": "Timestamp (in milliseconds) of when the API key was created.", "example": 1632816536002, "type": "number" }, "createdBy": { "description": "The ID of the user who created the API key.", "example": "ZspSRT4ljIEEmMHgoDwKWDei", "type": "string" }, "leakedAt": { "description": "Timestamp (in milliseconds) of when the API key was marked as leaked.", "example": 1632816536002, "type": "number", "nullable": true }, "leakedUrl": { "description": "URL where the API key was discovered as leaked.", "type": "string", "nullable": true }, "createdByAppId": { "description": "The ID of the app that created the API key, if any", "type": "string", "nullable": true }, "quota": { "$ref": "#/components/schemas/APIKeyQuota" }, "metadata": { "description": "Generic metadata attached to the API key.\n\nThe accepted shape depends on the key's `purpose` and is validated when the key is created. For `ai-gateway` keys this carries `environment` and `spendAttribution`.", "type": "object", "patternProperties": { "^(.*)$": {} } } }, "required": [ "id", "name", "partialKey", "teamId", "purpose", "projectId", "expiresAt", "activeAt", "createdAt", "createdBy", "leakedAt", "leakedUrl", "createdByAppId" ] }, "APIKeyQuota": { "description": "AI Gateway quota associated with an API key.", "type": "object", "properties": { "quotaEntityId": { "description": "The unique identifier for the quota.", "type": "string" }, "limitAmount": { "description": "The quota limit amount.", "type": "number" }, "currentSpend": { "description": "The current amount spent against the quota.", "type": "number" }, "currentByokSpend": { "description": "The current BYOK spend (tracked separately).", "type": "number" }, "includeByokInQuota": { "description": "Whether BYOK (Bring Your Own Key) spend counts against the quota.", "type": "boolean" }, "refreshPeriod": { "description": "How often the quota refreshes.", "anyOf": [ { "type": "string" }, { "type": "string" }, { "type": "string" }, { "type": "string" } ] }, "active": { "description": "Whether the quota is currently active.", "type": "boolean" }, "archived": { "description": "Whether the quota has been archived.", "type": "boolean" }, "alertThresholds": { "description": "Spend percentages (a subset of [50, 75, 100]) at which to send a spend alert. Empty or undefined disables alerts.", "type": "array", "items": { "type": "number" } }, "createdAt": { "description": "Timestamp (in milliseconds) of when the quota was created.", "type": "number" }, "updatedAt": { "description": "Timestamp (in milliseconds) of when the quota was last updated.", "type": "number" } }, "required": [ "quotaEntityId", "limitAmount", "currentSpend", "currentByokSpend", "includeByokInQuota", "refreshPeriod", "active", "archived", "createdAt", "updatedAt" ] }, "ACLAction": { "type": "string", "enum": [ "create", "delete", "list", "read", "update" ], "description": "Enum containing the actions that can be performed against a resource. Group operations are included." }, "NamedSandbox": { "properties": { "createdAt": { "type": "number", "description": "The time when the named sandbox was created, in milliseconds since the epoch.", "example": 1750344501629 }, "currentSessionId": { "type": "string", "description": "Current session ID the sandbox is pointing to." }, "currentSnapshotId": { "type": "string", "description": "Current snapshot ID that the named sandbox is pointing to." }, "cwd": { "type": "string", "description": "The working directory of the sandbox.", "example": "/vercel/sandbox" }, "expiresAt": { "type": "number", "description": "The time at which the currently running sandbox will time out, in milliseconds since the epoch. Only present while a session is running.", "example": 1750344801629 }, "failoverRegions": { "items": { "type": "string", "enum": [ "arn1", "bom1", "cdg1", "cle1", "cpt1", "dub1", "fra1", "gru1", "hkg1", "hnd1", "iad1", "icn1", "kix1", "lhr1", "pdx1", "sfo1", "sin1", "syd1", "yul1" ], "description": "The regions the sandbox fails over to. Empty when it does not fail over.", "example": [ "sfo1", "cle1" ] }, "type": "array", "description": "The regions the sandbox fails over to. Empty when it does not fail over.", "example": [ "sfo1", "cle1" ] }, "image": { "type": "string", "description": "Digest-pinned reference of the container image the sandbox was created from, when it was created from an image (\"{repository}@{manifestDigest}\").", "example": "my-repo@sha256:2c4e8f9a1b3d5e7f091a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708" }, "keepLastSnapshots": { "properties": { "count": { "type": "number", "description": "Number of most recent snapshots to keep.", "example": 5 }, "deleteEvicted": { "type": "boolean", "enum": [ false, true ], "description": "Whether to immediately delete evicted snapshots.", "example": true }, "expiration": { "type": "number", "description": "Expiration time in milliseconds for kept snapshots.", "example": 604800000 } }, "required": [ "count", "deleteEvicted" ], "type": "object", "description": "Keep-last snapshot configuration." }, "memory": { "type": "number", "description": "Memory allocated in MB.", "example": 1024 }, "mounts": { "additionalProperties": { "properties": { "drive": { "type": "string" }, "mode": { "type": "string", "enum": [ "read-only", "read-write", "snapshot" ] } }, "required": [ "drive" ], "type": "object", "description": "Key-value pairs of mount path and drive." }, "type": "object", "description": "Key-value pairs of mount path and drive." }, "name": { "type": "string", "description": "The unique identifier of the sandbox.", "example": "my-sandbox" }, "networkId": { "type": "string", "description": "The Connect network id for the target Secure Compute private network." }, "networkPolicy": { "properties": { "allowedCIDRs": { "items": { "type": "string" }, "type": "array" }, "allowedDomains": { "items": { "type": "string" }, "type": "array" }, "deniedCIDRs": { "items": { "type": "string" }, "type": "array" }, "mode": { "type": "string", "enum": [ "allow-all", "custom", "default-allow", "default-deny", "deny-all" ] }, "s3Key": { "type": "string" } }, "required": [ "mode" ], "type": "object", "description": "Network policy configuration." }, "persistent": { "type": "boolean", "enum": [ false, true ], "description": "Whether the sandbox persists its state across restarts via automatic snapshots.", "example": true }, "region": { "type": "string", "description": "The region the sandbox is pinned to: the region stored on the sandbox, otherwise the platform default. Where a running session actually landed is reported by `session.region`.", "example": "iad1" }, "runtime": { "type": "string", "description": "Runtime identifier.", "example": "node22" }, "snapshotExpiration": { "type": "number", "description": "Default snapshot expiration time in milliseconds. 0 means no expiration.", "example": 604800000 }, "status": { "type": "string", "enum": [ "running", "stopped", "stopping" ], "description": "The status of the current sandbox.", "example": "running" }, "statusUpdatedAt": { "type": "number", "description": "The time when the sandbox status was last updated, in milliseconds since the epoch.", "example": 1750344501629 }, "tags": { "additionalProperties": { "type": "string" }, "type": "object", "description": "Key-value tags attached to the named sandbox.", "example": { "team": "hive", "user": "bob" } }, "timeout": { "type": "number", "description": "Timeout in milliseconds.", "example": 300000 }, "totalActiveCpuDurationMs": { "type": "number", "description": "Cumulative active CPU duration in milliseconds across all sandbox runs.", "example": 5000 }, "totalDurationMs": { "type": "number", "description": "Cumulative wall-clock duration in milliseconds across all sandbox runs.", "example": 60000 }, "totalEgressBytes": { "type": "number", "description": "Cumulative egress bytes across all sandbox runs.", "example": 4096 }, "totalIngressBytes": { "type": "number", "description": "Cumulative ingress bytes across all sandbox runs.", "example": 2048 }, "updatedAt": { "type": "number", "description": "The time when the named sandbox was last updated, in milliseconds since the epoch.", "example": 1750344501629 }, "vcpus": { "type": "number", "description": "Number of virtual CPUs allocated.", "example": 2 } }, "required": [ "createdAt", "currentSessionId", "name", "persistent", "status", "statusUpdatedAt", "updatedAt" ], "type": "object", "description": "This object contains information related to a Vercel NamedSandbox." }, "SandboxPublicRoute": { "properties": { "port": { "type": "number", "description": "The user port number that the route is mapped to." }, "subdomain": { "type": "string", "description": "The subdomain assigned to this route." }, "system": { "type": "boolean", "enum": [ true ], "description": "Whether the route is reserved by the system (e.g. for internal use)." }, "url": { "type": "string", "description": "A public URL to access the corresponding port in the Sandbox." } }, "required": [ "port", "subdomain", "url" ], "type": "object", "description": "This object represents a public route in a Vercel Sandbox." }, "SandboxInjectionRule": { "properties": { "domain": { "type": "string", "description": "The domain (or pattern) that this injection rule applies to. Supports wildcards like *.vercel.com.", "example": "api.vercel.com" }, "headerNames": { "items": { "type": "string" }, "type": "array", "description": "The names of HTTP headers that have value that will be injected for requests to this domain.", "example": [ "Authorization", "X-API-Key" ] } }, "required": [ "domain" ], "type": "object", "description": "HTTP header injection rules for outgoing requests matching specific domains." }, "SandboxNetworkPolicy": { "properties": { "allowedCIDRs": { "items": { "type": "string" }, "type": "array", "description": "List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to.", "example": [ "10.0.0.0/8" ] }, "allowedDomains": { "items": { "type": "string" }, "type": "array", "description": "List of domain names the sandbox is allowed to connect to. Supports wildcard patterns (e.g., \"*.vercel.com\" matches all subdomains).", "example": [ "api.vercel.com", "*.example.com" ] }, "deniedCIDRs": { "items": { "type": "string" }, "type": "array", "description": "List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.", "example": [ "10.0.0.0/8" ] }, "injectionRules": { "items": { "$ref": "#/components/schemas/SandboxInjectionRule" }, "type": "array", "description": "HTTP header injection rules for outgoing requests matching specific domains." }, "mode": { "type": "string", "enum": [ "allow-all", "custom", "deny-all" ], "description": "The network policy mode. - 'allow-all': All traffic is allowed. - 'deny-all': All traffic is blocked. - 'custom': Traffic is controlled by explicit allow/deny rules.", "example": "custom" } }, "required": [ "mode" ], "type": "object", "description": "The network policy applied to this sandbox, if any." }, "Session": { "properties": { "abortedAt": { "type": "number", "description": "The time when the sandbox was aborted, in milliseconds since the epoch.", "example": 1750344501629 }, "activeCpuDurationMs": { "type": "number", "description": "The amount of CPU time the sandbox consumed, if available, in milliseconds. This value is only available once the sandbox is stopped, and only if it stopped successfully.", "example": 42 }, "createdAt": { "type": "number", "description": "The time when the sandbox was created, in milliseconds since the epoch.", "example": 1750344501629 }, "cwd": { "type": "string", "description": "The working directory of the sandbox.", "example": "/vercel/sandbox" }, "duration": { "type": "number", "description": "The duration of the sandbox in milliseconds.", "example": 3600000 }, "id": { "type": "string", "description": "The unique identifier of the sandbox.", "example": "sbx_123a6c5209bc3778245d011443644c8d27dc2c50" }, "memory": { "type": "number", "description": "Memory allocated to this sandbox in MB.", "example": 2048 }, "networkPolicy": { "$ref": "#/components/schemas/SandboxNetworkPolicy" }, "networkTransfer": { "properties": { "egress": { "type": "number" }, "ingress": { "type": "number" } }, "required": [ "egress", "ingress" ], "type": "object", "description": "The quantity of data transfered to and from the sandbox, in bytes. This value is only available once the sandbox is stopped, and only if it stopped successfully.", "example": { "in": 12543852, "out": 15368 } }, "projectId": { "type": "string", "description": "The unique identifier of the project associated with this session.", "example": "prj_123a6c5209bc3778245d011443644c8d27dc2c50" }, "region": { "type": "string", "description": "The region where the sandbox is hosted.", "example": "iad1" }, "requestedAt": { "type": "number", "description": "The time when the sandbox was requested, in milliseconds since the epoch.", "example": 1750344501629 }, "requestedStopAt": { "type": "number", "description": "The time when the sandbox was requested to stop, in milliseconds since the epoch.", "example": 1750344501629 }, "runtime": { "type": "string", "description": "The runtime of the sandbox.", "example": "node22" }, "snapshottedAt": { "type": "number", "description": "The time when a snapshot was requested, in milliseconds since the epoch.", "example": 1750344501629 }, "sourceSandboxName": { "type": "string", "description": "The name of the source sandbox.", "example": "my-sandbox" }, "sourceSnapshotId": { "type": "string", "description": "The unique identifier of the snapshot associated with this sandbox, if any.", "example": "snap_123a6c5209bc3778245d011443644c8d27dc2c50" }, "startedAt": { "type": "number", "description": "The time when the sandbox was started, in milliseconds since the epoch.", "example": 1750344501629 }, "status": { "type": "string", "enum": [ "aborted", "failed", "pending", "running", "snapshotting", "stopped", "stopping" ], "description": "The status of the sandbox.", "example": "running" }, "stoppedAt": { "type": "number", "description": "The time when the sandbox was stopped, in milliseconds since the epoch.", "example": 1750344501629 }, "timeout": { "type": "number", "description": "The maximum amount of time the sandbox will run for in milliseconds.", "example": 3600000 }, "updatedAt": { "type": "number", "description": "The last time the sandbox was updated, in milliseconds since the epoch.", "example": 1750344501629 }, "vcpus": { "type": "number", "description": "Number of vCPUs allocated to this sandbox.", "example": 2 } }, "required": [ "createdAt", "cwd", "id", "memory", "projectId", "region", "requestedAt", "runtime", "sourceSandboxName", "status", "timeout", "updatedAt", "vcpus" ], "type": "object", "description": "This object contains information related to a Vercel Sandbox Session. v2 endpoints return \"session\" instead of \"sandbox\" as the response wrapper key." }, "Drive": { "properties": { "createdAt": { "type": "number", "description": "The time when the drive was created, in milliseconds since the epoch.", "example": 1750344501629 }, "currentSandboxName": { "type": "string", "description": "Current sandbox name the drive is attached to, if any.", "example": "my-sandbox" }, "currentSessionId": { "type": "string", "description": "Current session ID the drive is attached to, if any.", "example": "sbx_123" }, "id": { "type": "string", "description": "The unique drive ID.", "example": "drive_abc123" }, "maxSizeBytes": { "type": "number", "description": "The maximum drive size in bytes.", "example": 1099511627776 }, "name": { "type": "string", "description": "The unique drive name within the project.", "example": "workspace" }, "projectId": { "type": "string", "description": "The project that owns the drive.", "example": "prj_abc123" }, "region": { "type": "string", "description": "The region where the drive is stored.", "example": "iad1" }, "updatedAt": { "type": "number", "description": "The last time the drive was updated, in milliseconds since the epoch.", "example": 1750344501629 } }, "required": [ "createdAt", "id", "maxSizeBytes", "name", "projectId", "region", "updatedAt" ], "type": "object", "description": "This object contains information related to a Vercel Sandbox Drive." }, "Snapshot": { "properties": { "createdAt": { "type": "number", "description": "The time when the snapshot was created, in milliseconds since the epoch.", "example": 1750344501629 }, "creationMethod": { "type": "string", "enum": [ "automatic", "manual" ], "description": "The method used to create the snapshot.", "example": "manual" }, "expiresAt": { "type": "number", "description": "The time when the snapshot will expire, in milliseconds since the epoch. If not set, the snapshot does not have any expiration.", "example": 1750344501629 }, "id": { "type": "string", "description": "The unique identifier of the snapshot.", "example": "snap_123a6c5209bc3778245d011443644c8d27dc2c50" }, "lastUsedAt": { "type": "number", "description": "The last time the snapshot was used (e.g. to resume or create a sandbox), in milliseconds since the epoch. Falls back to `createdAt` for older snapshots that predate this field.", "example": 1750344501629 }, "parentId": { "type": "string", "description": "The unique identifier of the parent snapshot, if this snapshot was created from another snapshot.", "example": "snap_parent123" }, "region": { "type": "string", "description": "The region where the snapshot is stored.", "example": "iad1" }, "regions": { "items": { "type": "string" }, "type": "array", "description": "The regions where the snapshot is available.", "example": [ "iad1", "sfo1" ] }, "sizeBytes": { "type": "number", "description": "The size of the snapshot in bytes.", "example": 104857600 }, "sourceSessionId": { "type": "string", "description": "The unique identifier of the session from which the snapshot was created.", "example": "sbx_123a6c5209bc3778245d011443644c8d27dc2c50" }, "status": { "type": "string", "enum": [ "created", "deleted", "failed" ], "description": "The status of the snapshot.", "example": "created" }, "updatedAt": { "type": "number", "description": "The last time the snapshot was updated, in milliseconds since the epoch.", "example": 1750344501629 } }, "required": [ "createdAt", "id", "lastUsedAt", "sizeBytes", "sourceSessionId", "status", "updatedAt" ], "type": "object", "description": "This object contains information related to a Snapshot of a Vercel Sandbox session (v2 API)." }, "SessionCommand": { "properties": { "args": { "items": { "type": "string" }, "type": "array", "description": "The arguments of the command.", "example": [ "run", "build" ] }, "cwd": { "type": "string", "description": "The current working directory of the command.", "example": "/vercel/sandbox" }, "durationMs": { "type": "number", "description": "Duration of the command execution in milliseconds.", "example": 1234 }, "exitCode": { "nullable": true, "type": "number", "description": "If the command did finish, the exit code.", "example": 0 }, "id": { "type": "string", "description": "The ID of the command.", "example": "cmd_123a6c5209bc3778245d011443644c8d27dc2c50" }, "name": { "type": "string", "description": "The name of the command.", "example": "npm" }, "sessionId": { "type": "string", "description": "The ID of the session associated with the command.", "example": "sbx_123a6c5209bc3778245d011443644c8d27dc2c50" }, "startedAt": { "type": "number", "description": "When the command was started, in milliseconds since the epoch.", "example": 1673123456789 } }, "required": [ "args", "cwd", "exitCode", "id", "name", "sessionId", "startedAt" ], "type": "object", "description": "This object represents a command run in a Vercel Sandbox session (v2 API)." }, "InvitedTeamMember": { "properties": { "email": { "type": "string", "description": "The email of the invited user.", "example": "john@user.co" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ], "description": "The role used for the invitation", "example": "MEMBER" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ], "description": "The team permissions of the user", "example": [ "CreateProject" ] }, "type": "array", "description": "The team permissions of the user", "example": [ "CreateProject" ] }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ], "description": "The team roles of the user", "example": [ "MEMBER" ] }, "type": "array", "description": "The team roles of the user", "example": [ "MEMBER" ] }, "uid": { "type": "string", "description": "The ID of the invited user", "example": "kr1PsOIzqEL5Xg6M4VZcZosf" }, "username": { "type": "string", "description": "The username of the invited user", "example": "john-doe" } }, "required": [ "email", "role", "uid", "username" ], "type": "object", "description": "The member was successfully added to the team." }, "Team": { "properties": { "apiKeysInvalidatedAt": { "type": "number", "description": "Timestamp (ms) after which API keys created at or before this time are considered invalid for this team." }, "appTokensInvalidatedAt": { "type": "number", "description": "Timestamp (ms) after which Vercel App tokens created at or before this time are considered invalid for this team." }, "avatar": { "nullable": true, "type": "string", "description": "The ID of the file used as avatar for this Team.", "example": "6eb07268bcfadd309905ffb1579354084c24655c" }, "billing": { "nullable": true, "properties": { "plan": { "type": "string", "enum": [ "enterprise", "hobby", "pro" ] } }, "required": [ "plan" ], "type": "object", "description": "The team's billing plan." }, "connect": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "createdAt": { "type": "number", "description": "UNIX timestamp (in milliseconds) when the Team was created.", "example": 1630748523395 }, "creatorId": { "type": "string", "description": "The ID of the user who created the Team.", "example": "R6efeCJQ2HKXywuasPDc0fOWB" }, "defaultDeploymentProtection": { "properties": { "passwordProtection": { "nullable": true, "properties": { "deploymentType": { "type": "string" } }, "required": [ "deploymentType" ], "type": "object" }, "ssoProtection": { "nullable": true, "properties": { "deploymentType": { "type": "string" } }, "required": [ "deploymentType" ], "type": "object" } }, "type": "object", "description": "Default deployment protection for this team null indicates protection is disabled" }, "defaultExpirationSettings": { "properties": { "deploymentsToKeep": { "type": "number", "description": "Minimum number of production deployments to keep for this project, even if they are over the production expiration limit." }, "expirationDays": { "type": "number", "description": "Number of days to keep non-production deployments (mostly preview deployments) before soft deletion." }, "expirationDaysCanceled": { "type": "number", "description": "Number of days to keep canceled deployments before soft deletion." }, "expirationDaysErrored": { "type": "number", "description": "Number of days to keep errored deployments before soft deletion." }, "expirationDaysProduction": { "type": "number", "description": "Number of days to keep production deployments before soft deletion." } }, "type": "object", "description": "Default deployment expiration settings for this team" }, "defaultPassport": { "nullable": true, "properties": { "connectorId": { "type": "string", "description": "Default Passport configuration for new projects in this team." }, "deploymentType": { "type": "string", "enum": [ "all", "all_except_custom_domains", "preview", "prod_deployment_urls_and_all_previews" ], "description": "Default Passport configuration for new projects in this team." } }, "required": [ "connectorId", "deploymentType" ], "type": "object", "description": "Default Passport configuration for new projects in this team." }, "defaultProjectJobs": { "properties": { "lint": { "properties": { "targets": { "items": { "type": "string" }, "type": "array", "description": "Default job configuration applied to new projects created in this team." } }, "required": [ "targets" ], "type": "object", "description": "Default job configuration applied to new projects created in this team." }, "mfe-config-present": { "properties": { "targets": { "items": { "type": "string" }, "type": "array", "description": "Default job configuration applied to new projects created in this team." } }, "required": [ "targets" ], "type": "object", "description": "Default job configuration applied to new projects created in this team." }, "typecheck": { "properties": { "targets": { "items": { "type": "string" }, "type": "array", "description": "Default job configuration applied to new projects created in this team." } }, "required": [ "targets" ], "type": "object", "description": "Default job configuration applied to new projects created in this team." } }, "type": "object", "description": "Default job configuration applied to new projects created in this team." }, "defaultRoles": { "properties": { "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" } }, "type": "object", "description": "Default roles for the team." }, "deploymentPolicy": { "properties": { "deploymentSources": { "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "type": "string", "enum": [ "cli", "deploy-hook", "git", "integration", "rest-api", "v0" ], "description": "Customer-configurable deployment sources. Every deploy classifies to exactly one. JSON schema in `packages/deployment-policy/schemas/body.ts` enumerates exactly these values. - `'git'` — git provider webhook. - `'cli'` — Vercel CLI (legacy classic-token CLI and SIWV CLI both). - `'rest-api'` — direct user/team-token REST upload. Does NOT cover deploy hooks, Marketplace integrations, or first-party app tokens. - `'deploy-hook'` — project deploy-hook URL. The URL is the credential. - `'integration'` — third-party Marketplace actor: Marketplace integration token, user-delegated OAuth from a Marketplace app, or an unrecognized third-party Vercel App. First-party Vercel Apps are never `'integration'`. - `'v0'` — the v0 product surface (entitlement-gated). v0 deploys through the CLI under the hood, but classifies as its own source so a team can allow or deny v0 independently of `'cli'`. First-party Vercel apps (Toolbar, etc.) classify as `'first-party'` — see `ClassifiedSource` in `./checks`. They're not in this union because they aren't customer-configurable; they bypass `checkDeploymentSources` entirely. v0 is intentionally NOT among them: like the CLI, it's a real product surface and is policy-controllable." }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" }, "gitSources": { "items": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "environments": { "items": { "oneOf": [ { "properties": { "target": { "type": "string", "enum": [ "preview", "production" ] }, "type": { "type": "string", "enum": [ "system" ] } }, "required": [ "target", "type" ], "type": "object" }, { "properties": { "environmentId": { "type": "string" }, "type": { "type": "string", "enum": [ "custom" ] } }, "required": [ "environmentId", "type" ], "type": "object" } ] }, "type": "array" }, "sources": { "items": { "oneOf": [ { "properties": { "org": { "type": "string" }, "provider": { "type": "string", "enum": [ "bitbucket", "github" ] }, "repo": { "type": "string" } }, "required": [ "org", "provider" ], "type": "object", "description": "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." }, { "properties": { "namespace": { "type": "string" }, "project": { "type": "string" }, "provider": { "type": "string", "enum": [ "gitlab" ] } }, "required": [ "namespace", "provider" ], "type": "object", "description": "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." } ] }, "type": "array" } }, "required": [ "enabled", "environments", "sources" ], "type": "object", "description": "`enabled: true` with empty `sources` is deny-all." }, "type": "array" } }, "type": "object", "description": "Composable deployment-time policy for the team. Used as the default for every project on the team, with optional per-project overrides on `project.deploymentPolicy`." }, "description": { "nullable": true, "type": "string", "description": "A short description of the Team.", "example": "Our mission is to make cloud computing accessible to everyone." }, "disableHardAutoBlocks": { "oneOf": [ { "type": "number" }, { "type": "boolean", "enum": [ false, true ] } ] }, "disableRepositoryDispatchEvents": { "type": "boolean", "enum": [ false, true ], "description": "Default for projects in the team. When `true`, projects in this team will not emit GitHub repository-dispatch events on deployment events unless the project explicitly overrides this setting via `project.gitProviderOptions.disableRepositoryDispatchEvents`." }, "disjunctiveProductionSecretPolicy": { "nullable": true, "type": "string", "enum": [ "default", "off", "on", null ], "description": "Require production secrets to use a different value than preview or development." }, "dpAccessRequestsMode": { "type": "string", "enum": [ "all", "email-domain", "none" ], "description": "Controls who can request access to protected deployments." }, "emailDomain": { "nullable": true, "type": "string", "description": "Hostname that'll be matched with emails on sign-up to automatically join the Team.", "example": "example.com" }, "enablePreviewFeedback": { "nullable": true, "type": "string", "enum": [ "default", "default-force", "off", "off-force", "on", "on-force", null ], "description": "Whether toolbar is enabled on preview deployments" }, "enableProductionFeedback": { "nullable": true, "type": "string", "enum": [ "default", "default-force", "off", "off-force", "on", "on-force", null ], "description": "Whether toolbar is enabled on production deployments" }, "hideIpAddresses": { "nullable": true, "type": "boolean", "enum": [ false, true, null ], "description": "Indicates if IP addresses should be accessible in observability (o11y) tooling" }, "hideIpAddressesInLogDrains": { "nullable": true, "type": "boolean", "enum": [ false, true, null ], "description": "Indicates if IP addresses should be accessible in log drains" }, "id": { "type": "string", "description": "The Team's unique identifier.", "example": "team_nllPyCtREAqxxdyFKbbMDlxd" }, "integrationTokensInvalidatedAt": { "type": "number", "description": "Timestamp (ms) after which integration tokens created at or before this time are considered invalid for this team." }, "inviteCode": { "type": "string", "description": "Code that can be used to join this Team. Only visible to Team owners.", "example": "hasihf9e89" }, "ipBuckets": { "items": { "properties": { "bucket": { "type": "string" }, "default": { "type": "boolean", "enum": [ false, true ] }, "supportUntil": { "type": "number" } }, "required": [ "bucket" ], "type": "object" }, "type": "array" }, "membership": { "properties": { "accessRequestedAt": { "type": "number" }, "confirmed": { "type": "boolean", "enum": [ true ] }, "created": { "type": "number" }, "createdAt": { "type": "number" }, "entitlements": { "items": { "properties": { "entitlement": { "type": "string" } }, "required": [ "entitlement" ], "type": "object" }, "type": "array" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "teamId": { "type": "string" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" }, "uid": { "type": "string" } }, "required": [ "confirmed", "created", "createdAt", "role" ], "type": "object", "description": "The membership of the authenticated User in relation to the Team." }, "name": { "nullable": true, "type": "string", "description": "Name associated with the Team account, or `null` if none has been provided.", "example": "My Team" }, "nsnbConfig": { "properties": { "preference": { "type": "string", "enum": [ "auto-approval", "block", "manual-approval" ] } }, "required": [ "preference" ], "type": "object", "description": "NSNB configuration for the team." }, "orgRootTeamId": { "type": "string", "description": "Best-effort ID of the organization’s root billing team. When present, compare `orgRootTeamId === id` to identify the root team. It may be omitted even when `parentId` is set if organization resolution fails or the referenced organization is missing. Always omitted for non-organization teams.", "example": "team_nllPyCtREAqxxdyFKbbMDlxd" }, "parentId": { "type": "string", "description": "The organizationId for teams that belong to an organization (set on both the organization's root team and its child teams).", "example": "org_nllPyCtREAqxxdyFKbbMDlxd" }, "personalAccessTokensInvalidatedAt": { "type": "number", "description": "Timestamp (ms) after which personal access tokens created at or before this time are considered invalid for this team." }, "platform": { "type": "boolean", "enum": [ false, true ], "description": "Whether the team is a platform team.", "example": true }, "previewDeploymentSuffix": { "nullable": true, "type": "string", "description": "The hostname that is current set as preview deployment suffix.", "example": "example.dev" }, "remoteCaching": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "Is remote caching enabled for this team" }, "requireVerifiedCommits": { "type": "boolean", "enum": [ false, true ], "description": "When enabled, all projects in the team require commits to be signed and verified by the git provider before deployments will be created. Projects may override this via `project.gitProviderOptions.requireVerifiedCommits` (gated by `Project:Update`)." }, "resourceConfig": { "properties": { "blobStores": { "type": "number", "description": "The maximum number of blob stores an account can create." }, "buildEntitlements": { "properties": { "enhancedBuilds": { "type": "boolean", "enum": [ false, true ] } }, "type": "object" }, "buildMachine": { "properties": { "default": { "type": "string", "enum": [ "basic", "elastic", "enhanced", "standard", "turbo" ], "description": "Default build machine type for new builds" } }, "type": "object", "description": "Build machine configuration" }, "concurrentBuilds": { "type": "number", "description": "The total amount of concurrent builds that can be used." }, "customEnvironmentsPerProject": { "type": "number", "description": "The maximum number of custom environments allowed per project." }, "edgeConfigs": { "type": "number", "description": "The maximum number of edge configs an account can create." }, "edgeConfigSize": { "type": "number", "description": "The maximum size in kilobytes of an Edge Config. Only specified if a custom limit is set." }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ], "description": "Whether every build for this team / user has elastic concurrency enabled automatically." }, "kvDatabases": { "type": "number", "description": "The maximum number of kv databases an account can create." }, "postgresDatabases": { "type": "number", "description": "The maximum number of postgres databases an account can create." }, "serverlessFunctionMaxMemorySize": { "type": "number", "description": "The maximum memory size (in MB) for a serverless function. Only specified if a custom limit is set." } }, "type": "object" }, "saml": { "properties": { "connection": { "properties": { "connectedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the configuration was connected.", "example": 1611796915677 }, "lastReceivedWebhookEvent": { "type": "number", "description": "Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.", "example": 1611796915677 }, "lastSyncedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the last directory sync was performed.", "example": 1611796915677 }, "state": { "type": "string", "description": "Current state of the connection.", "example": "active" }, "syncState": { "type": "string", "enum": [ "ACTIVE", "SETUP" ], "description": "Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility." }, "type": { "type": "string", "description": "The Identity Provider \"type\", for example Okta.", "example": "OktaSAML" }, "status": { "type": "string" } }, "required": [ "connectedAt", "state", "status", "type" ], "type": "object", "description": "Information for the SAML Single Sign-On configuration." }, "defaultRedirectUri": { "type": "string", "enum": [ "v0.app", "v0.dev", "vercel.com" ], "description": "The default redirect URI to use after successful SAML authentication." }, "directory": { "properties": { "connectedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the configuration was connected.", "example": 1611796915677 }, "lastReceivedWebhookEvent": { "type": "number", "description": "Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.", "example": 1611796915677 }, "lastSyncedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the last directory sync was performed.", "example": 1611796915677 }, "state": { "type": "string", "description": "Current state of the connection.", "example": "active" }, "syncState": { "type": "string", "enum": [ "ACTIVE", "SETUP" ], "description": "Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility." }, "type": { "type": "string", "description": "The Identity Provider \"type\", for example Okta.", "example": "OktaSAML" } }, "required": [ "connectedAt", "state", "type" ], "type": "object", "description": "Information for the Directory Sync configuration." }, "enforced": { "type": "boolean", "enum": [ false, true ], "description": "When `true`, interactions with the Team **must** be done with an authentication token that has been authenticated with the Team's SAML Single Sign-On provider." }, "roles": { "additionalProperties": { "oneOf": [ { "properties": { "accessGroupId": { "type": "string" } }, "required": [ "accessGroupId" ], "type": "object", "description": "When \"Directory Sync\" is configured, this object contains a mapping of which Directory Group (by ID) should be assigned to which Vercel Team \"role\"." }, { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] } ] }, "type": "object", "description": "When \"Directory Sync\" is configured, this object contains a mapping of which Directory Group (by ID) should be assigned to which Vercel Team \"role\"." } }, "required": [ "enforced" ], "type": "object", "description": "When \"Single Sign-On (SAML)\" is configured, this object contains information regarding the configuration of the Identity Provider (IdP)." }, "sensitiveEnvironmentVariablePolicy": { "nullable": true, "type": "string", "enum": [ "default", "off", "on", null ], "description": "Sensitive environment variable policy for this team" }, "slug": { "type": "string", "description": "The Team's slug, which is unique across the Vercel platform.", "example": "my-team" }, "stagingPrefix": { "type": "string", "description": "The prefix that is prepended to automatic aliases." }, "strictConnectors": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "updatedAt" ], "type": "object", "description": "When enabled, creating and managing connectors requires Owner role or the ConnectorManager permission." }, "strictDeploymentProtectionSettings": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "updatedAt" ], "type": "object", "description": "When enabled, deployment protection settings require stricter permissions (owner-only)." }, "strictPasswordProtectionSettings": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "updatedAt" ], "type": "object", "description": "When enabled, adding, changing, or removing project password protection requires Owner role." }, "strictShareableLinks": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] }, "updatedAt": { "type": "number" } }, "required": [ "enabled", "updatedAt" ], "type": "object", "description": "When enabled, creating shareable links requires Owner role." }, "updatedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the Team was last updated.", "example": 1611796915677 } }, "required": [ "avatar", "billing", "createdAt", "creatorId", "description", "id", "name", "slug", "stagingPrefix", "updatedAt" ], "type": "object", "description": "Data representing a Team.", "additionalProperties": true }, "TeamLimited": { "properties": { "avatar": { "nullable": true, "type": "string", "description": "The ID of the file used as avatar for this Team.", "example": "6eb07268bcfadd309905ffb1579354084c24655c" }, "createdAt": { "type": "number", "description": "UNIX timestamp (in milliseconds) when the Team was created.", "example": 1630748523395 }, "id": { "type": "string", "description": "The Team's unique identifier.", "example": "team_nllPyCtREAqxxdyFKbbMDlxd" }, "limited": { "type": "boolean", "enum": [ true ], "description": "Property indicating that this Team data contains only limited information, due to the authentication token missing privileges to read the full Team data or due to team having MFA enforced and the user not having MFA enabled. Re-login with the Team's configured SAML Single Sign-On provider in order to upgrade the authentication token with the necessary privileges." }, "limitedBy": { "items": { "type": "string", "enum": [ "invalidated", "mfa", "scope" ] }, "type": "array" }, "membership": { "properties": { "accessRequestedAt": { "type": "number" }, "confirmed": { "type": "boolean", "enum": [ true ] }, "created": { "type": "number" }, "createdAt": { "type": "number" }, "entitlements": { "items": { "properties": { "entitlement": { "type": "string" } }, "required": [ "entitlement" ], "type": "object" }, "type": "array" }, "joinedFrom": { "properties": { "commitId": { "type": "string" }, "dsyncConnectedAt": { "type": "number" }, "dsyncUserId": { "type": "string" }, "gitUserId": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "gitUserLogin": { "type": "string" }, "idpUserId": { "type": "string" }, "origin": { "type": "string", "enum": [ "account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams" ] }, "repoId": { "type": "string" }, "repoPath": { "type": "string" }, "ssoConnectedAt": { "type": "number" }, "ssoUserId": { "type": "string" } }, "required": [ "origin" ], "type": "object" }, "role": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "teamId": { "type": "string" }, "teamPermissions": { "items": { "type": "string", "enum": [ "AiGatewayApiKeyOwnedBySelf", "AiGatewayBudgetManager", "AiGatewayCredits", "AiGatewaySettings", "AiGatewayTranscriptsManager", "AiGatewayTranscriptsViewer", "ConnectorManager", "CreateProject", "EnvVariableManager", "EnvironmentManager", "FullProductionDeployment", "IntegrationManager", "OrgAdmin", "OrgViewer", "UsageViewer", "V0Builder", "V0Chatter", "V0Viewer", "WorkflowDecryptor" ] }, "type": "array" }, "teamRoles": { "items": { "type": "string", "enum": [ "BILLING", "CONTRIBUTOR", "DEVELOPER", "MEMBER", "OWNER", "SECURITY", "VIEWER", "VIEWER_FOR_PLUS" ] }, "type": "array" }, "uid": { "type": "string" } }, "required": [ "confirmed", "created", "createdAt", "role" ], "type": "object", "description": "The membership of the authenticated User in relation to the Team." }, "name": { "nullable": true, "type": "string", "description": "Name associated with the Team account, or `null` if none has been provided.", "example": "My Team" }, "orgRootTeamId": { "type": "string", "description": "Best-effort ID of the organization’s root billing team. When present, compare `orgRootTeamId === id` to identify the root team. It may be omitted even when `parentId` is set if organization resolution fails or the referenced organization is missing. Always omitted for non-organization teams.", "example": "team_nllPyCtREAqxxdyFKbbMDlxd" }, "parentId": { "type": "string", "description": "The organizationId for teams that belong to an organization (set on both the organization's root team and its child teams).", "example": "org_nllPyCtREAqxxdyFKbbMDlxd" }, "saml": { "properties": { "connection": { "properties": { "connectedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the configuration was connected.", "example": 1611796915677 }, "lastReceivedWebhookEvent": { "type": "number", "description": "Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.", "example": 1611796915677 }, "lastSyncedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the last directory sync was performed.", "example": 1611796915677 }, "state": { "type": "string", "description": "Current state of the connection.", "example": "active" }, "syncState": { "type": "string", "enum": [ "ACTIVE", "SETUP" ], "description": "Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility." }, "type": { "type": "string", "description": "The Identity Provider \"type\", for example Okta.", "example": "OktaSAML" }, "status": { "type": "string" } }, "required": [ "connectedAt", "state", "status", "type" ], "type": "object", "description": "Information for the SAML Single Sign-On configuration." }, "directory": { "properties": { "connectedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the configuration was connected.", "example": 1611796915677 }, "lastReceivedWebhookEvent": { "type": "number", "description": "Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.", "example": 1611796915677 }, "lastSyncedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the last directory sync was performed.", "example": 1611796915677 }, "state": { "type": "string", "description": "Current state of the connection.", "example": "active" }, "syncState": { "type": "string", "enum": [ "ACTIVE", "SETUP" ], "description": "Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility." }, "type": { "type": "string", "description": "The Identity Provider \"type\", for example Okta.", "example": "OktaSAML" } }, "required": [ "connectedAt", "state", "type" ], "type": "object", "description": "Information for the Directory Sync configuration." }, "enforced": { "type": "boolean", "enum": [ false, true ], "description": "When `true`, interactions with the Team **must** be done with an authentication token that has been authenticated with the Team's SAML Single Sign-On provider." } }, "required": [ "enforced" ], "type": "object", "description": "When \"Single Sign-On (SAML)\" is configured, this object contains information that allows the client-side to identify whether or not this Team has SAML enforced." }, "slug": { "type": "string", "description": "The Team's slug, which is unique across the Vercel platform.", "example": "my-team" } }, "required": [ "avatar", "createdAt", "id", "limited", "limitedBy", "name", "slug" ], "type": "object", "description": "A limited form of data representing a Team, due to the authentication token missing privileges to read the full Team data." }, "AuthToken": { "properties": { "activeAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the token was most recently used.", "example": 1632816536002 }, "createdAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the token was created.", "example": 1632816536002 }, "expiresAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the token expires.", "example": 1632816536002 }, "id": { "type": "string", "description": "The unique identifier of the token.", "example": "5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391" }, "leakedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the token was marked as leaked.", "example": 1632816536002 }, "leakedUrl": { "type": "string", "description": "URL where the token was discovered as leaked." }, "name": { "type": "string", "description": "The human-readable name of the token." }, "origin": { "type": "string", "description": "The origin of how the token was created.", "example": "github" }, "prefix": { "type": "string", "description": "The token's prefix, for identification purposes.", "example": "vcp_" }, "revokedAt": { "type": "number", "description": "Timestamp (in milliseconds) of when the token was revoked.", "example": 1632816536002 }, "scopes": { "items": { "oneOf": [ { "properties": { "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "origin": { "type": "string", "enum": [ "app", "apple", "bitbucket", "chatgpt", "email", "emu", "github", "github-webhook", "gitlab", "google", "invite", "manual", "otp", "passkey", "saml", "sms", "token-exchange-oidc" ] }, "sudo": { "properties": { "expiresAt": { "type": "number" }, "origin": { "type": "string", "enum": [ "email-otp", "otp", "recovery-code", "totp", "webauthn" ], "description": "Possible step-up auth origins" }, "verifiedAt": { "type": "number" } }, "required": [ "expiresAt", "origin" ], "type": "object" }, "type": { "type": "string", "enum": [ "user" ] } }, "required": [ "createdAt", "type" ], "type": "object", "description": "The access scopes granted to the token." }, { "properties": { "createdAt": { "type": "number" }, "expiresAt": { "type": "number" }, "origin": { "type": "string", "enum": [ "app", "apple", "bitbucket", "chatgpt", "email", "emu", "github", "github-webhook", "gitlab", "google", "invite", "manual", "otp", "passkey", "saml", "sms", "token-exchange-oidc" ] }, "teamId": { "type": "string" }, "type": { "type": "string", "enum": [ "team" ] } }, "required": [ "createdAt", "teamId", "type" ], "type": "object", "description": "The access scopes granted to the token." } ] }, "type": "array", "description": "The access scopes granted to the token." }, "suffix": { "type": "string", "description": "The last few characters of the token, for identification purposes.", "example": "abc123" }, "type": { "type": "string", "description": "The type of the token.", "example": "oauth2-token" } }, "required": [ "activeAt", "createdAt", "id", "name", "type" ], "type": "object", "description": "Authentication token metadata." }, "AuthUser": { "properties": { "accountUpdateContext": { "properties": { "canOptOut": { "type": "boolean", "enum": [ false, true ], "description": "Whether this user can cancel their optional Account Update flow." }, "managedTeams": { "items": { "properties": { "avatar": { "nullable": true, "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "teamId": { "type": "string" }, "workEmail": { "type": "string" } }, "required": [ "avatar", "name", "slug", "teamId", "workEmail" ], "type": "object" }, "type": "array" }, "organization": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug" ], "type": "object" }, "verifiedEmuDomains": { "items": { "type": "string" }, "type": "array" } }, "required": [ "canOptOut", "managedTeams", "verifiedEmuDomains" ], "type": "object", "description": "Context for the Update Account screen. Present only when `isAccountUpdateRequired` is true. `managedTeams` is empty for orphan mode (user matches an EMU domain but is not on the team)." }, "activeDashboardViews": { "items": { "properties": { "favoritesViewPreference": { "nullable": true, "type": "string", "enum": [ "closed", "open", null ] }, "recentsViewPreference": { "nullable": true, "type": "string", "enum": [ "closed", "open", null ] }, "scopeId": { "type": "string" }, "viewPreference": { "nullable": true, "type": "string", "enum": [ "cards", "list", null ] } }, "required": [ "scopeId" ], "type": "object", "description": "set of dashboard view preferences (cards or list) per scopeId" }, "type": "array", "description": "set of dashboard view preferences (cards or list) per scopeId" }, "avatar": { "nullable": true, "type": "string", "description": "SHA1 hash of the avatar for the User account. Can be used in conjuction with the ... endpoint to retrieve the avatar image.", "example": "22cb30c85ff45ac4c72de8981500006b28114aa1" }, "billing": { "nullable": true, "type": "object", "description": "An object containing billing infomation associated with the User account." }, "createdAt": { "type": "number", "description": "UNIX timestamp (in milliseconds) when the User account was created.", "example": 1630748523395 }, "dataCache": { "properties": { "excessBillingEnabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "data cache settings" }, "defaultTeamId": { "nullable": true, "type": "string", "description": "The user's default team." }, "dismissedToasts": { "items": { "properties": { "dismissals": { "items": { "properties": { "createdAt": { "type": "number" }, "scopeId": { "type": "string" } }, "required": [ "createdAt", "scopeId" ], "type": "object" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "dismissals", "name" ], "type": "object", "description": "A record of when, under a certain scopeId, a toast was dismissed" }, "type": "array", "description": "A record of when, under a certain scopeId, a toast was dismissed" }, "email": { "type": "string", "description": "Email address associated with the User account.", "example": "me@example.com" }, "favoriteProjectsAndSpaces": { "items": { "properties": { "projectId": { "type": "string" }, "teamId": { "type": "string" } }, "required": [ "projectId", "teamId" ], "type": "object", "description": "A list of projects and spaces across teams that a user has marked as a favorite." }, "type": "array", "description": "A list of projects and spaces across teams that a user has marked as a favorite." }, "featureBlocks": { "properties": { "speedInsightsFree": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "blockReason": { "type": "string", "enum": [ "admin_override", "hard_blocked", "limits_exceeded" ] }, "isCurrentlyBlocked": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "blockReason", "isCurrentlyBlocked" ], "type": "object", "description": "Client-facing view of the `speedInsightsFree` ingestion block. The dashboard needs `blockReason` to tell usage pauses apart from admin blocks." }, "webAnalytics": { "properties": { "blockedFrom": { "type": "number" }, "blockedUntil": { "type": "number" }, "isCurrentlyBlocked": { "type": "boolean", "enum": [ false, true ] } }, "required": [ "isCurrentlyBlocked" ], "type": "object" } }, "type": "object", "description": "Feature blocks for the user" }, "hasTrialAvailable": { "type": "boolean", "enum": [ false, true ], "description": "Whether the user has a trial available for a paid plan subscription." }, "id": { "type": "string", "description": "The User's unique identifier.", "example": "AEIIDYVk59zbFF2Sxfyxxmua" }, "importFlowGitNamespace": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "importFlowGitNamespaceId": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "importFlowGitProvider": { "nullable": true, "type": "string", "enum": [ "bitbucket", "cursor-origin", "github", "github-custom-host", "github-limited", "gitlab", "vercel", null ] }, "isAccountUpdateRequired": { "type": "boolean", "enum": [ false, true ], "description": "When `true`, the user must complete the EMU Update Account flow before they can use the dashboard." }, "isEnterpriseManaged": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the user is managed by an enterprise." }, "name": { "nullable": true, "type": "string", "description": "Name associated with the User account, or `null` if none has been provided.", "example": "John Doe" }, "preferredScopesAndGitNamespaces": { "items": { "properties": { "gitNamespaceId": { "nullable": true, "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "scopeId": { "type": "string" } }, "required": [ "gitNamespaceId", "scopeId" ], "type": "object" }, "type": "array" }, "remoteCaching": { "properties": { "enabled": { "type": "boolean", "enum": [ false, true ] } }, "type": "object", "description": "remote caching settings" }, "resourceConfig": { "properties": { "awsAccountIds": { "items": { "type": "string" }, "type": "array", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "awsAccountType": { "type": "string", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "blobStores": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "buildEntitlements": { "properties": { "enhancedBuilds": { "type": "boolean", "enum": [ false, true ], "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." } }, "type": "object", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "buildQueue": { "properties": { "configuration": { "type": "string", "enum": [ "SKIP_NAMESPACE_QUEUE", "WAIT_FOR_NAMESPACE_QUEUE" ], "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." } }, "type": "object", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "bulkRedirectsFreeLimitOverride": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "cfZoneName": { "type": "string", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "concurrentBuilds": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "cronJobsPerProject": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "customEnvironmentsPerProject": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "edgeConfigs": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "edgeConfigSize": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "edgeFunctionExecutionTimeoutMs": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "edgeFunctionMaxSizeBytes": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "elasticConcurrencyEnabled": { "type": "boolean", "enum": [ false, true ], "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "flagsExplorerOverridesThreshold": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "flagsExplorerUnlimitedOverrides": { "type": "boolean", "enum": [ false, true ], "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "imageOptimizationType": { "type": "string", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "integrationStores": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "kvDatabases": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "microfrontendGroupsPerTeam": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "microfrontendProjectsPerGroup": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "nodeType": { "type": "string", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "postgresDatabases": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "security": { "properties": { "customRules": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "ipBlocks": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "ipBypass": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "rateLimit": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." } }, "type": "object", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "serverlessFunctionMaxDuration": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "serverlessFunctionMaxMemorySize": { "type": "number", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." } }, "type": "object", "description": "An object containing infomation related to the amount of platform resources may be allocated to the User account." }, "shouldShowEnterpriseManagedWelcome": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Enterprise Managed User joined the current team through the Update Account flow and should see its welcome experience." }, "softBlock": { "nullable": true, "properties": { "blockedAt": { "type": "number" }, "blockedDueToOverageType": { "type": "string", "enum": [ "analyticsUsage", "artifacts", "bandwidth", "blobDataTransfer", "blobTotalAdvancedRequests", "blobTotalAvgSizeInBytes", "blobTotalGetResponseObjectSizeInBytes", "blobTotalSimpleRequests", "connectDataTransfer", "dataCacheRead", "dataCacheWrite", "edgeConfigRead", "edgeConfigWrite", "edgeFunctionExecutionUnits", "edgeMiddlewareInvocations", "edgeRequest", "edgeRequestAdditionalCpuDuration", "elasticConcurrencyBuildSlots", "fastDataTransfer", "fastOriginTransfer", "fluidCpuDuration", "fluidDuration", "functionDuration", "functionInvocation", "imageOptimizationCacheRead", "imageOptimizationCacheWrite", "imageOptimizationTransformation", "logDrainsVolume", "monitoringMetric", "observabilityEvent", "onDemandConcurrencyMinutes", "runtimeCacheRead", "runtimeCacheWrite", "serverlessFunctionExecution", "sourceImages", "wafOwaspExcessBytes", "wafOwaspRequests", "wafRateLimitRequest", "webAnalyticsEvent" ] }, "reason": { "type": "string", "enum": [ "BLOCKED_FOR_PLATFORM_ABUSE", "DOMAIN_OWNER_DELETION_REQUEST", "ENTERPRISE_TRIAL_ENDED", "ENTERPRISE_UNPAID_INVOICE", "EXPOSURE_CAP_EXCEEDED", "FAIR_USE_LIMITS_EXCEEDED", "SUBSCRIPTION_CANCELED", "SUBSCRIPTION_EXPIRED", "UNPAID_INVOICE" ] }, "unpauseAt": { "type": "number", "description": "Since September 2026. Set only by `billing-usage-alerts` for usage plans with a `blockDurationMs`; its presence marks a pause that expires on its own." } }, "required": [ "blockedAt", "reason" ], "type": "object", "description": "When the User account has been \"soft blocked\", this property will contain the date when the restriction was enacted, and the identifier for why." }, "stagingPrefix": { "type": "string", "description": "Prefix that will be used in the URL of \"Preview\" deployments created by the User account." }, "username": { "type": "string", "description": "Unique username associated with the User account.", "example": "jdoe" } }, "required": [ "avatar", "billing", "createdAt", "defaultTeamId", "email", "hasTrialAvailable", "id", "name", "resourceConfig", "softBlock", "stagingPrefix", "username" ], "type": "object", "description": "Data for the currently authenticated User." }, "AuthUserLimited": { "properties": { "avatar": { "nullable": true, "type": "string", "description": "SHA1 hash of the avatar for the User account. Can be used in conjuction with the ... endpoint to retrieve the avatar image.", "example": "22cb30c85ff45ac4c72de8981500006b28114aa1" }, "defaultTeamId": { "nullable": true, "type": "string", "description": "The user's default team." }, "email": { "type": "string", "description": "Email address associated with the User account.", "example": "me@example.com" }, "id": { "type": "string", "description": "The User's unique identifier.", "example": "AEIIDYVk59zbFF2Sxfyxxmua" }, "isEnterpriseManaged": { "type": "boolean", "enum": [ false, true ], "description": "Indicates whether the user is managed by an enterprise." }, "limited": { "type": "boolean", "enum": [ true ], "description": "Property indicating that this User data contains only limited information, due to the authentication token missing privileges to read the full User data. Re-login with email, GitHub, GitLab or Bitbucket in order to upgrade the authentication token with the necessary privileges." }, "name": { "nullable": true, "type": "string", "description": "Name associated with the User account, or `null` if none has been provided.", "example": "John Doe" }, "shouldShowEnterpriseManagedWelcome": { "type": "boolean", "enum": [ false, true ], "description": "Whether the Enterprise Managed User joined the current team through the Update Account flow and should see its welcome experience." }, "username": { "type": "string", "description": "Unique username associated with the User account.", "example": "jdoe" } }, "required": [ "avatar", "defaultTeamId", "email", "id", "limited", "name", "username" ], "type": "object", "description": "A limited form of data for the currently authenticated User, due to the authentication token missing privileges to read the full User data." }, "VcrRepository": { "properties": { "createdAt": { "type": "string", "description": "ISO 8601 timestamp of when the repository was created.", "example": "2026-06-30T10:00:00.000Z" }, "id": { "type": "string", "description": "Unique identifier of the repository.", "example": "repo_a1b2c3d4e5f6" }, "name": { "type": "string", "description": "Name of the repository.", "example": "my-app" }, "projectId": { "type": "string", "description": "Identifier of the project the repository belongs to.", "example": "prj_a1b2c3d4e5f6" }, "public": { "type": "boolean", "enum": [ false, true ], "description": "Whether the repository is public. Images in public repositories can be pulled by anyone. Defaults to `false` (private).", "example": false }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp of when the repository was last updated.", "example": "2026-06-30T10:00:00.000Z" } }, "required": [ "createdAt", "id", "name", "projectId", "public", "updatedAt" ], "type": "object", "description": "A Vercel Container Registry repository." }, "VcrRepositoryList": { "properties": { "nextCursor": { "type": "string", "description": "Cursor to fetch the next page of results, when more are available." }, "repositories": { "items": { "$ref": "#/components/schemas/VcrRepository" }, "type": "array" } }, "required": [ "repositories" ], "type": "object", "description": "A paginated list of Vercel Container Registry repositories." }, "VcrImageListItem": { "properties": { "arch": { "type": "string", "description": "CPU architecture the manifest targets. Only present for single-platform manifests.", "example": "amd64" }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp of when the image was created.", "example": "2026-06-30T10:00:00.000Z" }, "id": { "type": "string", "description": "Internal identifier of the image.", "example": "img_a1b2c3d4e5f6" }, "kind": { "type": "string", "enum": [ "attestation", "index", "manifest" ], "description": "Whether the manifest is a multi-platform image index, a single-platform image manifest or an attestation." }, "manifestDigest": { "type": "string", "description": "SHA-256 digest of the image manifest.", "example": "sha256:2c4e8f3a1b9d0e5c7a6f4b2d8e1c9a0b3d5f7e9c1a2b4d6f8e0c2a4b6d8f0e2c" }, "platform": { "type": "string", "description": "Operating system the manifest targets. Only present for single-platform manifests.", "example": "linux" }, "pushedBy": { "type": "string", "description": "Identifier of the actor that pushed the image." }, "repositoryId": { "type": "string", "description": "Identifier of the repository the image belongs to.", "example": "repo_a1b2c3d4e5f6" }, "sizeInBytes": { "type": "number", "description": "Total size in bytes of the image's resources (manifest, config and layer blobs) stored by the registry." }, "status": { "nullable": true, "type": "string", "enum": [ "preparing", "ready", "unoptimized", null ], "description": "VHS-readiness status, or `null` for a multi-platform index." }, "tags": { "items": { "type": "string" }, "type": "array", "description": "Tags pointing at this image's manifest." } }, "required": [ "createdAt", "id", "kind", "manifestDigest", "repositoryId", "sizeInBytes", "status", "tags" ], "type": "object", "description": "An image enriched with its tags and VHS-readiness status, as returned when listing a repository's images." }, "VcrImageList": { "properties": { "images": { "items": { "$ref": "#/components/schemas/VcrImageListItem" }, "type": "array" }, "nextCursor": { "type": "string", "description": "Cursor to fetch the next page of results, when more are available." } }, "required": [ "images" ], "type": "object", "description": "A paginated list of images for a repository." }, "VcrRepositoryPermission": { "properties": { "createdAt": { "type": "string", "description": "ISO 8601 timestamp of when the permission was created.", "example": "2026-06-30T10:00:00.000Z" }, "repositoryId": { "type": "string", "description": "Identifier of the repository the permission grants access to.", "example": "repo_a1b2c3d4e5f6" }, "teamId": { "type": "string", "description": "Identifier of the team that is granted access to the repository.", "example": "team_a1b2c3d4e5f6" }, "teamSlug": { "type": "string", "description": "Slug of the team that is granted access to the repository.", "example": "my-team" } }, "required": [ "createdAt", "repositoryId", "teamId", "teamSlug" ], "type": "object", "description": "A team's access grant to a Vercel Container Registry repository." }, "VcrTag": { "properties": { "arch": { "type": "string", "description": "CPU architecture the manifest targets. Only present for single-platform manifests.", "example": "amd64" }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp of when the tag was created.", "example": "2026-06-30T10:00:00.000Z" }, "imageId": { "type": "string", "description": "Internal identifier of the image the tag points at.", "example": "img_a1b2c3d4e5f6" }, "kind": { "type": "string", "enum": [ "attestation", "index", "manifest" ], "description": "Whether the manifest is a multi-platform image index, a single-platform image manifest or an attestation." }, "manifestDigest": { "type": "string", "description": "SHA-256 digest of the image manifest the tag points at.", "example": "sha256:2c4e8f3a1b9d0e5c7a6f4b2d8e1c9a0b3d5f7e9c1a2b4d6f8e0c2a4b6d8f0e2c" }, "platform": { "type": "string", "description": "Operating system the manifest targets. Only present for single-platform manifests.", "example": "linux" }, "pushedBy": { "type": "string", "description": "Identifier of the actor that pushed the image." }, "sizeInBytes": { "type": "number", "description": "Total size in bytes of the image's resources (manifest, config and layer blobs) stored by the registry." }, "status": { "nullable": true, "type": "string", "enum": [ "preparing", "ready", "unoptimized", null ], "description": "VHS-readiness status, or `null` for a multi-platform index." }, "tag": { "type": "string", "description": "The tag name.", "example": "latest" }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp of when the tag was last updated.", "example": "2026-06-30T10:00:00.000Z" } }, "required": [ "createdAt", "imageId", "kind", "manifestDigest", "sizeInBytes", "status", "tag", "updatedAt" ], "type": "object", "description": "A tag pointing at an image in a Vercel Container Registry repository, enriched with the backing image's metadata and VHS-readiness status." }, "VcrImageLayer": { "oneOf": [ { "properties": { "createdBy": { "nullable": true, "type": "string" }, "digest": { "nullable": true, "type": "string" }, "operation": { "type": "string", "enum": [ "ADD", "ARG", "CMD", "COPY", "ENTRYPOINT", "ENV", "EXPOSE", "FROM", "HEALTHCHECK", "LABEL", "ONBUILD", "RUN", "SHELL", "STOPSIGNAL", "UNKNOWN", "USER", "VOLUME", "WORKDIR" ], "description": "Docker/OCI build instruction associated with an image layer." }, "sizeBytes": { "nullable": true, "type": "number" }, "baseImage": { "nullable": true, "type": "string" }, "collapsedDigests": { "items": { "type": "string" }, "type": "array" }, "collapsedLayerCount": { "type": "number" }, "type": { "type": "string", "enum": [ "FROM" ] } }, "required": [ "baseImage", "collapsedDigests", "collapsedLayerCount", "createdBy", "digest", "operation", "sizeBytes", "type" ], "type": "object" }, { "properties": { "createdBy": { "nullable": true, "type": "string" }, "digest": { "nullable": true, "type": "string" }, "operation": { "type": "string", "enum": [ "ADD", "ARG", "CMD", "COPY", "ENTRYPOINT", "ENV", "EXPOSE", "FROM", "HEALTHCHECK", "LABEL", "ONBUILD", "RUN", "SHELL", "STOPSIGNAL", "UNKNOWN", "USER", "VOLUME", "WORKDIR" ], "description": "Docker/OCI build instruction associated with an image layer." }, "sizeBytes": { "nullable": true, "type": "number" }, "command": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "RUN" ] } }, "required": [ "command", "createdBy", "digest", "operation", "sizeBytes", "type" ], "type": "object" }, { "properties": { "createdBy": { "nullable": true, "type": "string" }, "digest": { "nullable": true, "type": "string" }, "operation": { "type": "string", "enum": [ "ADD", "ARG", "CMD", "COPY", "ENTRYPOINT", "ENV", "EXPOSE", "FROM", "HEALTHCHECK", "LABEL", "ONBUILD", "RUN", "SHELL", "STOPSIGNAL", "UNKNOWN", "USER", "VOLUME", "WORKDIR" ], "description": "Docker/OCI build instruction associated with an image layer." }, "sizeBytes": { "nullable": true, "type": "number" }, "env": { "nullable": true, "type": "string" }, "type": { "type": "string", "enum": [ "ENV" ] } }, "required": [ "createdBy", "digest", "env", "operation", "sizeBytes", "type" ], "type": "object" }, { "properties": { "createdBy": { "nullable": true, "type": "string" }, "digest": { "nullable": true, "type": "string" }, "operation": { "type": "string", "enum": [ "ADD", "ARG", "CMD", "COPY", "ENTRYPOINT", "ENV", "EXPOSE", "FROM", "HEALTHCHECK", "LABEL", "ONBUILD", "RUN", "SHELL", "STOPSIGNAL", "UNKNOWN", "USER", "VOLUME", "WORKDIR" ], "description": "Docker/OCI build instruction associated with an image layer." }, "sizeBytes": { "nullable": true, "type": "number" }, "type": { "type": "string", "enum": [ "ADD", "ARG", "CMD", "COPY", "ENTRYPOINT", "EXPOSE", "HEALTHCHECK", "LABEL", "ONBUILD", "SHELL", "STOPSIGNAL", "UNKNOWN", "USER", "VOLUME", "WORKDIR" ] }, "value": { "nullable": true, "type": "string" } }, "required": [ "createdBy", "digest", "operation", "sizeBytes", "type", "value" ], "type": "object" } ] }, "VcrImageDetail": { "properties": { "arch": { "type": "string", "description": "CPU architecture the manifest targets. Only present for single-platform manifests.", "example": "amd64" }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp of when the image was created.", "example": "2026-06-30T10:00:00.000Z" }, "id": { "type": "string", "description": "Internal identifier of the image.", "example": "img_a1b2c3d4e5f6" }, "kind": { "type": "string", "enum": [ "attestation", "index", "manifest" ], "description": "Whether the manifest is a multi-platform image index, a single-platform image manifest or an attestation." }, "layers": { "items": { "$ref": "#/components/schemas/VcrImageLayer" }, "type": "array" }, "manifestDigest": { "type": "string", "description": "SHA-256 digest of the image manifest.", "example": "sha256:2c4e8f3a1b9d0e5c7a6f4b2d8e1c9a0b3d5f7e9c1a2b4d6f8e0c2a4b6d8f0e2c" }, "platform": { "type": "string", "description": "Operating system the manifest targets. Only present for single-platform manifests.", "example": "linux" }, "pushedBy": { "type": "string", "description": "Identifier of the actor that pushed the image." }, "repositoryId": { "type": "string", "description": "Identifier of the repository the image belongs to.", "example": "repo_a1b2c3d4e5f6" }, "sizeInBytes": { "type": "number", "description": "Total size in bytes of the image's resources (manifest, config and layer blobs) stored by the registry." }, "status": { "nullable": true, "type": "string", "enum": [ "preparing", "ready", "unoptimized", null ], "description": "VHS-readiness status, or `null` for a multi-platform index." }, "tags": { "items": { "type": "string" }, "type": "array", "description": "Tags pointing at this image's manifest." } }, "required": [ "createdAt", "id", "kind", "layers", "manifestDigest", "repositoryId", "sizeInBytes", "status", "tags" ], "type": "object", "description": "A single image with its tags, status and resolved Dockerfile layer history." }, "VcrRepositoryPermissionList": { "properties": { "nextCursor": { "type": "string", "description": "Cursor to fetch the next page of results, when more are available." }, "permissions": { "items": { "$ref": "#/components/schemas/VcrRepositoryPermission" }, "type": "array" } }, "required": [ "permissions" ], "type": "object", "description": "A paginated list of Vercel Container Registry repository permissions." }, "FileTree": { "properties": { "children": { "items": { "$ref": "#/components/schemas/FileTree" }, "type": "array", "description": "The list of children files of the directory (only valid for the `directory` type)" }, "contentType": { "type": "string", "description": "The content-type of the file (only valid for the `file` type)", "example": "application/json" }, "mode": { "type": "number", "description": "The file \"mode\" indicating file type and permissions." }, "name": { "type": "string", "description": "The name of the file tree entry", "example": "my-file.json" }, "type": { "type": "string", "enum": [ "directory", "file", "invalid", "lambda", "middleware", "symlink" ], "description": "String indicating the type of file tree entry.", "example": "file" }, "uid": { "type": "string", "description": "The unique identifier of the file (only valid for the `file` type)", "example": "2d4aad419917f15b1146e9e03ddc9bb31747e4d0" } }, "required": [ "mode", "name", "type" ], "type": "object", "description": "A deployment file tree entry" }, "VercelBaseError": { "type": "object", "required": [ "code", "message" ], "properties": { "code": { "type": "string" }, "message": { "type": "string" } } }, "VercelForbiddenError": { "type": "object", "required": [ "error" ], "properties": { "error": { "allOf": [ { "$ref": "#/components/schemas/VercelBaseError" }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" } } } ] } } }, "VercelNotFoundError": { "type": "object", "required": [ "error" ], "properties": { "error": { "allOf": [ { "$ref": "#/components/schemas/VercelBaseError" }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "message": { "type": "string" } } } ] } } }, "VercelBadRequestError": { "type": "object", "required": [ "error" ], "properties": { "error": { "allOf": [ { "$ref": "#/components/schemas/VercelBaseError" }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "message": { "type": "string" } } } ] } } }, "VercelRateLimitError": { "type": "object", "required": [ "error" ], "properties": { "error": { "allOf": [ { "$ref": "#/components/schemas/VercelBaseError" }, { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" }, "limit": { "$ref": "#/components/schemas/RateLimitNotice" } } } ] } } }, "RateLimitNotice": { "type": "object", "required": [ "remaining", "reset", "resetMs", "total" ], "properties": { "remaining": { "type": "integer", "minimum": 0 }, "reset": { "type": "integer", "minimum": 0 }, "resetMs": { "type": "integer", "minimum": 0 }, "total": { "type": "integer", "minimum": 0 } } } }, "securitySchemes": { "bearerToken": { "type": "http", "description": "Default authentication mechanism", "scheme": "bearer" }, "oauth2": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://api.vercel.com/oauth/authorize", "tokenUrl": "https://api.vercel.com/oauth/access_token", "scopes": {} } } } } }, "security": [] }