diff --git a/apps/docs/spec/api_v1_openapi.json b/apps/docs/spec/api_v1_openapi.json index ce2edf917b5bc..421145683cb0c 100644 --- a/apps/docs/spec/api_v1_openapi.json +++ b/apps/docs/spec/api_v1_openapi.json @@ -1,18 +1,28 @@ { "openapi": "3.0.0", "paths": { - "/v1/branches/{branch_id}": { + "/v1/branches/{branch_id_or_ref}": { "get": { - "operationId": "v1-get-a-branch-config", - "summary": "Get database branch config", "description": "Fetches configurations of the specified database branch", + "operationId": "v1-get-a-branch-config", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", - "schema": { "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } } ], "responses": { @@ -26,20 +36,34 @@ }, "500": { "description": "Failed to retrieve database branch" } }, + "security": [{ "bearer": [] }], + "summary": "Get database branch config", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" }, "patch": { - "operationId": "v1-update-a-branch-config", - "summary": "Update database branch config", "description": "Updates the configuration of the specified database branch", + "operationId": "v1-update-a-branch-config", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", - "schema": { "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } } ], "requestBody": { @@ -57,20 +81,41 @@ }, "500": { "description": "Failed to update database branch" } }, + "security": [{ "bearer": [] }], + "summary": "Update database branch config", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" }, "delete": { + "description": "Deletes the specified database branch. By default, deletes immediately. Use force=false to schedule deletion with 1-hour grace period (only when soft deletion is enabled).", "operationId": "v1-delete-a-branch", - "summary": "Delete a database branch", - "description": "Deletes the specified database branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", - "schema": { "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } + }, + { + "name": "force", + "required": false, + "in": "query", + "description": "If set to false, schedule deletion with 1-hour grace period (only when soft deletion is enabled).", + "schema": { "default": "true", "type": "boolean" } } ], "responses": { @@ -84,24 +129,44 @@ }, "500": { "description": "Failed to delete database branch" } }, + "security": [{ "bearer": [] }], + "summary": "Delete a database branch", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/branches/{branch_id}/push": { + "/v1/branches/{branch_id_or_ref}/push": { "post": { - "operationId": "v1-push-a-branch", - "summary": "Pushes a database branch", "description": "Pushes the specified database branch", + "operationId": "v1-push-a-branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", - "schema": { "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/BranchActionBody" } } + } + }, "responses": { "201": { "description": "", @@ -113,24 +178,93 @@ }, "500": { "description": "Failed to push database branch" } }, + "security": [{ "bearer": [] }], + "summary": "Pushes a database branch", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/branches/{branch_id}/reset": { + "/v1/branches/{branch_id_or_ref}/merge": { + "post": { + "description": "Merges the specified database branch", + "operationId": "v1-merge-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/BranchActionBody" } } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/BranchUpdateResponse" } + } + } + }, + "500": { "description": "Failed to merge database branch" } + }, + "security": [{ "bearer": [] }], + "summary": "Merges a database branch", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/branches/{branch_id_or_ref}/reset": { "post": { - "operationId": "v1-reset-a-branch", - "summary": "Resets a database branch", "description": "Resets the specified database branch", + "operationId": "v1-reset-a-branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", - "schema": { "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/BranchActionBody" } } + } + }, "responses": { "201": { "description": "", @@ -142,15 +276,106 @@ }, "500": { "description": "Failed to reset database branch" } }, + "security": [{ "bearer": [] }], + "summary": "Resets a database branch", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/branches/{branch_id_or_ref}/restore": { + "post": { + "description": "Cancels scheduled deletion and restores the branch to active state", + "operationId": "v1-restore-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/BranchRestoreResponse" } + } + } + }, + "500": { "description": "Failed to restore database branch" } + }, + "security": [{ "bearer": [] }], + "summary": "Restore a scheduled branch deletion", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/branches/{branch_id_or_ref}/diff": { + "get": { + "description": "Diffs the specified database branch", + "operationId": "v1-diff-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { "type": "string", "format": "uuid", "deprecated": true } + ] + } + }, + { + "name": "included_schemas", + "required": false, + "in": "query", + "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "content": { "text/plain": { "schema": { "type": "string" } } }, + "description": "" + }, + "500": { "description": "Failed to diff database branch" } + }, + "security": [{ "bearer": [] }], + "summary": "[Beta] Diffs a database branch", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, "/v1/projects": { "get": { + "description": "Returns a list of all projects you've previously created.\n\nUse `/v1/organizations/{slug}/projects` instead when possible to get more precise results and pagination support.", "operationId": "v1-list-all-projects", - "summary": "List all projects", - "description": "Returns a list of all projects you've previously created.", "parameters": [], "responses": { "200": { @@ -165,19 +390,20 @@ } } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["projects_read"] }], + "summary": "List all projects", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" }, "post": { "operationId": "v1-create-a-project", - "summary": "Create a project", "parameters": [], "requestBody": { "required": true, "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/V1CreateProjectBodyDto" } - } + "application/json": { "schema": { "$ref": "#/components/schemas/V1CreateProjectBody" } } } }, "responses": { @@ -188,15 +414,89 @@ } } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organization_projects_create"] }], + "summary": "Create a project", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/available-regions": { + "get": { + "operationId": "v1-get-available-regions", + "parameters": [ + { + "name": "organization_slug", + "required": true, + "in": "query", + "description": "Slug of your organization", + "schema": { "type": "string" } + }, + { + "name": "continent", + "required": false, + "in": "query", + "description": "Continent code to determine regional recommendations: NA (North America), SA (South America), EU (Europe), AF (Africa), AS (Asia), OC (Oceania), AN (Antarctica)", + "schema": { + "example": "NA", + "type": "string", + "enum": ["NA", "SA", "EU", "AF", "AS", "OC", "AN"] + } + }, + { + "name": "desired_instance_size", + "required": false, + "in": "query", + "description": "Desired instance size", + "schema": { + "example": "nano", + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/RegionsInfo" } } + } + } + }, + "security": [{ "bearer": [] }], + "summary": "[Beta] Gets the list of available regions that can be used for a new project", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "organizations:read" } }, "/v1/organizations": { "get": { - "operationId": "v1-list-all-organizations", - "summary": "List all organizations", "description": "Returns a list of organizations that you currently belong to.", + "operationId": "v1-list-all-organizations", "parameters": [], "responses": { "200": { @@ -212,18 +512,21 @@ }, "500": { "description": "Unexpected error listing organizations" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organizations_read"] }], + "summary": "List all organizations", "tags": ["Organizations"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" }, "post": { "operationId": "v1-create-an-organization", - "summary": "Create an organization", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/CreateOrganizationV1Dto" } + "schema": { "$ref": "#/components/schemas/CreateOrganizationV1" } } } }, @@ -238,21 +541,27 @@ }, "500": { "description": "Unexpected error creating an organization" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organizations_create"] }], + "summary": "Create an organization", "tags": ["Organizations"], - "security": [{ "bearer": [] }] + "x-endpoint-owners": ["management-api", "billing"] } }, "/v1/oauth/authorize": { "get": { "operationId": "v1-authorize-user", - "summary": "[Beta] Authorize user through oauth", "parameters": [ - { "name": "client_id", "required": true, "in": "query", "schema": { "type": "string" } }, + { + "name": "client_id", + "required": true, + "in": "query", + "schema": { "format": "uuid", "type": "string" } + }, { "name": "response_type", "required": true, "in": "query", - "schema": { "enum": ["code", "token", "id_token token"], "type": "string" } + "schema": { "type": "string", "enum": ["code", "token", "id_token token"] } }, { "name": "redirect_uri", @@ -278,18 +587,33 @@ "name": "code_challenge_method", "required": false, "in": "query", - "schema": { "enum": ["plain", "sha256", "S256"], "type": "string" } + "schema": { "type": "string", "enum": ["plain", "sha256", "S256"] } + }, + { + "name": "organization_slug", + "required": false, + "in": "query", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + }, + { + "name": "resource", + "required": false, + "in": "query", + "description": "Resource indicator for MCP (Model Context Protocol) clients", + "schema": { "format": "uri", "type": "string" } } ], - "responses": { "303": { "description": "" } }, + "responses": { "204": { "description": "" } }, + "security": [{ "oauth2": ["read"] }], + "summary": "[Beta] Authorize user through oauth", "tags": ["OAuth"], - "security": [{ "oauth2": ["read"] }] + "x-endpoint-owners": ["auth", "management-api"] } }, "/v1/oauth/token": { "post": { "operationId": "v1-exchange-oauth-token", - "summary": "[Beta] Exchange auth code for user's access and refresh token", "parameters": [], "requestBody": { "required": true, @@ -309,33 +633,102 @@ } } }, + "security": [{ "oauth2": ["write"] }], + "summary": "[Beta] Exchange auth code for user's access and refresh token", "tags": ["OAuth"], - "security": [{ "oauth2": ["write"] }] + "x-endpoint-owners": ["auth", "management-api"] } }, "/v1/oauth/revoke": { "post": { "operationId": "v1-revoke-token", - "summary": "[Beta] Revoke oauth app authorization and it's corresponding tokens", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/OAuthRevokeTokenBodyDto" } + "schema": { "$ref": "#/components/schemas/OAuthRevokeTokenBody" } } } }, "responses": { "204": { "description": "" } }, + "security": [{ "oauth2": ["write"] }], + "summary": "[Beta] Revoke oauth app authorization and it's corresponding tokens", + "tags": ["OAuth"], + "x-endpoint-owners": ["auth", "management-api"] + } + }, + "/v1/oauth/authorize/project-claim": { + "get": { + "description": "Initiates the OAuth authorization flow for the specified provider. After successful authentication, the user can claim ownership of the specified project.", + "operationId": "v1-oauth-authorize-project-claim", + "parameters": [ + { + "name": "project_ref", + "required": true, + "in": "query", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "client_id", + "required": true, + "in": "query", + "schema": { "format": "uuid", "type": "string" } + }, + { + "name": "response_type", + "required": true, + "in": "query", + "schema": { "type": "string", "enum": ["code", "token", "id_token token"] } + }, + { + "name": "redirect_uri", + "required": true, + "in": "query", + "schema": { "type": "string" } + }, + { "name": "state", "required": false, "in": "query", "schema": { "type": "string" } }, + { + "name": "response_mode", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "code_challenge", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "code_challenge_method", + "required": false, + "in": "query", + "schema": { "type": "string", "enum": ["plain", "sha256", "S256"] } + } + ], + "responses": { "204": { "description": "" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["organization_admin_write", "project_admin_write"] } + ], + "summary": "Authorize user through oauth and claim a project", "tags": ["OAuth"], - "security": [{ "oauth2": ["write"] }] + "x-endpoint-owners": ["management-api"] } }, "/v1/snippets": { "get": { "operationId": "v1-list-all-snippets", - "summary": "Lists SQL snippets for the logged in user", "parameters": [ + { + "name": "project_ref", + "required": false, + "in": "query", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, { "name": "cursor", "required": false, "in": "query", "schema": { "type": "string" } }, { "name": "limit", @@ -354,12 +747,6 @@ "required": false, "in": "query", "schema": { "enum": ["asc", "desc"], "type": "string" } - }, - { - "name": "project_ref", - "required": false, - "in": "query", - "schema": { "type": "string" } } ], "responses": { @@ -371,14 +758,17 @@ }, "500": { "description": "Failed to list user's SQL snippets" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["snippets_read"] }], + "summary": "Lists SQL snippets for the logged in user", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" } }, "/v1/snippets/{id}": { "get": { "operationId": "v1-get-a-snippet", - "summary": "Gets a specific SQL snippet", "parameters": [ { "name": "id", @@ -396,52 +786,279 @@ }, "500": { "description": "Failed to retrieve SQL snippet" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["snippets_read"] }], + "summary": "Gets a specific SQL snippet", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/api-keys": { + "/v1/projects/{ref}/actions": { "get": { - "operationId": "v1-get-project-api-keys", - "summary": "Get project api keys", + "description": "Returns a paginated list of action runs of the specified project.", + "operationId": "v1-list-action-runs", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - { "name": "reveal", "required": true, "in": "query", "schema": { "type": "boolean" } } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + { + "name": "offset", + "required": false, + "in": "query", + "schema": { "minimum": 0, "type": "number" } + }, + { + "name": "limit", + "required": false, + "in": "query", + "schema": { "minimum": 10, "type": "number" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ListActionRunResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to list action runs" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], + "summary": "List all action runs", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + }, + "head": { + "description": "Returns the total number of action runs of the specified project.", + "operationId": "v1-count-action-runs", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "headers": { + "X-Total-Count": { + "schema": { "type": "integer", "format": "int64", "minimum": 0 }, + "description": "total count value" + } + }, + "description": "" + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to count action runs" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], + "summary": "Count the number of action runs", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/actions/{run_id}": { + "get": { + "description": "Returns the current status of the specified action run.", + "operationId": "v1-get-action-run", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "run_id", + "required": true, + "in": "path", + "description": "Action Run ID", + "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/ActionRunResponse" } } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get action run status" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], + "summary": "Get the status of an action run", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/actions/{run_id}/status": { + "patch": { + "description": "Updates the status of an ongoing action run.", + "operationId": "v1-update-action-run-status", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "run_id", + "required": true, + "in": "path", + "description": "Action Run ID", + "schema": { "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/UpdateRunStatusBody" } } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateRunStatusResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update action run status" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_write"] }], + "summary": "Update the status of an action run", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/projects/{ref}/actions/{run_id}/logs": { + "get": { + "description": "Returns the logs from the specified action run.", + "operationId": "v1-get-action-run-logs", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "run_id", + "required": true, + "in": "path", + "description": "Action Run ID", + "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "content": { "text/plain": { "schema": { "type": "string" } } }, + "description": "" + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get action run logs" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], + "summary": "Get the logs of an action run", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/api-keys": { + "get": { + "operationId": "v1-get-project-api-keys", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ApiKeyResponse" } } } } - } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_read"] }], + "summary": "Get project api keys", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" }, "post": { - "operationId": "createApiKey", - "summary": "[Alpha] Creates a new API key for the project", + "operationId": "v1-create-project-api-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - { "name": "reveal", "required": true, "in": "query", "schema": { "type": "boolean" } } + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + } ], "requestBody": { "required": true, @@ -455,26 +1072,114 @@ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiKeyResponse" } } } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_write"] }], + "summary": "Creates a new API key for the project", + "tags": ["Secrets"], + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" + } + }, + "/v1/projects/{ref}/api-keys/legacy": { + "get": { + "operationId": "v1-get-project-legacy-api-keys", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/LegacyApiKeysResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_read"] }], + "summary": "Check whether JWT based legacy (anon, service_role) API keys are enabled. This API endpoint will be removed in the future, check for HTTP 404 Not Found.", + "tags": ["Secrets"], + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" + }, + "put": { + "operationId": "v1-update-project-legacy-api-keys", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "enabled", + "required": true, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/LegacyApiKeysResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_write"] }], + "summary": "Disable or re-enable JWT based legacy (anon, service_role) API keys. This API endpoint will be removed in the future, check for HTTP 404 Not Found.", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" } }, "/v1/projects/{ref}/api-keys/{id}": { "patch": { - "operationId": "updateApiKey", - "summary": "[Alpha] Updates an API key for the project", + "operationId": "v1-update-project-api-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } }, - { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } }, - { "name": "reveal", "required": true, "in": "query", "schema": { "type": "boolean" } } + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + } ], "requestBody": { "required": true, @@ -488,24 +1193,41 @@ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiKeyResponse" } } } - } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_write"] }], + "summary": "Updates an API key for the project", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" }, "get": { - "operationId": "getApiKey", - "summary": "[Alpha] Get API key", + "operationId": "v1-get-project-api-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } }, - { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } }, - { "name": "reveal", "required": true, "in": "query", "schema": { "type": "boolean" } } + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + } ], "responses": { "200": { @@ -513,24 +1235,49 @@ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiKeyResponse" } } } - } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_read"] }], + "summary": "Get API key", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" }, "delete": { - "operationId": "deleteApiKey", - "summary": "[Alpha] Deletes an API key for the project", + "operationId": "v1-delete-project-api-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + }, + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + }, + { + "name": "was_compromised", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } }, - { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } }, - { "name": "reveal", "required": true, "in": "query", "schema": { "type": "boolean" } } + { "name": "reason", "required": false, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { @@ -539,24 +1286,29 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ApiKeyResponse" } } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["api_gateway_keys_write"] }], + "summary": "Deletes an API key for the project", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" } }, "/v1/projects/{ref}/branches": { "get": { - "operationId": "v1-list-all-branches", - "summary": "List all database branches", "description": "Returns all database branches of the specified project.", + "operationId": "v1-list-all-branches", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -571,22 +1323,28 @@ } } }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve database branches" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_read"] }], + "summary": "List all database branches", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" }, "post": { - "operationId": "v1-create-a-branch", - "summary": "Create a database branch", "description": "Creates a database branch from the specified project.", + "operationId": "v1-create-a-branch", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -602,92 +1360,148 @@ "application/json": { "schema": { "$ref": "#/components/schemas/BranchResponse" } } } }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create database branch" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_write"] }], + "summary": "Create a database branch", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" }, "delete": { - "operationId": "v1-disable-preview-branching", - "summary": "Disables preview branching", "description": "Disables preview branching for the specified project", + "operationId": "v1-disable-preview-branching", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to disable preview branching" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_write"] }], + "summary": "Disables preview branching", "tags": ["Environments"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/projects/{ref}/custom-hostname": { + "/v1/projects/{ref}/branches/{name}": { "get": { - "operationId": "v1-get-hostname-config", - "summary": "[Beta] Gets project's custom hostname config", + "description": "Fetches the specified database branch by its name.", + "operationId": "v1-get-a-branch", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { "name": "name", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateCustomHostnameResponse" } - } + "application/json": { "schema": { "$ref": "#/components/schemas/BranchResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve project's custom hostname config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to fetch database branch" } }, - "tags": ["Domains"], - "security": [{ "bearer": [] }] - }, + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_read"] }], + "summary": "Get a database branch", + "tags": ["Environments"], + "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/custom-hostname": { + "get": { + "operationId": "v1-get-hostname-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateCustomHostnameResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's custom hostname config" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_read"] }], + "summary": "[Beta] Gets project's custom hostname config", + "tags": ["Domains"], + "x-badges": [{ "name": "OAuth scope: domains:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:read" + }, "delete": { "operationId": "v1-Delete hostname config", - "summary": "[Beta] Deletes a project's custom hostname configuration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "200": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete project custom hostname configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], + "summary": "[Beta] Deletes a project's custom hostname configuration", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/custom-hostname/initialize": { "post": { "operationId": "v1-update-hostname-config", - "summary": "[Beta] Updates project's custom hostname configuration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -707,24 +1521,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project custom hostname configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], + "summary": "[Beta] Updates project's custom hostname configuration", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/custom-hostname/reverify": { "post": { "operationId": "v1-verify-dns-config", - "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -736,24 +1555,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to verify project custom hostname configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], + "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/custom-hostname/activate": { "post": { "operationId": "v1-activate-custom-hostname", - "summary": "[Beta] Activates a custom hostname for a project.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -765,24 +1589,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to activate project custom hostname configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], + "summary": "[Beta] Activates a custom hostname for a project.", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/network-bans/retrieve": { "post": { "operationId": "v1-list-all-network-bans", - "summary": "[Beta] Gets project's network bans", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -794,24 +1623,63 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's network bans" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_network_bans_read"] }], + "summary": "[Beta] Gets project's network bans", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/network-bans/retrieve/enriched": { + "post": { + "operationId": "v1-list-all-network-bans-enriched", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/NetworkBanResponseEnriched" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's enriched network bans" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_network_bans_read"] }], + "summary": "[Beta] Gets project's network bans with additional information about which databases they affect", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, "/v1/projects/{ref}/network-bans": { "delete": { "operationId": "v1-delete-network-bans", - "summary": "[Beta] Remove network bans.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -824,24 +1692,29 @@ }, "responses": { "200": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to remove network bans." } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_network_bans_write"] }], + "summary": "[Beta] Remove network bans.", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" } }, "/v1/projects/{ref}/network-restrictions": { "get": { "operationId": "v1-get-network-restrictions", - "summary": "[Beta] Gets project's network restrictions", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -853,24 +1726,75 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's network restrictions" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_read"] } + ], + "summary": "[Beta] Gets project's network restrictions", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:read" + }, + "patch": { + "operationId": "v1-patch-network-restrictions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/NetworkRestrictionsPatchRequest" } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/NetworkRestrictionsV2Response" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project network restrictions" } + }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_write"] } + ], + "summary": "[Alpha] Updates project's network restrictions by adding or removing CIDRs", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" } }, "/v1/projects/{ref}/network-restrictions/apply": { "post": { "operationId": "v1-update-network-restrictions", - "summary": "[Beta] Updates project's network restrictions", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -890,24 +1814,32 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project network restrictions" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_write"] } + ], + "summary": "[Beta] Updates project's network restrictions", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" } }, "/v1/projects/{ref}/pgsodium": { "get": { "operationId": "v1-get-pgsodium-config", - "summary": "[Beta] Gets project's pgsodium config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -919,22 +1851,27 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's pgsodium config" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "[Beta] Gets project's pgsodium config", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "secrets:read" }, "put": { "operationId": "v1-update-pgsodium-config", - "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -954,24 +1891,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's pgsodium config" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "secrets:write" } }, "/v1/projects/{ref}/postgrest": { "get": { "operationId": "v1-get-postgrest-service-config", - "summary": "Gets project's postgrest config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -983,29 +1925,34 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's postgrest config" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["data_api_config_read"] }], + "summary": "Gets project's postgrest config", "tags": ["Rest"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: rest:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "rest:read" }, "patch": { "operationId": "v1-update-postgrest-service-config", - "summary": "Updates project's postgrest config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdatePostgrestConfigBody" } + "schema": { "$ref": "#/components/schemas/V1UpdatePostgrestConfigBody" } } } }, @@ -1018,24 +1965,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's postgrest config" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["data_api_config_write"] }], + "summary": "Updates project's postgrest config", "tags": ["Rest"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: rest:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "rest:write" } }, "/v1/projects/{ref}": { "get": { "operationId": "v1-get-project", - "summary": "Gets a specific project that belongs to the authenticated user", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1047,23 +1999,66 @@ } } }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_read"] }], + "summary": "Gets a specific project that belongs to the authenticated user", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" }, "delete": { "operationId": "v1-delete-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1ProjectRefResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], "summary": "Deletes the given project", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra", "dev-workflows"], + "x-oauth-scope": "projects:write" + }, + "patch": { + "operationId": "v1-update-a-project", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1UpdateProjectBody" } } + } + }, "responses": { "200": { "description": "", @@ -1073,24 +2068,30 @@ } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "Updates the given project", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:write" } }, "/v1/projects/{ref}/secrets": { "get": { - "operationId": "v1-list-all-secrets", - "summary": "List all secrets", "description": "Returns all secrets you've previously added to the specified project.", + "operationId": "v1-list-all-secrets", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1105,86 +2106,93 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's secrets" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_read"] }], + "summary": "List all secrets", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:read" }, "post": { - "operationId": "v1-bulk-create-secrets", - "summary": "Bulk create secrets", "description": "Creates multiple secrets and adds them to the specified project.", + "operationId": "v1-bulk-create-secrets", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { - "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/CreateSecretBody" } - } - } + "application/json": { "schema": { "$ref": "#/components/schemas/CreateSecretBody" } } } }, "responses": { "201": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create project's secrets" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_write"] }], + "summary": "Bulk create secrets", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:write" }, "delete": { - "operationId": "v1-bulk-delete-secrets", - "summary": "Bulk delete secrets", "description": "Deletes all secrets with the given names from the specified project", + "operationId": "v1-bulk-delete-secrets", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { - "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } + "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSecretsBody" } } } }, "responses": { - "200": { - "description": "", - "content": { "application/json": { "schema": { "type": "object" } } } - }, - "403": { "description": "" }, + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete secrets with given names" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_write"] }], + "summary": "Bulk delete secrets", "tags": ["Secrets"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:write" } }, "/v1/projects/{ref}/ssl-enforcement": { "get": { "operationId": "v1-get-ssl-enforcement-config", - "summary": "[Beta] Get project's SSL enforcement configuration.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1196,22 +2204,27 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's SSL enforcement config" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_ssl_config_read"] }], + "summary": "[Beta] Get project's SSL enforcement configuration.", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" }, "put": { "operationId": "v1-update-ssl-enforcement-config", - "summary": "[Beta] Update project's SSL enforcement configuration.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1231,18 +2244,23 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's SSL enforcement configuration." } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_ssl_config_write"] }], + "summary": "[Beta] Update project's SSL enforcement configuration.", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:write" } }, "/v1/projects/{ref}/types/typescript": { "get": { - "operationId": "v1-generate-typescript-types", - "summary": "Generate TypeScript types", "description": "Returns the TypeScript types of your schema for use with supabase-js.", + "operationId": "v1-generate-typescript-types", "parameters": [ { "name": "included_schemas", @@ -1255,7 +2273,7 @@ "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1267,24 +2285,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to generate TypeScript types" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], + "summary": "Generate TypeScript types", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:read" } }, "/v1/projects/{ref}/vanity-subdomain": { "get": { "operationId": "v1-get-vanity-subdomain-config", - "summary": "[Beta] Gets current vanity subdomain config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1296,44 +2319,54 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project vanity subdomain configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_read"] }], + "summary": "[Beta] Gets current vanity subdomain config", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:read" }, "delete": { "operationId": "v1-deactivate-vanity-subdomain-config", - "summary": "[Beta] Deletes a project's vanity subdomain configuration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "200": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete project vanity subdomain configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], + "summary": "[Beta] Deletes a project's vanity subdomain configuration", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/vanity-subdomain/check-availability": { "post": { "operationId": "v1-check-vanity-subdomain-availability", - "summary": "[Beta] Checks vanity subdomain availability", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1351,24 +2384,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to check project vanity subdomain configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], + "summary": "[Beta] Checks vanity subdomain availability", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/vanity-subdomain/activate": { "post": { "operationId": "v1-activate-vanity-subdomain-config", - "summary": "[Beta] Activates a vanity subdomain for a project.", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1386,24 +2424,29 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to activate project vanity subdomain configuration" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], + "summary": "[Beta] Activates a vanity subdomain for a project.", "tags": ["Domains"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, "/v1/projects/{ref}/upgrade": { "post": { "operationId": "v1-upgrade-postgres-version", - "summary": "[Beta] Upgrades the project's Postgres version", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1421,24 +2464,32 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to initiate project upgrade" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["project_admin_write", "database_write"] } + ], + "summary": "[Beta] Upgrades the project's Postgres version", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" } }, "/v1/projects/{ref}/upgrade/eligibility": { "get": { "operationId": "v1-get-postgres-upgrade-eligibility", - "summary": "[Beta] Returns the project's eligibility for upgrades", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1450,24 +2501,32 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to determine project upgrade eligibility" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["project_admin_read", "database_read"] } + ], + "summary": "[Beta] Returns the project's eligibility for upgrades", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, "/v1/projects/{ref}/upgrade/status": { "get": { "operationId": "v1-get-postgres-upgrade-status", - "summary": "[Beta] Gets the latest status of the project's upgrade", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, { "name": "tracking_id", @@ -1485,24 +2544,32 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project upgrade status" } }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["project_admin_read", "database_read"] } + ], + "summary": "[Beta] Gets the latest status of the project's upgrade", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, "/v1/projects/{ref}/readonly": { "get": { "operationId": "v1-get-readonly-mode-status", - "summary": "Returns project's readonly mode status", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1514,44 +2581,56 @@ } } }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project readonly mode status" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_readonly_config_read"] }], + "summary": "Returns project's readonly mode status", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra", "support-tooling"], + "x-oauth-scope": "database:read" } }, "/v1/projects/{ref}/readonly/temporary-disable": { "post": { "operationId": "v1-disable-readonly-mode-temporarily", - "summary": "Disables project's readonly mode for the next 15 minutes", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to disable project's readonly mode" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_readonly_config_write"] }], + "summary": "Disables project's readonly mode for the next 15 minutes", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra", "support-tooling"], + "x-oauth-scope": "database:write" } }, "/v1/projects/{ref}/read-replicas/setup": { "post": { "operationId": "v1-setup-a-read-replica", - "summary": "[Beta] Set up a read replica", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1564,24 +2643,27 @@ }, "responses": { "201": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to set up read replica" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_read_replicas_write"] }], + "summary": "[Beta] Set up a read replica", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-endpoint-owners": ["management-api", "infra"] } }, "/v1/projects/{ref}/read-replicas/remove": { "post": { "operationId": "v1-remove-a-read-replica", - "summary": "[Beta] Remove a read replica", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { @@ -1594,30 +2676,27 @@ }, "responses": { "201": { "description": "" }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to remove read replica" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_read_replicas_write"] }], + "summary": "[Beta] Remove a read replica", "tags": ["Database"], - "security": [{ "bearer": [] }] + "x-endpoint-owners": ["management-api", "infra"] } }, "/v1/projects/{ref}/health": { "get": { "operationId": "v1-get-services-health", - "summary": "Gets project's service health status", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { - "name": "timeout_ms", - "required": false, - "in": "query", - "schema": { "minimum": 0, "maximum": 10000, "type": "integer" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, { "name": "services", @@ -1627,9 +2706,24 @@ "type": "array", "items": { "type": "string", - "enum": ["auth", "db", "pooler", "realtime", "rest", "storage"] + "enum": [ + "auth", + "db", + "db_postgres_user", + "pooler", + "realtime", + "rest", + "storage", + "pg_bouncer" + ] } } + }, + { + "name": "timeout_ms", + "required": false, + "in": "query", + "schema": { "minimum": 0, "maximum": 10000, "type": "integer" } } ], "responses": { @@ -1644,81 +2738,60 @@ } } }, - "403": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's service health status" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_read"] }], + "summary": "Gets project's service health status", "tags": ["Projects"], - "security": [{ "bearer": [] }] + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, - "/v1/projects/{ref}/config/storage": { - "get": { - "operationId": "v1-get-storage-config", - "summary": "Gets project's storage config", + "/v1/projects/{ref}/config/auth/signing-keys/legacy": { + "post": { + "operationId": "v1-create-legacy-signing-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/StorageConfigResponse" } + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve project's storage config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Storage"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], + "summary": "Set up the project's existing JWT secret as an in_use JWT signing key. This endpoint will be removed in the future always check for HTTP 404 Not Found.", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" }, - "patch": { - "operationId": "v1-update-storage-config", - "summary": "Updates project's storage config", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateStorageConfigBody" } - } - } - }, - "responses": { - "200": { "description": "" }, - "403": { "description": "" }, - "500": { "description": "Failed to update project's storage config" } - }, - "tags": ["Storage"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/config/database/postgres": { "get": { - "operationId": "v1-get-postgres-config", - "summary": "Gets project's Postgres config", + "operationId": "v1-get-legacy-signing-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1726,62 +2799,71 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/PostgresConfigResponse" } + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } } } }, - "500": { "description": "Failed to retrieve project's Postgres config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] - }, - "put": { - "operationId": "v1-update-postgres-config", - "summary": "Updates project's Postgres config", + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], + "summary": "Get the signing key information for the JWT secret imported as signing key for this project. This endpoint will be removed in the future, check for HTTP 404 Not Found.", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:read" + } + }, + "/v1/projects/{ref}/config/auth/signing-keys": { + "post": { + "operationId": "v1-create-project-signing-key", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdatePostgresConfigBody" } + "schema": { "$ref": "#/components/schemas/CreateSigningKeyBody" } } } }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/PostgresConfigResponse" } + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to update project's Postgres config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/config/database/pgbouncer": { + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], + "summary": "Create a new signing key for the project in standby status", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" + }, "get": { - "operationId": "v1-get-project-pgbouncer-config", - "summary": "Get project's pgbouncer config", + "operationId": "v1-get-project-signing-keys", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1789,26 +2871,38 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/V1PgbouncerConfigResponse" } + "schema": { "$ref": "#/components/schemas/SigningKeysResponse" } } } }, - "500": { "description": "Failed to retrieve project's pgbouncer config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], + "summary": "List all signing keys for the project", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:read" } }, - "/v1/projects/{ref}/config/database/pooler": { + "/v1/projects/{ref}/config/auth/signing-keys/{id}": { "get": { - "operationId": "v1-get-supavisor-config", - "summary": "Gets project's supavisor config", + "operationId": "v1-get-project-signing-key", "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + }, { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1816,35 +2910,78 @@ "description": "", "content": { "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/SupavisorConfigResponse" } - } + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } } } }, - "500": { "description": "Failed to retrieve project's supavisor config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], + "summary": "Get information about a signing key", + "tags": ["Auth"], + "x-endpoint-owners": ["auth"] + }, + "delete": { + "operationId": "v1-remove-project-signing-key", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + }, + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], + "summary": "Remove a signing key from a project. Only possible if the key has been in revoked status for a while.", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" }, "patch": { - "operationId": "v1-update-supavisor-config", - "summary": "Updates project's supavisor config", + "operationId": "v1-update-project-signing-key", "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + }, { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateSupavisorConfigBody" } + "schema": { "$ref": "#/components/schemas/UpdateSigningKeyBody" } } } }, @@ -1853,28 +2990,32 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateSupavisorConfigResponse" } + "schema": { "$ref": "#/components/schemas/SigningKeyResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to update project's supavisor config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], + "summary": "Update a signing key, mainly its status", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" } }, - "/v1/projects/{ref}/config/auth": { + "/v1/projects/{ref}/config/storage": { "get": { - "operationId": "v1-get-auth-service-config", - "summary": "Gets project's auth config", + "operationId": "v1-get-storage-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1882,95 +3023,136 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/AuthConfigResponse" } + "schema": { "$ref": "#/components/schemas/StorageConfigResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve project's auth config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's storage config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_config_read"] }], + "summary": "Gets project's storage config", + "tags": ["Storage"], + "x-endpoint-owners": ["storage"] }, "patch": { - "operationId": "v1-update-auth-service-config", - "summary": "Updates a project's auth config", + "operationId": "v1-update-storage-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateAuthConfigBody" } + "schema": { "$ref": "#/components/schemas/UpdateStorageConfigBody" } } } }, + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project's storage config" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_config_write"] }], + "summary": "Updates project's storage config", + "tags": ["Storage"], + "x-endpoint-owners": ["storage"] + } + }, + "/v1/projects/{ref}/config/database/postgres": { + "get": { + "operationId": "v1-get-postgres-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/AuthConfigResponse" } + "schema": { "$ref": "#/components/schemas/PostgresConfigResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to update project's auth config" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's Postgres config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/config/auth/third-party-auth": { - "post": { - "operationId": "createTPAForProject", - "summary": "Creates a new third-party auth integration", + "security": [{ "bearer": [] }, { "fga_permissions": ["database_config_read"] }], + "summary": "Gets project's Postgres config", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" + }, + "put": { + "operationId": "v1-update-postgres-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/CreateThirdPartyAuthBody" } + "schema": { "$ref": "#/components/schemas/UpdatePostgresConfigBody" } } } }, "responses": { - "201": { + "200": { "description": "", "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } + "application/json": { + "schema": { "$ref": "#/components/schemas/PostgresConfigResponse" } + } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project's Postgres config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] - }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_config_write"] }], + "summary": "Updates project's Postgres config", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/config/database/pgbouncer": { "get": { - "operationId": "listTPAForProject", - "summary": "[Alpha] Lists all third-party auth integrations", + "operationId": "v1-get-project-pgbouncer-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -1978,267 +3160,285 @@ "description": "", "content": { "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/ThirdPartyAuth" } - } + "schema": { "$ref": "#/components/schemas/V1PgbouncerConfigResponse" } } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's pgbouncer config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "fga_permissions": ["database_read"] }], + "summary": "Get project's pgbouncer config", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}": { - "delete": { - "operationId": "deleteTPAForProject", - "summary": "[Alpha] Removes a third-party auth integration", + "/v1/projects/{ref}/config/database/pooler": { + "get": { + "operationId": "v1-get-pooler-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { "name": "tpa_id", "required": true, "in": "path", "schema": { "type": "string" } } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], "responses": { "200": { "description": "", "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/SupavisorConfigResponse" } + } + } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's supavisor config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_pooling_config_read"] }], + "summary": "Gets project's supavisor config", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" }, - "get": { - "operationId": "getTPAForProject", - "summary": "[Alpha] Get a third-party integration", + "patch": { + "operationId": "v1-update-pooler-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { "name": "tpa_id", "required": true, "in": "path", "schema": { "type": "string" } } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateSupavisorConfigBody" } + } + } + }, "responses": { "200": { "description": "", "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateSupavisorConfigResponse" } + } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project's supavisor config" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_pooling_config_write"] }], + "summary": "Updates project's supavisor config", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" } }, - "/v1/projects/{ref}/pause": { - "post": { - "operationId": "v1-pause-a-project", - "summary": "Pauses the given project", + "/v1/projects/{ref}/config/auth": { + "get": { + "operationId": "v1-get-auth-service-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], - "responses": { "200": { "description": "" }, "403": { "description": "" } }, - "tags": ["Projects"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/restore": { - "get": { - "operationId": "v1-list-available-restore-versions", - "summary": "Lists available restore versions for the given project", - "parameters": [ - { "name": "ref", "required": true, "in": "path", "schema": { "type": "string" } } - ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/GetProjectAvailableRestoreVersionsResponse" - } + "schema": { "$ref": "#/components/schemas/AuthConfigResponse" } } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's auth config" } }, - "tags": ["Projects"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], + "summary": "Gets project's auth config", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" }, - "post": { - "operationId": "v1-restore-a-project", - "summary": "Restores the given project", + "patch": { + "operationId": "v1-update-auth-service-config", "parameters": [ - { "name": "ref", "required": true, "in": "path", "schema": { "type": "string" } } + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/RestoreProjectBodyDto" } + "schema": { "$ref": "#/components/schemas/UpdateAuthConfigBody" } } } }, - "responses": { "200": { "description": "" }, "403": { "description": "" } }, - "tags": ["Projects"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/restore/cancel": { - "post": { - "operationId": "v1-cancel-a-project-restoration", - "summary": "Cancels the given project restoration", - "parameters": [ - { "name": "ref", "required": true, "in": "path", "schema": { "type": "string" } } - ], - "responses": { "200": { "description": "" }, "403": { "description": "" } }, - "tags": ["Projects"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/analytics/endpoints/logs.all": { - "get": { - "operationId": "getLogs", - "summary": "Gets project's logs", - "parameters": [ - { - "name": "iso_timestamp_end", - "required": false, - "in": "query", - "schema": { "type": "string" } - }, - { - "name": "iso_timestamp_start", - "required": false, - "in": "query", - "schema": { "type": "string" } - }, - { "name": "sql", "required": false, "in": "query", "schema": { "type": "string" } }, - { "name": "ref", "required": true, "in": "path", "schema": { "type": "string" } } - ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/V1AnalyticsResponse" } + "schema": { "$ref": "#/components/schemas/AuthConfigResponse" } } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update project's auth config" } }, - "tags": ["Analytics"], - "security": [{ "bearer": [] }] + "security": [ + { "bearer": [] }, + { "fga_permissions": ["auth_config_write", "project_admin_write"] } + ], + "summary": "Updates a project's auth config", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" } }, - "/v1/projects/{ref}/database/query": { - "post": { - "operationId": "v1-run-a-query", - "summary": "[Beta] Run sql query", + "/v1/projects/{ref}/config/realtime": { + "get": { + "operationId": "v1-get-realtime-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/V1RunQueryBody" } } - } - }, "responses": { - "201": { - "description": "", - "content": { "application/json": { "schema": { "type": "object" } } } + "200": { + "description": "Gets project's realtime configuration", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/RealtimeConfigResponse" } + } + } }, - "403": { "description": "" }, - "500": { "description": "Failed to run sql query" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/database/webhooks/enable": { - "post": { - "operationId": "v1-enable-database-webhook", - "summary": "[Beta] Enables Database Webhooks on the project", + "security": [{ "bearer": [] }], + "summary": "Gets realtime configuration", + "tags": ["Realtime"], + "x-endpoint-owners": ["realtime"] + }, + "patch": { + "operationId": "v1-update-realtime-config", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], - "responses": { - "201": { "description": "" }, - "403": { "description": "" }, - "500": { "description": "Failed to enable Database Webhooks on the project" } + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateRealtimeConfigBody" } + } + } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] + "responses": { + "204": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }], + "summary": "Updates realtime configuration", + "tags": ["Realtime"], + "x-endpoint-owners": ["realtime"] } }, - "/v1/projects/{ref}/database/context": { - "get": { - "operationId": "getDatabaseMetadata", - "summary": "Gets database metadata for the given project.", - "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", - "deprecated": true, + "/v1/projects/{ref}/config/auth/third-party-auth": { + "post": { + "operationId": "v1-create-project-tpa-integration", "parameters": [ - { "name": "ref", "required": true, "in": "path", "schema": { "type": "string" } } + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/CreateThirdPartyAuthBody" } + } + } + }, "responses": { - "200": { + "201": { "description": "", "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/GetProjectDbMetadataResponseDto" } - } + "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } } }, - "403": { "description": "" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/functions": { + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], + "summary": "Creates a new third-party auth integration", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, "get": { - "operationId": "v1-list-all-functions", - "summary": "List all functions", - "description": "Returns all functions you've previously added to the specified project.", + "operationId": "v1-list-project-tpa-integrations", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -2248,195 +3448,217 @@ "application/json": { "schema": { "type": "array", - "items": { "$ref": "#/components/schemas/FunctionResponse" } + "items": { "$ref": "#/components/schemas/ThirdPartyAuth" } } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve project's functions" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] - }, - "post": { - "operationId": "v1-create-a-function", - "summary": "Create a function", - "description": "This endpoint is deprecated - use the deploy endpoint. Creates a function and adds it to the specified project.", - "deprecated": true, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], + "summary": "Lists all third-party auth integrations", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + } + }, + "/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}": { + "delete": { + "operationId": "v1-delete-project-tpa-integration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } - }, - { "name": "name", "required": false, "in": "query", "schema": { "type": "string" } }, - { - "name": "verify_jwt", - "required": false, - "in": "query", - "schema": { "type": "boolean" } - }, - { - "name": "import_map", - "required": false, - "in": "query", - "schema": { "type": "boolean" } - }, - { - "name": "entrypoint_path", - "required": false, - "in": "query", - "schema": { "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "import_map_path", - "required": false, - "in": "query", - "schema": { "type": "string" } + "name": "tpa_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/V1CreateFunctionBody" } - }, - "application/vnd.denoland.eszip": { - "schema": { "$ref": "#/components/schemas/V1CreateFunctionBody" } - } - } - }, "responses": { - "201": { + "200": { "description": "", "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/FunctionResponse" } } + "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to create project's function" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], + "summary": "Removes a third-party auth integration", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" }, - "put": { - "operationId": "v1-bulk-update-functions", - "summary": "Bulk update functions", - "description": "Bulk update functions. It will create a new function or replace existing. The operation is idempotent. NOTE: You will need to manually bump the version.", + "get": { + "operationId": "v1-get-project-tpa-integration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "tpa_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/BulkUpdateFunctionBody" } - } - } - } - }, "responses": { "200": { "description": "", "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/BulkUpdateFunctionResponse" } - } + "application/json": { "schema": { "$ref": "#/components/schemas/ThirdPartyAuth" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to update functions" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], + "summary": "Get a third-party integration", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" } }, - "/v1/projects/{ref}/functions/deploy": { + "/v1/projects/{ref}/pause": { "post": { - "operationId": "v1-deploy-a-function", - "summary": "Deploy a function", - "description": "A new endpoint to deploy functions. It will create if function does not exist.", + "operationId": "v1-pause-a-project", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } - }, - { - "name": "bundleOnly", - "required": false, - "in": "query", - "schema": { "type": "boolean" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { "$ref": "#/components/schemas/FunctionDeployBody" } - } - } + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "Pauses the given project", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/restore": { + "get": { + "operationId": "v1-list-available-restore-versions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/DeployFunctionResponse" } + "schema": { + "$ref": "#/components/schemas/GetProjectAvailableRestoreVersionsResponse" + } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to deploy function" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_read"] }], + "summary": "Lists available restore versions for the given project", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + }, + "post": { + "operationId": "v1-restore-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "Restores the given project", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" } }, - "/v1/projects/{ref}/functions/{function_slug}": { - "get": { - "operationId": "v1-get-a-function", - "summary": "Retrieve a function", - "description": "Retrieves a function with the specified slug and project.", + "/v1/projects/{ref}/restore/cancel": { + "post": { + "operationId": "v1-cancel-a-project-restoration", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], + "summary": "Cancels the given project restoration", + "tags": ["Projects"], + "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/billing/addons": { + "get": { + "description": "Returns the billing addons that are currently applied, including the active compute instance size, and lists every addon option that can be provisioned with pricing metadata.", + "operationId": "v1-list-project-addons", + "parameters": [ { - "name": "function_slug", + "name": "ref", "required": true, "in": "path", - "description": "Function slug", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -2444,161 +3666,154 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/FunctionSlugResponse" } + "schema": { "$ref": "#/components/schemas/ListProjectAddonsResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve function with given slug" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to list project addons" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_read"] }], + "summary": "List billing addons and compute instance selections", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] }, "patch": { - "operationId": "v1-update-a-function", - "summary": "Update a function", - "description": "Updates a function with the specified slug and project.", + "description": "Selects an addon variant, for example scaling the project’s compute instance up or down, and applies it to the project.", + "operationId": "v1-apply-project-addon", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } - }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } - }, - { "name": "name", "required": false, "in": "query", "schema": { "type": "string" } }, - { - "name": "verify_jwt", - "required": false, - "in": "query", - "schema": { "type": "boolean" } - }, - { - "name": "import_map", - "required": false, - "in": "query", - "schema": { "type": "boolean" } - }, - { - "name": "entrypoint_path", - "required": false, - "in": "query", - "schema": { "type": "string" } - }, - { - "name": "import_map_path", - "required": false, - "in": "query", - "schema": { "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/V1UpdateFunctionBody" } - }, - "application/vnd.denoland.eszip": { - "schema": { "$ref": "#/components/schemas/V1UpdateFunctionBody" } + "schema": { "$ref": "#/components/schemas/ApplyProjectAddonBody" } } } }, "responses": { - "200": { - "description": "", - "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/FunctionResponse" } } - } - }, - "403": { "description": "" }, - "500": { "description": "Failed to update function with given slug" } - }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] - }, + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to apply project addon" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_write"] }], + "summary": "Apply or update billing addons, including compute instance size", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] + } + }, + "/v1/projects/{ref}/billing/addons/{addon_variant}": { "delete": { - "operationId": "v1-delete-a-function", - "summary": "Delete a function", - "description": "Deletes a function with the specified slug from the specified project.", + "description": "Disables the selected addon variant, including rolling the compute instance back to its previous size.", + "operationId": "v1-remove-project-addon", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "function_slug", + "name": "addon_variant", "required": true, "in": "path", - "description": "Function slug", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } + "schema": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { "type": "string", "enum": ["cd_default"] }, + { "type": "string", "enum": ["pitr_7", "pitr_14", "pitr_28"] }, + { "type": "string", "enum": ["ipv4_default"] } + ] + } } ], "responses": { "200": { "description": "" }, - "403": { "description": "" }, - "500": { "description": "Failed to delete function with given slug" } - }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to remove project addon" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_write"] }], + "summary": "Remove billing addons or revert compute instance sizing", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] } }, - "/v1/projects/{ref}/functions/{function_slug}/body": { + "/v1/projects/{ref}/claim-token": { "get": { - "operationId": "v1-get-a-function-body", - "summary": "Retrieve a function body", - "description": "Retrieves a function body for the specified slug and project.", + "operationId": "v1-get-project-claim-token", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { "pattern": "/^[A-Za-z0-9_-]+$/", "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "200": { "description": "" }, - "403": { "description": "" }, - "500": { "description": "Failed to retrieve function body with given slug" } + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ProjectClaimTokenResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Edge Functions"], - "security": [{ "bearer": [] }] - } - }, - "/v1/projects/{ref}/storage/buckets": { - "get": { - "operationId": "v1-list-all-buckets", - "summary": "Lists all buckets", + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_read"] }], + "summary": "Gets project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, + "post": { + "operationId": "v1-create-project-claim-token", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { @@ -2606,64 +3821,103 @@ "description": "", "content": { "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/V1StorageBucketResponse" } - } + "schema": { "$ref": "#/components/schemas/CreateProjectClaimTokenResponse" } } } }, - "403": { "description": "" }, - "500": { "description": "Failed to get list of buckets" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Storage"], - "security": [{ "bearer": [] }] + "security": [ + { "bearer": [] }, + { "fga_permissions": ["organization_admin_write", "project_admin_write"] } + ], + "summary": "Creates project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, + "delete": { + "operationId": "v1-delete-project-claim-token", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "204": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [ + { "bearer": [] }, + { "fga_permissions": ["organization_admin_write", "project_admin_write"] } + ], + "summary": "Revokes project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true } }, - "/v1/projects/{ref}/config/auth/sso/providers": { - "post": { - "operationId": "v1-create-a-sso-provider", - "summary": "Creates a new SSO provider", + "/v1/projects/{ref}/advisors/performance": { + "get": { + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-performance-advisors", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/CreateProviderBody" } } - } - }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/CreateProviderResponse" } + "schema": { "$ref": "#/components/schemas/V1ProjectAdvisorsResponse" } } } }, - "403": { "description": "" }, - "404": { "description": "SAML 2.0 support is not enabled for this project" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] - }, + "security": [{ "bearer": [] }, { "fga_permissions": ["advisors_read"] }], + "summary": "Gets project performance advisors.", + "tags": ["Advisors"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/advisors/security": { "get": { - "operationId": "v1-list-all-sso-provider", - "summary": "Lists all SSO providers", + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-security-advisors", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "lint_type", + "required": false, + "in": "query", + "schema": { "type": "string", "enum": ["sql"] } } ], "responses": { @@ -2671,1189 +3925,3881 @@ "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/ListProvidersResponse" } + "schema": { "$ref": "#/components/schemas/V1ProjectAdvisorsResponse" } } } }, - "403": { "description": "" }, - "404": { "description": "SAML 2.0 support is not enabled for this project" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["advisors_read"] }], + "summary": "Gets project security advisors.", + "tags": ["Advisors"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/config/auth/sso/providers/{provider_id}": { + "/v1/projects/{ref}/analytics/endpoints/logs.all": { "get": { - "operationId": "v1-get-a-sso-provider", - "summary": "Gets a SSO provider by its UUID", + "description": "Executes a SQL query on the project's logs.\n\nEither the `iso_timestamp_start` and `iso_timestamp_end` parameters must be provided.\nIf both are not provided, only the last 1 minute of logs will be queried.\nThe timestamp range must be no more than 24 hours and is rounded to the nearest minute. If the range is more than 24 hours, a validation error will be thrown.\n\nNote: Unless the `sql` parameter is provided, only edge_logs will be queried. See the [log query docs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer:~:text=logs%20from%20the-,Sources,-drop%2Ddown%3A) for all available sources. \n", + "operationId": "v1-get-project-logs", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "sql", + "required": false, + "in": "query", + "description": "Custom SQL query to execute on the logs. See [querying logs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer) for more details.", + "schema": { "type": "string" } + }, + { + "name": "iso_timestamp_start", + "required": false, + "in": "query", + "schema": { "format": "date-time", "type": "string" } }, - { "name": "provider_id", "required": true, "in": "path", "schema": { "type": "string" } } + { + "name": "iso_timestamp_end", + "required": false, + "in": "query", + "schema": { "format": "date-time", "type": "string" } + } ], "responses": { "200": { "description": "", "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/GetProviderResponse" } - } + "application/json": { "schema": { "$ref": "#/components/schemas/AnalyticsResponse" } } } }, - "403": { "description": "" }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" - } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] - }, - "put": { - "operationId": "v1-update-a-sso-provider", - "summary": "Updates a SSO provider by its UUID", + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_logs_read"] }], + "summary": "Gets project's logs", + "tags": ["Analytics"], + "x-badges": [{ "name": "OAuth scope: analytics:read", "position": "after" }], + "x-endpoint-owners": ["analytics"], + "x-oauth-scope": "analytics:read" + } + }, + "/v1/projects/{ref}/analytics/endpoints/usage.api-counts": { + "get": { + "operationId": "v1-get-project-usage-api-count", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - { "name": "provider_id", "required": true, "in": "path", "schema": { "type": "string" } } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProviderBody" } } + { + "name": "interval", + "required": false, + "in": "query", + "schema": { + "type": "string", + "enum": ["15min", "30min", "1hr", "3hr", "1day", "3day", "7day"] + } } - }, + ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/UpdateProviderResponse" } + "schema": { "$ref": "#/components/schemas/V1GetUsageApiCountResponse" } } } }, - "403": { "description": "" }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" - } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get project's usage api counts" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] - }, - "delete": { - "operationId": "v1-delete-a-sso-provider", - "summary": "Removes a SSO provider by its UUID", + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], + "summary": "Gets project's usage api counts", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] + } + }, + "/v1/projects/{ref}/analytics/endpoints/usage.api-requests-count": { + "get": { + "operationId": "v1-get-project-usage-request-count", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - }, - { "name": "provider_id", "required": true, "in": "path", "schema": { "type": "string" } } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/DeleteProviderResponse" } + "schema": { "$ref": "#/components/schemas/V1GetUsageApiRequestsCountResponse" } } } }, - "403": { "description": "" }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" - } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get project's usage api requests count" } }, - "tags": ["Auth"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], + "summary": "Gets project's usage api requests count", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] } }, - "/v1/projects/{ref}/database/backups": { + "/v1/projects/{ref}/analytics/endpoints/functions.combined-stats": { "get": { - "operationId": "v1-list-all-backups", - "summary": "Lists all backups", + "operationId": "v1-get-project-function-combined-stats", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } - } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "interval", + "required": true, + "in": "query", + "schema": { "type": "string", "enum": ["15min", "1hr", "3hr", "1day"] } + }, + { "name": "function_id", "required": true, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/V1BackupsResponse" } } + "application/json": { "schema": { "$ref": "#/components/schemas/AnalyticsResponse" } } } }, - "500": { "description": "Failed to get backups" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get project's function combined statistics" } }, - "tags": ["Database"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], + "summary": "Gets a project's function combined statistics", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] } }, - "/v1/projects/{ref}/database/backups/restore-pitr": { + "/v1/projects/{ref}/cli/login-role": { "post": { - "operationId": "v1-restore-pitr-backup", - "summary": "Restores a PITR backup for a database", + "operationId": "v1-create-login-role", "parameters": [ { "name": "ref", "required": true, "in": "path", "description": "Project ref", - "schema": { "minLength": 20, "maxLength": 20, "type": "string" } + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } ], "requestBody": { "required": true, "content": { - "application/json": { "schema": { "$ref": "#/components/schemas/V1RestorePitrBody" } } + "application/json": { "schema": { "$ref": "#/components/schemas/CreateRoleBody" } } } }, - "responses": { "201": { "description": "" } }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/CreateRoleResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to create login role" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], + "summary": "[Beta] Create a login role for CLI with temporary password", "tags": ["Database"], - "security": [{ "bearer": [] }] - } - }, - "/v1/organizations/{slug}/members": { - "get": { - "operationId": "v1-list-organization-members", - "summary": "List members of an organization", + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:write" + }, + "delete": { + "operationId": "v1-delete-login-roles", "parameters": [ - { "name": "slug", "required": true, "in": "path", "schema": { "type": "string" } } + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/V1OrganizationMemberResponse" } - } + "schema": { "$ref": "#/components/schemas/DeleteRolesResponse" } } } - } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to delete login roles" } }, - "tags": ["Organizations"], - "security": [{ "bearer": [] }] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], + "summary": "[Beta] Delete existing login roles used by CLI", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:write" } }, - "/v1/organizations/{slug}": { + "/v1/projects/{ref}/database/migrations": { "get": { - "operationId": "v1-get-an-organization", - "summary": "Gets information about the organization", + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-list-migration-history", "parameters": [ - { "name": "slug", "required": true, "in": "path", "schema": { "type": "string" } } + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } ], "responses": { "200": { "description": "", "content": { "application/json": { - "schema": { "$ref": "#/components/schemas/V1OrganizationSlugResponse" } + "schema": { "$ref": "#/components/schemas/V1ListMigrationsResponse" } } } - } - }, - "tags": ["Organizations"], - "security": [{ "bearer": [] }] - } - } - }, - "info": { - "title": "Supabase API (v1)", - "description": "Supabase API generated from the OpenAPI specification.
Visit [https://supabase.com/docs](https://supabase.com/docs) for a complete documentation.", - "version": "1.0.0", - "contact": {} - }, - "tags": [ - { "name": "Auth", "description": "Auth related endpoints" }, - { "name": "Database", "description": "Database related endpoints" }, - { "name": "Domains", "description": "Domains related endpoints" }, - { "name": "Edge Functions", "description": "Edge related endpoints" }, - { "name": "Environments", "description": "Environments related endpoints" }, - { "name": "OAuth", "description": "OAuth related endpoints" }, - { "name": "Organizations", "description": "Organizations related endpoints" }, - { "name": "Projects", "description": "Projects related endpoints" }, - { "name": "Rest", "description": "Rest related endpoints" }, - { "name": "Secrets", "description": "Secrets related endpoints" }, - { "name": "Storage", "description": "Storage related endpoints" } - ], - "servers": [], - "components": { - "securitySchemes": { "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http" } }, - "schemas": { - "BranchDetailResponse": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] }, - "db_port": { "type": "integer" }, - "ref": { "type": "string" }, - "postgres_version": { "type": "string" }, - "postgres_engine": { "type": "string" }, - "release_channel": { "type": "string" }, - "db_host": { "type": "string" }, - "db_user": { "type": "string" }, - "db_pass": { "type": "string" }, - "jwt_secret": { "type": "string" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to list database migrations" } }, - "required": [ - "status", - "db_port", - "ref", - "postgres_version", - "postgres_engine", - "release_channel", - "db_host" - ] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_read"] }], + "summary": "[Beta] List applied migration versions", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" }, - "UpdateBranchBody": { - "type": "object", - "properties": { - "reset_on_push": { - "type": "boolean", - "deprecated": true, - "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead." + "post": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-apply-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "branch_name": { "type": "string" }, - "git_branch": { "type": "string" }, - "persistent": { "type": "boolean" }, - "status": { - "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] + { + "name": "Idempotency-Key", + "required": false, + "in": "header", + "description": "A unique key to ensure the same migration is tracked only once.", + "schema": { "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1CreateMigrationBody" } + } } - } - }, - "BranchResponse": { - "type": "object", - "properties": { - "pr_number": { "type": "integer", "format": "int32" }, - "latest_check_run_id": { - "type": "number", - "deprecated": true, - "description": "This field is deprecated and will not be populated." - }, - "status": { - "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] - }, - "id": { "type": "string" }, - "name": { "type": "string" }, - "project_ref": { "type": "string" }, - "parent_project_ref": { "type": "string" }, - "is_default": { "type": "boolean" }, - "git_branch": { "type": "string" }, - "persistent": { "type": "boolean" }, - "created_at": { "type": "string" }, - "updated_at": { "type": "string" } }, - "required": [ - "status", - "id", - "name", - "project_ref", - "parent_project_ref", - "is_default", - "persistent", - "created_at", - "updated_at" - ] - }, - "BranchDeleteResponse": { - "type": "object", - "properties": { "message": { "type": "string" } }, - "required": ["message"] - }, - "BranchUpdateResponse": { - "type": "object", - "properties": { "workflow_run_id": { "type": "string" }, "message": { "type": "string" } }, - "required": ["workflow_run_id", "message"] - }, - "V1DatabaseResponse": { - "type": "object", - "properties": { - "host": { "type": "string", "description": "Database host" }, - "version": { "type": "string", "description": "Database version" }, - "postgres_engine": { "type": "string", "description": "Database engine" }, - "release_channel": { "type": "string", "description": "Release channel" } + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to apply database migration" } }, - "required": ["host", "version", "postgres_engine", "release_channel"] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], + "summary": "[Beta] Apply a database migration", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" }, - "V1ProjectWithDatabaseResponse": { - "type": "object", - "properties": { - "id": { "type": "string", "description": "Id of your project" }, - "organization_id": { "type": "string", "description": "Slug of your organization" }, - "name": { "type": "string", "description": "Name of your project" }, - "region": { - "type": "string", - "description": "Region of your project", - "example": "us-east-1" - }, - "created_at": { - "type": "string", - "description": "Creation timestamp", - "example": "2023-03-29T16:32:59Z" - }, - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] + "put": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-upsert-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "database": { "$ref": "#/components/schemas/V1DatabaseResponse" } + { + "name": "Idempotency-Key", + "required": false, + "in": "header", + "description": "A unique key to ensure the same migration is tracked only once.", + "schema": { "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1UpsertMigrationBody" } + } + } + }, + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to upsert database migration" } }, - "required": ["id", "organization_id", "name", "region", "created_at", "status", "database"] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], + "summary": "[Beta] Upsert a database migration without applying", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" }, - "V1CreateProjectBodyDto": { - "type": "object", - "properties": { - "db_pass": { "type": "string", "description": "Database password" }, - "name": { "type": "string", "description": "Name of your project" }, - "organization_id": { "type": "string", "description": "Slug of your organization" }, - "plan": { - "type": "string", - "enum": ["free", "pro"], - "deprecated": true, - "description": "Subscription Plan is now set on organization level and is ignored in this request" + "delete": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-rollback-migrations", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "region": { - "type": "string", - "description": "Region you want your server to reside in", - "enum": [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "ap-east-1", - "ap-southeast-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-southeast-2", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-north-1", - "eu-central-1", - "eu-central-2", - "ca-central-1", - "ap-south-1", - "sa-east-1" - ] - }, - "kps_enabled": { - "type": "boolean", - "deprecated": true, - "description": "This field is deprecated and is ignored in this request" - }, - "desired_instance_size": { - "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] - }, - "template_url": { - "type": "string", - "format": "uri", - "description": "Template URL used to create the project from the CLI.", - "example": "https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone" + { + "name": "gte", + "required": true, + "in": "query", + "description": "Rollback migrations greater or equal to this version", + "schema": { "pattern": "^\\d+$", "type": "string" } } + ], + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to rollback database migration" } }, - "required": ["db_pass", "name", "organization_id", "region"], - "additionalProperties": false, - "hideDefinitions": ["release_channel", "postgres_engine"] - }, - "V1ProjectResponse": { - "type": "object", - "properties": { - "id": { "type": "string", "description": "Id of your project" }, - "organization_id": { "type": "string", "description": "Slug of your organization" }, - "name": { "type": "string", "description": "Name of your project" }, - "region": { - "type": "string", - "description": "Region of your project", - "example": "us-east-1" - }, - "created_at": { - "type": "string", - "description": "Creation timestamp", - "example": "2023-03-29T16:32:59Z" + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], + "summary": "[Beta] Rollback database migrations and remove them from history table", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/migrations/{version}": { + "get": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-get-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] + { + "name": "version", + "required": true, + "in": "path", + "schema": { "pattern": "^\\d+$", "type": "string" } } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1GetMigrationResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get database migration" } }, - "required": ["id", "organization_id", "name", "region", "created_at", "status"] - }, - "OrganizationResponseV1": { - "type": "object", - "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, - "required": ["id", "name"] - }, - "CreateOrganizationV1Dto": { - "type": "object", - "properties": { "name": { "type": "string" } }, - "required": ["name"], - "additionalProperties": false - }, - "OAuthTokenBody": { - "type": "object", - "properties": { - "grant_type": { "enum": ["authorization_code", "refresh_token"], "type": "string" }, - "client_id": { "type": "string" }, - "client_secret": { "type": "string" }, - "code": { "type": "string" }, - "code_verifier": { "type": "string" }, - "redirect_uri": { "type": "string" }, - "refresh_token": { "type": "string" } - }, - "required": ["grant_type", "client_id", "client_secret"] - }, - "OAuthTokenResponse": { - "type": "object", - "properties": { - "expires_in": { "type": "integer", "format": "int64" }, - "token_type": { "type": "string", "enum": ["Bearer"] }, - "access_token": { "type": "string" }, - "refresh_token": { "type": "string" } - }, - "required": ["expires_in", "token_type", "access_token", "refresh_token"] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_read"] }], + "summary": "[Beta] Fetch an existing entry from migration history", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" }, - "OAuthRevokeTokenBodyDto": { - "type": "object", - "properties": { - "client_id": { "type": "string", "format": "uuid" }, - "client_secret": { "type": "string" }, - "refresh_token": { "type": "string" } + "patch": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-patch-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "version", + "required": true, + "in": "path", + "schema": { "pattern": "^\\d+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1PatchMigrationBody" } + } + } }, - "required": ["client_id", "client_secret", "refresh_token"], - "additionalProperties": false - }, - "SnippetProject": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "name": { "type": "string" } + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to patch database migration" } }, - "required": ["id", "name"] - }, - "SnippetUser": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "username": { "type": "string" } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], + "summary": "[Beta] Patch an existing entry in migration history", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/query": { + "post": { + "operationId": "v1-run-a-query", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1RunQueryBody" } } + } }, - "required": ["id", "username"] - }, - "SnippetMeta": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "inserted_at": { "type": "string" }, - "updated_at": { "type": "string" }, - "type": { "type": "string", "enum": ["sql"] }, - "visibility": { "type": "string", "enum": ["user", "project", "org", "public"] }, - "name": { "type": "string" }, - "description": { "type": "string", "nullable": true }, - "project": { "$ref": "#/components/schemas/SnippetProject" }, - "owner": { "$ref": "#/components/schemas/SnippetUser" }, - "updated_by": { "$ref": "#/components/schemas/SnippetUser" } + "responses": { + "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to run sql query" } }, - "required": [ - "id", - "inserted_at", - "updated_at", - "type", - "visibility", - "name", - "description", - "project", - "owner", - "updated_by" - ] - }, - "SnippetList": { - "type": "object", - "properties": { - "data": { "type": "array", "items": { "$ref": "#/components/schemas/SnippetMeta" } }, - "cursor": { "type": "string" } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], + "summary": "[Beta] Run sql query", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/query/read-only": { + "post": { + "description": "All entity references must be schema qualified.", + "operationId": "v1-read-only-query", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1ReadOnlyQueryBody" } } + } }, - "required": ["data"] - }, - "SnippetContent": { - "type": "object", - "properties": { - "favorite": { "type": "boolean" }, - "schema_version": { "type": "string" }, - "sql": { "type": "string" } + "responses": { + "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to run read-only sql query" } }, - "required": ["favorite", "schema_version", "sql"] - }, - "SnippetResponse": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "inserted_at": { "type": "string" }, - "updated_at": { "type": "string" }, - "type": { "type": "string", "enum": ["sql"] }, - "visibility": { "enum": ["user", "project", "org", "public"], "type": "string" }, - "name": { "type": "string" }, - "description": { "type": "string", "nullable": true }, - "project": { "$ref": "#/components/schemas/SnippetProject" }, - "owner": { "$ref": "#/components/schemas/SnippetUser" }, - "updated_by": { "$ref": "#/components/schemas/SnippetUser" }, - "content": { "$ref": "#/components/schemas/SnippetContent" } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], + "summary": "[Beta] Run a sql query as supabase_read_only_user", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/database/webhooks/enable": { + "post": { + "operationId": "v1-enable-database-webhook", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to enable Database Webhooks on the project" } }, - "required": [ - "id", - "inserted_at", - "updated_at", - "type", - "visibility", - "name", - "description", - "project", - "owner", - "updated_by", - "content" - ] - }, - "ApiKeySecretJWTTemplate": { - "type": "object", - "properties": { "role": { "type": "string" } }, - "required": ["role"] - }, - "ApiKeyResponse": { - "type": "object", - "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { "type": "string" }, - "api_key": { "type": "string" }, - "id": { "type": "string", "nullable": true }, - "prefix": { "type": "string", "nullable": true }, - "description": { "type": "string", "nullable": true }, - "hash": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [{ "$ref": "#/components/schemas/ApiKeySecretJWTTemplate" }] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_webhooks_config_write"] }], + "summary": "[Beta] Enables Database Webhooks on the project", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/context": { + "get": { + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-database-metadata", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GetProjectDbMetadataResponse" } + } + } }, - "inserted_at": { "type": "string", "nullable": true }, - "updated_at": { "type": "string", "nullable": true } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } }, - "required": ["name", "api_key"] - }, - "CreateApiKeyBody": { - "type": "object", - "properties": { - "type": { "enum": ["publishable", "secret"], "type": "string" }, - "description": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [{ "$ref": "#/components/schemas/ApiKeySecretJWTTemplate" }] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], + "summary": "Gets database metadata for the given project.", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/database/password": { + "patch": { + "operationId": "v1-update-database-password", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } } - }, - "required": ["type"] - }, - "UpdateApiKeyBody": { - "type": "object", - "properties": { - "description": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [{ "$ref": "#/components/schemas/ApiKeySecretJWTTemplate" }] + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1UpdatePasswordBody" } + } } - } - }, - "DesiredInstanceSize": { - "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] - }, - "ReleaseChannel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "PostgresEngine": { - "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] - }, - "CreateBranchBody": { - "type": "object", - "properties": { - "desired_instance_size": { "$ref": "#/components/schemas/DesiredInstanceSize" }, - "release_channel": { "$ref": "#/components/schemas/ReleaseChannel" }, - "postgres_engine": { "$ref": "#/components/schemas/PostgresEngine" }, - "branch_name": { "type": "string" }, - "git_branch": { "type": "string" }, - "persistent": { "type": "boolean" }, - "region": { "type": "string" } }, - "required": ["branch_name"] - }, - "ValidationRecord": { - "type": "object", - "properties": { "txt_name": { "type": "string" }, "txt_value": { "type": "string" } }, - "required": ["txt_name", "txt_value"] - }, - "ValidationError": { - "type": "object", - "properties": { "message": { "type": "string" } }, - "required": ["message"] - }, - "SslValidation": { - "type": "object", - "properties": { - "status": { "type": "string" }, - "validation_records": { - "type": "array", - "items": { "$ref": "#/components/schemas/ValidationRecord" } + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1UpdatePasswordResponse" } + } + } }, - "validation_errors": { - "type": "array", - "items": { "$ref": "#/components/schemas/ValidationError" } - } - }, - "required": ["status", "validation_records"] - }, - "OwnershipVerification": { - "type": "object", - "properties": { - "type": { "type": "string" }, - "name": { "type": "string" }, - "value": { "type": "string" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update database password" } }, - "required": ["type", "name", "value"] - }, - "CustomHostnameDetails": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "hostname": { "type": "string" }, - "ssl": { "$ref": "#/components/schemas/SslValidation" }, - "ownership_verification": { "$ref": "#/components/schemas/OwnershipVerification" }, - "custom_origin_server": { "type": "string" }, - "verification_errors": { "type": "array", "items": { "type": "string" } }, - "status": { "type": "string" } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], + "summary": "Updates the database password", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/jit": { + "get": { + "description": "Mappings of roles a user can assume in the project database", + "operationId": "v1-get-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/JitAccessResponse" } } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to list database jit access" } }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], + "summary": "Get user-id to role mappings for JIT access", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["security"], + "x-oauth-scope": "database:read" }, - "CfResponse": { - "type": "object", - "properties": { - "success": { "type": "boolean" }, - "errors": { "type": "array", "items": { "type": "object" } }, - "messages": { "type": "array", "items": { "type": "object" } }, - "result": { "$ref": "#/components/schemas/CustomHostnameDetails" } + "post": { + "description": "Authorizes the request to assume a role in the project database", + "operationId": "v1-authorize-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/AuthorizeJitAccessBody" } + } + } }, - "required": ["success", "errors", "messages", "result"] - }, - "UpdateCustomHostnameResponse": { - "type": "object", - "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], - "type": "string" + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/JitAuthorizeAccessResponse" } + } + } }, - "custom_hostname": { "type": "string" }, - "data": { "$ref": "#/components/schemas/CfResponse" } - }, - "required": ["status", "custom_hostname", "data"] - }, - "UpdateCustomHostnameBody": { - "type": "object", - "properties": { "custom_hostname": { "type": "string" } }, - "required": ["custom_hostname"] - }, - "NetworkBanResponse": { - "type": "object", - "properties": { - "banned_ipv4_addresses": { "type": "array", "items": { "type": "string" } } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to authorize database jit access" } }, - "required": ["banned_ipv4_addresses"] - }, - "RemoveNetworkBanRequest": { - "type": "object", - "properties": { "ipv4_addresses": { "type": "array", "items": { "type": "string" } } }, - "required": ["ipv4_addresses"] - }, - "NetworkRestrictionsRequest": { - "type": "object", - "properties": { - "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, - "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } - } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], + "summary": "Authorize user-id to role mappings for JIT access", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["security"], + "x-oauth-scope": "database:read" }, - "NetworkRestrictionsResponse": { - "type": "object", - "properties": { - "entitlement": { "enum": ["disallowed", "allowed"], "type": "string" }, - "config": { "$ref": "#/components/schemas/NetworkRestrictionsRequest" }, - "old_config": { "$ref": "#/components/schemas/NetworkRestrictionsRequest" }, - "status": { "enum": ["stored", "applied"], "type": "string" } + "put": { + "description": "Modifies the roles that can be assumed and for how long", + "operationId": "v1-update-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/UpdateJitAccessBody" } } + } }, - "required": ["entitlement", "config", "status"] - }, - "PgsodiumConfigResponse": { - "type": "object", - "properties": { "root_key": { "type": "string" } }, - "required": ["root_key"] - }, - "UpdatePgsodiumConfigBody": { - "type": "object", - "properties": { "root_key": { "type": "string" } }, - "required": ["root_key"] - }, - "PostgrestConfigWithJWTSecretResponse": { - "type": "object", - "properties": { - "max_rows": { "type": "integer" }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/JitAccessResponse" } } + } }, - "db_schema": { "type": "string" }, - "db_extra_search_path": { "type": "string" }, - "jwt_secret": { "type": "string" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to upsert database migration" } }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - }, - "UpdatePostgrestConfigBody": { - "type": "object", - "properties": { - "max_rows": { "type": "integer", "minimum": 0, "maximum": 1000000 }, - "db_pool": { "type": "integer", "minimum": 0, "maximum": 1000 }, - "db_extra_search_path": { "type": "string" }, - "db_schema": { "type": "string" } - } - }, - "V1PostgrestConfigResponse": { - "type": "object", - "properties": { - "max_rows": { "type": "integer" }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_write"] }], + "summary": "Updates a user mapping for JIT access", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/database/jit/list": { + "get": { + "description": "Mappings of roles a user can assume in the project database", + "operationId": "v1-list-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/JitListAccessResponse" } + } + } }, - "db_schema": { "type": "string" }, - "db_extra_search_path": { "type": "string" } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to list database jit access" } }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - }, - "V1ProjectRefResponse": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "ref": { "type": "string" }, - "name": { "type": "string" } - }, - "required": ["id", "ref", "name"] - }, - "SecretResponse": { - "type": "object", - "properties": { "name": { "type": "string" }, "value": { "type": "string" } }, - "required": ["name", "value"] - }, - "CreateSecretBody": { - "type": "object", - "properties": { - "name": { - "type": "string", - "maxLength": 256, - "pattern": "/^(?!SUPABASE_).*/", - "description": "Secret name must not start with the SUPABASE_ prefix.", - "example": "string" + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], + "summary": "List all user-id to role mappings for JIT access", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/database/jit/{user_id}": { + "delete": { + "description": "Remove JIT mappings of a user, revoking all JIT database access", + "operationId": "v1-delete-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "value": { "type": "string", "maxLength": 24576 } - }, - "required": ["name", "value"] - }, - "SslEnforcements": { - "type": "object", - "properties": { "database": { "type": "boolean" } }, - "required": ["database"] - }, - "SslEnforcementResponse": { - "type": "object", - "properties": { - "currentConfig": { "$ref": "#/components/schemas/SslEnforcements" }, - "appliedSuccessfully": { "type": "boolean" } - }, - "required": ["currentConfig", "appliedSuccessfully"] - }, - "SslEnforcementRequest": { - "type": "object", - "properties": { "requestedConfig": { "$ref": "#/components/schemas/SslEnforcements" } }, - "required": ["requestedConfig"] - }, - "TypescriptResponse": { - "type": "object", - "properties": { "types": { "type": "string" } }, - "required": ["types"] - }, - "VanitySubdomainConfigResponse": { - "type": "object", - "properties": { - "status": { "enum": ["not-used", "custom-domain-used", "active"], "type": "string" }, - "custom_domain": { "type": "string" } - }, - "required": ["status"] - }, - "VanitySubdomainBody": { - "type": "object", - "properties": { "vanity_subdomain": { "type": "string" } }, - "required": ["vanity_subdomain"] - }, - "SubdomainAvailabilityResponse": { - "type": "object", - "properties": { "available": { "type": "boolean" } }, - "required": ["available"] - }, - "ActivateVanitySubdomainResponse": { - "type": "object", - "properties": { "custom_domain": { "type": "string" } }, - "required": ["custom_domain"] - }, - "UpgradeDatabaseBody": { - "type": "object", - "properties": { - "release_channel": { "$ref": "#/components/schemas/ReleaseChannel" }, - "target_version": { "type": "string" } - }, - "required": ["release_channel", "target_version"] - }, - "ProjectUpgradeInitiateResponse": { - "type": "object", - "properties": { "tracking_id": { "type": "string" } }, - "required": ["tracking_id"] - }, - "ProjectVersion": { - "type": "object", - "properties": { - "postgres_version": { "$ref": "#/components/schemas/PostgresEngine" }, - "release_channel": { "$ref": "#/components/schemas/ReleaseChannel" }, - "app_version": { "type": "string" } + { + "name": "user_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + } + ], + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to remove JIT access" } }, - "required": ["postgres_version", "release_channel", "app_version"] - }, - "ProjectUpgradeEligibilityResponse": { - "type": "object", - "properties": { - "current_app_version_release_channel": { "$ref": "#/components/schemas/ReleaseChannel" }, - "duration_estimate_hours": { "type": "integer" }, - "eligible": { "type": "boolean" }, - "current_app_version": { "type": "string" }, - "latest_app_version": { "type": "string" }, - "target_upgrade_versions": { - "type": "array", - "items": { "$ref": "#/components/schemas/ProjectVersion" } + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_write"] }], + "summary": "Delete JIT access by user-id", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/functions": { + "get": { + "description": "Returns all functions you've previously added to the specified project.", + "operationId": "v1-list-all-functions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/FunctionResponse" } + } + } + } }, - "potential_breaking_changes": { "type": "array", "items": { "type": "string" } }, - "legacy_auth_custom_roles": { "type": "array", "items": { "type": "string" } }, - "extension_dependent_objects": { "type": "array", "items": { "type": "string" } } + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve project's functions" } }, - "required": [ - "current_app_version_release_channel", - "duration_estimate_hours", - "eligible", - "current_app_version", - "latest_app_version", - "target_upgrade_versions", - "potential_breaking_changes", - "legacy_auth_custom_roles", - "extension_dependent_objects" - ] + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], + "summary": "List all functions", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" }, - "DatabaseUpgradeStatus": { - "type": "object", - "properties": { - "target_version": { "type": "integer" }, - "status": { "enum": [0, 1, 2], "type": "integer" }, - "initiated_at": { "type": "string" }, - "latest_status_at": { "type": "string" }, - "error": { - "type": "string", - "enum": [ - "1_upgraded_instance_launch_failed", - "2_volume_detachchment_from_upgraded_instance_failed", - "3_volume_attachment_to_original_instance_failed", - "4_data_upgrade_initiation_failed", - "5_data_upgrade_completion_failed", - "6_volume_detachchment_from_original_instance_failed", - "7_volume_attachment_to_upgraded_instance_failed", - "8_upgrade_completion_failed", - "9_post_physical_backup_failed" - ] + "post": { + "deprecated": true, + "description": "This endpoint is deprecated - use the deploy endpoint. Creates a function and adds it to the specified project.", + "operationId": "v1-create-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "progress": { - "type": "string", - "enum": [ - "0_requested", - "1_started", - "2_launched_upgraded_instance", - "3_detached_volume_from_upgraded_instance", - "4_attached_volume_to_original_instance", - "5_initiated_data_upgrade", - "6_completed_data_upgrade", - "7_detached_volume_from_original_instance", - "8_attached_volume_to_upgraded_instance", - "9_completed_upgrade", - "10_completed_post_physical_backup" - ] + { + "name": "slug", + "required": false, + "in": "query", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + }, + { "name": "name", "required": false, "in": "query", "schema": { "type": "string" } }, + { + "name": "verify_jwt", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + }, + { + "name": "import_map", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + }, + { + "name": "entrypoint_path", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "import_map_path", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "ezbr_sha256", + "required": false, + "in": "query", + "schema": { "type": "string" } } - }, - "required": ["target_version", "status", "initiated_at", "latest_status_at"] - }, - "DatabaseUpgradeStatusResponse": { - "type": "object", - "properties": { - "databaseUpgradeStatus": { - "nullable": true, - "allOf": [{ "$ref": "#/components/schemas/DatabaseUpgradeStatus" }] + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.denoland.eszip": { + "schema": { "type": "string", "format": "binary" } + }, + "application/json": { + "schema": { "$ref": "#/components/schemas/V1CreateFunctionBody" } + } } }, - "required": ["databaseUpgradeStatus"] - }, - "ReadOnlyStatusResponse": { - "type": "object", - "properties": { - "enabled": { "type": "boolean" }, - "override_enabled": { "type": "boolean" }, - "override_active_until": { "type": "string" } + "responses": { + "201": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/FunctionResponse" } } + } + }, + "401": { "description": "Unauthorized" }, + "402": { "description": "Maximum number of functions reached for Plan" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to create project's function" } }, - "required": ["enabled", "override_enabled", "override_active_until"] + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], + "summary": "Create a function", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" }, - "SetUpReadReplicaBody": { - "type": "object", - "properties": { - "read_replica_region": { - "type": "string", - "enum": [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "ap-east-1", - "ap-southeast-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-southeast-2", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-north-1", - "eu-central-1", - "eu-central-2", - "ca-central-1", - "ap-south-1", - "sa-east-1" - ], - "description": "Region you want your read replica to reside in", - "example": "us-east-1" + "put": { + "description": "Bulk update functions. It will create a new function or replace existing. The operation is idempotent. NOTE: You will need to manually bump the version.", + "operationId": "v1-bulk-update-functions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/BulkUpdateFunctionBody" } + } } }, - "required": ["read_replica_region"] - }, - "RemoveReadReplicaBody": { - "type": "object", - "properties": { "database_identifier": { "type": "string" } }, - "required": ["database_identifier"] - }, - "AuthHealthResponse": { - "type": "object", - "properties": { "name": { "type": "string", "enum": ["GoTrue"] } }, - "required": ["name"] - }, - "RealtimeHealthResponse": { - "type": "object", - "properties": { "connected_cluster": { "type": "integer" } }, - "required": ["connected_cluster"] - }, - "V1ServiceHealthResponse": { - "type": "object", - "properties": { - "info": { - "oneOf": [ - { "$ref": "#/components/schemas/AuthHealthResponse" }, - { "$ref": "#/components/schemas/RealtimeHealthResponse" } - ] + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/BulkUpdateFunctionResponse" } + } + } }, - "name": { - "enum": ["auth", "db", "pooler", "realtime", "rest", "storage"], - "type": "string" + "401": { "description": "Unauthorized" }, + "402": { "description": "Maximum number of functions reached for Plan" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update functions" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], + "summary": "Bulk update functions", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/deploy": { + "post": { + "description": "A new endpoint to deploy functions. It will create if function does not exist.", + "operationId": "v1-deploy-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "healthy": { "type": "boolean" }, - "status": { "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"], "type": "string" }, - "error": { "type": "string" } + { + "name": "slug", + "required": false, + "in": "query", + "schema": { "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", "type": "string" } + }, + { + "name": "bundleOnly", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + } + ], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { "$ref": "#/components/schemas/FunctionDeployBody" } + } + } }, - "required": ["name", "healthy", "status"] - }, - "StorageFeatureImageTransformation": { - "type": "object", - "properties": { "enabled": { "type": "boolean" } }, - "required": ["enabled"] - }, - "StorageFeatureS3Protocol": { - "type": "object", - "properties": { "enabled": { "type": "boolean" } }, - "required": ["enabled"] - }, - "StorageFeatures": { - "type": "object", - "properties": { - "imageTransformation": { - "$ref": "#/components/schemas/StorageFeatureImageTransformation" + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DeployFunctionResponse" } + } + } }, - "s3Protocol": { "$ref": "#/components/schemas/StorageFeatureS3Protocol" } + "401": { "description": "Unauthorized" }, + "402": { "description": "Maximum number of functions reached for Plan" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to deploy function" } }, - "required": ["imageTransformation", "s3Protocol"] - }, - "StorageConfigResponse": { - "type": "object", - "properties": { - "fileSizeLimit": { "type": "integer", "format": "int64" }, - "features": { "$ref": "#/components/schemas/StorageFeatures" } + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], + "summary": "Deploy a function", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/{function_slug}": { + "get": { + "description": "Retrieves a function with the specified slug and project.", + "operationId": "v1-get-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/FunctionSlugResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve function with given slug" } }, - "required": ["fileSizeLimit", "features"] + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], + "summary": "Retrieve a function", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" }, - "UpdateStorageConfigBody": { - "type": "object", - "properties": { - "fileSizeLimit": { - "type": "integer", - "minimum": 0, - "maximum": 53687091200, - "format": "int64" + "patch": { + "description": "Updates a function with the specified slug and project.", + "operationId": "v1-update-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } }, - "features": { "$ref": "#/components/schemas/StorageFeatures" } - } + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + }, + { + "name": "slug", + "required": false, + "in": "query", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + }, + { "name": "name", "required": false, "in": "query", "schema": { "type": "string" } }, + { + "name": "verify_jwt", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + }, + { + "name": "import_map", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { "type": "boolean" } + }, + { + "name": "entrypoint_path", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "import_map_path", + "required": false, + "in": "query", + "schema": { "type": "string" } + }, + { + "name": "ezbr_sha256", + "required": false, + "in": "query", + "schema": { "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.denoland.eszip": { + "schema": { "type": "string", "format": "binary" } + }, + "application/json": { + "schema": { "$ref": "#/components/schemas/V1UpdateFunctionBody" } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/FunctionResponse" } } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to update function with given slug" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], + "summary": "Update a function", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" }, - "PostgresConfigResponse": { - "type": "object", - "properties": { - "effective_cache_size": { "type": "string" }, - "logical_decoding_work_mem": { "type": "string" }, - "maintenance_work_mem": { "type": "string" }, - "track_activity_query_size": { "type": "string" }, - "max_connections": { "type": "integer", "minimum": 1, "maximum": 262143 }, + "delete": { + "description": "Deletes a function with the specified slug from the specified project.", + "operationId": "v1-delete-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + } + ], + "responses": { + "200": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to delete function with given slug" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], + "summary": "Delete a function", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/{function_slug}/body": { + "get": { + "description": "Retrieves a function body for the specified slug and project.", + "operationId": "v1-get-a-function-body", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { "pattern": "^[A-Za-z0-9_-]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/StreamableFile" } } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to retrieve function body with given slug" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], + "summary": "Retrieve a function body", + "tags": ["Edge Functions"], + "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" + } + }, + "/v1/projects/{ref}/storage/buckets": { + "get": { + "operationId": "v1-list-all-buckets", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/V1StorageBucketResponse" } + } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get list of buckets" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_read"] }], + "summary": "Lists all buckets", + "tags": ["Storage"], + "x-badges": [{ "name": "OAuth scope: storage:read", "position": "after" }], + "x-endpoint-owners": ["storage"], + "x-oauth-scope": "storage:read" + } + }, + "/v1/projects/{ref}/config/auth/sso/providers": { + "post": { + "operationId": "v1-create-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/CreateProviderBody" } } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/CreateProviderResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "404": { "description": "SAML 2.0 support is not enabled for this project" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], + "summary": "Creates a new SSO provider", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "get": { + "operationId": "v1-list-all-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ListProvidersResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "404": { "description": "SAML 2.0 support is not enabled for this project" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], + "summary": "Lists all SSO providers", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + } + }, + "/v1/projects/{ref}/config/auth/sso/providers/{provider_id}": { + "get": { + "operationId": "v1-get-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GetProviderResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], + "summary": "Gets a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + }, + "put": { + "operationId": "v1-update-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProviderBody" } } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/UpdateProviderResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], + "summary": "Updates a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "delete": { + "operationId": "v1-delete-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { "format": "uuid", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DeleteProviderResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], + "summary": "Removes a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + } + }, + "/v1/projects/{ref}/database/backups": { + "get": { + "operationId": "v1-list-all-backups", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1BackupsResponse" } } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get backups" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_read"] }], + "summary": "Lists all backups", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/database/backups/restore-pitr": { + "post": { + "operationId": "v1-restore-pitr-backup", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1RestorePitrBody" } } + } + }, + "responses": { + "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], + "summary": "Restores a PITR backup for a database", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/backups/restore-point": { + "post": { + "operationId": "v1-create-restore-point", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1RestorePointPostBody" } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1RestorePointResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], + "summary": "Initiates a creation of a restore point for a database", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:write" + }, + "get": { + "operationId": "v1-get-restore-point", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + }, + { + "name": "name", + "required": false, + "in": "query", + "schema": { "maxLength": 20, "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1RestorePointResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" }, + "500": { "description": "Failed to get requested restore points" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_read"] }], + "summary": "Get restore points for project", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/database/backups/undo": { + "post": { + "operationId": "v1-undo", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { "minLength": 20, "maxLength": 20, "pattern": "^[a-z]+$", "type": "string" } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/V1UndoBody" } } + } + }, + "responses": { + "201": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], + "summary": "Initiates an undo to a given restore point", + "tags": ["Database"], + "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:write" + } + }, + "/v1/organizations/{slug}/members": { + "get": { + "operationId": "v1-list-organization-members", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/V1OrganizationMemberResponse" } + } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["members_read"] }], + "summary": "List members of an organization", + "tags": ["Organizations"], + "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" + } + }, + "/v1/organizations/{slug}": { + "get": { + "operationId": "v1-get-an-organization", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V1OrganizationSlugResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organization_admin_read"] }], + "summary": "Gets information about the organization", + "tags": ["Organizations"], + "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" + } + }, + "/v1/organizations/{slug}/project-claim/{token}": { + "get": { + "operationId": "v1-get-organization-project-claim", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + }, + { "name": "token", "required": true, "in": "path", "schema": { "type": "string" } } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/OrganizationProjectClaimResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organization_admin_write"] }], + "summary": "Gets project details for the specified organization and claim token", + "tags": ["Organizations"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, + "post": { + "operationId": "v1-claim-project-for-organization", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + }, + { "name": "token", "required": true, "in": "path", "schema": { "type": "string" } } + ], + "responses": { + "204": { "description": "" }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organization_admin_write"] }], + "summary": "Claims project for the specified organization", + "tags": ["Organizations"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + } + }, + "/v1/organizations/{slug}/projects": { + "get": { + "description": "Returns a paginated list of projects for the specified organization.\n\nThis endpoint uses offset-based pagination. Use the `offset` parameter to skip a number of projects and the `limit` parameter to control the number of projects returned per page.", + "operationId": "v1-get-all-projects-for-organization", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { "pattern": "^[\\w-]+$", "type": "string" } + }, + { + "name": "offset", + "required": false, + "in": "query", + "description": "Number of projects to skip", + "schema": { "minimum": 0, "default": 0, "type": "integer" } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "Number of projects to return per page", + "schema": { "minimum": 1, "maximum": 100, "default": 100, "type": "integer" } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Search projects by name", + "schema": { "type": "string" } + }, + { + "name": "sort", + "required": false, + "in": "query", + "description": "Sort order for projects", + "schema": { + "default": "name_asc", + "type": "string", + "enum": ["name_asc", "name_desc", "created_asc", "created_desc"] + } + }, + { + "name": "statuses", + "required": false, + "in": "query", + "description": "A comma-separated list of project statuses to filter by.\n\nThe following values are supported: `ACTIVE_HEALTHY`, `INACTIVE`.", + "schema": { "example": "?statuses=ACTIVE_HEALTHY,INACTIVE", "type": "string" } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/OrganizationProjectsResponse" } + } + } + }, + "500": { "description": "Failed to retrieve projects" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["organization_projects_read"] }], + "summary": "Gets all projects for the given organization", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"] + } + } + }, + "info": { + "title": "Supabase API (v1)", + "description": "Supabase API generated from the OpenAPI specification.
Visit [https://supabase.com/docs](https://supabase.com/docs) for a complete documentation.", + "version": "1.0.0", + "contact": {} + }, + "tags": [ + { "name": "Advisors", "description": "Advisors related endpoints" }, + { "name": "Analytics", "description": "Analytics related endpoints" }, + { "name": "Auth", "description": "Auth related endpoints" }, + { "name": "Billing", "description": "Billing related endpoints" }, + { "name": "Database", "description": "Database related endpoints" }, + { "name": "Domains", "description": "Domains related endpoints" }, + { "name": "Edge Functions", "description": "Edge related endpoints" }, + { "name": "Environments", "description": "Environments related endpoints" }, + { "name": "OAuth", "description": "OAuth related endpoints" }, + { "name": "Organizations", "description": "Organizations related endpoints" }, + { "name": "Projects", "description": "Projects related endpoints" }, + { "name": "Rest", "description": "Rest related endpoints" }, + { "name": "Secrets", "description": "Secrets related endpoints" }, + { + "name": "Storage", + "description": "Visit [https://supabase.github.io/storage/](https://supabase.github.io/storage/) for complete documentation." + } + ], + "servers": [], + "components": { + "securitySchemes": { "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http" } }, + "schemas": { + "BranchDetailResponse": { + "type": "object", + "properties": { + "ref": { "type": "string" }, + "postgres_version": { "type": "string" }, + "postgres_engine": { "type": "string" }, + "release_channel": { "type": "string" }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "db_host": { "type": "string" }, + "db_port": { "type": "integer", "minimum": 0, "exclusiveMinimum": true }, + "db_user": { "type": "string" }, + "db_pass": { "type": "string" }, + "jwt_secret": { "type": "string" } + }, + "required": [ + "ref", + "postgres_version", + "postgres_engine", + "release_channel", + "status", + "db_host", + "db_port" + ] + }, + "UpdateBranchBody": { + "type": "object", + "properties": { + "branch_name": { "type": "string" }, + "git_branch": { "type": "string" }, + "reset_on_push": { + "type": "boolean", + "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead.", + "deprecated": true + }, + "persistent": { "type": "boolean" }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "request_review": { "type": "boolean" }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." + } + } + }, + "BranchResponse": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" }, + "name": { "type": "string" }, + "project_ref": { "type": "string" }, + "parent_project_ref": { "type": "string" }, + "is_default": { "type": "boolean" }, + "git_branch": { "type": "string" }, + "pr_number": { "type": "integer", "format": "int32" }, + "latest_check_run_id": { + "type": "number", + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { "type": "boolean" }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "created_at": { "type": "string", "format": "date-time" }, + "updated_at": { "type": "string", "format": "date-time" }, + "review_requested_at": { "type": "string", "format": "date-time" }, + "with_data": { "type": "boolean" }, + "notify_url": { "type": "string", "format": "uri" }, + "deletion_scheduled_at": { "type": "string", "format": "date-time" }, + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + } + }, + "required": [ + "id", + "name", + "project_ref", + "parent_project_ref", + "is_default", + "persistent", + "status", + "created_at", + "updated_at", + "with_data" + ] + }, + "BranchDeleteResponse": { + "type": "object", + "properties": { "message": { "type": "string", "enum": ["ok"] } }, + "required": ["message"] + }, + "BranchActionBody": { + "type": "object", + "properties": { "migration_version": { "type": "string" } } + }, + "BranchUpdateResponse": { + "type": "object", + "properties": { + "workflow_run_id": { "type": "string" }, + "message": { "type": "string", "enum": ["ok"] } + }, + "required": ["workflow_run_id", "message"] + }, + "BranchRestoreResponse": { + "type": "object", + "properties": { "message": { "type": "string", "enum": ["Branch restoration initiated"] } }, + "required": ["message"] + }, + "V1ListProjectsPaginatedResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "number" }, + "cloud_provider": { "type": "string" }, + "inserted_at": { "type": "string", "nullable": true }, + "name": { "type": "string" }, + "organization_id": { "type": "number" }, + "organization_slug": { "type": "string" }, + "ref": { "type": "string" }, + "region": { "type": "string" }, + "status": { "type": "string" }, + "subscription_id": { "type": "string", "nullable": true }, + "is_branch_enabled": { "type": "boolean" }, + "is_physical_backups_enabled": { "type": "boolean", "nullable": true }, + "preview_branch_refs": { "type": "array", "items": { "type": "string" } }, + "disk_volume_size_gb": { "type": "number" }, + "infra_compute_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + } + }, + "required": [ + "id", + "cloud_provider", + "inserted_at", + "name", + "organization_id", + "organization_slug", + "ref", + "region", + "status", + "subscription_id", + "is_branch_enabled", + "is_physical_backups_enabled", + "preview_branch_refs" + ] + } + }, + "pagination": { + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "Total number of projects. Use this to calculate the total number of pages." + }, + "limit": { + "type": "number", + "description": "Maximum number of projects per page (actual number may be less)" + }, + "offset": { + "type": "number", + "description": "Number of projects skipped in this response" + } + }, + "required": ["count", "limit", "offset"] + } + }, + "required": ["projects", "pagination"] + }, + "V1ProjectWithDatabaseResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "name": { "type": "string", "description": "Name of your project" }, + "region": { + "type": "string", + "description": "Region of your project", + "example": "us-east-1" + }, + "created_at": { + "type": "string", + "description": "Creation timestamp", + "example": "2023-03-29T16:32:59Z" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "database": { + "type": "object", + "properties": { + "host": { "type": "string", "description": "Database host" }, + "version": { "type": "string", "description": "Database version" }, + "postgres_engine": { "type": "string", "description": "Database engine" }, + "release_channel": { "type": "string", "description": "Release channel" } + }, + "required": ["host", "version", "postgres_engine", "release_channel"] + } + }, + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status", + "database" + ] + }, + "V1CreateProjectBody": { + "type": "object", + "properties": { + "db_pass": { "type": "string", "description": "Database password" }, + "name": { "type": "string", "maxLength": 256, "description": "Name of your project" }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "plan": { + "type": "string", + "enum": ["free", "pro"], + "deprecated": true, + "description": "Subscription Plan is now set on organization level and is ignored in this request" + }, + "region": { + "type": "string", + "description": "Region you want your server to reside in. Use region_selection instead.", + "deprecated": true, + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ] + }, + "region_selection": { + "discriminator": { "propertyName": "type" }, + "oneOf": [ + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["specific"] }, + "code": { + "type": "string", + "minLength": 1, + "description": "Specific region code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ] + } + }, + "required": ["type", "code"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["smartGroup"] }, + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"], + "description": "The Smart Region Group's code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "example": "apac" + } + }, + "required": ["type", "code"] + } + ], + "description": "Region selection. Only one of region or region_selection can be specified.", + "example": "{ type: 'smartGroup', code: 'americas' }" + }, + "kps_enabled": { + "type": "boolean", + "deprecated": true, + "description": "This field is deprecated and is ignored in this request" + }, + "desired_instance_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "template_url": { + "type": "string", + "format": "uri", + "description": "Template URL used to create the project from the CLI.", + "example": "https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used.", + "deprecated": true + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used.", + "deprecated": true + } + }, + "required": ["db_pass", "name", "organization_slug"], + "additionalProperties": false, + "hideDefinitions": ["release_channel", "postgres_engine"] + }, + "V1ProjectResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "name": { "type": "string", "description": "Name of your project" }, + "region": { + "type": "string", + "description": "Region of your project", + "example": "us-east-1" + }, + "created_at": { + "type": "string", + "description": "Creation timestamp", + "example": "2023-03-29T16:32:59Z" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + } + }, + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status" + ] + }, + "RegionsInfo": { + "type": "object", + "properties": { + "recommendations": { + "type": "object", + "properties": { + "smartGroup": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "code": { "type": "string", "enum": ["americas", "emea", "apac"] }, + "type": { "type": "string", "enum": ["smartGroup"] } + }, + "required": ["name", "code", "type"] + }, + "specific": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "code": { "type": "string" }, + "type": { "type": "string", "enum": ["specific"] }, + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] + }, + "status": { "type": "string", "enum": ["capacity", "other"] } + }, + "required": ["name", "code", "type", "provider"] + } + } + }, + "required": ["smartGroup", "specific"] + }, + "all": { + "type": "object", + "properties": { + "smartGroup": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "code": { "type": "string", "enum": ["americas", "emea", "apac"] }, + "type": { "type": "string", "enum": ["smartGroup"] } + }, + "required": ["name", "code", "type"] + } + }, + "specific": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "code": { "type": "string" }, + "type": { "type": "string", "enum": ["specific"] }, + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] + }, + "status": { "type": "string", "enum": ["capacity", "other"] } + }, + "required": ["name", "code", "type", "provider"] + } + } + }, + "required": ["smartGroup", "specific"] + } + }, + "required": ["recommendations", "all"] + }, + "OrganizationResponseV1": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Deprecated: Use `slug` instead.", + "deprecated": true + }, + "slug": { "type": "string", "pattern": "^[\\w-]+$", "description": "Organization slug" }, + "name": { "type": "string" } + }, + "required": ["id", "slug", "name"] + }, + "CreateOrganizationV1": { + "type": "object", + "properties": { "name": { "type": "string", "maxLength": 256 } }, + "required": ["name"], + "additionalProperties": false + }, + "OAuthTokenBody": { + "type": "object", + "properties": { + "grant_type": { "type": "string", "enum": ["authorization_code", "refresh_token"] }, + "client_id": { "type": "string", "format": "uuid" }, + "client_secret": { "type": "string" }, + "code": { "type": "string" }, + "code_verifier": { "type": "string" }, + "redirect_uri": { "type": "string" }, + "refresh_token": { "type": "string" }, + "resource": { + "type": "string", + "format": "uri", + "description": "Resource indicator for MCP (Model Context Protocol) clients" + }, + "scope": { "type": "string" } + }, + "additionalProperties": false + }, + "OAuthTokenResponse": { + "type": "object", + "properties": { + "access_token": { "type": "string" }, + "refresh_token": { "type": "string" }, + "expires_in": { "type": "integer" }, + "token_type": { "type": "string", "enum": ["Bearer"] } + }, + "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "additionalProperties": false + }, + "OAuthRevokeTokenBody": { + "type": "object", + "properties": { + "client_id": { "type": "string", "format": "uuid" }, + "client_secret": { "type": "string" }, + "refresh_token": { "type": "string" } + }, + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": false + }, + "SnippetList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "inserted_at": { "type": "string" }, + "updated_at": { "type": "string" }, + "type": { "type": "string", "enum": ["sql"] }, + "visibility": { "type": "string", "enum": ["user", "project", "org", "public"] }, + "name": { "type": "string" }, + "description": { "type": "string", "nullable": true }, + "project": { + "type": "object", + "properties": { "id": { "type": "number" }, "name": { "type": "string" } }, + "required": ["id", "name"] + }, + "owner": { + "type": "object", + "properties": { "id": { "type": "number" }, "username": { "type": "string" } }, + "required": ["id", "username"] + }, + "updated_by": { + "type": "object", + "properties": { "id": { "type": "number" }, "username": { "type": "string" } }, + "required": ["id", "username"] + }, + "favorite": { "type": "boolean" } + }, + "required": [ + "id", + "inserted_at", + "updated_at", + "type", + "visibility", + "name", + "description", + "project", + "owner", + "updated_by", + "favorite" + ] + } + }, + "cursor": { "type": "string" } + }, + "required": ["data"] + }, + "SnippetResponse": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "inserted_at": { "type": "string" }, + "updated_at": { "type": "string" }, + "type": { "type": "string", "enum": ["sql"] }, + "visibility": { "type": "string", "enum": ["user", "project", "org", "public"] }, + "name": { "type": "string" }, + "description": { "type": "string", "nullable": true }, + "project": { + "type": "object", + "properties": { "id": { "type": "number" }, "name": { "type": "string" } }, + "required": ["id", "name"] + }, + "owner": { + "type": "object", + "properties": { "id": { "type": "number" }, "username": { "type": "string" } }, + "required": ["id", "username"] + }, + "updated_by": { + "type": "object", + "properties": { "id": { "type": "number" }, "username": { "type": "string" } }, + "required": ["id", "username"] + }, + "favorite": { "type": "boolean" }, + "content": { + "type": "object", + "properties": { + "favorite": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated: Rely on root-level favorite property instead." + }, + "schema_version": { "type": "string" }, + "sql": { "type": "string" } + }, + "required": ["schema_version", "sql"] + } + }, + "required": [ + "id", + "inserted_at", + "updated_at", + "type", + "visibility", + "name", + "description", + "project", + "owner", + "updated_by", + "favorite", + "content" + ] + }, + "ListActionRunResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "branch_id": { "type": "string" }, + "run_steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": ["clone", "pull", "health", "configure", "migrate", "seed", "deploy"] + }, + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["name", "status", "created_at", "updated_at"] + } + }, + "git_config": { "nullable": true }, + "workdir": { "type": "string", "nullable": true }, + "check_run_id": { "type": "number", "nullable": true }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] + } + }, + "ActionRunResponse": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "branch_id": { "type": "string" }, + "run_steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": ["clone", "pull", "health", "configure", "migrate", "seed", "deploy"] + }, + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["name", "status", "created_at", "updated_at"] + } + }, + "git_config": { "nullable": true }, + "workdir": { "type": "string", "nullable": true }, + "check_run_id": { "type": "number", "nullable": true }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] + }, + "UpdateRunStatusBody": { + "type": "object", + "properties": { + "clone": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "pull": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "health": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "configure": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "migrate": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "seed": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "deploy": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + } + } + }, + "UpdateRunStatusResponse": { + "type": "object", + "properties": { "message": { "type": "string", "enum": ["ok"] } }, + "required": ["message"] + }, + "ApiKeyResponse": { + "type": "object", + "properties": { + "api_key": { "type": "string", "nullable": true }, + "id": { "type": "string", "nullable": true }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true + }, + "prefix": { "type": "string", "nullable": true }, + "name": { "type": "string" }, + "description": { "type": "string", "nullable": true }, + "hash": { "type": "string", "nullable": true }, + "secret_jwt_template": { "type": "object", "additionalProperties": {}, "nullable": true }, + "inserted_at": { "type": "string", "format": "date-time", "nullable": true }, + "updated_at": { "type": "string", "format": "date-time", "nullable": true } + }, + "required": ["name"] + }, + "LegacyApiKeysResponse": { + "type": "object", + "properties": { "enabled": { "type": "boolean" } }, + "required": ["enabled"] + }, + "CreateApiKeyBody": { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["publishable", "secret"] }, + "name": { + "type": "string", + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" + }, + "description": { "type": "string", "nullable": true }, + "secret_jwt_template": { "type": "object", "additionalProperties": {}, "nullable": true } + }, + "required": ["type", "name"] + }, + "UpdateApiKeyBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" + }, + "description": { "type": "string", "nullable": true }, + "secret_jwt_template": { "type": "object", "additionalProperties": {}, "nullable": true } + } + }, + "CreateBranchBody": { + "type": "object", + "properties": { + "branch_name": { "type": "string", "minLength": 1 }, + "git_branch": { "type": "string" }, + "is_default": { "type": "boolean" }, + "persistent": { "type": "boolean" }, + "region": { "type": "string" }, + "desired_instance_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used." + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used." + }, + "secrets": { "type": "object", "additionalProperties": { "type": "string" } }, + "with_data": { "type": "boolean" }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." + } + }, + "required": ["branch_name"] + }, + "UpdateCustomHostnameResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] + }, + "custom_hostname": { "type": "string" }, + "data": { + "type": "object", + "properties": { + "success": { "type": "boolean" }, + "errors": { + "type": "array", + "items": { "description": "Any JSON-serializable value" } + }, + "messages": { + "type": "array", + "items": { "description": "Any JSON-serializable value" } + }, + "result": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "hostname": { "type": "string" }, + "ssl": { + "type": "object", + "properties": { + "status": { "type": "string" }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { "type": "string" }, + "txt_value": { "type": "string" } + }, + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { "message": { "type": "string" } }, + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { "type": "string" }, + "name": { "type": "string" }, + "value": { "type": "string" } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { "type": "string" }, + "verification_errors": { "type": "array", "items": { "type": "string" } }, + "status": { "type": "string" } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] + } + }, + "required": ["success", "errors", "messages", "result"] + } + }, + "required": ["status", "custom_hostname", "data"] + }, + "UpdateCustomHostnameBody": { + "type": "object", + "properties": { "custom_hostname": { "type": "string", "minLength": 1 } }, + "required": ["custom_hostname"] + }, + "NetworkBanResponse": { + "type": "object", + "properties": { + "banned_ipv4_addresses": { "type": "array", "items": { "type": "string" } } + }, + "required": ["banned_ipv4_addresses"] + }, + "NetworkBanResponseEnriched": { + "type": "object", + "properties": { + "banned_ipv4_addresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "banned_address": { "type": "string" }, + "identifier": { "type": "string" }, + "type": { "type": "string" } + }, + "required": ["banned_address", "identifier", "type"] + } + } + }, + "required": ["banned_ipv4_addresses"] + }, + "RemoveNetworkBanRequest": { + "type": "object", + "properties": { + "ipv4_addresses": { + "type": "array", + "items": { "type": "string" }, + "description": "List of IP addresses to unban." + }, + "requester_ip": { + "default": false, + "type": "boolean", + "description": "Include requester's public IP in the list of addresses to unban." + }, + "identifier": { "type": "string" } + }, + "required": ["ipv4_addresses"] + }, + "NetworkRestrictionsResponse": { + "type": "object", + "properties": { + "entitlement": { "type": "string", "enum": ["disallowed", "allowed"] }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, + "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, + "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "status": { "type": "string", "enum": ["stored", "applied"] }, + "updated_at": { "type": "string", "format": "date-time" }, + "applied_at": { "type": "string", "format": "date-time" } + }, + "required": ["entitlement", "config", "status"] + }, + "NetworkRestrictionsRequest": { + "type": "object", + "properties": { + "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, + "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } + } + }, + "NetworkRestrictionsPatchRequest": { + "type": "object", + "properties": { + "add": { + "type": "object", + "properties": { + "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, + "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } + } + }, + "remove": { + "type": "object", + "properties": { + "dbAllowedCidrs": { "type": "array", "items": { "type": "string" } }, + "dbAllowedCidrsV6": { "type": "array", "items": { "type": "string" } } + } + } + } + }, + "NetworkRestrictionsV2Response": { + "type": "object", + "properties": { + "entitlement": { "type": "string", "enum": ["disallowed", "allowed"] }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { "type": "string" }, + "type": { "type": "string", "enum": ["v4", "v6"] } + }, + "required": ["address", "type"] + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { "type": "string" }, + "type": { "type": "string", "enum": ["v4", "v6"] } + }, + "required": ["address", "type"] + } + } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "updated_at": { "type": "string", "format": "date-time" }, + "applied_at": { "type": "string", "format": "date-time" }, + "status": { "type": "string", "enum": ["stored", "applied"] } + }, + "required": ["entitlement", "config", "status"] + }, + "PgsodiumConfigResponse": { + "type": "object", + "properties": { "root_key": { "type": "string" } }, + "required": ["root_key"] + }, + "UpdatePgsodiumConfigBody": { + "type": "object", + "properties": { "root_key": { "type": "string" } }, + "required": ["root_key"] + }, + "PostgrestConfigWithJWTSecretResponse": { + "type": "object", + "properties": { + "db_schema": { "type": "string" }, + "max_rows": { "type": "integer" }, + "db_extra_search_path": { "type": "string" }, + "db_pool": { + "type": "integer", + "nullable": true, + "description": "If `null`, the value is automatically configured based on compute size." + }, + "jwt_secret": { "type": "string" } + }, + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] + }, + "V1UpdatePostgrestConfigBody": { + "type": "object", + "properties": { + "db_extra_search_path": { "type": "string" }, + "db_schema": { "type": "string" }, + "max_rows": { "type": "integer", "minimum": 0, "maximum": 1000000 }, + "db_pool": { "type": "integer", "minimum": 0, "maximum": 1000 } + } + }, + "V1PostgrestConfigResponse": { + "type": "object", + "properties": { + "db_schema": { "type": "string" }, + "max_rows": { "type": "integer" }, + "db_extra_search_path": { "type": "string" }, + "db_pool": { + "type": "integer", + "nullable": true, + "description": "If `null`, the value is automatically configured based on compute size." + } + }, + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] + }, + "V1ProjectRefResponse": { + "type": "object", + "properties": { + "id": { "type": "integer" }, + "ref": { "type": "string" }, + "name": { "type": "string" } + }, + "required": ["id", "ref", "name"] + }, + "V1UpdateProjectBody": { + "type": "object", + "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 256 } }, + "required": ["name"] + }, + "SecretResponse": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "value": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["name", "value"] + }, + "CreateSecretBody": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 256, + "pattern": "^(?!SUPABASE_).*", + "description": "Secret name must not start with the SUPABASE_ prefix.", + "example": "string" + }, + "value": { "type": "string", "maxLength": 24576 } + }, + "required": ["name", "value"] + } + }, + "DeleteSecretsBody": { "type": "array", "items": { "type": "string" } }, + "SslEnforcementResponse": { + "type": "object", + "properties": { + "currentConfig": { + "type": "object", + "properties": { "database": { "type": "boolean" } }, + "required": ["database"] + }, + "appliedSuccessfully": { "type": "boolean" } + }, + "required": ["currentConfig", "appliedSuccessfully"] + }, + "SslEnforcementRequest": { + "type": "object", + "properties": { + "requestedConfig": { + "type": "object", + "properties": { "database": { "type": "boolean" } }, + "required": ["database"] + } + }, + "required": ["requestedConfig"] + }, + "TypescriptResponse": { + "type": "object", + "properties": { "types": { "type": "string" } }, + "required": ["types"] + }, + "VanitySubdomainConfigResponse": { + "type": "object", + "properties": { + "status": { "type": "string", "enum": ["not-used", "custom-domain-used", "active"] }, + "custom_domain": { "type": "string", "minLength": 1 } + }, + "required": ["status"] + }, + "VanitySubdomainBody": { + "type": "object", + "properties": { "vanity_subdomain": { "type": "string" } }, + "required": ["vanity_subdomain"] + }, + "SubdomainAvailabilityResponse": { + "type": "object", + "properties": { "available": { "type": "boolean" } }, + "required": ["available"] + }, + "ActivateVanitySubdomainResponse": { + "type": "object", + "properties": { "custom_domain": { "type": "string" } }, + "required": ["custom_domain"] + }, + "UpgradeDatabaseBody": { + "type": "object", + "properties": { + "target_version": { "type": "string" }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + } + }, + "required": ["target_version"] + }, + "ProjectUpgradeInitiateResponse": { + "type": "object", + "properties": { "tracking_id": { "type": "string" } }, + "required": ["tracking_id"] + }, + "ProjectUpgradeEligibilityResponse": { + "type": "object", + "properties": { + "eligible": { "type": "boolean" }, + "current_app_version": { "type": "string" }, + "current_app_version_release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "latest_app_version": { "type": "string" }, + "target_upgrade_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "postgres_version": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "app_version": { "type": "string" } + }, + "required": ["postgres_version", "release_channel", "app_version"] + } + }, + "duration_estimate_hours": { "type": "number" }, + "legacy_auth_custom_roles": { "type": "array", "items": { "type": "string" } }, + "objects_to_be_dropped": { + "type": "array", + "items": { "type": "string" }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "unsupported_extensions": { + "type": "array", + "items": { "type": "string" }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "user_defined_objects_in_internal_schemas": { + "type": "array", + "items": { "type": "string" }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "validation_errors": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["objects_depending_on_pg_cron"] }, + "dependents": { "type": "array", "items": { "type": "string" } } + }, + "required": ["type", "dependents"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["indexes_referencing_ll_to_earth"] }, + "schema_name": { "type": "string" }, + "table_name": { "type": "string" }, + "index_name": { "type": "string" } + }, + "required": ["type", "schema_name", "table_name", "index_name"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["function_using_obsolete_lang"] }, + "schema_name": { "type": "string" }, + "function_name": { "type": "string" }, + "lang_name": { "type": "string" } + }, + "required": ["type", "schema_name", "function_name", "lang_name"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["unsupported_extension"] }, + "extension_name": { "type": "string" } + }, + "required": ["type", "extension_name"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["unsupported_fdw_handler"] }, + "fdw_name": { "type": "string" }, + "fdw_handler_name": { "type": "string" } + }, + "required": ["type", "fdw_name", "fdw_handler_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unlogged_table_with_persistent_sequence"] + }, + "schema_name": { "type": "string" }, + "table_name": { "type": "string" }, + "sequence_name": { "type": "string" } + }, + "required": ["type", "schema_name", "table_name", "sequence_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["user_defined_objects_in_internal_schemas"] + }, + "obj_type": { "type": "string", "enum": ["table", "function"] }, + "schema_name": { "type": "string" }, + "obj_name": { "type": "string" } + }, + "required": ["type", "obj_type", "schema_name", "obj_name"] + }, + { + "type": "object", + "properties": { + "type": { "type": "string", "enum": ["active_replication_slot"] }, + "slot_name": { "type": "string" } + }, + "required": ["type", "slot_name"] + } + ] + } + } + }, + "required": [ + "eligible", + "current_app_version", + "current_app_version_release_channel", + "latest_app_version", + "target_upgrade_versions", + "duration_estimate_hours", + "legacy_auth_custom_roles", + "objects_to_be_dropped", + "unsupported_extensions", + "user_defined_objects_in_internal_schemas", + "validation_errors" + ] + }, + "DatabaseUpgradeStatusResponse": { + "type": "object", + "properties": { + "databaseUpgradeStatus": { + "type": "object", + "properties": { + "initiated_at": { "type": "string" }, + "latest_status_at": { "type": "string" }, + "target_version": { "type": "number" }, + "error": { + "type": "string", + "enum": [ + "1_upgraded_instance_launch_failed", + "2_volume_detachchment_from_upgraded_instance_failed", + "3_volume_attachment_to_original_instance_failed", + "4_data_upgrade_initiation_failed", + "5_data_upgrade_completion_failed", + "6_volume_detachchment_from_original_instance_failed", + "7_volume_attachment_to_upgraded_instance_failed", + "8_upgrade_completion_failed", + "9_post_physical_backup_failed" + ] + }, + "progress": { + "type": "string", + "enum": [ + "0_requested", + "1_started", + "2_launched_upgraded_instance", + "3_detached_volume_from_upgraded_instance", + "4_attached_volume_to_original_instance", + "5_initiated_data_upgrade", + "6_completed_data_upgrade", + "7_detached_volume_from_original_instance", + "8_attached_volume_to_upgraded_instance", + "9_completed_upgrade", + "10_completed_post_physical_backup" + ] + }, + "status": { "type": "number" } + }, + "required": ["initiated_at", "latest_status_at", "target_version", "status"], + "nullable": true + } + }, + "required": ["databaseUpgradeStatus"] + }, + "ReadOnlyStatusResponse": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "override_enabled": { "type": "boolean" }, + "override_active_until": { "type": "string" } + }, + "required": ["enabled", "override_enabled", "override_active_until"] + }, + "SetUpReadReplicaBody": { + "type": "object", + "properties": { + "read_replica_region": { + "type": "string", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ], + "description": "Region you want your read replica to reside in", + "example": "us-east-1" + } + }, + "required": ["read_replica_region"] + }, + "RemoveReadReplicaBody": { + "type": "object", + "properties": { "database_identifier": { "type": "string" } }, + "required": ["database_identifier"] + }, + "V1ServiceHealthResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "auth", + "db", + "db_postgres_user", + "pooler", + "realtime", + "rest", + "storage", + "pg_bouncer" + ] + }, + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "status": { "type": "string", "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"] }, + "info": { + "oneOf": [ + { + "type": "object", + "properties": { + "name": { "type": "string", "enum": ["GoTrue"] }, + "version": { "type": "string" }, + "description": { "type": "string" } + }, + "required": ["name", "version", "description"] + }, + { + "type": "object", + "properties": { + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "db_connected": { "type": "boolean" }, + "connected_cluster": { "type": "integer" } + }, + "required": ["healthy", "db_connected", "connected_cluster"] + }, + { + "type": "object", + "properties": { "db_schema": { "type": "string" } }, + "required": ["db_schema"] + } + ] + }, + "error": { "type": "string" } + }, + "required": ["name", "healthy", "status"] + }, + "SigningKeyResponse": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" }, + "algorithm": { "type": "string", "enum": ["EdDSA", "ES256", "RS256", "HS256"] }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { "nullable": true }, + "created_at": { "type": "string", "format": "date-time" }, + "updated_at": { "type": "string", "format": "date-time" } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + }, + "CreateSigningKeyBody": { + "type": "object", + "properties": { + "algorithm": { "type": "string", "enum": ["EdDSA", "ES256", "RS256", "HS256"] }, + "status": { "type": "string", "enum": ["in_use", "standby"] }, + "private_jwk": { + "discriminator": { "propertyName": "kty" }, + "oneOf": [ + { + "type": "object", + "properties": { + "kid": { "type": "string", "format": "uuid" }, + "use": { "type": "string", "enum": ["sig"] }, + "key_ops": { + "type": "array", + "items": { "type": "string", "enum": ["sign", "verify"] }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { "type": "boolean", "enum": [true] }, + "kty": { "type": "string", "enum": ["RSA"] }, + "alg": { "type": "string", "enum": ["RS256"] }, + "n": { "type": "string" }, + "e": { "type": "string", "enum": ["AQAB"] }, + "d": { "type": "string" }, + "p": { "type": "string" }, + "q": { "type": "string" }, + "dp": { "type": "string" }, + "dq": { "type": "string" }, + "qi": { "type": "string" } + }, + "required": ["kty", "n", "e", "d", "p", "q", "dp", "dq", "qi"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { "type": "string", "format": "uuid" }, + "use": { "type": "string", "enum": ["sig"] }, + "key_ops": { + "type": "array", + "items": { "type": "string", "enum": ["sign", "verify"] }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { "type": "boolean", "enum": [true] }, + "kty": { "type": "string", "enum": ["EC"] }, + "alg": { "type": "string", "enum": ["ES256"] }, + "crv": { "type": "string", "enum": ["P-256"] }, + "x": { "type": "string" }, + "y": { "type": "string" }, + "d": { "type": "string" } + }, + "required": ["kty", "crv", "x", "y", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { "type": "string", "format": "uuid" }, + "use": { "type": "string", "enum": ["sig"] }, + "key_ops": { + "type": "array", + "items": { "type": "string", "enum": ["sign", "verify"] }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { "type": "boolean", "enum": [true] }, + "kty": { "type": "string", "enum": ["OKP"] }, + "alg": { "type": "string", "enum": ["EdDSA"] }, + "crv": { "type": "string", "enum": ["Ed25519"] }, + "x": { "type": "string" }, + "d": { "type": "string" } + }, + "required": ["kty", "crv", "x", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { "type": "string", "format": "uuid" }, + "use": { "type": "string", "enum": ["sig"] }, + "key_ops": { + "type": "array", + "items": { "type": "string", "enum": ["sign", "verify"] }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { "type": "boolean", "enum": [true] }, + "kty": { "type": "string", "enum": ["oct"] }, + "alg": { "type": "string", "enum": ["HS256"] }, + "k": { "type": "string", "minLength": 16 } + }, + "required": ["kty", "k"], + "additionalProperties": false + } + ] + } + }, + "required": ["algorithm"], + "additionalProperties": false + }, + "SigningKeysResponse": { + "type": "object", + "properties": { + "keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" }, + "algorithm": { "type": "string", "enum": ["EdDSA", "ES256", "RS256", "HS256"] }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { "nullable": true }, + "created_at": { "type": "string", "format": "date-time" }, + "updated_at": { "type": "string", "format": "date-time" } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + }, + "required": ["keys"], + "additionalProperties": false + }, + "UpdateSigningKeyBody": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + } + }, + "required": ["status"], + "additionalProperties": false + }, + "StorageConfigResponse": { + "type": "object", + "properties": { + "fileSizeLimit": { "type": "integer", "format": "int64" }, + "features": { + "type": "object", + "properties": { + "imageTransformation": { + "type": "object", + "properties": { "enabled": { "type": "boolean" } }, + "required": ["enabled"] + }, + "s3Protocol": { + "type": "object", + "properties": { "enabled": { "type": "boolean" } }, + "required": ["enabled"] + }, + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "maxNamespaces": { "type": "integer", "minimum": 0 }, + "maxTables": { "type": "integer", "minimum": 0 }, + "maxCatalogs": { "type": "integer", "minimum": 0 } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] + }, + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "maxBuckets": { "type": "integer", "minimum": 0 }, + "maxIndexes": { "type": "integer", "minimum": 0 } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + }, + "required": ["imageTransformation", "s3Protocol", "icebergCatalog", "vectorBuckets"] + }, + "capabilities": { + "type": "object", + "properties": { + "list_v2": { "type": "boolean" }, + "iceberg_catalog": { "type": "boolean" } + }, + "required": ["list_v2", "iceberg_catalog"] + }, + "external": { + "type": "object", + "properties": { "upstreamTarget": { "type": "string", "enum": ["main", "canary"] } }, + "required": ["upstreamTarget"] + }, + "migrationVersion": { "type": "string" }, + "databasePoolMode": { "type": "string" } + }, + "required": [ + "fileSizeLimit", + "features", + "capabilities", + "external", + "migrationVersion", + "databasePoolMode" + ] + }, + "UpdateStorageConfigBody": { + "type": "object", + "properties": { + "fileSizeLimit": { + "type": "integer", + "minimum": 0, + "maximum": 536870912000, + "format": "int64" + }, + "features": { + "type": "object", + "properties": { + "imageTransformation": { + "type": "object", + "properties": { "enabled": { "type": "boolean" } }, + "required": ["enabled"] + }, + "s3Protocol": { + "type": "object", + "properties": { "enabled": { "type": "boolean" } }, + "required": ["enabled"] + }, + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "maxNamespaces": { "type": "integer", "minimum": 0 }, + "maxTables": { "type": "integer", "minimum": 0 }, + "maxCatalogs": { "type": "integer", "minimum": 0 } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] + }, + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "maxBuckets": { "type": "integer", "minimum": 0 }, + "maxIndexes": { "type": "integer", "minimum": 0 } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + } + }, + "external": { + "type": "object", + "properties": { "upstreamTarget": { "type": "string", "enum": ["main", "canary"] } }, + "required": ["upstreamTarget"] + } + }, + "additionalProperties": false + }, + "PostgresConfigResponse": { + "type": "object", + "properties": { + "effective_cache_size": { "type": "string" }, + "logical_decoding_work_mem": { "type": "string" }, + "maintenance_work_mem": { "type": "string" }, + "track_activity_query_size": { "type": "string" }, + "max_connections": { "type": "integer", "minimum": 1, "maximum": 262143 }, "max_locks_per_transaction": { "type": "integer", "minimum": 10, "maximum": 2147483640 }, "max_parallel_maintenance_workers": { "type": "integer", "minimum": 0, "maximum": 1024 }, "max_parallel_workers": { "type": "integer", "minimum": 0, "maximum": 1024 }, @@ -3865,13 +7811,27 @@ "max_wal_size": { "type": "string" }, "max_wal_senders": { "type": "integer" }, "max_worker_processes": { "type": "integer", "minimum": 0, "maximum": 262143 }, + "session_replication_role": { "type": "string", "enum": ["origin", "replica", "local"] }, "shared_buffers": { "type": "string" }, - "statement_timeout": { "type": "string" }, + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, "track_commit_timestamp": { "type": "boolean" }, "wal_keep_size": { "type": "string" }, - "wal_sender_timeout": { "type": "string" }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, "work_mem": { "type": "string" }, - "session_replication_role": { "enum": ["origin", "replica", "local"], "type": "string" } + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { "type": "boolean" } } }, "UpdatePostgresConfigBody": { @@ -3893,52 +7853,73 @@ "max_wal_size": { "type": "string" }, "max_wal_senders": { "type": "integer" }, "max_worker_processes": { "type": "integer", "minimum": 0, "maximum": 262143 }, + "session_replication_role": { "type": "string", "enum": ["origin", "replica", "local"] }, "shared_buffers": { "type": "string" }, - "statement_timeout": { "type": "string" }, + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, "track_commit_timestamp": { "type": "boolean" }, "wal_keep_size": { "type": "string" }, - "wal_sender_timeout": { "type": "string" }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, "work_mem": { "type": "string" }, - "restart_database": { "type": "boolean" }, - "session_replication_role": { "enum": ["origin", "replica", "local"], "type": "string" } - } + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { "type": "boolean" }, + "restart_database": { "type": "boolean" } + }, + "additionalProperties": false }, "V1PgbouncerConfigResponse": { "type": "object", "properties": { - "pool_mode": { "type": "string", "enum": ["transaction", "session", "statement"] }, - "default_pool_size": { "type": "number" }, + "default_pool_size": { "type": "integer" }, "ignore_startup_parameters": { "type": "string" }, - "max_client_conn": { "type": "number" }, - "connection_string": { "type": "string" } + "max_client_conn": { "type": "integer" }, + "pool_mode": { "type": "string", "enum": ["transaction", "session", "statement"] }, + "connection_string": { "type": "string" }, + "server_idle_timeout": { "type": "integer" }, + "server_lifetime": { "type": "integer" }, + "query_wait_timeout": { "type": "integer" }, + "reserve_pool_size": { "type": "integer" } } }, "SupavisorConfigResponse": { "type": "object", "properties": { - "database_type": { "type": "string", "enum": ["PRIMARY", "READ_REPLICA"] }, - "db_port": { "type": "integer" }, - "default_pool_size": { "type": "integer", "nullable": true }, - "max_client_conn": { "type": "integer", "nullable": true }, "identifier": { "type": "string" }, + "database_type": { "type": "string", "enum": ["PRIMARY", "READ_REPLICA"] }, "is_using_scram_auth": { "type": "boolean" }, "db_user": { "type": "string" }, "db_host": { "type": "string" }, + "db_port": { "type": "integer" }, "db_name": { "type": "string" }, - "connectionString": { "type": "string" }, - "pool_mode": { "enum": ["transaction", "session"], "type": "string" } + "connection_string": { "type": "string" }, + "connectionString": { "type": "string", "description": "Use connection_string instead" }, + "default_pool_size": { "type": "integer", "nullable": true }, + "max_client_conn": { "type": "integer", "nullable": true }, + "pool_mode": { "type": "string", "enum": ["transaction", "session"] } }, "required": [ - "database_type", - "db_port", - "default_pool_size", - "max_client_conn", "identifier", + "database_type", "is_using_scram_auth", "db_user", "db_host", + "db_port", "db_name", + "connection_string", "connectionString", + "default_pool_size", + "max_client_conn", "pool_mode" ] }, @@ -3947,15 +7928,14 @@ "properties": { "default_pool_size": { "type": "integer", - "nullable": true, "minimum": 0, - "maximum": 1000 + "maximum": 3000, + "nullable": true }, "pool_mode": { - "enum": ["transaction", "session"], "type": "string", - "deprecated": true, - "description": "This field is deprecated and is ignored in this request" + "enum": ["transaction", "session"], + "description": "Dedicated pooler mode for the project" } } }, @@ -3963,104 +7943,114 @@ "type": "object", "properties": { "default_pool_size": { "type": "integer", "nullable": true }, - "pool_mode": { "enum": ["transaction", "session"], "type": "string" } - }, - "required": ["default_pool_size", "pool_mode"] - }, - "AuthConfigResponse": { - "type": "object", - "properties": { - "api_max_request_duration": { "type": "integer", "nullable": true }, - "db_max_pool_size": { "type": "integer", "nullable": true }, - "jwt_exp": { "type": "integer", "nullable": true }, - "mailer_otp_exp": { "type": "integer" }, - "mailer_otp_length": { "type": "integer", "nullable": true }, - "mfa_max_enrolled_factors": { "type": "integer", "nullable": true }, - "mfa_phone_otp_length": { "type": "integer" }, - "mfa_phone_max_frequency": { "type": "integer", "nullable": true }, - "password_min_length": { "type": "integer", "nullable": true }, - "rate_limit_anonymous_users": { "type": "integer", "nullable": true }, - "rate_limit_email_sent": { "type": "integer", "nullable": true }, - "rate_limit_sms_sent": { "type": "integer", "nullable": true }, - "rate_limit_token_refresh": { "type": "integer", "nullable": true }, - "rate_limit_verify": { "type": "integer", "nullable": true }, - "rate_limit_otp": { "type": "integer", "nullable": true }, - "security_refresh_token_reuse_interval": { "type": "integer", "nullable": true }, - "sessions_inactivity_timeout": { "type": "integer", "nullable": true }, - "sessions_timebox": { "type": "integer", "nullable": true }, - "sms_max_frequency": { "type": "integer", "nullable": true }, - "sms_otp_exp": { "type": "integer", "nullable": true }, - "sms_otp_length": { "type": "integer" }, - "smtp_max_frequency": { "type": "integer", "nullable": true }, + "pool_mode": { "type": "string" } + }, + "required": ["default_pool_size", "pool_mode"] + }, + "AuthConfigResponse": { + "type": "object", + "properties": { + "api_max_request_duration": { "type": "integer", "nullable": true }, + "db_max_pool_size": { "type": "integer", "nullable": true }, + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true + }, "disable_signup": { "type": "boolean", "nullable": true }, "external_anonymous_users_enabled": { "type": "boolean", "nullable": true }, "external_apple_additional_client_ids": { "type": "string", "nullable": true }, "external_apple_client_id": { "type": "string", "nullable": true }, + "external_apple_email_optional": { "type": "boolean", "nullable": true }, "external_apple_enabled": { "type": "boolean", "nullable": true }, "external_apple_secret": { "type": "string", "nullable": true }, "external_azure_client_id": { "type": "string", "nullable": true }, + "external_azure_email_optional": { "type": "boolean", "nullable": true }, "external_azure_enabled": { "type": "boolean", "nullable": true }, "external_azure_secret": { "type": "string", "nullable": true }, "external_azure_url": { "type": "string", "nullable": true }, "external_bitbucket_client_id": { "type": "string", "nullable": true }, + "external_bitbucket_email_optional": { "type": "boolean", "nullable": true }, "external_bitbucket_enabled": { "type": "boolean", "nullable": true }, "external_bitbucket_secret": { "type": "string", "nullable": true }, "external_discord_client_id": { "type": "string", "nullable": true }, + "external_discord_email_optional": { "type": "boolean", "nullable": true }, "external_discord_enabled": { "type": "boolean", "nullable": true }, "external_discord_secret": { "type": "string", "nullable": true }, "external_email_enabled": { "type": "boolean", "nullable": true }, "external_facebook_client_id": { "type": "string", "nullable": true }, + "external_facebook_email_optional": { "type": "boolean", "nullable": true }, "external_facebook_enabled": { "type": "boolean", "nullable": true }, "external_facebook_secret": { "type": "string", "nullable": true }, "external_figma_client_id": { "type": "string", "nullable": true }, + "external_figma_email_optional": { "type": "boolean", "nullable": true }, "external_figma_enabled": { "type": "boolean", "nullable": true }, "external_figma_secret": { "type": "string", "nullable": true }, "external_github_client_id": { "type": "string", "nullable": true }, + "external_github_email_optional": { "type": "boolean", "nullable": true }, "external_github_enabled": { "type": "boolean", "nullable": true }, "external_github_secret": { "type": "string", "nullable": true }, "external_gitlab_client_id": { "type": "string", "nullable": true }, + "external_gitlab_email_optional": { "type": "boolean", "nullable": true }, "external_gitlab_enabled": { "type": "boolean", "nullable": true }, "external_gitlab_secret": { "type": "string", "nullable": true }, "external_gitlab_url": { "type": "string", "nullable": true }, "external_google_additional_client_ids": { "type": "string", "nullable": true }, "external_google_client_id": { "type": "string", "nullable": true }, + "external_google_email_optional": { "type": "boolean", "nullable": true }, "external_google_enabled": { "type": "boolean", "nullable": true }, "external_google_secret": { "type": "string", "nullable": true }, "external_google_skip_nonce_check": { "type": "boolean", "nullable": true }, "external_kakao_client_id": { "type": "string", "nullable": true }, + "external_kakao_email_optional": { "type": "boolean", "nullable": true }, "external_kakao_enabled": { "type": "boolean", "nullable": true }, "external_kakao_secret": { "type": "string", "nullable": true }, "external_keycloak_client_id": { "type": "string", "nullable": true }, + "external_keycloak_email_optional": { "type": "boolean", "nullable": true }, "external_keycloak_enabled": { "type": "boolean", "nullable": true }, "external_keycloak_secret": { "type": "string", "nullable": true }, "external_keycloak_url": { "type": "string", "nullable": true }, "external_linkedin_oidc_client_id": { "type": "string", "nullable": true }, + "external_linkedin_oidc_email_optional": { "type": "boolean", "nullable": true }, "external_linkedin_oidc_enabled": { "type": "boolean", "nullable": true }, "external_linkedin_oidc_secret": { "type": "string", "nullable": true }, "external_slack_oidc_client_id": { "type": "string", "nullable": true }, + "external_slack_oidc_email_optional": { "type": "boolean", "nullable": true }, "external_slack_oidc_enabled": { "type": "boolean", "nullable": true }, "external_slack_oidc_secret": { "type": "string", "nullable": true }, "external_notion_client_id": { "type": "string", "nullable": true }, + "external_notion_email_optional": { "type": "boolean", "nullable": true }, "external_notion_enabled": { "type": "boolean", "nullable": true }, "external_notion_secret": { "type": "string", "nullable": true }, "external_phone_enabled": { "type": "boolean", "nullable": true }, "external_slack_client_id": { "type": "string", "nullable": true }, + "external_slack_email_optional": { "type": "boolean", "nullable": true }, "external_slack_enabled": { "type": "boolean", "nullable": true }, "external_slack_secret": { "type": "string", "nullable": true }, "external_spotify_client_id": { "type": "string", "nullable": true }, + "external_spotify_email_optional": { "type": "boolean", "nullable": true }, "external_spotify_enabled": { "type": "boolean", "nullable": true }, "external_spotify_secret": { "type": "string", "nullable": true }, "external_twitch_client_id": { "type": "string", "nullable": true }, + "external_twitch_email_optional": { "type": "boolean", "nullable": true }, "external_twitch_enabled": { "type": "boolean", "nullable": true }, "external_twitch_secret": { "type": "string", "nullable": true }, "external_twitter_client_id": { "type": "string", "nullable": true }, + "external_twitter_email_optional": { "type": "boolean", "nullable": true }, "external_twitter_enabled": { "type": "boolean", "nullable": true }, "external_twitter_secret": { "type": "string", "nullable": true }, + "external_x_client_id": { "type": "string", "nullable": true }, + "external_x_email_optional": { "type": "boolean", "nullable": true }, + "external_x_enabled": { "type": "boolean", "nullable": true }, + "external_x_secret": { "type": "string", "nullable": true }, "external_workos_client_id": { "type": "string", "nullable": true }, "external_workos_enabled": { "type": "boolean", "nullable": true }, "external_workos_secret": { "type": "string", "nullable": true }, "external_workos_url": { "type": "string", "nullable": true }, + "external_web3_solana_enabled": { "type": "boolean", "nullable": true }, + "external_web3_ethereum_enabled": { "type": "boolean", "nullable": true }, "external_zoom_client_id": { "type": "string", "nullable": true }, + "external_zoom_email_optional": { "type": "boolean", "nullable": true }, "external_zoom_enabled": { "type": "boolean", "nullable": true }, "external_zoom_secret": { "type": "string", "nullable": true }, "hook_custom_access_token_enabled": { "type": "boolean", "nullable": true }, @@ -4078,8 +8068,17 @@ "hook_send_email_enabled": { "type": "boolean", "nullable": true }, "hook_send_email_uri": { "type": "string", "nullable": true }, "hook_send_email_secrets": { "type": "string", "nullable": true }, + "hook_before_user_created_enabled": { "type": "boolean", "nullable": true }, + "hook_before_user_created_uri": { "type": "string", "nullable": true }, + "hook_before_user_created_secrets": { "type": "string", "nullable": true }, + "hook_after_user_created_enabled": { "type": "boolean", "nullable": true }, + "hook_after_user_created_uri": { "type": "string", "nullable": true }, + "hook_after_user_created_secrets": { "type": "string", "nullable": true }, + "jwt_exp": { "type": "integer", "nullable": true }, "mailer_allow_unverified_email_sign_ins": { "type": "boolean", "nullable": true }, "mailer_autoconfirm": { "type": "boolean", "nullable": true }, + "mailer_otp_exp": { "type": "integer" }, + "mailer_otp_length": { "type": "integer", "nullable": true }, "mailer_secure_email_change_enabled": { "type": "boolean", "nullable": true }, "mailer_subjects_confirmation": { "type": "string", "nullable": true }, "mailer_subjects_email_change": { "type": "string", "nullable": true }, @@ -4087,43 +8086,134 @@ "mailer_subjects_magic_link": { "type": "string", "nullable": true }, "mailer_subjects_reauthentication": { "type": "string", "nullable": true }, "mailer_subjects_recovery": { "type": "string", "nullable": true }, + "mailer_subjects_password_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_email_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_phone_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_mfa_factor_enrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_linked_notification": { "type": "string", "nullable": true }, + "mailer_subjects_identity_unlinked_notification": { "type": "string", "nullable": true }, "mailer_templates_confirmation_content": { "type": "string", "nullable": true }, "mailer_templates_email_change_content": { "type": "string", "nullable": true }, "mailer_templates_invite_content": { "type": "string", "nullable": true }, "mailer_templates_magic_link_content": { "type": "string", "nullable": true }, "mailer_templates_reauthentication_content": { "type": "string", "nullable": true }, "mailer_templates_recovery_content": { "type": "string", "nullable": true }, + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_email_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_phone_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_identity_unlinked_enabled": { "type": "boolean", "nullable": true }, + "mfa_max_enrolled_factors": { "type": "integer", "nullable": true }, "mfa_totp_enroll_enabled": { "type": "boolean", "nullable": true }, "mfa_totp_verify_enabled": { "type": "boolean", "nullable": true }, "mfa_phone_enroll_enabled": { "type": "boolean", "nullable": true }, "mfa_phone_verify_enabled": { "type": "boolean", "nullable": true }, "mfa_web_authn_enroll_enabled": { "type": "boolean", "nullable": true }, "mfa_web_authn_verify_enabled": { "type": "boolean", "nullable": true }, + "mfa_phone_otp_length": { "type": "integer" }, "mfa_phone_template": { "type": "string", "nullable": true }, + "mfa_phone_max_frequency": { "type": "integer", "nullable": true }, + "nimbus_oauth_client_id": { "type": "string", "nullable": true }, + "nimbus_oauth_email_optional": { "type": "boolean", "nullable": true }, + "nimbus_oauth_client_secret": { "type": "string", "nullable": true }, "password_hibp_enabled": { "type": "boolean", "nullable": true }, - "password_required_characters": { "type": "string", "nullable": true }, + "password_min_length": { "type": "integer", "nullable": true }, + "password_required_characters": { + "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], + "nullable": true + }, + "rate_limit_anonymous_users": { "type": "integer", "nullable": true }, + "rate_limit_email_sent": { "type": "integer", "nullable": true }, + "rate_limit_sms_sent": { "type": "integer", "nullable": true }, + "rate_limit_token_refresh": { "type": "integer", "nullable": true }, + "rate_limit_verify": { "type": "integer", "nullable": true }, + "rate_limit_otp": { "type": "integer", "nullable": true }, + "rate_limit_web3": { "type": "integer", "nullable": true }, "refresh_token_rotation_enabled": { "type": "boolean", "nullable": true }, "saml_enabled": { "type": "boolean", "nullable": true }, "saml_external_url": { "type": "string", "nullable": true }, "saml_allow_encrypted_assertions": { "type": "boolean", "nullable": true }, "security_captcha_enabled": { "type": "boolean", "nullable": true }, - "security_captcha_provider": { "type": "string", "nullable": true }, + "security_captcha_provider": { + "type": "string", + "enum": ["turnstile", "hcaptcha"], + "nullable": true + }, "security_captcha_secret": { "type": "string", "nullable": true }, "security_manual_linking_enabled": { "type": "boolean", "nullable": true }, + "security_refresh_token_reuse_interval": { "type": "integer", "nullable": true }, "security_update_password_require_reauthentication": { "type": "boolean", "nullable": true }, + "sessions_inactivity_timeout": { "type": "integer", "nullable": true }, "sessions_single_per_user": { "type": "boolean", "nullable": true }, "sessions_tags": { "type": "string", "nullable": true }, + "sessions_timebox": { "type": "integer", "nullable": true }, "site_url": { "type": "string", "nullable": true }, "sms_autoconfirm": { "type": "boolean", "nullable": true }, + "sms_max_frequency": { "type": "integer", "nullable": true }, "sms_messagebird_access_key": { "type": "string", "nullable": true }, "sms_messagebird_originator": { "type": "string", "nullable": true }, - "sms_provider": { "type": "string", "nullable": true }, + "sms_otp_exp": { "type": "integer", "nullable": true }, + "sms_otp_length": { "type": "integer" }, + "sms_provider": { + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], + "nullable": true + }, "sms_template": { "type": "string", "nullable": true }, "sms_test_otp": { "type": "string", "nullable": true }, - "sms_test_otp_valid_until": { "type": "string", "nullable": true }, + "sms_test_otp_valid_until": { "type": "string", "format": "date-time", "nullable": true }, "sms_textlocal_api_key": { "type": "string", "nullable": true }, "sms_textlocal_sender": { "type": "string", "nullable": true }, "sms_twilio_account_sid": { "type": "string", "nullable": true }, @@ -4136,106 +8226,116 @@ "sms_vonage_api_key": { "type": "string", "nullable": true }, "sms_vonage_api_secret": { "type": "string", "nullable": true }, "sms_vonage_from": { "type": "string", "nullable": true }, - "smtp_admin_email": { "type": "string", "nullable": true }, + "smtp_admin_email": { "type": "string", "format": "email", "nullable": true }, "smtp_host": { "type": "string", "nullable": true }, + "smtp_max_frequency": { "type": "integer", "nullable": true }, "smtp_pass": { "type": "string", "nullable": true }, "smtp_port": { "type": "string", "nullable": true }, "smtp_sender_name": { "type": "string", "nullable": true }, "smtp_user": { "type": "string", "nullable": true }, - "uri_allow_list": { "type": "string", "nullable": true } + "uri_allow_list": { "type": "string", "nullable": true }, + "oauth_server_enabled": { "type": "boolean" }, + "oauth_server_allow_dynamic_registration": { "type": "boolean" }, + "oauth_server_authorization_path": { "type": "string", "nullable": true } }, "required": [ "api_max_request_duration", "db_max_pool_size", - "jwt_exp", - "mailer_otp_exp", - "mailer_otp_length", - "mfa_max_enrolled_factors", - "mfa_phone_otp_length", - "mfa_phone_max_frequency", - "password_min_length", - "rate_limit_anonymous_users", - "rate_limit_email_sent", - "rate_limit_sms_sent", - "rate_limit_token_refresh", - "rate_limit_verify", - "rate_limit_otp", - "security_refresh_token_reuse_interval", - "sessions_inactivity_timeout", - "sessions_timebox", - "sms_max_frequency", - "sms_otp_exp", - "sms_otp_length", - "smtp_max_frequency", + "db_max_pool_size_unit", "disable_signup", "external_anonymous_users_enabled", "external_apple_additional_client_ids", "external_apple_client_id", + "external_apple_email_optional", "external_apple_enabled", "external_apple_secret", "external_azure_client_id", + "external_azure_email_optional", "external_azure_enabled", "external_azure_secret", "external_azure_url", "external_bitbucket_client_id", + "external_bitbucket_email_optional", "external_bitbucket_enabled", "external_bitbucket_secret", "external_discord_client_id", + "external_discord_email_optional", "external_discord_enabled", "external_discord_secret", "external_email_enabled", "external_facebook_client_id", + "external_facebook_email_optional", "external_facebook_enabled", "external_facebook_secret", "external_figma_client_id", + "external_figma_email_optional", "external_figma_enabled", "external_figma_secret", "external_github_client_id", + "external_github_email_optional", "external_github_enabled", "external_github_secret", "external_gitlab_client_id", + "external_gitlab_email_optional", "external_gitlab_enabled", "external_gitlab_secret", "external_gitlab_url", "external_google_additional_client_ids", "external_google_client_id", + "external_google_email_optional", "external_google_enabled", "external_google_secret", "external_google_skip_nonce_check", "external_kakao_client_id", + "external_kakao_email_optional", "external_kakao_enabled", "external_kakao_secret", "external_keycloak_client_id", + "external_keycloak_email_optional", "external_keycloak_enabled", "external_keycloak_secret", "external_keycloak_url", "external_linkedin_oidc_client_id", + "external_linkedin_oidc_email_optional", "external_linkedin_oidc_enabled", "external_linkedin_oidc_secret", "external_slack_oidc_client_id", + "external_slack_oidc_email_optional", "external_slack_oidc_enabled", "external_slack_oidc_secret", "external_notion_client_id", + "external_notion_email_optional", "external_notion_enabled", "external_notion_secret", "external_phone_enabled", "external_slack_client_id", + "external_slack_email_optional", "external_slack_enabled", "external_slack_secret", "external_spotify_client_id", + "external_spotify_email_optional", "external_spotify_enabled", "external_spotify_secret", "external_twitch_client_id", + "external_twitch_email_optional", "external_twitch_enabled", "external_twitch_secret", "external_twitter_client_id", + "external_twitter_email_optional", "external_twitter_enabled", "external_twitter_secret", + "external_x_client_id", + "external_x_email_optional", + "external_x_enabled", + "external_x_secret", "external_workos_client_id", "external_workos_enabled", "external_workos_secret", "external_workos_url", + "external_web3_solana_enabled", + "external_web3_ethereum_enabled", "external_zoom_client_id", + "external_zoom_email_optional", "external_zoom_enabled", "external_zoom_secret", "hook_custom_access_token_enabled", @@ -4253,8 +8353,17 @@ "hook_send_email_enabled", "hook_send_email_uri", "hook_send_email_secrets", + "hook_before_user_created_enabled", + "hook_before_user_created_uri", + "hook_before_user_created_secrets", + "hook_after_user_created_enabled", + "hook_after_user_created_uri", + "hook_after_user_created_secrets", + "jwt_exp", "mailer_allow_unverified_email_sign_ins", "mailer_autoconfirm", + "mailer_otp_exp", + "mailer_otp_length", "mailer_secure_email_change_enabled", "mailer_subjects_confirmation", "mailer_subjects_email_change", @@ -4262,21 +8371,56 @@ "mailer_subjects_magic_link", "mailer_subjects_reauthentication", "mailer_subjects_recovery", + "mailer_subjects_password_changed_notification", + "mailer_subjects_email_changed_notification", + "mailer_subjects_phone_changed_notification", + "mailer_subjects_mfa_factor_enrolled_notification", + "mailer_subjects_mfa_factor_unenrolled_notification", + "mailer_subjects_identity_linked_notification", + "mailer_subjects_identity_unlinked_notification", "mailer_templates_confirmation_content", "mailer_templates_email_change_content", "mailer_templates_invite_content", "mailer_templates_magic_link_content", "mailer_templates_reauthentication_content", "mailer_templates_recovery_content", + "mailer_templates_password_changed_notification_content", + "mailer_templates_email_changed_notification_content", + "mailer_templates_phone_changed_notification_content", + "mailer_templates_mfa_factor_enrolled_notification_content", + "mailer_templates_mfa_factor_unenrolled_notification_content", + "mailer_templates_identity_linked_notification_content", + "mailer_templates_identity_unlinked_notification_content", + "mailer_notifications_password_changed_enabled", + "mailer_notifications_email_changed_enabled", + "mailer_notifications_phone_changed_enabled", + "mailer_notifications_mfa_factor_enrolled_enabled", + "mailer_notifications_mfa_factor_unenrolled_enabled", + "mailer_notifications_identity_linked_enabled", + "mailer_notifications_identity_unlinked_enabled", + "mfa_max_enrolled_factors", "mfa_totp_enroll_enabled", "mfa_totp_verify_enabled", "mfa_phone_enroll_enabled", "mfa_phone_verify_enabled", "mfa_web_authn_enroll_enabled", "mfa_web_authn_verify_enabled", + "mfa_phone_otp_length", "mfa_phone_template", + "mfa_phone_max_frequency", + "nimbus_oauth_client_id", + "nimbus_oauth_email_optional", + "nimbus_oauth_client_secret", "password_hibp_enabled", + "password_min_length", "password_required_characters", + "rate_limit_anonymous_users", + "rate_limit_email_sent", + "rate_limit_sms_sent", + "rate_limit_token_refresh", + "rate_limit_verify", + "rate_limit_otp", + "rate_limit_web3", "refresh_token_rotation_enabled", "saml_enabled", "saml_external_url", @@ -4285,13 +8429,19 @@ "security_captcha_provider", "security_captcha_secret", "security_manual_linking_enabled", + "security_refresh_token_reuse_interval", "security_update_password_require_reauthentication", + "sessions_inactivity_timeout", "sessions_single_per_user", "sessions_tags", + "sessions_timebox", "site_url", "sms_autoconfirm", + "sms_max_frequency", "sms_messagebird_access_key", "sms_messagebird_originator", + "sms_otp_exp", + "sms_otp_length", "sms_provider", "sms_template", "sms_test_otp", @@ -4310,288 +8460,1096 @@ "sms_vonage_from", "smtp_admin_email", "smtp_host", + "smtp_max_frequency", "smtp_pass", "smtp_port", "smtp_sender_name", "smtp_user", - "uri_allow_list" + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" + ] + }, + "UpdateAuthConfigBody": { + "type": "object", + "properties": { + "site_url": { "type": "string", "pattern": "^[^,]+$", "nullable": true }, + "disable_signup": { "type": "boolean", "nullable": true }, + "jwt_exp": { "type": "integer", "minimum": 0, "maximum": 604800, "nullable": true }, + "smtp_admin_email": { "type": "string", "format": "email", "nullable": true }, + "smtp_host": { "type": "string", "nullable": true }, + "smtp_port": { "type": "string", "nullable": true }, + "smtp_user": { "type": "string", "nullable": true }, + "smtp_pass": { "type": "string", "nullable": true }, + "smtp_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true + }, + "smtp_sender_name": { "type": "string", "nullable": true }, + "mailer_allow_unverified_email_sign_ins": { "type": "boolean", "nullable": true }, + "mailer_autoconfirm": { "type": "boolean", "nullable": true }, + "mailer_subjects_invite": { "type": "string", "nullable": true }, + "mailer_subjects_confirmation": { "type": "string", "nullable": true }, + "mailer_subjects_recovery": { "type": "string", "nullable": true }, + "mailer_subjects_email_change": { "type": "string", "nullable": true }, + "mailer_subjects_magic_link": { "type": "string", "nullable": true }, + "mailer_subjects_reauthentication": { "type": "string", "nullable": true }, + "mailer_subjects_password_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_email_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_phone_changed_notification": { "type": "string", "nullable": true }, + "mailer_subjects_mfa_factor_enrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_linked_notification": { "type": "string", "nullable": true }, + "mailer_subjects_identity_unlinked_notification": { "type": "string", "nullable": true }, + "mailer_templates_invite_content": { "type": "string", "nullable": true }, + "mailer_templates_confirmation_content": { "type": "string", "nullable": true }, + "mailer_templates_recovery_content": { "type": "string", "nullable": true }, + "mailer_templates_email_change_content": { "type": "string", "nullable": true }, + "mailer_templates_magic_link_content": { "type": "string", "nullable": true }, + "mailer_templates_reauthentication_content": { "type": "string", "nullable": true }, + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_email_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_phone_changed_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { "type": "boolean", "nullable": true }, + "mailer_notifications_identity_unlinked_enabled": { "type": "boolean", "nullable": true }, + "mfa_max_enrolled_factors": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true + }, + "uri_allow_list": { "type": "string", "nullable": true }, + "external_anonymous_users_enabled": { "type": "boolean", "nullable": true }, + "external_email_enabled": { "type": "boolean", "nullable": true }, + "external_phone_enabled": { "type": "boolean", "nullable": true }, + "saml_enabled": { "type": "boolean", "nullable": true }, + "saml_external_url": { "type": "string", "pattern": "^[^,]+$", "nullable": true }, + "security_captcha_enabled": { "type": "boolean", "nullable": true }, + "security_captcha_provider": { + "type": "string", + "enum": ["turnstile", "hcaptcha"], + "nullable": true + }, + "security_captcha_secret": { "type": "string", "nullable": true }, + "sessions_timebox": { "type": "integer", "minimum": 0, "nullable": true }, + "sessions_inactivity_timeout": { "type": "integer", "minimum": 0, "nullable": true }, + "sessions_single_per_user": { "type": "boolean", "nullable": true }, + "sessions_tags": { + "type": "string", + "pattern": "^\\s*([a-zA-Z0-9_-]+(\\s*,+\\s*)?)*\\s*$", + "nullable": true + }, + "rate_limit_anonymous_users": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_email_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_sms_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_verify": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_token_refresh": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_otp": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_web3": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "mailer_secure_email_change_enabled": { "type": "boolean", "nullable": true }, + "refresh_token_rotation_enabled": { "type": "boolean", "nullable": true }, + "password_hibp_enabled": { "type": "boolean", "nullable": true }, + "password_min_length": { + "type": "integer", + "minimum": 6, + "maximum": 32767, + "nullable": true + }, + "password_required_characters": { + "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], + "nullable": true + }, + "security_manual_linking_enabled": { "type": "boolean", "nullable": true }, + "security_update_password_require_reauthentication": { + "type": "boolean", + "nullable": true + }, + "security_refresh_token_reuse_interval": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true + }, + "mailer_otp_exp": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, + "mailer_otp_length": { "type": "integer", "minimum": 6, "maximum": 10, "nullable": true }, + "sms_autoconfirm": { "type": "boolean", "nullable": true }, + "sms_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true + }, + "sms_otp_exp": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true + }, + "sms_otp_length": { "type": "integer", "minimum": 0, "maximum": 32767 }, + "sms_provider": { + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], + "nullable": true + }, + "sms_messagebird_access_key": { "type": "string", "nullable": true }, + "sms_messagebird_originator": { "type": "string", "nullable": true }, + "sms_test_otp": { + "type": "string", + "pattern": "^([0-9]{1,15}=[0-9]+,?)*$", + "nullable": true + }, + "sms_test_otp_valid_until": { "type": "string", "format": "date-time", "nullable": true }, + "sms_textlocal_api_key": { "type": "string", "nullable": true }, + "sms_textlocal_sender": { "type": "string", "nullable": true }, + "sms_twilio_account_sid": { "type": "string", "nullable": true }, + "sms_twilio_auth_token": { "type": "string", "nullable": true }, + "sms_twilio_content_sid": { "type": "string", "nullable": true }, + "sms_twilio_message_service_sid": { "type": "string", "nullable": true }, + "sms_twilio_verify_account_sid": { "type": "string", "nullable": true }, + "sms_twilio_verify_auth_token": { "type": "string", "nullable": true }, + "sms_twilio_verify_message_service_sid": { "type": "string", "nullable": true }, + "sms_vonage_api_key": { "type": "string", "nullable": true }, + "sms_vonage_api_secret": { "type": "string", "nullable": true }, + "sms_vonage_from": { "type": "string", "nullable": true }, + "sms_template": { "type": "string", "nullable": true }, + "hook_mfa_verification_attempt_enabled": { "type": "boolean", "nullable": true }, + "hook_mfa_verification_attempt_uri": { "type": "string", "nullable": true }, + "hook_mfa_verification_attempt_secrets": { "type": "string", "nullable": true }, + "hook_password_verification_attempt_enabled": { "type": "boolean", "nullable": true }, + "hook_password_verification_attempt_uri": { "type": "string", "nullable": true }, + "hook_password_verification_attempt_secrets": { "type": "string", "nullable": true }, + "hook_custom_access_token_enabled": { "type": "boolean", "nullable": true }, + "hook_custom_access_token_uri": { "type": "string", "nullable": true }, + "hook_custom_access_token_secrets": { "type": "string", "nullable": true }, + "hook_send_sms_enabled": { "type": "boolean", "nullable": true }, + "hook_send_sms_uri": { "type": "string", "nullable": true }, + "hook_send_sms_secrets": { "type": "string", "nullable": true }, + "hook_send_email_enabled": { "type": "boolean", "nullable": true }, + "hook_send_email_uri": { "type": "string", "nullable": true }, + "hook_send_email_secrets": { "type": "string", "nullable": true }, + "hook_before_user_created_enabled": { "type": "boolean", "nullable": true }, + "hook_before_user_created_uri": { "type": "string", "nullable": true }, + "hook_before_user_created_secrets": { "type": "string", "nullable": true }, + "hook_after_user_created_enabled": { "type": "boolean", "nullable": true }, + "hook_after_user_created_uri": { "type": "string", "nullable": true }, + "hook_after_user_created_secrets": { "type": "string", "nullable": true }, + "external_apple_enabled": { "type": "boolean", "nullable": true }, + "external_apple_client_id": { "type": "string", "nullable": true }, + "external_apple_email_optional": { "type": "boolean", "nullable": true }, + "external_apple_secret": { "type": "string", "nullable": true }, + "external_apple_additional_client_ids": { "type": "string", "nullable": true }, + "external_azure_enabled": { "type": "boolean", "nullable": true }, + "external_azure_client_id": { "type": "string", "nullable": true }, + "external_azure_email_optional": { "type": "boolean", "nullable": true }, + "external_azure_secret": { "type": "string", "nullable": true }, + "external_azure_url": { "type": "string", "nullable": true }, + "external_bitbucket_enabled": { "type": "boolean", "nullable": true }, + "external_bitbucket_client_id": { "type": "string", "nullable": true }, + "external_bitbucket_email_optional": { "type": "boolean", "nullable": true }, + "external_bitbucket_secret": { "type": "string", "nullable": true }, + "external_discord_enabled": { "type": "boolean", "nullable": true }, + "external_discord_client_id": { "type": "string", "nullable": true }, + "external_discord_email_optional": { "type": "boolean", "nullable": true }, + "external_discord_secret": { "type": "string", "nullable": true }, + "external_facebook_enabled": { "type": "boolean", "nullable": true }, + "external_facebook_client_id": { "type": "string", "nullable": true }, + "external_facebook_email_optional": { "type": "boolean", "nullable": true }, + "external_facebook_secret": { "type": "string", "nullable": true }, + "external_figma_enabled": { "type": "boolean", "nullable": true }, + "external_figma_client_id": { "type": "string", "nullable": true }, + "external_figma_email_optional": { "type": "boolean", "nullable": true }, + "external_figma_secret": { "type": "string", "nullable": true }, + "external_github_enabled": { "type": "boolean", "nullable": true }, + "external_github_client_id": { "type": "string", "nullable": true }, + "external_github_email_optional": { "type": "boolean", "nullable": true }, + "external_github_secret": { "type": "string", "nullable": true }, + "external_gitlab_enabled": { "type": "boolean", "nullable": true }, + "external_gitlab_client_id": { "type": "string", "nullable": true }, + "external_gitlab_email_optional": { "type": "boolean", "nullable": true }, + "external_gitlab_secret": { "type": "string", "nullable": true }, + "external_gitlab_url": { "type": "string", "nullable": true }, + "external_google_enabled": { "type": "boolean", "nullable": true }, + "external_google_client_id": { "type": "string", "nullable": true }, + "external_google_email_optional": { "type": "boolean", "nullable": true }, + "external_google_secret": { "type": "string", "nullable": true }, + "external_google_additional_client_ids": { "type": "string", "nullable": true }, + "external_google_skip_nonce_check": { "type": "boolean", "nullable": true }, + "external_kakao_enabled": { "type": "boolean", "nullable": true }, + "external_kakao_client_id": { "type": "string", "nullable": true }, + "external_kakao_email_optional": { "type": "boolean", "nullable": true }, + "external_kakao_secret": { "type": "string", "nullable": true }, + "external_keycloak_enabled": { "type": "boolean", "nullable": true }, + "external_keycloak_client_id": { "type": "string", "nullable": true }, + "external_keycloak_email_optional": { "type": "boolean", "nullable": true }, + "external_keycloak_secret": { "type": "string", "nullable": true }, + "external_keycloak_url": { "type": "string", "nullable": true }, + "external_linkedin_oidc_enabled": { "type": "boolean", "nullable": true }, + "external_linkedin_oidc_client_id": { "type": "string", "nullable": true }, + "external_linkedin_oidc_email_optional": { "type": "boolean", "nullable": true }, + "external_linkedin_oidc_secret": { "type": "string", "nullable": true }, + "external_slack_oidc_enabled": { "type": "boolean", "nullable": true }, + "external_slack_oidc_client_id": { "type": "string", "nullable": true }, + "external_slack_oidc_email_optional": { "type": "boolean", "nullable": true }, + "external_slack_oidc_secret": { "type": "string", "nullable": true }, + "external_notion_enabled": { "type": "boolean", "nullable": true }, + "external_notion_client_id": { "type": "string", "nullable": true }, + "external_notion_email_optional": { "type": "boolean", "nullable": true }, + "external_notion_secret": { "type": "string", "nullable": true }, + "external_slack_enabled": { "type": "boolean", "nullable": true }, + "external_slack_client_id": { "type": "string", "nullable": true }, + "external_slack_email_optional": { "type": "boolean", "nullable": true }, + "external_slack_secret": { "type": "string", "nullable": true }, + "external_spotify_enabled": { "type": "boolean", "nullable": true }, + "external_spotify_client_id": { "type": "string", "nullable": true }, + "external_spotify_email_optional": { "type": "boolean", "nullable": true }, + "external_spotify_secret": { "type": "string", "nullable": true }, + "external_twitch_enabled": { "type": "boolean", "nullable": true }, + "external_twitch_client_id": { "type": "string", "nullable": true }, + "external_twitch_email_optional": { "type": "boolean", "nullable": true }, + "external_twitch_secret": { "type": "string", "nullable": true }, + "external_twitter_enabled": { "type": "boolean", "nullable": true }, + "external_twitter_client_id": { "type": "string", "nullable": true }, + "external_twitter_email_optional": { "type": "boolean", "nullable": true }, + "external_twitter_secret": { "type": "string", "nullable": true }, + "external_x_enabled": { "type": "boolean", "nullable": true }, + "external_x_client_id": { "type": "string", "nullable": true }, + "external_x_email_optional": { "type": "boolean", "nullable": true }, + "external_x_secret": { "type": "string", "nullable": true }, + "external_workos_enabled": { "type": "boolean", "nullable": true }, + "external_workos_client_id": { "type": "string", "nullable": true }, + "external_workos_secret": { "type": "string", "nullable": true }, + "external_workos_url": { "type": "string", "nullable": true }, + "external_web3_solana_enabled": { "type": "boolean", "nullable": true }, + "external_web3_ethereum_enabled": { "type": "boolean", "nullable": true }, + "external_zoom_enabled": { "type": "boolean", "nullable": true }, + "external_zoom_client_id": { "type": "string", "nullable": true }, + "external_zoom_email_optional": { "type": "boolean", "nullable": true }, + "external_zoom_secret": { "type": "string", "nullable": true }, + "db_max_pool_size": { "type": "integer", "nullable": true }, + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true + }, + "api_max_request_duration": { "type": "integer", "nullable": true }, + "mfa_totp_enroll_enabled": { "type": "boolean", "nullable": true }, + "mfa_totp_verify_enabled": { "type": "boolean", "nullable": true }, + "mfa_web_authn_enroll_enabled": { "type": "boolean", "nullable": true }, + "mfa_web_authn_verify_enabled": { "type": "boolean", "nullable": true }, + "mfa_phone_enroll_enabled": { "type": "boolean", "nullable": true }, + "mfa_phone_verify_enabled": { "type": "boolean", "nullable": true }, + "mfa_phone_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true + }, + "mfa_phone_otp_length": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true + }, + "mfa_phone_template": { "type": "string", "nullable": true }, + "nimbus_oauth_client_id": { "type": "string", "nullable": true }, + "nimbus_oauth_client_secret": { "type": "string", "nullable": true }, + "oauth_server_enabled": { "type": "boolean", "nullable": true }, + "oauth_server_allow_dynamic_registration": { "type": "boolean", "nullable": true }, + "oauth_server_authorization_path": { "type": "string", "nullable": true } + } + }, + "RealtimeConfigResponse": { + "type": "object", + "properties": { + "private_only": { + "type": "boolean", + "nullable": true, + "description": "Whether to only allow private channels" + }, + "connection_pool": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "nullable": true, + "description": "Sets connection pool size for Realtime Authorization" + }, + "max_concurrent_users": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of concurrent users rate limit" + }, + "max_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of events per second rate per channel limit" + }, + "max_bytes_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 10000000, + "nullable": true, + "description": "Sets maximum number of bytes per second rate per channel limit" + }, + "max_channels_per_client": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of channels per client rate limit" + }, + "max_joins_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of joins per second rate limit" + }, + "max_presence_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of presence events per second rate limit" + }, + "max_payload_size_in_kb": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of payload size in KB rate limit" + }, + "suspend": { + "type": "boolean", + "nullable": true, + "description": "Whether to suspend realtime" + } + }, + "required": [ + "private_only", + "connection_pool", + "max_concurrent_users", + "max_events_per_second", + "max_bytes_per_second", + "max_channels_per_client", + "max_joins_per_second", + "max_presence_events_per_second", + "max_payload_size_in_kb", + "suspend" ] }, - "UpdateAuthConfigBody": { + "UpdateRealtimeConfigBody": { "type": "object", "properties": { - "jwt_exp": { "type": "integer", "minimum": 0, "maximum": 604800 }, - "smtp_max_frequency": { "type": "integer", "minimum": 0, "maximum": 32767 }, - "mfa_max_enrolled_factors": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, - "sessions_timebox": { "type": "integer", "minimum": 0 }, - "sessions_inactivity_timeout": { "type": "integer", "minimum": 0 }, - "rate_limit_anonymous_users": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "rate_limit_email_sent": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "rate_limit_sms_sent": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "rate_limit_verify": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "rate_limit_token_refresh": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "rate_limit_otp": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, - "password_min_length": { "type": "integer", "minimum": 6, "maximum": 32767 }, - "security_refresh_token_reuse_interval": { + "private_only": { + "type": "boolean", + "description": "Whether to only allow private channels" + }, + "connection_pool": { "type": "integer", - "minimum": 0, - "maximum": 2147483647 + "minimum": 1, + "maximum": 100, + "description": "Sets connection pool size for Realtime Authorization" }, - "mailer_otp_exp": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, - "mailer_otp_length": { "type": "integer", "minimum": 6, "maximum": 10 }, - "sms_max_frequency": { "type": "integer", "minimum": 0, "maximum": 32767 }, - "sms_otp_exp": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, - "sms_otp_length": { "type": "integer", "minimum": 0, "maximum": 32767 }, - "db_max_pool_size": { "type": "integer" }, - "api_max_request_duration": { "type": "integer" }, - "mfa_phone_max_frequency": { "type": "integer", "minimum": 0, "maximum": 32767 }, - "mfa_phone_otp_length": { "type": "integer", "minimum": 0, "maximum": 32767 }, - "site_url": { "type": "string", "pattern": "/^[^,]+$/" }, - "disable_signup": { "type": "boolean" }, - "smtp_admin_email": { "type": "string" }, - "smtp_host": { "type": "string" }, - "smtp_port": { "type": "string" }, - "smtp_user": { "type": "string" }, - "smtp_pass": { "type": "string" }, - "smtp_sender_name": { "type": "string" }, - "mailer_allow_unverified_email_sign_ins": { "type": "boolean" }, - "mailer_autoconfirm": { "type": "boolean" }, - "mailer_subjects_invite": { "type": "string" }, - "mailer_subjects_confirmation": { "type": "string" }, - "mailer_subjects_recovery": { "type": "string" }, - "mailer_subjects_email_change": { "type": "string" }, - "mailer_subjects_magic_link": { "type": "string" }, - "mailer_subjects_reauthentication": { "type": "string" }, - "mailer_templates_invite_content": { "type": "string" }, - "mailer_templates_confirmation_content": { "type": "string" }, - "mailer_templates_recovery_content": { "type": "string" }, - "mailer_templates_email_change_content": { "type": "string" }, - "mailer_templates_magic_link_content": { "type": "string" }, - "mailer_templates_reauthentication_content": { "type": "string" }, - "uri_allow_list": { "type": "string" }, - "external_anonymous_users_enabled": { "type": "boolean" }, - "external_email_enabled": { "type": "boolean" }, - "external_phone_enabled": { "type": "boolean" }, - "saml_enabled": { "type": "boolean" }, - "saml_external_url": { "type": "string", "pattern": "/^[^,]+$/" }, - "security_captcha_enabled": { "type": "boolean" }, - "security_captcha_provider": { "type": "string" }, - "security_captcha_secret": { "type": "string" }, - "sessions_single_per_user": { "type": "boolean" }, - "sessions_tags": { - "type": "string", - "pattern": "/^\\s*([a-z0-9_-]+(\\s*,+\\s*)?)*\\s*$/i" + "max_concurrent_users": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of concurrent users rate limit" }, - "mailer_secure_email_change_enabled": { "type": "boolean" }, - "refresh_token_rotation_enabled": { "type": "boolean" }, - "password_hibp_enabled": { "type": "boolean" }, - "password_required_characters": { + "max_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of events per second rate per channel limit" + }, + "max_bytes_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 10000000, + "description": "Sets maximum number of bytes per second rate per channel limit" + }, + "max_channels_per_client": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of channels per client rate limit" + }, + "max_joins_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of joins per second rate limit" + }, + "max_presence_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of presence events per second rate limit" + }, + "max_payload_size_in_kb": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of payload size in KB rate limit" + }, + "suspend": { "type": "boolean", "description": "Whether to suspend realtime" } + }, + "additionalProperties": false + }, + "CreateThirdPartyAuthBody": { + "type": "object", + "properties": { + "oidc_issuer_url": { "type": "string" }, + "jwks_url": { "type": "string" }, + "custom_jwks": {} + } + }, + "ThirdPartyAuth": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" }, + "type": { "type": "string" }, + "oidc_issuer_url": { "type": "string", "nullable": true }, + "jwks_url": { "type": "string", "nullable": true }, + "custom_jwks": { "nullable": true }, + "resolved_jwks": { "nullable": true }, + "inserted_at": { "type": "string" }, + "updated_at": { "type": "string" }, + "resolved_at": { "type": "string", "nullable": true } + }, + "required": ["id", "type", "inserted_at", "updated_at"] + }, + "GetProjectAvailableRestoreVersionsResponse": { + "type": "object", + "properties": { + "available_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { "type": "string" }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "postgres_engine": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + } + }, + "required": ["version", "release_channel", "postgres_engine"] + } + } + }, + "required": ["available_versions"] + }, + "ListProjectAddonsResponse": { + "type": "object", + "properties": { + "selected_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "variant": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { "type": "string", "enum": ["cd_default"] }, + { "type": "string", "enum": ["pitr_7", "pitr_14", "pitr_28"] }, + { "type": "string", "enum": ["ipv4_default"] }, + { "type": "string", "enum": ["auth_mfa_phone_default"] }, + { "type": "string", "enum": ["auth_mfa_web_authn_default"] }, + { "type": "string", "enum": ["log_drain_default"] } + ] + }, + "name": { "type": "string" }, + "price": { + "type": "object", + "properties": { + "description": { "type": "string" }, + "type": { "type": "string", "enum": ["fixed", "usage"] }, + "interval": { "type": "string", "enum": ["monthly", "hourly"] }, + "amount": { "type": "number" } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { "description": "Any JSON-serializable value" } + }, + "required": ["id", "name", "price"] + } + }, + "required": ["type", "variant"] + } + }, + "available_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "name": { "type": "string" }, + "variants": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { "type": "string", "enum": ["cd_default"] }, + { "type": "string", "enum": ["pitr_7", "pitr_14", "pitr_28"] }, + { "type": "string", "enum": ["ipv4_default"] }, + { "type": "string", "enum": ["auth_mfa_phone_default"] }, + { "type": "string", "enum": ["auth_mfa_web_authn_default"] }, + { "type": "string", "enum": ["log_drain_default"] } + ] + }, + "name": { "type": "string" }, + "price": { + "type": "object", + "properties": { + "description": { "type": "string" }, + "type": { "type": "string", "enum": ["fixed", "usage"] }, + "interval": { "type": "string", "enum": ["monthly", "hourly"] }, + "amount": { "type": "number" } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { "description": "Any JSON-serializable value" } + }, + "required": ["id", "name", "price"] + } + } + }, + "required": ["type", "name", "variants"] + } + } + }, + "required": ["selected_addons", "available_addons"] + }, + "ApplyProjectAddonBody": { + "type": "object", + "properties": { + "addon_variant": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { "type": "string", "enum": ["cd_default"] }, + { "type": "string", "enum": ["pitr_7", "pitr_14", "pitr_28"] }, + { "type": "string", "enum": ["ipv4_default"] } + ] + }, + "addon_type": { "type": "string", "enum": [ - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", - "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", - "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", - "" + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" ] - }, - "security_manual_linking_enabled": { "type": "boolean" }, - "security_update_password_require_reauthentication": { "type": "boolean" }, - "sms_autoconfirm": { "type": "boolean" }, - "sms_provider": { "type": "string" }, - "sms_messagebird_access_key": { "type": "string" }, - "sms_messagebird_originator": { "type": "string" }, - "sms_test_otp": { "type": "string", "pattern": "/^([0-9]{1,15}=[0-9]+,?)*$/" }, - "sms_test_otp_valid_until": { "type": "string" }, - "sms_textlocal_api_key": { "type": "string" }, - "sms_textlocal_sender": { "type": "string" }, - "sms_twilio_account_sid": { "type": "string" }, - "sms_twilio_auth_token": { "type": "string" }, - "sms_twilio_content_sid": { "type": "string" }, - "sms_twilio_message_service_sid": { "type": "string" }, - "sms_twilio_verify_account_sid": { "type": "string" }, - "sms_twilio_verify_auth_token": { "type": "string" }, - "sms_twilio_verify_message_service_sid": { "type": "string" }, - "sms_vonage_api_key": { "type": "string" }, - "sms_vonage_api_secret": { "type": "string" }, - "sms_vonage_from": { "type": "string" }, - "sms_template": { "type": "string" }, - "hook_mfa_verification_attempt_enabled": { "type": "boolean" }, - "hook_mfa_verification_attempt_uri": { "type": "string" }, - "hook_mfa_verification_attempt_secrets": { "type": "string" }, - "hook_password_verification_attempt_enabled": { "type": "boolean" }, - "hook_password_verification_attempt_uri": { "type": "string" }, - "hook_password_verification_attempt_secrets": { "type": "string" }, - "hook_custom_access_token_enabled": { "type": "boolean" }, - "hook_custom_access_token_uri": { "type": "string" }, - "hook_custom_access_token_secrets": { "type": "string" }, - "hook_send_sms_enabled": { "type": "boolean" }, - "hook_send_sms_uri": { "type": "string" }, - "hook_send_sms_secrets": { "type": "string" }, - "hook_send_email_enabled": { "type": "boolean" }, - "hook_send_email_uri": { "type": "string" }, - "hook_send_email_secrets": { "type": "string" }, - "external_apple_enabled": { "type": "boolean" }, - "external_apple_client_id": { "type": "string" }, - "external_apple_secret": { "type": "string" }, - "external_apple_additional_client_ids": { "type": "string" }, - "external_azure_enabled": { "type": "boolean" }, - "external_azure_client_id": { "type": "string" }, - "external_azure_secret": { "type": "string" }, - "external_azure_url": { "type": "string" }, - "external_bitbucket_enabled": { "type": "boolean" }, - "external_bitbucket_client_id": { "type": "string" }, - "external_bitbucket_secret": { "type": "string" }, - "external_discord_enabled": { "type": "boolean" }, - "external_discord_client_id": { "type": "string" }, - "external_discord_secret": { "type": "string" }, - "external_facebook_enabled": { "type": "boolean" }, - "external_facebook_client_id": { "type": "string" }, - "external_facebook_secret": { "type": "string" }, - "external_figma_enabled": { "type": "boolean" }, - "external_figma_client_id": { "type": "string" }, - "external_figma_secret": { "type": "string" }, - "external_github_enabled": { "type": "boolean" }, - "external_github_client_id": { "type": "string" }, - "external_github_secret": { "type": "string" }, - "external_gitlab_enabled": { "type": "boolean" }, - "external_gitlab_client_id": { "type": "string" }, - "external_gitlab_secret": { "type": "string" }, - "external_gitlab_url": { "type": "string" }, - "external_google_enabled": { "type": "boolean" }, - "external_google_client_id": { "type": "string" }, - "external_google_secret": { "type": "string" }, - "external_google_additional_client_ids": { "type": "string" }, - "external_google_skip_nonce_check": { "type": "boolean" }, - "external_kakao_enabled": { "type": "boolean" }, - "external_kakao_client_id": { "type": "string" }, - "external_kakao_secret": { "type": "string" }, - "external_keycloak_enabled": { "type": "boolean" }, - "external_keycloak_client_id": { "type": "string" }, - "external_keycloak_secret": { "type": "string" }, - "external_keycloak_url": { "type": "string" }, - "external_linkedin_oidc_enabled": { "type": "boolean" }, - "external_linkedin_oidc_client_id": { "type": "string" }, - "external_linkedin_oidc_secret": { "type": "string" }, - "external_slack_oidc_enabled": { "type": "boolean" }, - "external_slack_oidc_client_id": { "type": "string" }, - "external_slack_oidc_secret": { "type": "string" }, - "external_notion_enabled": { "type": "boolean" }, - "external_notion_client_id": { "type": "string" }, - "external_notion_secret": { "type": "string" }, - "external_slack_enabled": { "type": "boolean" }, - "external_slack_client_id": { "type": "string" }, - "external_slack_secret": { "type": "string" }, - "external_spotify_enabled": { "type": "boolean" }, - "external_spotify_client_id": { "type": "string" }, - "external_spotify_secret": { "type": "string" }, - "external_twitch_enabled": { "type": "boolean" }, - "external_twitch_client_id": { "type": "string" }, - "external_twitch_secret": { "type": "string" }, - "external_twitter_enabled": { "type": "boolean" }, - "external_twitter_client_id": { "type": "string" }, - "external_twitter_secret": { "type": "string" }, - "external_workos_enabled": { "type": "boolean" }, - "external_workos_client_id": { "type": "string" }, - "external_workos_secret": { "type": "string" }, - "external_workos_url": { "type": "string" }, - "external_zoom_enabled": { "type": "boolean" }, - "external_zoom_client_id": { "type": "string" }, - "external_zoom_secret": { "type": "string" }, - "mfa_totp_enroll_enabled": { "type": "boolean" }, - "mfa_totp_verify_enabled": { "type": "boolean" }, - "mfa_web_authn_enroll_enabled": { "type": "boolean" }, - "mfa_web_authn_verify_enabled": { "type": "boolean" }, - "mfa_phone_enroll_enabled": { "type": "boolean" }, - "mfa_phone_verify_enabled": { "type": "boolean" }, - "mfa_phone_template": { "type": "string" } - } + } + }, + "required": ["addon_variant", "addon_type"] }, - "CreateThirdPartyAuthBody": { + "ProjectClaimTokenResponse": { "type": "object", "properties": { - "oidc_issuer_url": { "type": "string" }, - "jwks_url": { "type": "string" }, - "custom_jwks": { "type": "object" } - } + "token_alias": { "type": "string" }, + "expires_at": { "type": "string" }, + "created_at": { "type": "string" }, + "created_by": { "type": "string", "format": "uuid" } + }, + "required": ["token_alias", "expires_at", "created_at", "created_by"] }, - "ThirdPartyAuth": { + "CreateProjectClaimTokenResponse": { "type": "object", "properties": { - "id": { "type": "string" }, - "type": { "type": "string" }, - "oidc_issuer_url": { "type": "string", "nullable": true }, - "jwks_url": { "type": "string", "nullable": true }, - "custom_jwks": { "type": "object", "nullable": true }, - "resolved_jwks": { "type": "object", "nullable": true }, - "inserted_at": { "type": "string" }, - "updated_at": { "type": "string" }, - "resolved_at": { "type": "string", "nullable": true } + "token": { "type": "string" }, + "token_alias": { "type": "string" }, + "expires_at": { "type": "string" }, + "created_at": { "type": "string" }, + "created_by": { "type": "string", "format": "uuid" } }, - "required": ["id", "type", "inserted_at", "updated_at"] + "required": ["token", "token_alias", "expires_at", "created_at", "created_by"] }, - "ProjectAvailableRestoreVersion": { + "V1ProjectAdvisorsResponse": { "type": "object", "properties": { - "version": { "type": "string" }, - "release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "postgres_engine": { "type": "string", "enum": ["13", "14", "15", "17", "17-oriole"] } + "lints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "unindexed_foreign_keys", + "auth_users_exposed", + "auth_rls_initplan", + "no_primary_key", + "unused_index", + "multiple_permissive_policies", + "policy_exists_rls_disabled", + "rls_enabled_no_policy", + "duplicate_index", + "security_definer_view", + "function_search_path_mutable", + "rls_disabled_in_public", + "extension_in_public", + "rls_references_user_metadata", + "materialized_view_in_api", + "foreign_table_in_api", + "unsupported_reg_types", + "auth_otp_long_expiry", + "auth_otp_short_length", + "ssl_not_enforced", + "network_restrictions_not_set", + "password_requirements_min_length", + "pitr_not_enabled", + "auth_leaked_password_protection", + "auth_insufficient_mfa_options", + "auth_password_policy_missing", + "leaked_service_key", + "no_backup_admin", + "vulnerable_postgres_version" + ] + }, + "title": { "type": "string" }, + "level": { "type": "string", "enum": ["ERROR", "WARN", "INFO"] }, + "facing": { "type": "string", "enum": ["EXTERNAL"] }, + "categories": { + "type": "array", + "items": { "type": "string", "enum": ["PERFORMANCE", "SECURITY"] } + }, + "description": { "type": "string" }, + "detail": { "type": "string" }, + "remediation": { "type": "string" }, + "metadata": { + "type": "object", + "properties": { + "schema": { "type": "string" }, + "name": { "type": "string" }, + "entity": { "type": "string" }, + "type": { + "type": "string", + "enum": ["table", "view", "auth", "function", "extension", "compliance"] + }, + "fkey_name": { "type": "string" }, + "fkey_columns": { "type": "array", "items": { "type": "number" } } + } + }, + "cache_key": { "type": "string" } + }, + "required": [ + "name", + "title", + "level", + "facing", + "categories", + "description", + "detail", + "remediation", + "cache_key" + ] + } + } }, - "required": ["version", "release_channel", "postgres_engine"] + "required": ["lints"] }, - "GetProjectAvailableRestoreVersionsResponse": { + "AnalyticsResponse": { "type": "object", "properties": { - "available_versions": { - "type": "array", - "items": { "$ref": "#/components/schemas/ProjectAvailableRestoreVersion" } + "result": { "type": "array", "items": {} }, + "error": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "properties": { + "code": { "type": "number" }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { "type": "string" }, + "location": { "type": "string" }, + "locationType": { "type": "string" }, + "message": { "type": "string" }, + "reason": { "type": "string" } + }, + "required": ["domain", "location", "locationType", "message", "reason"] + } + }, + "message": { "type": "string" }, + "status": { "type": "string" } + }, + "required": ["code", "errors", "message", "status"] + } + ] } - }, - "required": ["available_versions"] + } }, - "RestoreProjectBodyDto": { + "V1GetUsageApiCountResponse": { "type": "object", - "properties": {}, - "hideDefinitions": ["release_channel", "postgres_engine"] + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { "type": "string", "format": "date-time" }, + "total_auth_requests": { "type": "number" }, + "total_realtime_requests": { "type": "number" }, + "total_rest_requests": { "type": "number" }, + "total_storage_requests": { "type": "number" } + }, + "required": [ + "timestamp", + "total_auth_requests", + "total_realtime_requests", + "total_rest_requests", + "total_storage_requests" + ] + } + }, + "error": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "properties": { + "code": { "type": "number" }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { "type": "string" }, + "location": { "type": "string" }, + "locationType": { "type": "string" }, + "message": { "type": "string" }, + "reason": { "type": "string" } + }, + "required": ["domain", "location", "locationType", "message", "reason"] + } + }, + "message": { "type": "string" }, + "status": { "type": "string" } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } }, - "V1AnalyticsResponse": { + "V1GetUsageApiRequestsCountResponse": { "type": "object", "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { "count": { "type": "number" } }, + "required": ["count"] + } + }, "error": { "oneOf": [ + { "type": "string" }, { + "type": "object", "properties": { "code": { "type": "number" }, "errors": { "type": "array", "items": { + "type": "object", "properties": { "domain": { "type": "string" }, "location": { "type": "string" }, "locationType": { "type": "string" }, "message": { "type": "string" }, "reason": { "type": "string" } - } + }, + "required": ["domain", "location", "locationType", "message", "reason"] } }, "message": { "type": "string" }, "status": { "type": "string" } - } - }, - { "type": "string" } + }, + "required": ["code", "errors", "message", "status"] + } ] + } + } + }, + "CreateRoleBody": { + "type": "object", + "properties": { "read_only": { "type": "boolean" } }, + "required": ["read_only"] + }, + "CreateRoleResponse": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "password": { "type": "string", "minLength": 1 }, + "ttl_seconds": { "type": "integer", "minimum": 1, "format": "int64" } + }, + "required": ["role", "password", "ttl_seconds"] + }, + "DeleteRolesResponse": { + "type": "object", + "properties": { "message": { "type": "string", "enum": ["ok"] } }, + "required": ["message"] + }, + "V1ListMigrationsResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { "type": "string", "minLength": 1 }, + "name": { "type": "string" } }, - "result": { "type": "array", "items": { "type": "object" } } + "required": ["version"] } }, + "V1CreateMigrationBody": { + "type": "object", + "properties": { + "query": { "type": "string", "minLength": 1 }, + "name": { "type": "string" }, + "rollback": { "type": "string" } + }, + "required": ["query"] + }, + "V1UpsertMigrationBody": { + "type": "object", + "properties": { + "query": { "type": "string", "minLength": 1 }, + "name": { "type": "string" }, + "rollback": { "type": "string" } + }, + "required": ["query"] + }, + "V1GetMigrationResponse": { + "type": "object", + "properties": { + "version": { "type": "string", "minLength": 1 }, + "name": { "type": "string" }, + "statements": { "type": "array", "items": { "type": "string" } }, + "rollback": { "type": "array", "items": { "type": "string" } }, + "created_by": { "type": "string" }, + "idempotency_key": { "type": "string" } + }, + "required": ["version"] + }, + "V1PatchMigrationBody": { + "type": "object", + "properties": { "name": { "type": "string" }, "rollback": { "type": "string" } } + }, "V1RunQueryBody": { "type": "object", - "properties": { "query": { "type": "string" } }, + "properties": { + "query": { "type": "string", "minLength": 1 }, + "parameters": { "type": "array", "items": {} }, + "read_only": { "type": "boolean" } + }, + "required": ["query"] + }, + "V1ReadOnlyQueryBody": { + "type": "object", + "properties": { + "query": { "type": "string", "minLength": 1 }, + "parameters": { "type": "array", "items": {} } + }, "required": ["query"] }, - "GetProjectDbMetadataResponseDto": { + "GetProjectDbMetadataResponse": { "type": "object", "properties": { "databases": { @@ -4617,27 +9575,208 @@ }, "required": ["databases"] }, + "V1UpdatePasswordBody": { + "type": "object", + "properties": { "password": { "type": "string", "minLength": 4 } }, + "required": ["password"] + }, + "V1UpdatePasswordResponse": { + "type": "object", + "properties": { "message": { "type": "string" } }, + "required": ["message"] + }, + "JitAccessResponse": { + "type": "object", + "properties": { + "user_id": { "type": "string", "format": "uuid" }, + "user_roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "expires_at": { "type": "number" }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "user_roles"] + }, + "AuthorizeJitAccessBody": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "rhost": { "type": "string", "minLength": 1 } + }, + "required": ["role", "rhost"] + }, + "JitAuthorizeAccessResponse": { + "type": "object", + "properties": { + "user_id": { "type": "string", "format": "uuid" }, + "user_role": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "expires_at": { "type": "number" }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + }, + "required": ["user_id", "user_role"] + }, + "JitListAccessResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "user_id": { "type": "string", "format": "uuid" }, + "user_roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "expires_at": { "type": "number" }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "user_roles"] + } + } + }, + "required": ["items"] + }, + "UpdateJitAccessBody": { + "type": "object", + "properties": { + "user_id": { "type": "string", "format": "uuid", "minLength": 1 }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { "type": "string", "minLength": 1 }, + "expires_at": { "type": "number" }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { "cidr": { "type": "string" } }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "roles"] + }, "FunctionResponse": { "type": "object", "properties": { - "version": { "type": "integer" }, - "created_at": { "type": "integer", "format": "int64" }, - "updated_at": { "type": "integer", "format": "int64" }, "id": { "type": "string" }, "slug": { "type": "string" }, "name": { "type": "string" }, - "status": { "enum": ["ACTIVE", "REMOVED", "THROTTLED"], "type": "string" }, + "status": { "type": "string", "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, + "version": { "type": "integer" }, + "created_at": { "type": "integer", "format": "int64" }, + "updated_at": { "type": "integer", "format": "int64" }, "verify_jwt": { "type": "boolean" }, "import_map": { "type": "boolean" }, "entrypoint_path": { "type": "string" }, - "import_map_path": { "type": "string" } + "import_map_path": { "type": "string" }, + "ezbr_sha256": { "type": "string" } }, - "required": ["version", "created_at", "updated_at", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] }, "V1CreateFunctionBody": { "type": "object", "properties": { - "slug": { "type": "string", "pattern": "/^[A-Za-z0-9_-]+$/" }, + "slug": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" }, "name": { "type": "string" }, "body": { "type": "string" }, "verify_jwt": { "type": "boolean" } @@ -4645,84 +9784,107 @@ "required": ["slug", "name", "body"] }, "BulkUpdateFunctionBody": { - "type": "object", - "properties": { - "version": { "type": "integer" }, - "created_at": { "type": "integer", "format": "int64" }, - "id": { "type": "string" }, - "slug": { "type": "string" }, - "name": { "type": "string" }, - "status": { "enum": ["ACTIVE", "REMOVED", "THROTTLED"], "type": "string" }, - "verify_jwt": { "type": "boolean" }, - "import_map": { "type": "boolean" }, - "entrypoint_path": { "type": "string" }, - "import_map_path": { "type": "string" } - }, - "required": ["version", "id", "slug", "name", "status"] + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "slug": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" }, + "name": { "type": "string" }, + "status": { "type": "string", "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, + "version": { "type": "integer" }, + "created_at": { "type": "integer", "format": "int64" }, + "verify_jwt": { "type": "boolean" }, + "import_map": { "type": "boolean" }, + "entrypoint_path": { "type": "string" }, + "import_map_path": { "type": "string" }, + "ezbr_sha256": { "type": "string" } + }, + "required": ["id", "slug", "name", "status", "version"] + } }, "BulkUpdateFunctionResponse": { "type": "object", "properties": { "functions": { "type": "array", - "items": { "$ref": "#/components/schemas/FunctionResponse" } + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "slug": { "type": "string" }, + "name": { "type": "string" }, + "status": { "type": "string", "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, + "version": { "type": "integer" }, + "created_at": { "type": "integer", "format": "int64" }, + "updated_at": { "type": "integer", "format": "int64" }, + "verify_jwt": { "type": "boolean" }, + "import_map": { "type": "boolean" }, + "entrypoint_path": { "type": "string" }, + "import_map_path": { "type": "string" }, + "ezbr_sha256": { "type": "string" } + }, + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] + } } }, - "required": ["functions"] - }, - "FunctionDeployMetadata": { - "type": "object", - "properties": { - "entrypoint_path": { "type": "string" }, - "import_map_path": { "type": "string" }, - "static_patterns": { "type": "array", "items": { "type": "string" } }, - "verify_jwt": { "type": "boolean" }, - "name": { "type": "string" } - }, - "required": ["entrypoint_path"] + "required": ["functions"] }, "FunctionDeployBody": { "type": "object", "properties": { "file": { "type": "array", "items": { "type": "string", "format": "binary" } }, - "metadata": { "$ref": "#/components/schemas/FunctionDeployMetadata" } + "metadata": { + "type": "object", + "properties": { + "entrypoint_path": { "type": "string" }, + "import_map_path": { "type": "string" }, + "static_patterns": { "type": "array", "items": { "type": "string" } }, + "verify_jwt": { "type": "boolean" }, + "name": { "type": "string" } + }, + "required": ["entrypoint_path"] + } }, - "required": ["file", "metadata"] + "required": ["metadata"] }, "DeployFunctionResponse": { "type": "object", "properties": { - "version": { "type": "integer" }, - "created_at": { "type": "integer", "format": "int64" }, - "updated_at": { "type": "integer", "format": "int64" }, "id": { "type": "string" }, "slug": { "type": "string" }, "name": { "type": "string" }, - "status": { "enum": ["ACTIVE", "REMOVED", "THROTTLED"], "type": "string" }, + "status": { "type": "string", "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, + "version": { "type": "integer" }, + "created_at": { "type": "integer", "format": "int64" }, + "updated_at": { "type": "integer", "format": "int64" }, "verify_jwt": { "type": "boolean" }, "import_map": { "type": "boolean" }, "entrypoint_path": { "type": "string" }, - "import_map_path": { "type": "string" } + "import_map_path": { "type": "string" }, + "ezbr_sha256": { "type": "string" } }, - "required": ["version", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version"] }, "FunctionSlugResponse": { "type": "object", "properties": { - "version": { "type": "integer" }, - "created_at": { "type": "integer", "format": "int64" }, - "updated_at": { "type": "integer", "format": "int64" }, "id": { "type": "string" }, "slug": { "type": "string" }, "name": { "type": "string" }, - "status": { "enum": ["ACTIVE", "REMOVED", "THROTTLED"], "type": "string" }, + "status": { "type": "string", "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, + "version": { "type": "integer" }, + "created_at": { "type": "integer", "format": "int64" }, + "updated_at": { "type": "integer", "format": "int64" }, "verify_jwt": { "type": "boolean" }, "import_map": { "type": "boolean" }, "entrypoint_path": { "type": "string" }, - "import_map_path": { "type": "string" } + "import_map_path": { "type": "string" }, + "ezbr_sha256": { "type": "string" } }, - "required": ["version", "created_at", "updated_at", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] }, + "StreamableFile": { "type": "object", "properties": {} }, "V1UpdateFunctionBody": { "type": "object", "properties": { @@ -4743,32 +9905,6 @@ }, "required": ["id", "name", "owner", "created_at", "updated_at", "public"] }, - "AttributeValue": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { "type": "object" }, - { "type": "number" }, - { "type": "string" }, - { "type": "boolean" } - ] - }, - "name": { "type": "string" }, - "names": { "type": "array", "items": { "type": "string" } }, - "array": { "type": "boolean" } - } - }, - "AttributeMapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { "$ref": "#/components/schemas/AttributeValue" } - } - }, - "required": ["keys"] - }, "CreateProviderBody": { "type": "object", "properties": { @@ -4780,48 +9916,104 @@ "metadata_xml": { "type": "string" }, "metadata_url": { "type": "string" }, "domains": { "type": "array", "items": { "type": "string" } }, - "attribute_mapping": { "$ref": "#/components/schemas/AttributeMapping" } + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } }, "required": ["type"] }, - "SamlDescriptor": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "entity_id": { "type": "string" }, - "metadata_url": { "type": "string" }, - "metadata_xml": { "type": "string" }, - "attribute_mapping": { "$ref": "#/components/schemas/AttributeMapping" } - }, - "required": ["id", "entity_id"] - }, - "Domain": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "domain": { "type": "string" }, - "created_at": { "type": "string" }, - "updated_at": { "type": "string" } - }, - "required": ["id"] - }, "CreateProviderResponse": { "type": "object", "properties": { "id": { "type": "string" }, - "saml": { "$ref": "#/components/schemas/SamlDescriptor" }, - "domains": { "type": "array", "items": { "$ref": "#/components/schemas/Domain" } }, - "created_at": { "type": "string" }, - "updated_at": { "type": "string" } - }, - "required": ["id"] - }, - "Provider": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "saml": { "$ref": "#/components/schemas/SamlDescriptor" }, - "domains": { "type": "array", "items": { "$ref": "#/components/schemas/Domain" } }, + "saml": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "entity_id": { "type": "string" }, + "metadata_url": { "type": "string" }, + "metadata_xml": { "type": "string" }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "domain": { "type": "string" }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + }, "created_at": { "type": "string" }, "updated_at": { "type": "string" } }, @@ -4830,7 +10022,75 @@ "ListProvidersResponse": { "type": "object", "properties": { - "items": { "type": "array", "items": { "$ref": "#/components/schemas/Provider" } } + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "saml": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "entity_id": { "type": "string" }, + "metadata_url": { "type": "string" }, + "metadata_xml": { "type": "string" }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "domain": { "type": "string" }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + } }, "required": ["items"] }, @@ -4838,8 +10098,63 @@ "type": "object", "properties": { "id": { "type": "string" }, - "saml": { "$ref": "#/components/schemas/SamlDescriptor" }, - "domains": { "type": "array", "items": { "$ref": "#/components/schemas/Domain" } }, + "saml": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "entity_id": { "type": "string" }, + "metadata_url": { "type": "string" }, + "metadata_xml": { "type": "string" }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "domain": { "type": "string" }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + }, "created_at": { "type": "string" }, "updated_at": { "type": "string" } }, @@ -4851,15 +10166,103 @@ "metadata_xml": { "type": "string" }, "metadata_url": { "type": "string" }, "domains": { "type": "array", "items": { "type": "string" } }, - "attribute_mapping": { "$ref": "#/components/schemas/AttributeMapping" } + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } } }, "UpdateProviderResponse": { "type": "object", "properties": { "id": { "type": "string" }, - "saml": { "$ref": "#/components/schemas/SamlDescriptor" }, - "domains": { "type": "array", "items": { "$ref": "#/components/schemas/Domain" } }, + "saml": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "entity_id": { "type": "string" }, + "metadata_url": { "type": "string" }, + "metadata_xml": { "type": "string" }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "domain": { "type": "string" }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + }, "created_at": { "type": "string" }, "updated_at": { "type": "string" } }, @@ -4869,40 +10272,96 @@ "type": "object", "properties": { "id": { "type": "string" }, - "saml": { "$ref": "#/components/schemas/SamlDescriptor" }, - "domains": { "type": "array", "items": { "$ref": "#/components/schemas/Domain" } }, + "saml": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "entity_id": { "type": "string" }, + "metadata_url": { "type": "string" }, + "metadata_xml": { "type": "string" }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "names": { "type": "array", "items": { "type": "string" } }, + "default": { + "oneOf": [ + { "type": "object", "properties": {} }, + { "type": "number" }, + { "type": "string" }, + { "type": "boolean" } + ] + }, + "array": { "type": "boolean" } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "domain": { "type": "string" }, + "created_at": { "type": "string" }, + "updated_at": { "type": "string" } + }, + "required": ["id"] + } + }, "created_at": { "type": "string" }, "updated_at": { "type": "string" } }, "required": ["id"] }, - "V1Backup": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": ["COMPLETED", "FAILED", "PENDING", "REMOVED", "ARCHIVED", "CANCELLED"] - }, - "is_physical_backup": { "type": "boolean" }, - "inserted_at": { "type": "string" } - }, - "required": ["status", "is_physical_backup", "inserted_at"] - }, - "V1PhysicalBackup": { - "type": "object", - "properties": { - "earliest_physical_backup_date_unix": { "type": "integer", "format": "int64" }, - "latest_physical_backup_date_unix": { "type": "integer", "format": "int64" } - } - }, "V1BackupsResponse": { "type": "object", "properties": { "region": { "type": "string" }, "walg_enabled": { "type": "boolean" }, "pitr_enabled": { "type": "boolean" }, - "backups": { "type": "array", "items": { "$ref": "#/components/schemas/V1Backup" } }, - "physical_backup_data": { "$ref": "#/components/schemas/V1PhysicalBackup" } + "backups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "is_physical_backup": { "type": "boolean" }, + "status": { + "type": "string", + "enum": ["COMPLETED", "FAILED", "PENDING", "REMOVED", "ARCHIVED", "CANCELLED"] + }, + "inserted_at": { "type": "string" } + }, + "required": ["is_physical_backup", "status", "inserted_at"] + } + }, + "physical_backup_data": { + "type": "object", + "properties": { + "earliest_physical_backup_date_unix": { "type": "integer" }, + "latest_physical_backup_date_unix": { "type": "integer" } + } + } }, "required": ["region", "walg_enabled", "pitr_enabled", "backups", "physical_backup_data"] }, @@ -4913,6 +10372,24 @@ }, "required": ["recovery_time_target_unix"] }, + "V1RestorePointPostBody": { + "type": "object", + "properties": { "name": { "type": "string", "maxLength": 20 } }, + "required": ["name"] + }, + "V1RestorePointResponse": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "status": { "type": "string", "enum": ["AVAILABLE", "PENDING", "REMOVED", "FAILED"] } + }, + "required": ["name", "status"] + }, + "V1UndoBody": { + "type": "object", + "properties": { "name": { "type": "string", "maxLength": 20 } }, + "required": ["name"] + }, "V1OrganizationMemberResponse": { "type": "object", "properties": { @@ -4924,23 +10401,226 @@ }, "required": ["user_id", "user_name", "role_name", "mfa_enabled"] }, - "BillingPlanId": { "type": "string", "enum": ["free", "pro", "team", "enterprise"] }, "V1OrganizationSlugResponse": { "type": "object", "properties": { - "plan": { "$ref": "#/components/schemas/BillingPlanId" }, + "id": { "type": "string" }, + "name": { "type": "string" }, + "plan": { "type": "string", "enum": ["free", "pro", "team", "enterprise", "platform"] }, "opt_in_tags": { "type": "array", - "items": { "type": "string", "enum": ["AI_SQL_GENERATOR_OPT_IN"] } + "items": { + "type": "string", + "enum": [ + "AI_SQL_GENERATOR_OPT_IN", + "AI_DATA_GENERATOR_OPT_IN", + "AI_LOG_GENERATOR_OPT_IN" + ] + } }, "allowed_release_channels": { "type": "array", - "items": { "$ref": "#/components/schemas/ReleaseChannel" } + "items": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + } + } + }, + "required": ["id", "name", "opt_in_tags", "allowed_release_channels"] + }, + "OrganizationProjectClaimResponse": { + "type": "object", + "properties": { + "project": { + "type": "object", + "properties": { "ref": { "type": "string" }, "name": { "type": "string" } }, + "required": ["ref", "name"] }, - "id": { "type": "string" }, - "name": { "type": "string" } + "preview": { + "type": "object", + "properties": { + "valid": { "type": "boolean" }, + "warnings": { + "type": "array", + "items": { + "type": "object", + "properties": { "key": { "type": "string" }, "message": { "type": "string" } }, + "required": ["key", "message"] + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { "key": { "type": "string" }, "message": { "type": "string" } }, + "required": ["key", "message"] + } + }, + "info": { + "type": "array", + "items": { + "type": "object", + "properties": { "key": { "type": "string" }, "message": { "type": "string" } }, + "required": ["key", "message"] + } + }, + "members_exceeding_free_project_limit": { + "type": "array", + "items": { + "type": "object", + "properties": { "name": { "type": "string" }, "limit": { "type": "number" } }, + "required": ["name", "limit"] + } + }, + "source_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"] + }, + "target_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"], + "nullable": true + } + }, + "required": [ + "valid", + "warnings", + "errors", + "info", + "members_exceeding_free_project_limit", + "source_subscription_plan", + "target_subscription_plan" + ] + }, + "expires_at": { "type": "string" }, + "created_at": { "type": "string" }, + "created_by": { "type": "string", "format": "uuid" } + }, + "required": ["project", "preview", "expires_at", "created_at", "created_by"] + }, + "OrganizationProjectsResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { "type": "string" }, + "name": { "type": "string" }, + "cloud_provider": { "type": "string" }, + "region": { "type": "string" }, + "is_branch": { "type": "boolean" }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "inserted_at": { "type": "string" }, + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "infra_compute_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "region": { "type": "string" }, + "status": { + "type": "string", + "enum": [ + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UNKNOWN", + "INIT_READ_REPLICA", + "INIT_READ_REPLICA_FAILED", + "RESTARTING", + "RESIZING" + ] + }, + "cloud_provider": { "type": "string" }, + "identifier": { "type": "string" }, + "type": { "type": "string", "enum": ["PRIMARY", "READ_REPLICA"] }, + "disk_volume_size_gb": { "type": "number" }, + "disk_type": { "type": "string", "enum": ["gp3", "io2"] }, + "disk_throughput_mbps": { "type": "number" }, + "disk_last_modified_at": { "type": "string" } + }, + "required": ["region", "status", "cloud_provider", "identifier", "type"] + } + } + }, + "required": [ + "ref", + "name", + "cloud_provider", + "region", + "is_branch", + "status", + "inserted_at", + "databases" + ] + } + }, + "pagination": { + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "Total number of projects. Use this to calculate the total number of pages." + }, + "limit": { "type": "number", "description": "Maximum number of projects per page" }, + "offset": { + "type": "number", + "description": "Number of projects skipped in this response" + } + }, + "required": ["count", "limit", "offset"] + } }, - "required": ["opt_in_tags", "allowed_release_channels", "id", "name"] + "required": ["projects", "pagination"] } } } diff --git a/apps/docs/spec/common-api-sections.json b/apps/docs/spec/common-api-sections.json index 49207e11edf3d..398161eae5709 100644 --- a/apps/docs/spec/common-api-sections.json +++ b/apps/docs/spec/common-api-sections.json @@ -5,6 +5,54 @@ "slug": "introduction", "type": "markdown" }, + { + "type": "category", + "title": "Advisors", + "items": [ + { + "id": "v1-get-performance-advisors", + "title": "Get performance advisors", + "slug": "v1-get-performance-advisors", + "type": "operation" + }, + { + "id": "v1-get-security-advisors", + "title": "Get security advisors", + "slug": "v1-get-security-advisors", + "type": "operation" + } + ] + }, + { + "type": "category", + "title": "Analytics", + "items": [ + { + "id": "v1-get-project-function-combined-stats", + "title": "Get project function combined stats", + "slug": "v1-get-project-function-combined-stats", + "type": "operation" + }, + { + "id": "v1-get-project-logs", + "title": "Get project logs", + "slug": "v1-get-project-logs", + "type": "operation" + }, + { + "id": "v1-get-project-usage-api-count", + "title": "Get project usage api count", + "slug": "v1-get-project-usage-api-count", + "type": "operation" + }, + { + "id": "v1-get-project-usage-request-count", + "title": "Get project usage request count", + "slug": "v1-get-project-usage-request-count", + "type": "operation" + } + ] + }, { "type": "category", "title": "Auth", @@ -15,12 +63,36 @@ "slug": "v1-create-a-sso-provider", "type": "operation" }, + { + "id": "v1-create-legacy-signing-key", + "title": "Create legacy signing key", + "slug": "v1-create-legacy-signing-key", + "type": "operation" + }, + { + "id": "v1-create-project-signing-key", + "title": "Create project signing key", + "slug": "v1-create-project-signing-key", + "type": "operation" + }, + { + "id": "v1-create-project-tpa-integration", + "title": "Create project tpa integration", + "slug": "v1-create-project-tpa-integration", + "type": "operation" + }, { "id": "v1-delete-a-sso-provider", "title": "Delete a sso provider", "slug": "v1-delete-a-sso-provider", "type": "operation" }, + { + "id": "v1-delete-project-tpa-integration", + "title": "Delete project tpa integration", + "slug": "v1-delete-project-tpa-integration", + "type": "operation" + }, { "id": "v1-get-a-sso-provider", "title": "Get a sso provider", @@ -33,12 +105,48 @@ "slug": "v1-get-auth-service-config", "type": "operation" }, + { + "id": "v1-get-legacy-signing-key", + "title": "Get legacy signing key", + "slug": "v1-get-legacy-signing-key", + "type": "operation" + }, + { + "id": "v1-get-project-signing-key", + "title": "Get project signing key", + "slug": "v1-get-project-signing-key", + "type": "operation" + }, + { + "id": "v1-get-project-signing-keys", + "title": "Get project signing keys", + "slug": "v1-get-project-signing-keys", + "type": "operation" + }, + { + "id": "v1-get-project-tpa-integration", + "title": "Get project tpa integration", + "slug": "v1-get-project-tpa-integration", + "type": "operation" + }, { "id": "v1-list-all-sso-provider", "title": "List all sso provider", "slug": "v1-list-all-sso-provider", "type": "operation" }, + { + "id": "v1-list-project-tpa-integrations", + "title": "List project tpa integrations", + "slug": "v1-list-project-tpa-integrations", + "type": "operation" + }, + { + "id": "v1-remove-project-signing-key", + "title": "Remove project signing key", + "slug": "v1-remove-project-signing-key", + "type": "operation" + }, { "id": "v1-update-a-sso-provider", "title": "Update a sso provider", @@ -50,6 +158,36 @@ "title": "Update auth service config", "slug": "v1-update-auth-service-config", "type": "operation" + }, + { + "id": "v1-update-project-signing-key", + "title": "Update project signing key", + "slug": "v1-update-project-signing-key", + "type": "operation" + } + ] + }, + { + "type": "category", + "title": "Billing", + "items": [ + { + "id": "v1-apply-project-addon", + "title": "Apply project addon", + "slug": "v1-apply-project-addon", + "type": "operation" + }, + { + "id": "v1-list-project-addons", + "title": "List project addons", + "slug": "v1-list-project-addons", + "type": "operation" + }, + { + "id": "v1-remove-project-addon", + "title": "Remove project addon", + "slug": "v1-remove-project-addon", + "type": "operation" } ] }, @@ -57,6 +195,42 @@ "type": "category", "title": "Database", "items": [ + { + "id": "v1-apply-a-migration", + "title": "Apply a migration", + "slug": "v1-apply-a-migration", + "type": "operation" + }, + { + "id": "v1-authorize-jit-access", + "title": "Authorize jit access", + "slug": "v1-authorize-jit-access", + "type": "operation" + }, + { + "id": "v1-create-login-role", + "title": "Create login role", + "slug": "v1-create-login-role", + "type": "operation" + }, + { + "id": "v1-create-restore-point", + "title": "Create restore point", + "slug": "v1-create-restore-point", + "type": "operation" + }, + { + "id": "v1-delete-jit-access", + "title": "Delete jit access", + "slug": "v1-delete-jit-access", + "type": "operation" + }, + { + "id": "v1-delete-login-roles", + "title": "Delete login roles", + "slug": "v1-delete-login-roles", + "type": "operation" + }, { "id": "v1-disable-readonly-mode-temporarily", "title": "Disable readonly mode temporarily", @@ -75,12 +249,36 @@ "slug": "v1-generate-typescript-types", "type": "operation" }, + { + "id": "v1-get-a-migration", + "title": "Get a migration", + "slug": "v1-get-a-migration", + "type": "operation" + }, { "id": "v1-get-a-snippet", "title": "Get a snippet", "slug": "v1-get-a-snippet", "type": "operation" }, + { + "id": "v1-get-database-metadata", + "title": "Get database metadata", + "slug": "v1-get-database-metadata", + "type": "operation" + }, + { + "id": "v1-get-jit-access", + "title": "Get jit access", + "slug": "v1-get-jit-access", + "type": "operation" + }, + { + "id": "v1-get-pooler-config", + "title": "Get pooler config", + "slug": "v1-get-pooler-config", + "type": "operation" + }, { "id": "v1-get-postgres-config", "title": "Get postgres config", @@ -100,15 +298,15 @@ "type": "operation" }, { - "id": "v1-get-ssl-enforcement-config", - "title": "Get ssl enforcement config", - "slug": "v1-get-ssl-enforcement-config", + "id": "v1-get-restore-point", + "title": "Get restore point", + "slug": "v1-get-restore-point", "type": "operation" }, { - "id": "v1-get-supavisor-config", - "title": "Get supavisor config", - "slug": "v1-get-supavisor-config", + "id": "v1-get-ssl-enforcement-config", + "title": "Get ssl enforcement config", + "slug": "v1-get-ssl-enforcement-config", "type": "operation" }, { @@ -123,6 +321,30 @@ "slug": "v1-list-all-snippets", "type": "operation" }, + { + "id": "v1-list-jit-access", + "title": "List jit access", + "slug": "v1-list-jit-access", + "type": "operation" + }, + { + "id": "v1-list-migration-history", + "title": "List migration history", + "slug": "v1-list-migration-history", + "type": "operation" + }, + { + "id": "v1-patch-a-migration", + "title": "Patch a migration", + "slug": "v1-patch-a-migration", + "type": "operation" + }, + { + "id": "v1-read-only-query", + "title": "Read only query", + "slug": "v1-read-only-query", + "type": "operation" + }, { "id": "v1-remove-a-read-replica", "title": "Remove a read replica", @@ -135,6 +357,12 @@ "slug": "v1-restore-pitr-backup", "type": "operation" }, + { + "id": "v1-rollback-migrations", + "title": "Rollback migrations", + "slug": "v1-rollback-migrations", + "type": "operation" + }, { "id": "v1-run-a-query", "title": "Run a query", @@ -147,6 +375,30 @@ "slug": "v1-setup-a-read-replica", "type": "operation" }, + { + "id": "v1-undo", + "title": "Undo", + "slug": "v1-undo", + "type": "operation" + }, + { + "id": "v1-update-database-password", + "title": "Update database password", + "slug": "v1-update-database-password", + "type": "operation" + }, + { + "id": "v1-update-jit-access", + "title": "Update jit access", + "slug": "v1-update-jit-access", + "type": "operation" + }, + { + "id": "v1-update-pooler-config", + "title": "Update pooler config", + "slug": "v1-update-pooler-config", + "type": "operation" + }, { "id": "v1-update-postgres-config", "title": "Update postgres config", @@ -160,9 +412,9 @@ "type": "operation" }, { - "id": "v1-update-supavisor-config", - "title": "Update supavisor config", - "slug": "v1-update-supavisor-config", + "id": "v1-upsert-a-migration", + "title": "Upsert a migration", + "slug": "v1-upsert-a-migration", "type": "operation" } ] @@ -279,6 +531,12 @@ "type": "category", "title": "Environments", "items": [ + { + "id": "v1-count-action-runs", + "title": "Count action runs", + "slug": "v1-count-action-runs", + "type": "operation" + }, { "id": "v1-create-a-branch", "title": "Create a branch", @@ -291,24 +549,60 @@ "slug": "v1-delete-a-branch", "type": "operation" }, + { + "id": "v1-diff-a-branch", + "title": "Diff a branch", + "slug": "v1-diff-a-branch", + "type": "operation" + }, { "id": "v1-disable-preview-branching", "title": "Disable preview branching", "slug": "v1-disable-preview-branching", "type": "operation" }, + { + "id": "v1-get-a-branch", + "title": "Get a branch", + "slug": "v1-get-a-branch", + "type": "operation" + }, { "id": "v1-get-a-branch-config", "title": "Get a branch config", "slug": "v1-get-a-branch-config", "type": "operation" }, + { + "id": "v1-get-action-run", + "title": "Get action run", + "slug": "v1-get-action-run", + "type": "operation" + }, + { + "id": "v1-get-action-run-logs", + "title": "Get action run logs", + "slug": "v1-get-action-run-logs", + "type": "operation" + }, + { + "id": "v1-list-action-runs", + "title": "List action runs", + "slug": "v1-list-action-runs", + "type": "operation" + }, { "id": "v1-list-all-branches", "title": "List all branches", "slug": "v1-list-all-branches", "type": "operation" }, + { + "id": "v1-merge-a-branch", + "title": "Merge a branch", + "slug": "v1-merge-a-branch", + "type": "operation" + }, { "id": "v1-push-a-branch", "title": "Push a branch", @@ -321,11 +615,23 @@ "slug": "v1-reset-a-branch", "type": "operation" }, + { + "id": "v1-restore-a-branch", + "title": "Restore a branch", + "slug": "v1-restore-a-branch", + "type": "operation" + }, { "id": "v1-update-a-branch-config", "title": "Update a branch config", "slug": "v1-update-a-branch-config", "type": "operation" + }, + { + "id": "v1-update-action-run-status", + "title": "Update action run status", + "slug": "v1-update-action-run-status", + "type": "operation" } ] }, @@ -345,6 +651,12 @@ "slug": "v1-exchange-oauth-token", "type": "operation" }, + { + "id": "v1-oauth-authorize-project-claim", + "title": "Oauth authorize project claim", + "slug": "v1-oauth-authorize-project-claim", + "type": "operation" + }, { "id": "v1-revoke-token", "title": "Revoke token", @@ -357,6 +669,12 @@ "type": "category", "title": "Organizations", "items": [ + { + "id": "v1-claim-project-for-organization", + "title": "Claim project for organization", + "slug": "v1-claim-project-for-organization", + "type": "operation" + }, { "id": "v1-create-an-organization", "title": "Create an organization", @@ -369,6 +687,12 @@ "slug": "v1-get-an-organization", "type": "operation" }, + { + "id": "v1-get-organization-project-claim", + "title": "Get organization project claim", + "slug": "v1-get-organization-project-claim", + "type": "operation" + }, { "id": "v1-list-all-organizations", "title": "List all organizations", @@ -399,6 +723,12 @@ "slug": "v1-create-a-project", "type": "operation" }, + { + "id": "v1-create-project-claim-token", + "title": "Create project claim token", + "slug": "v1-create-project-claim-token", + "type": "operation" + }, { "id": "v1-delete-a-project", "title": "Delete a project", @@ -411,6 +741,24 @@ "slug": "v1-delete-network-bans", "type": "operation" }, + { + "id": "v1-delete-project-claim-token", + "title": "Delete project claim token", + "slug": "v1-delete-project-claim-token", + "type": "operation" + }, + { + "id": "v1-get-all-projects-for-organization", + "title": "Get all projects for organization", + "slug": "v1-get-all-projects-for-organization", + "type": "operation" + }, + { + "id": "v1-get-available-regions", + "title": "Get available regions", + "slug": "v1-get-available-regions", + "type": "operation" + }, { "id": "v1-get-network-restrictions", "title": "Get network restrictions", @@ -435,6 +783,12 @@ "slug": "v1-get-project", "type": "operation" }, + { + "id": "v1-get-project-claim-token", + "title": "Get project claim token", + "slug": "v1-get-project-claim-token", + "type": "operation" + }, { "id": "v1-get-services-health", "title": "Get services health", @@ -447,6 +801,12 @@ "slug": "v1-list-all-network-bans", "type": "operation" }, + { + "id": "v1-list-all-network-bans-enriched", + "title": "List all network bans enriched", + "slug": "v1-list-all-network-bans-enriched", + "type": "operation" + }, { "id": "v1-list-all-projects", "title": "List all projects", @@ -459,6 +819,12 @@ "slug": "v1-list-available-restore-versions", "type": "operation" }, + { + "id": "v1-patch-network-restrictions", + "title": "Patch network restrictions", + "slug": "v1-patch-network-restrictions", + "type": "operation" + }, { "id": "v1-pause-a-project", "title": "Pause a project", @@ -471,6 +837,12 @@ "slug": "v1-restore-a-project", "type": "operation" }, + { + "id": "v1-update-a-project", + "title": "Update a project", + "slug": "v1-update-a-project", + "type": "operation" + }, { "id": "v1-update-network-restrictions", "title": "Update network restrictions", @@ -485,6 +857,24 @@ } ] }, + { + "type": "category", + "title": "Realtime", + "items": [ + { + "id": "v1-get-realtime-config", + "title": "Get realtime config", + "slug": "v1-get-realtime-config", + "type": "operation" + }, + { + "id": "v1-update-realtime-config", + "title": "Update realtime config", + "slug": "v1-update-realtime-config", + "type": "operation" + } + ] + }, { "type": "category", "title": "Rest", @@ -519,18 +909,42 @@ "slug": "v1-bulk-delete-secrets", "type": "operation" }, + { + "id": "v1-create-project-api-key", + "title": "Create project api key", + "slug": "v1-create-project-api-key", + "type": "operation" + }, + { + "id": "v1-delete-project-api-key", + "title": "Delete project api key", + "slug": "v1-delete-project-api-key", + "type": "operation" + }, { "id": "v1-get-pgsodium-config", "title": "Get pgsodium config", "slug": "v1-get-pgsodium-config", "type": "operation" }, + { + "id": "v1-get-project-api-key", + "title": "Get project api key", + "slug": "v1-get-project-api-key", + "type": "operation" + }, { "id": "v1-get-project-api-keys", "title": "Get project api keys", "slug": "v1-get-project-api-keys", "type": "operation" }, + { + "id": "v1-get-project-legacy-api-keys", + "title": "Get project legacy api keys", + "slug": "v1-get-project-legacy-api-keys", + "type": "operation" + }, { "id": "v1-list-all-secrets", "title": "List all secrets", @@ -542,6 +956,18 @@ "title": "Update pgsodium config", "slug": "v1-update-pgsodium-config", "type": "operation" + }, + { + "id": "v1-update-project-api-key", + "title": "Update project api key", + "slug": "v1-update-project-api-key", + "type": "operation" + }, + { + "id": "v1-update-project-legacy-api-keys", + "title": "Update project legacy api keys", + "slug": "v1-update-project-legacy-api-keys", + "type": "operation" } ] }, diff --git a/apps/docs/spec/supabase_swift_v2.yml b/apps/docs/spec/supabase_swift_v2.yml index 45768e4754b87..4c83fb45c7350 100644 --- a/apps/docs/spec/supabase_swift_v2.yml +++ b/apps/docs/spec/supabase_swift_v2.yml @@ -26,7 +26,7 @@ functions: code: | ```swift import Supabase - + let client = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key") ``` - id: initialize-client-custom-options @@ -34,7 +34,7 @@ functions: code: | ```swift import Supabase - + let client = SupabaseClient( supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key", @@ -58,7 +58,7 @@ functions: code: | ```swift import Supabase - + struct AppLogger: SupabaseLogger { func log(message: SupabaseLogMessage) { print(message.description) @@ -80,7 +80,7 @@ functions: code: | ```swift import Supabase - + let supabase = SupabaseClient( supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key", diff --git a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json index 26c772546aaf8..fedb3207c9bcd 100644 --- a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json +++ b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json @@ -8,10 +8,22 @@ }, "servers": [], "tags": [ + { + "name": "Advisors", + "description": "Advisors related endpoints" + }, + { + "name": "Analytics", + "description": "Analytics related endpoints" + }, { "name": "Auth", "description": "Auth related endpoints" }, + { + "name": "Billing", + "description": "Billing related endpoints" + }, { "name": "Database", "description": "Database related endpoints" @@ -50,23 +62,35 @@ }, { "name": "Storage", - "description": "Storage related endpoints" + "description": "Visit [https://supabase.github.io/storage/](https://supabase.github.io/storage/) for complete documentation." } ], "paths": { - "/v1/branches/{branch_id}": { + "/v1/branches/{branch_id_or_ref}": { "get": { - "operationId": "v1-get-a-branch-config", - "summary": "Get database branch config", "description": "Fetches configurations of the specified database branch", + "operationId": "v1-get-a-branch-config", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] } } ], @@ -78,6 +102,18 @@ "schema": { "type": "object", "properties": { + "ref": { + "type": "string" + }, + "postgres_version": { + "type": "string" + }, + "postgres_engine": { + "type": "string" + }, + "release_channel": { + "type": "string" + }, "status": { "type": "string", "enum": [ @@ -98,24 +134,14 @@ "RESIZING" ] }, - "db_port": { - "type": "integer" - }, - "ref": { - "type": "string" - }, - "postgres_version": { - "type": "string" - }, - "postgres_engine": { - "type": "string" - }, - "release_channel": { - "type": "string" - }, "db_host": { "type": "string" }, + "db_port": { + "type": "integer", + "minimum": 0, + "exclusiveMinimum": true + }, "db_user": { "type": "string" }, @@ -127,13 +153,13 @@ } }, "required": [ - "status", - "db_port", "ref", "postgres_version", "postgres_engine", "release_channel", - "db_host" + "status", + "db_host", + "db_port" ] } } @@ -143,25 +169,46 @@ "description": "Failed to retrieve database branch" } }, - "tags": ["Environments"], "security": [ { "bearer": [] } - ] + ], + "summary": "Get database branch config", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" }, "patch": { - "operationId": "v1-update-a-branch-config", - "summary": "Update database branch config", "description": "Updates the configuration of the specified database branch", + "operationId": "v1-update-a-branch-config", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] } } ], @@ -172,17 +219,17 @@ "schema": { "type": "object", "properties": { - "reset_on_push": { - "type": "boolean", - "deprecated": true, - "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead." - }, "branch_name": { "type": "string" }, "git_branch": { "type": "string" }, + "reset_on_push": { + "type": "boolean", + "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead.", + "deprecated": true + }, "persistent": { "type": "boolean" }, @@ -196,6 +243,14 @@ "FUNCTIONS_DEPLOYED", "FUNCTIONS_FAILED" ] + }, + "request_review": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." } } } @@ -210,14 +265,36 @@ "schema": { "type": "object", "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "project_ref": { + "type": "string" + }, + "parent_project_ref": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "git_branch": { + "type": "string" + }, "pr_number": { "type": "integer", "format": "int32" }, "latest_check_run_id": { "type": "number", - "deprecated": true, - "description": "This field is deprecated and will not be populated." + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { + "type": "boolean" }, "status": { "type": "string", @@ -230,44 +307,61 @@ "FUNCTIONS_FAILED" ] }, - "id": { - "type": "string" - }, - "name": { - "type": "string" + "created_at": { + "type": "string", + "format": "date-time" }, - "project_ref": { - "type": "string" + "updated_at": { + "type": "string", + "format": "date-time" }, - "parent_project_ref": { - "type": "string" + "review_requested_at": { + "type": "string", + "format": "date-time" }, - "is_default": { + "with_data": { "type": "boolean" }, - "git_branch": { - "type": "string" - }, - "persistent": { - "type": "boolean" + "notify_url": { + "type": "string", + "format": "uri" }, - "created_at": { - "type": "string" + "deletion_scheduled_at": { + "type": "string", + "format": "date-time" }, - "updated_at": { - "type": "string" + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] } }, "required": [ - "status", "id", "name", "project_ref", "parent_project_ref", "is_default", "persistent", + "status", "created_at", - "updated_at" + "updated_at", + "with_data" ] } } @@ -277,25 +371,56 @@ "description": "Failed to update database branch" } }, - "tags": ["Environments"], "security": [ { "bearer": [] } - ] + ], + "summary": "Update database branch config", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" }, "delete": { + "description": "Deletes the specified database branch. By default, deletes immediately. Use force=false to schedule deletion with 1-hour grace period (only when soft deletion is enabled).", "operationId": "v1-delete-a-branch", - "summary": "Delete a database branch", - "description": "Deletes the specified database branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] + } + }, + { + "name": "force", + "required": false, + "in": "query", + "description": "If set to false, schedule deletion with 1-hour grace period (only when soft deletion is enabled).", + "schema": { + "default": "true", + "type": "boolean" } } ], @@ -308,7 +433,8 @@ "type": "object", "properties": { "message": { - "type": "string" + "type": "string", + "enum": ["ok"] } }, "required": ["message"] @@ -320,30 +446,66 @@ "description": "Failed to delete database branch" } }, - "tags": ["Environments"], "security": [ { "bearer": [] } - ] + ], + "summary": "Delete a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/branches/{branch_id}/push": { + "/v1/branches/{branch_id_or_ref}/push": { "post": { - "operationId": "v1-push-a-branch", - "summary": "Pushes a database branch", "description": "Pushes the specified database branch", + "operationId": "v1-push-a-branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "migration_version": { + "type": "string" + } + } + } + } + } + }, "responses": { "201": { "description": "", @@ -356,7 +518,8 @@ "type": "string" }, "message": { - "type": "string" + "type": "string", + "enum": ["ok"] } }, "required": ["workflow_run_id", "message"] @@ -368,30 +531,66 @@ "description": "Failed to push database branch" } }, - "tags": ["Environments"], "security": [ { "bearer": [] } - ] + ], + "summary": "Pushes a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/branches/{branch_id}/reset": { + "/v1/branches/{branch_id_or_ref}/merge": { "post": { - "operationId": "v1-reset-a-branch", - "summary": "Resets a database branch", - "description": "Resets the specified database branch", + "description": "Merges the specified database branch", + "operationId": "v1-merge-a-branch", "parameters": [ { - "name": "branch_id", + "name": "branch_id_or_ref", "required": true, "in": "path", "description": "Branch ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "migration_version": { + "type": "string" + } + } + } + } + } + }, "responses": { "201": { "description": "", @@ -404,7 +603,8 @@ "type": "string" }, "message": { - "type": "string" + "type": "string", + "enum": ["ok"] } }, "required": ["workflow_run_id", "message"] @@ -413,40 +613,282 @@ } }, "500": { - "description": "Failed to reset database branch" + "description": "Failed to merge database branch" } }, - "tags": ["Environments"], "security": [ { "bearer": [] } - ] + ], + "summary": "Merges a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/projects": { - "get": { - "operationId": "v1-list-all-projects", - "summary": "List all projects", - "description": "Returns a list of all projects you've previously created.", - "parameters": [], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + "/v1/branches/{branch_id_or_ref}/reset": { + "post": { + "description": "Resets the specified database branch", + "operationId": "v1-reset-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "migration_version": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "workflow_run_id": { + "type": "string" + }, + "message": { + "type": "string", + "enum": ["ok"] + } + }, + "required": ["workflow_run_id", "message"] + } + } + } + }, + "500": { + "description": "Failed to reset database branch" + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "Resets a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/branches/{branch_id_or_ref}/restore": { + "post": { + "description": "Cancels scheduled deletion and restores the branch to active state", + "operationId": "v1-restore-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "enum": ["Branch restoration initiated"] + } + }, + "required": ["message"] + } + } + } + }, + "500": { + "description": "Failed to restore database branch" + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "Restore a scheduled branch deletion", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/branches/{branch_id_or_ref}/diff": { + "get": { + "description": "Diffs the specified database branch", + "operationId": "v1-diff-a-branch", + "parameters": [ + { + "name": "branch_id_or_ref", + "required": true, + "in": "path", + "description": "Branch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + { + "type": "string", + "format": "uuid", + "deprecated": true + } + ] + } + }, + { + "name": "included_schemas", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "" + }, + "500": { + "description": "Failed to diff database branch" + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "[Beta] Diffs a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/projects": { + "get": { + "description": "Returns a list of all projects you've previously created.\n\nUse `/v1/organizations/{slug}/projects` instead when possible to get more precise results and pagination support.", + "operationId": "v1-list-all-projects", + "parameters": [], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", - "description": "Id of your project" + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" }, "organization_id": { "type": "string", - "description": "Slug of your organization" + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, "name": { "type": "string", @@ -507,7 +949,9 @@ }, "required": [ "id", + "ref", "organization_id", + "organization_slug", "name", "region", "created_at", @@ -520,16 +964,27 @@ } } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["projects_read"] } - ] + ], + "summary": "List all projects", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" }, "post": { "operationId": "v1-create-a-project", - "summary": "Create a project", "parameters": [], "requestBody": { "required": true, @@ -544,11 +999,18 @@ }, "name": { "type": "string", + "maxLength": 256, "description": "Name of your project" }, "organization_id": { "type": "string", - "description": "Slug of your organization" + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, "plan": { "type": "string", @@ -558,7 +1020,8 @@ }, "region": { "type": "string", - "description": "Region you want your server to reside in", + "description": "Region you want your server to reside in. Use region_selection instead.", + "deprecated": true, "enum": [ "us-east-1", "us-east-2", @@ -580,6 +1043,66 @@ "sa-east-1" ] }, + "region_selection": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["specific"] + }, + "code": { + "type": "string", + "minLength": 1, + "description": "Specific region code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ] + } + }, + "required": ["type", "code"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["smartGroup"] + }, + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"], + "description": "The Smart Region Group's code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "example": "apac" + } + }, + "required": ["type", "code"] + } + ], + "description": "Region selection. Only one of region or region_selection can be specified.", + "example": "{ type: 'smartGroup', code: 'americas' }" + }, "kps_enabled": { "type": "boolean", "deprecated": true, @@ -588,6 +1111,8 @@ "desired_instance_size": { "type": "string", "enum": [ + "pico", + "nano", "micro", "small", "medium", @@ -597,7 +1122,15 @@ "4xlarge", "8xlarge", "12xlarge", - "16xlarge" + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" ] }, "template_url": { @@ -605,9 +1138,21 @@ "format": "uri", "description": "Template URL used to create the project from the CLI.", "example": "https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used.", + "deprecated": true + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used.", + "deprecated": true } }, - "required": ["db_pass", "name", "organization_id", "region"], + "required": ["db_pass", "name", "organization_slug"], "additionalProperties": false, "hideDefinitions": ["release_channel", "postgres_engine"] } @@ -624,11 +1169,25 @@ "properties": { "id": { "type": "string", - "description": "Id of your project" + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" }, "organization_id": { "type": "string", - "description": "Slug of your organization" + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, "name": { "type": "string", @@ -665,44 +1224,263 @@ ] } }, - "required": ["id", "organization_id", "name", "region", "created_at", "status"] + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status" + ] } } } } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organization_projects_create"] } - ] + ], + "summary": "Create a project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" } }, - "/v1/organizations": { + "/v1/projects/available-regions": { "get": { - "operationId": "v1-list-all-organizations", - "summary": "List all organizations", - "description": "Returns a list of organizations that you currently belong to.", - "parameters": [], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { + "operationId": "v1-get-available-regions", + "parameters": [ + { + "name": "organization_slug", + "required": true, + "in": "query", + "description": "Slug of your organization", + "schema": { + "type": "string" + } + }, + { + "name": "continent", + "required": false, + "in": "query", + "description": "Continent code to determine regional recommendations: NA (North America), SA (South America), EU (Europe), AF (Africa), AS (Asia), OC (Oceania), AN (Antarctica)", + "schema": { + "example": "NA", + "type": "string", + "enum": ["NA", "SA", "EU", "AF", "AS", "OC", "AN"] + } + }, + { + "name": "desired_instance_size", + "required": false, + "in": "query", + "description": "Desired instance size", + "schema": { + "example": "nano", + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "recommendations": { + "type": "object", + "properties": { + "smartGroup": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"] + }, + "type": { + "type": "string", + "enum": ["smartGroup"] + } + }, + "required": ["name", "code", "type"] + }, + "specific": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "code": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["specific"] + }, + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] + }, + "status": { + "type": "string", + "enum": ["capacity", "other"] + } + }, + "required": ["name", "code", "type", "provider"] + } + } + }, + "required": ["smartGroup", "specific"] + }, + "all": { + "type": "object", + "properties": { + "smartGroup": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"] + }, + "type": { + "type": "string", + "enum": ["smartGroup"] + } + }, + "required": ["name", "code", "type"] + } + }, + "specific": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "code": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["specific"] + }, + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] + }, + "status": { + "type": "string", + "enum": ["capacity", "other"] + } + }, + "required": ["name", "code", "type", "provider"] + } + } + }, + "required": ["smartGroup", "specific"] + } + }, + "required": ["recommendations", "all"] + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "[Beta] Gets the list of available regions that can be used for a new project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: organizations:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "organizations:read" + } + }, + "/v1/organizations": { + "get": { + "description": "Returns a list of organizations that you currently belong to.", + "operationId": "v1-list-all-organizations", + "parameters": [], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { - "type": "string" + "type": "string", + "description": "Deprecated: Use `slug` instead.", + "deprecated": true + }, + "slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, "name": { "type": "string" } }, - "required": ["id", "name"] + "required": ["id", "slug", "name"] } } } @@ -712,16 +1490,27 @@ "description": "Unexpected error listing organizations" } }, - "tags": ["Organizations"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organizations_read"] } - ] + ], + "summary": "List all organizations", + "tags": ["Organizations"], + "x-badges": [ + { + "name": "OAuth scope: organizations:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" }, "post": { "operationId": "v1-create-an-organization", - "summary": "Create an organization", "parameters": [], "requestBody": { "required": true, @@ -731,7 +1520,8 @@ "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "maxLength": 256 } }, "required": ["name"], @@ -749,13 +1539,20 @@ "type": "object", "properties": { "id": { - "type": "string" + "type": "string", + "description": "Deprecated: Use `slug` instead.", + "deprecated": true + }, + "slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, "name": { "type": "string" } }, - "required": ["id", "name"] + "required": ["id", "slug", "name"] } } } @@ -764,24 +1561,29 @@ "description": "Unexpected error creating an organization" } }, - "tags": ["Organizations"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organizations_create"] } - ] + ], + "summary": "Create an organization", + "tags": ["Organizations"], + "x-endpoint-owners": ["management-api", "billing"] } }, "/v1/oauth/authorize": { "get": { "operationId": "v1-authorize-user", - "summary": "[Beta] Authorize user through oauth", "parameters": [ { "name": "client_id", "required": true, "in": "query", "schema": { + "format": "uuid", "type": "string" } }, @@ -790,8 +1592,8 @@ "required": true, "in": "query", "schema": { - "enum": ["code", "token", "id_token token"], - "type": "string" + "type": "string", + "enum": ["code", "token", "id_token token"] } }, { @@ -839,28 +1641,49 @@ "required": false, "in": "query", "schema": { - "enum": ["plain", "sha256", "S256"], + "type": "string", + "enum": ["plain", "sha256", "S256"] + } + }, + { + "name": "organization_slug", + "required": false, + "in": "query", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "type": "string" + } + }, + { + "name": "resource", + "required": false, + "in": "query", + "description": "Resource indicator for MCP (Model Context Protocol) clients", + "schema": { + "format": "uri", "type": "string" } } ], "responses": { - "303": { + "204": { "description": "" } }, - "tags": ["OAuth"], "security": [ { "oauth2": ["read"] } - ] + ], + "summary": "[Beta] Authorize user through oauth", + "tags": ["OAuth"], + "x-endpoint-owners": ["auth", "management-api"] } }, "/v1/oauth/token": { "post": { "operationId": "v1-exchange-oauth-token", - "summary": "[Beta] Exchange auth code for user's access and refresh token", "parameters": [], "requestBody": { "required": true, @@ -870,11 +1693,12 @@ "type": "object", "properties": { "grant_type": { - "enum": ["authorization_code", "refresh_token"], - "type": "string" + "type": "string", + "enum": ["authorization_code", "refresh_token"] }, "client_id": { - "type": "string" + "type": "string", + "format": "uuid" }, "client_secret": { "type": "string" @@ -890,9 +1714,17 @@ }, "refresh_token": { "type": "string" + }, + "resource": { + "type": "string", + "format": "uri", + "description": "Resource indicator for MCP (Model Context Protocol) clients" + }, + "scope": { + "type": "string" } }, - "required": ["grant_type", "client_id", "client_secret"] + "additionalProperties": false } } } @@ -905,39 +1737,40 @@ "schema": { "type": "object", "properties": { - "expires_in": { - "type": "integer", - "format": "int64" - }, - "token_type": { - "type": "string", - "enum": ["Bearer"] - }, "access_token": { "type": "string" }, "refresh_token": { "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "token_type": { + "type": "string", + "enum": ["Bearer"] } }, - "required": ["expires_in", "token_type", "access_token", "refresh_token"] + "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "additionalProperties": false } } } } }, - "tags": ["OAuth"], "security": [ { "oauth2": ["write"] } - ] + ], + "summary": "[Beta] Exchange auth code for user's access and refresh token", + "tags": ["OAuth"], + "x-endpoint-owners": ["auth", "management-api"] } }, "/v1/oauth/revoke": { "post": { "operationId": "v1-revoke-token", - "summary": "[Beta] Revoke oauth app authorization and it's corresponding tokens", "parameters": [], "requestBody": { "required": true, @@ -968,63 +1801,163 @@ "description": "" } }, - "tags": ["OAuth"], "security": [ { "oauth2": ["write"] } - ] + ], + "summary": "[Beta] Revoke oauth app authorization and it's corresponding tokens", + "tags": ["OAuth"], + "x-endpoint-owners": ["auth", "management-api"] } }, - "/v1/snippets": { + "/v1/oauth/authorize/project-claim": { "get": { - "operationId": "v1-list-all-snippets", - "summary": "Lists SQL snippets for the logged in user", + "description": "Initiates the OAuth authorization flow for the specified provider. After successful authentication, the user can claim ownership of the specified project.", + "operationId": "v1-oauth-authorize-project-claim", "parameters": [ { - "name": "cursor", - "required": false, + "name": "project_ref", + "required": true, "in": "query", + "description": "Project ref", "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "limit", - "required": false, + "name": "client_id", + "required": true, "in": "query", "schema": { - "type": "string", - "minimum": 1, - "maximum": 100 + "format": "uuid", + "type": "string" } }, { - "name": "sort_by", - "required": false, + "name": "response_type", + "required": true, "in": "query", "schema": { - "enum": ["name", "inserted_at"], - "type": "string" + "type": "string", + "enum": ["code", "token", "id_token token"] } }, { - "name": "sort_order", - "required": false, + "name": "redirect_uri", + "required": true, "in": "query", "schema": { - "enum": ["asc", "desc"], "type": "string" } }, { - "name": "project_ref", + "name": "state", "required": false, "in": "query", "schema": { "type": "string" } - } + }, + { + "name": "response_mode", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "code_challenge", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "code_challenge_method", + "required": false, + "in": "query", + "schema": { + "type": "string", + "enum": ["plain", "sha256", "S256"] + } + } + ], + "responses": { + "204": { + "description": "" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["organization_admin_write", "project_admin_write"] + } + ], + "summary": "Authorize user through oauth and claim a project", + "tags": ["OAuth"], + "x-endpoint-owners": ["management-api"] + } + }, + "/v1/snippets": { + "get": { + "operationId": "v1-list-all-snippets", + "parameters": [ + { + "name": "project_ref", + "required": false, + "in": "query", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "cursor", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "schema": { + "type": "string", + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "sort_by", + "required": false, + "in": "query", + "schema": { + "enum": ["name", "inserted_at"], + "type": "string" + } + }, + { + "name": "sort_order", + "required": false, + "in": "query", + "schema": { + "enum": ["asc", "desc"], + "type": "string" + } + } ], "responses": { "200": { @@ -1067,8 +2000,7 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "name": { "type": "string" @@ -1080,8 +2012,7 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "username": { "type": "string" @@ -1093,14 +2024,16 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "username": { "type": "string" } }, "required": ["id", "username"] + }, + "favorite": { + "type": "boolean" } }, "required": [ @@ -1113,7 +2046,8 @@ "description", "project", "owner", - "updated_by" + "updated_by", + "favorite" ] } }, @@ -1130,18 +2064,29 @@ "description": "Failed to list user's SQL snippets" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["snippets_read"] } - ] + ], + "summary": "Lists SQL snippets for the logged in user", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" } }, "/v1/snippets/{id}": { "get": { "operationId": "v1-get-a-snippet", - "summary": "Gets a specific SQL snippet", "parameters": [ { "name": "id", @@ -1175,8 +2120,8 @@ "enum": ["sql"] }, "visibility": { - "enum": ["user", "project", "org", "public"], - "type": "string" + "type": "string", + "enum": ["user", "project", "org", "public"] }, "name": { "type": "string" @@ -1189,8 +2134,7 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "name": { "type": "string" @@ -1202,8 +2146,7 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "username": { "type": "string" @@ -1215,8 +2158,7 @@ "type": "object", "properties": { "id": { - "type": "integer", - "format": "int64" + "type": "number" }, "username": { "type": "string" @@ -1224,11 +2166,16 @@ }, "required": ["id", "username"] }, + "favorite": { + "type": "boolean" + }, "content": { "type": "object", "properties": { "favorite": { - "type": "boolean" + "type": "boolean", + "deprecated": true, + "description": "Deprecated: Rely on root-level favorite property instead." }, "schema_version": { "type": "string" @@ -1237,7 +2184,7 @@ "type": "string" } }, - "required": ["favorite", "schema_version", "sql"] + "required": ["schema_version", "sql"] } }, "required": [ @@ -1251,6 +2198,7 @@ "project", "owner", "updated_by", + "favorite", "content" ] } @@ -1261,18 +2209,30 @@ "description": "Failed to retrieve SQL snippet" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["snippets_read"] } - ] + ], + "summary": "Gets a specific SQL snippet", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/api-keys": { + "/v1/projects/{ref}/actions": { "get": { - "operationId": "v1-get-project-api-keys", - "summary": "Get project api keys", + "description": "Returns a paginated list of action runs of the specified project.", + "operationId": "v1-list-action-runs", "parameters": [ { "name": "ref", @@ -1282,15 +2242,26 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "reveal", - "required": true, + "name": "offset", + "required": false, "in": "query", "schema": { - "type": "boolean" + "minimum": 0, + "type": "number" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "schema": { + "minimum": 10, + "type": "number" } } ], @@ -1304,73 +2275,118 @@ "items": { "type": "object", "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { + "id": { "type": "string" }, - "api_key": { + "branch_id": { "type": "string" }, - "id": { - "type": "string", - "nullable": true + "run_steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "clone", + "pull", + "health", + "configure", + "migrate", + "seed", + "deploy" + ] + }, + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["name", "status", "created_at", "updated_at"] + } }, - "prefix": { - "type": "string", + "git_config": { "nullable": true }, - "description": { + "workdir": { "type": "string", "nullable": true }, - "hash": { - "type": "string", + "check_run_id": { + "type": "number", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - }, - "inserted_at": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, "updated_at": { - "type": "string", - "nullable": true + "type": "string" } }, - "required": ["name", "api_key"] + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] } } } } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to list action runs" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } - ] + ], + "summary": "List all action runs", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" }, - "post": { - "operationId": "createApiKey", - "summary": "[Alpha] Creates a new API key for the project", + "head": { + "description": "Returns the total number of action runs of the specified project.", + "operationId": "v1-count-action-runs", "parameters": [ { "name": "ref", @@ -1380,129 +2396,205 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } + } + ], + "responses": { + "200": { + "headers": { + "X-Total-Count": { + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "description": "total count value" + } + }, + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, + "500": { + "description": "Failed to count action runs" + } + }, + "security": [ { - "name": "reveal", + "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] + } + ], + "summary": "Count the number of action runs", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/actions/{run_id}": { + "get": { + "description": "Returns the current status of the specified action run.", + "operationId": "v1-get-action-run", + "parameters": [ + { + "name": "ref", "required": true, - "in": "query", + "in": "path", + "description": "Project ref", "schema": { - "type": "boolean" + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "type": { - "enum": ["publishable", "secret"], - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - } - }, - "required": ["type"] - } + }, + { + "name": "run_id", + "required": true, + "in": "path", + "description": "Action Run ID", + "schema": { + "type": "string" } } - }, + ], "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { + "id": { "type": "string" }, - "api_key": { + "branch_id": { "type": "string" }, - "id": { - "type": "string", - "nullable": true + "run_steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "clone", + "pull", + "health", + "configure", + "migrate", + "seed", + "deploy" + ] + }, + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["name", "status", "created_at", "updated_at"] + } }, - "prefix": { - "type": "string", + "git_config": { "nullable": true }, - "description": { + "workdir": { "type": "string", "nullable": true }, - "hash": { - "type": "string", + "check_run_id": { + "type": "number", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - }, - "inserted_at": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, "updated_at": { - "type": "string", - "nullable": true + "type": "string" } }, - "required": ["name", "api_key"] + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] } } } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get action run status" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } - ] + ], + "summary": "Get the status of an action run", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" } }, - "/v1/projects/{ref}/api-keys/{id}": { + "/v1/projects/{ref}/actions/{run_id}/status": { "patch": { - "operationId": "updateApiKey", - "summary": "[Alpha] Updates an API key for the project", + "description": "Updates the status of an ongoing action run.", + "operationId": "v1-update-action-run-status", "parameters": [ { "name": "ref", @@ -1512,24 +2604,18 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "id", + "name": "run_id", "required": true, "in": "path", + "description": "Action Run ID", "schema": { "type": "string" } - }, - { - "name": "reveal", - "required": true, - "in": "query", - "schema": { - "type": "boolean" - } } ], "requestBody": { @@ -1539,22 +2625,88 @@ "schema": { "type": "object", "properties": { - "description": { + "clone": { "type": "string", - "nullable": true + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } + "pull": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "health": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "configure": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "migrate": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "seed": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "deploy": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" ] } } @@ -1570,72 +2722,53 @@ "schema": { "type": "object", "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { - "type": "string" - }, - "api_key": { - "type": "string" - }, - "id": { - "type": "string", - "nullable": true - }, - "prefix": { - "type": "string", - "nullable": true - }, - "description": { - "type": "string", - "nullable": true - }, - "hash": { - "type": "string", - "nullable": true - }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - }, - "inserted_at": { - "type": "string", - "nullable": true - }, - "updated_at": { + "message": { "type": "string", - "nullable": true + "enum": ["ok"] } }, - "required": ["name", "api_key"] + "required": ["message"] } } } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update action run status" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_write"] } - ] - }, + ], + "summary": "Update the status of an action run", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + } + }, + "/v1/projects/{ref}/actions/{run_id}/logs": { "get": { - "operationId": "getApiKey", - "summary": "[Alpha] Get API key", + "description": "Returns the logs from the specified action run.", + "operationId": "v1-get-action-run-logs", "parameters": [ { "name": "ref", @@ -1645,100 +2778,67 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "id", + "name": "run_id", "required": true, "in": "path", + "description": "Action Run ID", "schema": { "type": "string" } - }, - { - "name": "reveal", - "required": true, - "in": "query", - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "", "content": { - "application/json": { + "text/plain": { "schema": { - "type": "object", - "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { - "type": "string" - }, - "api_key": { - "type": "string" - }, - "id": { - "type": "string", - "nullable": true - }, - "prefix": { - "type": "string", - "nullable": true - }, - "description": { - "type": "string", - "nullable": true - }, - "hash": { - "type": "string", - "nullable": true - }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - }, - "inserted_at": { - "type": "string", - "nullable": true - }, - "updated_at": { - "type": "string", - "nullable": true - } - }, - "required": ["name", "api_key"] + "type": "string" } } - } + }, + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get action run logs" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } - ] - }, - "delete": { - "operationId": "deleteApiKey", - "summary": "[Alpha] Deletes an API key for the project", + ], + "summary": "Get the logs of an action run", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + } + }, + "/v1/projects/{ref}/api-keys": { + "get": { + "operationId": "v1-get-project-api-keys", "parameters": [ { "name": "ref", @@ -1748,53 +2848,194 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "id", + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "api_key": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true + }, + "prefix": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "hash": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true + }, + "inserted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": ["name"] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_read"] + } + ], + "summary": "Get project api keys", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" + }, + "post": { + "operationId": "v1-create-project-api-key", + "parameters": [ + { + "name": "ref", "required": true, "in": "path", + "description": "Project ref", "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { "name": "reveal", - "required": true, + "required": false, "in": "query", + "description": "Boolean string, true or false", "schema": { "type": "boolean" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["publishable", "secret"] + }, + "name": { + "type": "string", + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" + }, + "description": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true + } + }, + "required": ["type", "name"] + } + } + } + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "type": { - "nullable": true, - "type": "string", - "enum": ["publishable", "secret", "legacy"] - }, - "name": { - "type": "string" - }, "api_key": { - "type": "string" + "type": "string", + "nullable": true }, "id": { "type": "string", "nullable": true }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true + }, "prefix": { "type": "string", "nullable": true }, + "name": { + "type": "string" + }, "description": { "type": "string", "nullable": true @@ -1804,50 +3045,59 @@ "nullable": true }, "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] + "type": "object", + "additionalProperties": {}, + "nullable": true }, "inserted_at": { "type": "string", + "format": "date-time", "nullable": true }, "updated_at": { "type": "string", + "format": "date-time", "nullable": true } }, - "required": ["name", "api_key"] + "required": ["name"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_write"] } - ] + ], + "summary": "Creates a new API key for the project", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" } }, - "/v1/projects/{ref}/branches": { + "/v1/projects/{ref}/api-keys/legacy": { "get": { - "operationId": "v1-list-all-branches", - "summary": "List all database branches", - "description": "Returns all database branches of the specified project.", + "operationId": "v1-get-project-legacy-api-keys", "parameters": [ { "name": "ref", @@ -1857,6 +3107,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -1867,89 +3118,121 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "pr_number": { - "type": "integer", - "format": "int32" - }, - "latest_check_run_id": { - "type": "number", - "deprecated": true, - "description": "This field is deprecated and will not be populated." - }, - "status": { - "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "project_ref": { - "type": "string" - }, - "parent_project_ref": { - "type": "string" - }, - "is_default": { - "type": "boolean" - }, - "git_branch": { - "type": "string" - }, - "persistent": { - "type": "boolean" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": [ - "status", - "id", - "name", - "project_ref", - "parent_project_ref", - "is_default", - "persistent", - "created_at", - "updated_at" - ] - } + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] } } } }, - "500": { - "description": "Failed to retrieve database branches" + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Environments"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_read"] } - ] + ], + "summary": "Check whether JWT based legacy (anon, service_role) API keys are enabled. This API endpoint will be removed in the future, check for HTTP 404 Not Found.", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" }, - "post": { - "operationId": "v1-create-a-branch", - "summary": "Create a database branch", - "description": "Creates a database branch from the specified project.", + "put": { + "operationId": "v1-update-project-legacy-api-keys", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "enabled", + "required": true, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_write"] + } + ], + "summary": "Disable or re-enable JWT based legacy (anon, service_role) API keys. This API endpoint will be removed in the future, check for HTTP 404 Not Found.", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" + } + }, + "/v1/projects/{ref}/api-keys/{id}": { + "patch": { + "operationId": "v1-update-project-api-key", "parameters": [ { "name": "ref", @@ -1959,8 +3242,27 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", "type": "string" } + }, + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } } ], "requestBody": { @@ -1970,134 +3272,114 @@ "schema": { "type": "object", "properties": { - "desired_instance_size": { - "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] - }, - "release_channel": { + "name": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" }, - "postgres_engine": { + "description": { "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] - }, - "branch_name": { - "type": "string" - }, - "git_branch": { - "type": "string" - }, - "persistent": { - "type": "boolean" + "nullable": true }, - "region": { - "type": "string" + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true } - }, - "required": ["branch_name"] + } } } } }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "pr_number": { - "type": "integer", - "format": "int32" - }, - "latest_check_run_id": { - "type": "number", - "deprecated": true, - "description": "This field is deprecated and will not be populated." - }, - "status": { + "api_key": { "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] + "nullable": true }, "id": { - "type": "string" + "type": "string", + "nullable": true }, - "name": { - "type": "string" + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true }, - "project_ref": { - "type": "string" + "prefix": { + "type": "string", + "nullable": true }, - "parent_project_ref": { + "name": { "type": "string" }, - "is_default": { - "type": "boolean" + "description": { + "type": "string", + "nullable": true }, - "git_branch": { - "type": "string" + "hash": { + "type": "string", + "nullable": true }, - "persistent": { - "type": "boolean" + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true }, - "created_at": { - "type": "string" + "inserted_at": { + "type": "string", + "format": "date-time", + "nullable": true }, "updated_at": { - "type": "string" + "type": "string", + "format": "date-time", + "nullable": true } }, - "required": [ - "status", - "id", - "name", - "project_ref", - "parent_project_ref", - "is_default", - "persistent", - "created_at", - "updated_at" - ] + "required": ["name"] } } } }, - "500": { - "description": "Failed to create database branch" + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Environments"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_write"] } - ] + ], + "summary": "Updates an API key for the project", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" }, - "delete": { - "operationId": "v1-disable-preview-branching", - "summary": "Disables preview branching", - "description": "Disables preview branching for the specified project", + "get": { + "operationId": "v1-get-project-api-key", "parameters": [ { "name": "ref", @@ -2107,41 +3389,27 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } - } - ], - "responses": { - "200": { - "description": "" }, - "500": { - "description": "Failed to disable preview branching" - } - }, - "tags": ["Environments"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/custom-hostname": { - "get": { - "operationId": "v1-get-hostname-config", - "summary": "[Beta] Gets project's custom hostname config", - "parameters": [ { - "name": "ref", + "name": "id", "required": true, "in": "path", - "description": "Project ref", "schema": { - "minLength": 20, - "maxLength": 20, + "format": "uuid", "type": "string" } + }, + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -2152,145 +3420,86 @@ "schema": { "type": "object", "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], - "type": "string" + "api_key": { + "type": "string", + "nullable": true }, - "custom_hostname": { + "id": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true + }, + "prefix": { + "type": "string", + "nullable": true + }, + "name": { "type": "string" }, - "data": { + "description": { + "type": "string", + "nullable": true + }, + "hash": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] + "additionalProperties": {}, + "nullable": true + }, + "inserted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true } }, - "required": ["status", "custom_hostname", "data"] + "required": ["name"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" }, - "500": { - "description": "Failed to retrieve project's custom hostname config" + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_read"] } - ] + ], + "summary": "Get API key", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:read" }, "delete": { - "operationId": "v1-Delete hostname config", - "summary": "[Beta] Deletes a project's custom hostname configuration", + "operationId": "v1-delete-project-api-key", "parameters": [ { "name": "ref", @@ -2300,211 +3509,137 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } - } - ], - "responses": { - "200": { - "description": "" }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to delete project custom hostname configuration" - } - }, - "tags": ["Domains"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/custom-hostname/initialize": { - "post": { - "operationId": "v1-update-hostname-config", - "summary": "[Beta] Updates project's custom hostname configuration", - "parameters": [ { - "name": "ref", + "name": "id", "required": true, "in": "path", - "description": "Project ref", "schema": { - "minLength": 20, - "maxLength": 20, + "format": "uuid", "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "custom_hostname": { - "type": "string" - } - }, - "required": ["custom_hostname"] - } + }, + { + "name": "reveal", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "was_compromised", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "reason", + "required": false, + "in": "query", + "schema": { + "type": "string" } } - }, + ], "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], - "type": "string" + "api_key": { + "type": "string", + "nullable": true }, - "custom_hostname": { + "id": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true + }, + "prefix": { + "type": "string", + "nullable": true + }, + "name": { "type": "string" }, - "data": { + "description": { + "type": "string", + "nullable": true + }, + "hash": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] + "additionalProperties": {}, + "nullable": true + }, + "inserted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true } }, - "required": ["status", "custom_hostname", "data"] + "required": ["name"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" }, - "500": { - "description": "Failed to update project custom hostname configuration" + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["api_gateway_keys_write"] } - ] + ], + "summary": "Deletes an API key for the project", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth", "management-api"], + "x-oauth-scope": "secrets:write" } }, - "/v1/projects/{ref}/custom-hostname/reverify": { - "post": { - "operationId": "v1-verify-dns-config", - "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", + "/v1/projects/{ref}/branches": { + "get": { + "description": "Returns all database branches of the specified project.", + "operationId": "v1-list-all-branches", "parameters": [ { "name": "ref", @@ -2514,159 +3649,159 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], - "type": "string" + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "project_ref": { + "type": "string" + }, + "parent_project_ref": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "git_branch": { + "type": "string" + }, + "pr_number": { + "type": "integer", + "format": "int32" + }, + "latest_check_run_id": { + "type": "number", + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "review_requested_at": { + "type": "string", + "format": "date-time" + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri" + }, + "deletion_scheduled_at": { + "type": "string", + "format": "date-time" + }, + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + } }, - "custom_hostname": { - "type": "string" - }, - "data": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] - } - }, - "required": ["status", "custom_hostname", "data"] + "required": [ + "id", + "name", + "project_ref", + "parent_project_ref", + "is_default", + "persistent", + "status", + "created_at", + "updated_at", + "with_data" + ] + } } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to verify project custom hostname configuration" + "description": "Failed to retrieve database branches" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_read"] } - ] - } - }, - "/v1/projects/{ref}/custom-hostname/activate": { + ], + "summary": "List all database branches", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" + }, "post": { - "operationId": "v1-activate-custom-hostname", - "summary": "[Beta] Activates a custom hostname for a project.", + "description": "Creates a database branch from the specified project.", + "operationId": "v1-create-a-branch", "parameters": [ { "name": "ref", @@ -2676,10 +3811,89 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "branch_name": { + "type": "string", + "minLength": 1 + }, + "git_branch": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "persistent": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "desired_instance_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used." + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used." + }, + "secrets": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." + } + }, + "required": ["branch_name"] + } + } + } + }, "responses": { "201": { "description": "", @@ -2688,199 +3902,143 @@ "schema": { "type": "object", "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], + "id": { + "type": "string", + "format": "uuid" + }, + "name": { "type": "string" }, - "custom_hostname": { + "project_ref": { "type": "string" }, - "data": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] + "parent_project_ref": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "git_branch": { + "type": "string" + }, + "pr_number": { + "type": "integer", + "format": "int32" + }, + "latest_check_run_id": { + "type": "number", + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "review_requested_at": { + "type": "string", + "format": "date-time" + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri" + }, + "deletion_scheduled_at": { + "type": "string", + "format": "date-time" + }, + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] } }, - "required": ["status", "custom_hostname", "data"] + "required": [ + "id", + "name", + "project_ref", + "parent_project_ref", + "is_default", + "persistent", + "status", + "created_at", + "updated_at", + "with_data" + ] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to activate project custom hostname configuration" + "description": "Failed to create database branch" } }, - "tags": ["Domains"], "security": [ { "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/network-bans/retrieve": { - "post": { - "operationId": "v1-list-all-network-bans", - "summary": "[Beta] Gets project's network bans", - "parameters": [ + }, { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "fga_permissions": ["branching_development_write"] } ], - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "banned_ipv4_addresses": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["banned_ipv4_addresses"] - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to retrieve project's network bans" - } - }, - "tags": ["Projects"], - "security": [ + "summary": "Create a database branch", + "tags": ["Environments"], + "x-badges": [ { - "bearer": [] + "name": "OAuth scope: environment:write", + "position": "after" } - ] - } - }, - "/v1/projects/{ref}/network-bans": { + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" + }, "delete": { - "operationId": "v1-delete-network-bans", - "summary": "[Beta] Remove network bans.", + "description": "Disables preview branching for the specified project", + "operationId": "v1-disable-preview-branching", "parameters": [ { "name": "ref", @@ -2890,52 +4048,52 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "ipv4_addresses": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["ipv4_addresses"] - } - } - } - }, "responses": { "200": { "description": "" }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to remove network bans." + "description": "Failed to disable preview branching" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_write"] } - ] + ], + "summary": "Disables preview branching", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:write" } }, - "/v1/projects/{ref}/network-restrictions": { + "/v1/projects/{ref}/branches/{name}": { "get": { - "operationId": "v1-get-network-restrictions", - "summary": "[Beta] Gets project's network restrictions", + "description": "Fetches the specified database branch by its name.", + "operationId": "v1-get-a-branch", "parameters": [ { "name": "ref", @@ -2945,6 +4103,15 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "name", + "required": true, + "in": "path", + "schema": { "type": "string" } } @@ -2957,73 +4124,144 @@ "schema": { "type": "object", "properties": { - "entitlement": { - "enum": ["disallowed", "allowed"], + "id": { + "type": "string", + "format": "uuid" + }, + "name": { "type": "string" }, - "config": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } - }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } + "project_ref": { + "type": "string" }, - "old_config": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } - }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } + "parent_project_ref": { + "type": "string" }, - "status": { - "enum": ["stored", "applied"], + "is_default": { + "type": "boolean" + }, + "git_branch": { "type": "string" + }, + "pr_number": { + "type": "integer", + "format": "int32" + }, + "latest_check_run_id": { + "type": "number", + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "review_requested_at": { + "type": "string", + "format": "date-time" + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri" + }, + "deletion_scheduled_at": { + "type": "string", + "format": "date-time" + }, + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] } }, - "required": ["entitlement", "config", "status"] + "required": [ + "id", + "name", + "project_ref", + "parent_project_ref", + "is_default", + "persistent", + "status", + "created_at", + "updated_at", + "with_data" + ] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's network restrictions" + "description": "Failed to fetch database branch" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_read"] } - ] + ], + "summary": "Get a database branch", + "tags": ["Environments"], + "x-badges": [ + { + "name": "OAuth scope: environment:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "environment:read" } }, - "/v1/projects/{ref}/network-restrictions/apply": { - "post": { - "operationId": "v1-update-network-restrictions", - "summary": "[Beta] Updates project's network restrictions", + "/v1/projects/{ref}/custom-hostname": { + "get": { + "operationId": "v1-get-hostname-config", "parameters": [ { "name": "ref", @@ -3033,221 +4271,175 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } - }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "entitlement": { - "enum": ["disallowed", "allowed"], + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] + }, + "custom_hostname": { "type": "string" }, - "config": { + "data": { "type": "object", "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } + "success": { + "type": "boolean" }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "old_config": { - "type": "object", - "properties": { - "dbAllowedCidrs": { + "errors": { "type": "array", "items": { - "type": "string" + "description": "Any JSON-serializable value" } }, - "dbAllowedCidrsV6": { + "messages": { "type": "array", "items": { - "type": "string" + "description": "Any JSON-serializable value" } - } - } - }, - "status": { - "enum": ["stored", "applied"], - "type": "string" - } - }, - "required": ["entitlement", "config", "status"] - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to update project network restrictions" - } - }, - "tags": ["Projects"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/pgsodium": { - "get": { - "operationId": "v1-get-pgsodium-config", - "summary": "[Beta] Gets project's pgsodium config", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "root_key": { - "type": "string" - } - }, - "required": ["root_key"] - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to retrieve project's pgsodium config" - } - }, - "tags": ["Secrets"], - "security": [ - { - "bearer": [] - } - ] - }, - "put": { - "operationId": "v1-update-pgsodium-config", - "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "root_key": { - "type": "string" - } - }, - "required": ["root_key"] - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "root_key": { - "type": "string" + }, + "result": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "ssl": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { + "type": "string" + }, + "txt_value": { + "type": "string" + } + }, + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { + "type": "string" + }, + "verification_errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] + } + }, + "required": ["success", "errors", "messages", "result"] } }, - "required": ["root_key"] + "required": ["status", "custom_hostname", "data"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to update project's pgsodium config" + "description": "Failed to retrieve project's custom hostname config" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_read"] } - ] - } - }, - "/v1/projects/{ref}/postgrest": { - "get": { - "operationId": "v1-get-postgrest-service-config", - "summary": "Gets project's postgrest config", + ], + "summary": "[Beta] Gets project's custom hostname config", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:read" + }, + "delete": { + "operationId": "v1-Delete hostname config", "parameters": [ { "name": "ref", @@ -3257,58 +4449,51 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "max_rows": { - "type": "integer" - }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." - }, - "db_schema": { - "type": "string" - }, - "db_extra_search_path": { - "type": "string" - }, - "jwt_secret": { - "type": "string" - } - }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - } - } - } + "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's postgrest config" + "description": "Failed to delete project custom hostname configuration" } }, - "tags": ["Rest"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } - ] - }, - "patch": { - "operationId": "v1-update-postgrest-service-config", - "summary": "Updates project's postgrest config", + ], + "summary": "[Beta] Deletes a project's custom hostname configuration", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/custom-hostname/initialize": { + "post": { + "operationId": "v1-update-hostname-config", "parameters": [ { "name": "ref", @@ -3318,6 +4503,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -3329,187 +4515,182 @@ "schema": { "type": "object", "properties": { - "max_rows": { - "type": "integer", - "minimum": 0, - "maximum": 1000000 - }, - "db_pool": { - "type": "integer", - "minimum": 0, - "maximum": 1000 - }, - "db_extra_search_path": { - "type": "string" - }, - "db_schema": { - "type": "string" + "custom_hostname": { + "type": "string", + "minLength": 1 } - } + }, + "required": ["custom_hostname"] } } } }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "max_rows": { - "type": "integer" - }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] }, - "db_schema": { + "custom_hostname": { "type": "string" }, - "db_extra_search_path": { - "type": "string" - } - }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to update project's postgrest config" - } - }, - "tags": ["Rest"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}": { - "get": { - "operationId": "v1-get-project", - "summary": "Gets a specific project that belongs to the authenticated user", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Id of your project" - }, - "organization_id": { - "type": "string", - "description": "Slug of your organization" - }, - "name": { - "type": "string", - "description": "Name of your project" - }, - "region": { - "type": "string", - "description": "Region of your project", - "example": "us-east-1" - }, - "created_at": { - "type": "string", - "description": "Creation timestamp", - "example": "2023-03-29T16:32:59Z" - }, - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] - }, - "database": { + "data": { "type": "object", "properties": { - "host": { - "type": "string", - "description": "Database host" + "success": { + "type": "boolean" }, - "version": { - "type": "string", - "description": "Database version" + "errors": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } }, - "postgres_engine": { - "type": "string", - "description": "Database engine" + "messages": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } }, - "release_channel": { - "type": "string", - "description": "Release channel" + "result": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "ssl": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { + "type": "string" + }, + "txt_value": { + "type": "string" + } + }, + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { + "type": "string" + }, + "verification_errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] } }, - "required": ["host", "version", "postgres_engine", "release_channel"] + "required": ["success", "errors", "messages", "result"] } }, - "required": [ - "id", - "organization_id", - "name", - "region", - "created_at", - "status", - "database" - ] + "required": ["status", "custom_hostname", "data"] } } } }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, "500": { - "description": "Failed to retrieve project" + "description": "Failed to update project custom hostname configuration" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } - ] - }, - "delete": { - "operationId": "v1-delete-a-project", - "summary": "Deletes the given project", + ], + "summary": "[Beta] Updates project's custom hostname configuration", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/custom-hostname/reverify": { + "post": { + "operationId": "v1-verify-dns-config", "parameters": [ { "name": "ref", @@ -3519,167 +4700,177 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "id": { - "type": "integer", - "format": "int64" + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] }, - "ref": { + "custom_hostname": { "type": "string" }, - "name": { - "type": "string" - } - }, - "required": ["id", "ref", "name"] - } - } - } - }, - "403": { - "description": "" - } - }, - "tags": ["Projects"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/secrets": { - "get": { - "operationId": "v1-list-all-secrets", - "summary": "List all secrets", - "description": "Returns all secrets you've previously added to the specified project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" + "data": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "errors": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "messages": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "result": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "ssl": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { + "type": "string" + }, + "txt_value": { + "type": "string" + } + }, + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { + "type": "string" + }, + "verification_errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] + } }, - "value": { - "type": "string" - } - }, - "required": ["name", "value"] - } + "required": ["success", "errors", "messages", "result"] + } + }, + "required": ["status", "custom_hostname", "data"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's secrets" + "description": "Failed to verify project custom hostname configuration" } }, - "tags": ["Secrets"], "security": [ { "bearer": [] - } - ] - }, - "post": { - "operationId": "v1-bulk-create-secrets", - "summary": "Bulk create secrets", - "description": "Creates multiple secrets and adds them to the specified project.", - "parameters": [ + }, { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "fga_permissions": ["custom_domain_write"] } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "maxLength": 256, - "pattern": "/^(?!SUPABASE_).*/", - "description": "Secret name must not start with the SUPABASE_ prefix.", - "example": "string" - }, - "value": { - "type": "string", - "maxLength": 24576 - } - }, - "required": ["name", "value"] - } - } - } - } - }, - "responses": { - "201": { - "description": "" - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to create project's secrets" - } - }, - "tags": ["Secrets"], - "security": [ + "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", + "tags": ["Domains"], + "x-badges": [ { - "bearer": [] + "name": "OAuth scope: domains:write", + "position": "after" } - ] - }, - "delete": { - "operationId": "v1-bulk-delete-secrets", - "summary": "Bulk delete secrets", - "description": "Deletes all secrets with the given names from the specified project", + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/custom-hostname/activate": { + "post": { + "operationId": "v1-activate-custom-hostname", "parameters": [ { "name": "ref", @@ -3689,109 +4880,177 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to delete secrets with given names" - } - }, - "tags": ["Secrets"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/ssl-enforcement": { - "get": { - "operationId": "v1-get-ssl-enforcement-config", - "summary": "[Beta] Get project's SSL enforcement configuration.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "currentConfig": { + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] + }, + "custom_hostname": { + "type": "string" + }, + "data": { "type": "object", "properties": { - "database": { + "success": { "type": "boolean" + }, + "errors": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "messages": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "result": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "ssl": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { + "type": "string" + }, + "txt_value": { + "type": "string" + } + }, + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { + "type": "string" + }, + "verification_errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] } }, - "required": ["database"] - }, - "appliedSuccessfully": { - "type": "boolean" + "required": ["success", "errors", "messages", "result"] } }, - "required": ["currentConfig", "appliedSuccessfully"] + "required": ["status", "custom_hostname", "data"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's SSL enforcement config" + "description": "Failed to activate project custom hostname configuration" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } - ] - }, - "put": { - "operationId": "v1-update-ssl-enforcement-config", - "summary": "[Beta] Update project's SSL enforcement configuration.", + ], + "summary": "[Beta] Activates a custom hostname for a project.", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/network-bans/retrieve": { + "post": { + "operationId": "v1-list-all-network-bans", "parameters": [ { "name": "ref", @@ -3801,88 +5060,68 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "requestedConfig": { - "type": "object", - "properties": { - "database": { - "type": "boolean" - } - }, - "required": ["database"] - } - }, - "required": ["requestedConfig"] - } - } - } - }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "currentConfig": { - "type": "object", - "properties": { - "database": { - "type": "boolean" - } - }, - "required": ["database"] - }, - "appliedSuccessfully": { - "type": "boolean" + "banned_ipv4_addresses": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": ["currentConfig", "appliedSuccessfully"] + "required": ["banned_ipv4_addresses"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to update project's SSL enforcement configuration." + "description": "Failed to retrieve project's network bans" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_bans_read"] } - ] + ], + "summary": "[Beta] Gets project's network bans", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, - "/v1/projects/{ref}/types/typescript": { - "get": { - "operationId": "v1-generate-typescript-types", - "summary": "Generate TypeScript types", - "description": "Returns the TypeScript types of your schema for use with supabase-js.", + "/v1/projects/{ref}/network-bans/retrieve/enriched": { + "post": { + "operationId": "v1-list-all-network-bans-enriched", "parameters": [ - { - "name": "included_schemas", - "required": false, - "in": "query", - "schema": { - "default": "public", - "type": "string" - } - }, { "name": "ref", "required": true, @@ -3891,46 +5130,79 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "types": { - "type": "string" + "banned_ipv4_addresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "banned_address": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": ["banned_address", "identifier", "type"] + } } }, - "required": ["types"] + "required": ["banned_ipv4_addresses"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to generate TypeScript types" + "description": "Failed to retrieve project's enriched network bans" } }, - "tags": ["Database"], "security": [ { "bearer": [] - } - ] + }, + { + "fga_permissions": ["database_network_bans_read"] + } + ], + "summary": "[Beta] Gets project's network bans with additional information about which databases they affect", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" } }, - "/v1/projects/{ref}/vanity-subdomain": { - "get": { - "operationId": "v1-get-vanity-subdomain-config", - "summary": "[Beta] Gets current vanity subdomain config", + "/v1/projects/{ref}/network-bans": { + "delete": { + "operationId": "v1-delete-network-bans", "parameters": [ { "name": "ref", @@ -3940,48 +5212,79 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": { - "enum": ["not-used", "custom-domain-used", "active"], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ipv4_addresses": { + "type": "array", + "items": { "type": "string" }, - "custom_domain": { - "type": "string" - } + "description": "List of IP addresses to unban." }, - "required": ["status"] - } + "requester_ip": { + "default": false, + "type": "boolean", + "description": "Include requester's public IP in the list of addresses to unban." + }, + "identifier": { + "type": "string" + } + }, + "required": ["ipv4_addresses"] } } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to get project vanity subdomain configuration" + "description": "Failed to remove network bans." } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_bans_write"] } - ] - }, - "delete": { - "operationId": "v1-deactivate-vanity-subdomain-config", - "summary": "[Beta] Deletes a project's vanity subdomain configuration", + ], + "summary": "[Beta] Remove network bans.", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/network-restrictions": { + "get": { + "operationId": "v1-get-network-restrictions", "parameters": [ { "name": "ref", @@ -3991,33 +5294,111 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "entitlement": { + "type": "string", + "enum": ["disallowed", "allowed"] + }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "status": { + "type": "string", + "enum": ["stored", "applied"] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "applied_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["entitlement", "config", "status"] + } + } + } + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to delete project vanity subdomain configuration" + "description": "Failed to retrieve project's network restrictions" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_read"] } - ] - } - }, - "/v1/projects/{ref}/vanity-subdomain/check-availability": { - "post": { - "operationId": "v1-check-vanity-subdomain-availability", - "summary": "[Beta] Checks vanity subdomain availability", + ], + "summary": "[Beta] Gets project's network restrictions", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:read" + }, + "patch": { + "operationId": "v1-patch-network-restrictions", "parameters": [ { "name": "ref", @@ -4027,6 +5408,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -4038,51 +5420,155 @@ "schema": { "type": "object", "properties": { - "vanity_subdomain": { - "type": "string" + "add": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "remove": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + } } - }, - "required": ["vanity_subdomain"] + } } } } }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "available": { - "type": "boolean" + "entitlement": { + "type": "string", + "enum": ["disallowed", "allowed"] + }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["v4", "v6"] + } + }, + "required": ["address", "type"] + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["v4", "v6"] + } + }, + "required": ["address", "type"] + } + } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "applied_at": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": ["stored", "applied"] } }, - "required": ["available"] + "required": ["entitlement", "config", "status"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to check project vanity subdomain configuration" + "description": "Failed to update project network restrictions" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_write"] } - ] + ], + "summary": "[Alpha] Updates project's network restrictions by adding or removing CIDRs", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" } }, - "/v1/projects/{ref}/vanity-subdomain/activate": { + "/v1/projects/{ref}/network-restrictions/apply": { "post": { - "operationId": "v1-activate-vanity-subdomain-config", - "summary": "[Beta] Activates a vanity subdomain for a project.", + "operationId": "v1-update-network-restrictions", "parameters": [ { "name": "ref", @@ -4092,6 +5578,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -4103,11 +5590,19 @@ "schema": { "type": "object", "properties": { - "vanity_subdomain": { - "type": "string" + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } } - }, - "required": ["vanity_subdomain"] + } } } } @@ -4120,34 +5615,100 @@ "schema": { "type": "object", "properties": { - "custom_domain": { - "type": "string" + "entitlement": { + "type": "string", + "enum": ["disallowed", "allowed"] + }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "status": { + "type": "string", + "enum": ["stored", "applied"] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "applied_at": { + "type": "string", + "format": "date-time" } }, - "required": ["custom_domain"] + "required": ["entitlement", "config", "status"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to activate project vanity subdomain configuration" + "description": "Failed to update project network restrictions" } }, - "tags": ["Domains"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_write"] } - ] + ], + "summary": "[Beta] Updates project's network restrictions", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" } }, - "/v1/projects/{ref}/upgrade": { - "post": { - "operationId": "v1-upgrade-postgres-version", - "summary": "[Beta] Upgrades the project's Postgres version", + "/v1/projects/{ref}/pgsodium": { + "get": { + "operationId": "v1-get-pgsodium-config", "parameters": [ { "name": "ref", @@ -4157,66 +5718,62 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "target_version": { - "type": "string" - } - }, - "required": ["release_channel", "target_version"] - } - } - } - }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "tracking_id": { + "root_key": { "type": "string" } }, - "required": ["tracking_id"] + "required": ["root_key"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to initiate project upgrade" + "description": "Failed to retrieve project's pgsodium config" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } - ] - } - }, - "/v1/projects/{ref}/upgrade/eligibility": { - "get": { - "operationId": "v1-get-postgres-upgrade-eligibility", - "summary": "[Beta] Returns the project's eligibility for upgrades", + ], + "summary": "[Beta] Gets project's pgsodium config", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "secrets:read" + }, + "put": { + "operationId": "v1-update-pgsodium-config", "parameters": [ { "name": "ref", @@ -4226,10 +5783,27 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "root_key": { + "type": "string" + } + }, + "required": ["root_key"] + } + } + } + }, "responses": { "200": { "description": "", @@ -4238,96 +5812,51 @@ "schema": { "type": "object", "properties": { - "current_app_version_release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "duration_estimate_hours": { - "type": "integer" - }, - "eligible": { - "type": "boolean" - }, - "current_app_version": { - "type": "string" - }, - "latest_app_version": { + "root_key": { "type": "string" - }, - "target_upgrade_versions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "postgres_version": { - "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] - }, - "release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "app_version": { - "type": "string" - } - }, - "required": ["postgres_version", "release_channel", "app_version"] - } - }, - "potential_breaking_changes": { - "type": "array", - "items": { - "type": "string" - } - }, - "legacy_auth_custom_roles": { - "type": "array", - "items": { - "type": "string" - } - }, - "extension_dependent_objects": { - "type": "array", - "items": { - "type": "string" - } } }, - "required": [ - "current_app_version_release_channel", - "duration_estimate_hours", - "eligible", - "current_app_version", - "latest_app_version", - "target_upgrade_versions", - "potential_breaking_changes", - "legacy_auth_custom_roles", - "extension_dependent_objects" - ] + "required": ["root_key"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to determine project upgrade eligibility" + "description": "Failed to update project's pgsodium config" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } - ] + ], + "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "secrets:write" } }, - "/v1/projects/{ref}/upgrade/status": { + "/v1/projects/{ref}/postgrest": { "get": { - "operationId": "v1-get-postgres-upgrade-status", - "summary": "[Beta] Gets the latest status of the project's upgrade", + "operationId": "v1-get-postgrest-service-config", "parameters": [ { "name": "ref", @@ -4337,14 +5866,7 @@ "schema": { "minLength": 20, "maxLength": 20, - "type": "string" - } - }, - { - "name": "tracking_id", - "required": false, - "in": "query", - "schema": { + "pattern": "^[a-z]+$", "type": "string" } } @@ -4357,90 +5879,63 @@ "schema": { "type": "object", "properties": { - "databaseUpgradeStatus": { + "db_schema": { + "type": "string" + }, + "max_rows": { + "type": "integer" + }, + "db_extra_search_path": { + "type": "string" + }, + "db_pool": { + "type": "integer", "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "target_version": { - "type": "integer" - }, - "status": { - "enum": [0, 1, 2], - "type": "integer" - }, - "initiated_at": { - "type": "string" - }, - "latest_status_at": { - "type": "string" - }, - "error": { - "type": "string", - "enum": [ - "1_upgraded_instance_launch_failed", - "2_volume_detachchment_from_upgraded_instance_failed", - "3_volume_attachment_to_original_instance_failed", - "4_data_upgrade_initiation_failed", - "5_data_upgrade_completion_failed", - "6_volume_detachchment_from_original_instance_failed", - "7_volume_attachment_to_upgraded_instance_failed", - "8_upgrade_completion_failed", - "9_post_physical_backup_failed" - ] - }, - "progress": { - "type": "string", - "enum": [ - "0_requested", - "1_started", - "2_launched_upgraded_instance", - "3_detached_volume_from_upgraded_instance", - "4_attached_volume_to_original_instance", - "5_initiated_data_upgrade", - "6_completed_data_upgrade", - "7_detached_volume_from_original_instance", - "8_attached_volume_to_upgraded_instance", - "9_completed_upgrade", - "10_completed_post_physical_backup" - ] - } - }, - "required": [ - "target_version", - "status", - "initiated_at", - "latest_status_at" - ] - } - ] + "description": "If `null`, the value is automatically configured based on compute size." + }, + "jwt_secret": { + "type": "string" } }, - "required": ["databaseUpgradeStatus"] + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project upgrade status" + "description": "Failed to retrieve project's postgrest config" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["data_api_config_read"] } - ] - } - }, - "/v1/projects/{ref}/readonly": { - "get": { - "operationId": "v1-get-readonly-mode-status", - "summary": "Returns project's readonly mode status", + ], + "summary": "Gets project's postgrest config", + "tags": ["Rest"], + "x-badges": [ + { + "name": "OAuth scope: rest:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "rest:read" + }, + "patch": { + "operationId": "v1-update-postgrest-service-config", "parameters": [ { "name": "ref", @@ -4450,10 +5945,39 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "db_extra_search_path": { + "type": "string" + }, + "db_schema": { + "type": "string" + }, + "max_rows": { + "type": "integer", + "minimum": 0, + "maximum": 1000000 + }, + "db_pool": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + } + } + } + } + } + }, "responses": { "200": { "description": "", @@ -4462,37 +5986,62 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "db_schema": { + "type": "string" }, - "override_enabled": { - "type": "boolean" + "max_rows": { + "type": "integer" }, - "override_active_until": { + "db_extra_search_path": { "type": "string" + }, + "db_pool": { + "type": "integer", + "nullable": true, + "description": "If `null`, the value is automatically configured based on compute size." } }, - "required": ["enabled", "override_enabled", "override_active_until"] + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] } } } }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, "500": { - "description": "Failed to get project readonly mode status" + "description": "Failed to update project's postgrest config" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["data_api_config_write"] } - ] + ], + "summary": "Updates project's postgrest config", + "tags": ["Rest"], + "x-badges": [ + { + "name": "OAuth scope: rest:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "rest:write" } }, - "/v1/projects/{ref}/readonly/temporary-disable": { - "post": { - "operationId": "v1-disable-readonly-mode-temporarily", - "summary": "Disables project's readonly mode for the next 15 minutes", + "/v1/projects/{ref}": { + "get": { + "operationId": "v1-get-project", "parameters": [ { "name": "ref", @@ -4502,30 +6051,147 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], "responses": { - "201": { - "description": "" + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "name": { + "type": "string", + "description": "Name of your project" + }, + "region": { + "type": "string", + "description": "Region of your project", + "example": "us-east-1" + }, + "created_at": { + "type": "string", + "description": "Creation timestamp", + "example": "2023-03-29T16:32:59Z" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "database": { + "type": "object", + "properties": { + "host": { + "type": "string", + "description": "Database host" + }, + "version": { + "type": "string", + "description": "Database version" + }, + "postgres_engine": { + "type": "string", + "description": "Database engine" + }, + "release_channel": { + "type": "string", + "description": "Release channel" + } + }, + "required": ["host", "version", "postgres_engine", "release_channel"] + } + }, + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status", + "database" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to disable project's readonly mode" + "description": "Failed to retrieve project" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_read"] } - ] - } - }, - "/v1/projects/{ref}/read-replicas/setup": { - "post": { - "operationId": "v1-setup-a-read-replica", - "summary": "[Beta] Set up a read replica", + ], + "summary": "Gets a specific project that belongs to the authenticated user", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" + }, + "delete": { + "operationId": "v1-delete-a-project", "parameters": [ { "name": "ref", @@ -4535,71 +6201,65 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "read_replica_region": { - "type": "string", - "enum": [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "ap-east-1", - "ap-southeast-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-southeast-2", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-north-1", - "eu-central-1", - "eu-central-2", - "ca-central-1", - "ap-south-1", - "sa-east-1" - ], - "description": "Region you want your read replica to reside in", - "example": "us-east-1" - } - }, - "required": ["read_replica_region"] + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["id", "ref", "name"] + } } } - } - }, - "responses": { - "201": { - "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" }, - "500": { - "description": "Failed to set up read replica" + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } - ] - } - }, - "/v1/projects/{ref}/read-replicas/remove": { - "post": { - "operationId": "v1-remove-a-read-replica", - "summary": "[Beta] Remove a read replica", + ], + "summary": "Deletes the given project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra", "dev-workflows"], + "x-oauth-scope": "projects:write" + }, + "patch": { + "operationId": "v1-update-a-project", "parameters": [ { "name": "ref", @@ -4609,6 +6269,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -4620,38 +6281,77 @@ "schema": { "type": "object", "properties": { - "database_identifier": { - "type": "string" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 256 } }, - "required": ["database_identifier"] + "required": ["name"] } } } }, "responses": { - "201": { - "description": "" + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["id", "ref", "name"] + } + } + } + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to remove read replica" + "description": "Failed to update project" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } - ] + ], + "summary": "Updates the given project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:write" } }, - "/v1/projects/{ref}/health": { + "/v1/projects/{ref}/secrets": { "get": { - "operationId": "v1-get-services-health", - "summary": "Gets project's service health status", + "description": "Returns all secrets you've previously added to the specified project.", + "operationId": "v1-list-all-secrets", "parameters": [ { "name": "ref", @@ -4661,30 +6361,9 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } - }, - { - "name": "timeout_ms", - "required": false, - "in": "query", - "schema": { - "minimum": 0, - "maximum": 10000, - "type": "integer" - } - }, - { - "name": "services", - "required": true, - "in": "query", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": ["auth", "db", "pooler", "realtime", "rest", "storage"] - } - } } ], "responses": { @@ -4697,69 +6376,57 @@ "items": { "type": "object", "properties": { - "info": { - "oneOf": [ - { - "type": "object", - "properties": { - "name": { - "type": "string", - "enum": ["GoTrue"] - } - }, - "required": ["name"] - }, - { - "type": "object", - "properties": { - "connected_cluster": { - "type": "integer" - } - }, - "required": ["connected_cluster"] - } - ] - }, "name": { - "enum": ["auth", "db", "pooler", "realtime", "rest", "storage"], "type": "string" }, - "healthy": { - "type": "boolean" - }, - "status": { - "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"], + "value": { "type": "string" }, - "error": { + "updated_at": { "type": "string" } }, - "required": ["name", "healthy", "status"] + "required": ["name", "value"] } } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's service health status" + "description": "Failed to retrieve project's secrets" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_read"] } - ] - } - }, - "/v1/projects/{ref}/config/storage": { - "get": { - "operationId": "v1-get-storage-config", - "summary": "Gets project's storage config", + ], + "summary": "List all secrets", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:read" + }, + "post": { + "description": "Creates multiple secrets and adds them to the specified project.", + "operationId": "v1-bulk-create-secrets", "parameters": [ { "name": "ref", @@ -4769,69 +6436,77 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "type": "object", "properties": { - "fileSizeLimit": { - "type": "integer", - "format": "int64" + "name": { + "type": "string", + "maxLength": 256, + "pattern": "^(?!SUPABASE_).*", + "description": "Secret name must not start with the SUPABASE_ prefix.", + "example": "string" }, - "features": { - "type": "object", - "properties": { - "imageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "s3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - }, - "required": ["imageTransformation", "s3Protocol"] + "value": { + "type": "string", + "maxLength": 24576 } }, - "required": ["fileSizeLimit", "features"] + "required": ["name", "value"] } } } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to retrieve project's storage config" + "description": "Failed to create project's secrets" } }, - "tags": ["Storage"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_write"] } - ] + ], + "summary": "Bulk create secrets", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:write" }, - "patch": { - "operationId": "v1-update-storage-config", - "summary": "Updates project's storage config", + "delete": { + "description": "Deletes all secrets with the given names from the specified project", + "operationId": "v1-bulk-delete-secrets", "parameters": [ { "name": "ref", @@ -4841,6 +6516,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -4850,38 +6526,9 @@ "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "fileSizeLimit": { - "type": "integer", - "minimum": 0, - "maximum": 53687091200, - "format": "int64" - }, - "features": { - "type": "object", - "properties": { - "imageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "s3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - }, - "required": ["imageTransformation", "s3Protocol"] - } + "type": "array", + "items": { + "type": "string" } } } @@ -4891,25 +6538,42 @@ "200": { "description": "" }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to update project's storage config" + "description": "Failed to delete secrets with given names" } }, - "tags": ["Storage"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_write"] } - ] + ], + "summary": "Bulk delete secrets", + "tags": ["Secrets"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "secrets:write" } }, - "/v1/projects/{ref}/config/database/postgres": { + "/v1/projects/{ref}/ssl-enforcement": { "get": { - "operationId": "v1-get-postgres-config", - "summary": "Gets project's Postgres config", + "operationId": "v1-get-ssl-enforcement-config", "parameters": [ { "name": "ref", @@ -4919,6 +6583,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -4931,107 +6596,58 @@ "schema": { "type": "object", "properties": { - "effective_cache_size": { - "type": "string" - }, - "logical_decoding_work_mem": { - "type": "string" - }, - "maintenance_work_mem": { - "type": "string" - }, - "track_activity_query_size": { - "type": "string" - }, - "max_connections": { - "type": "integer", - "minimum": 1, - "maximum": 262143 - }, - "max_locks_per_transaction": { - "type": "integer", - "minimum": 10, - "maximum": 2147483640 - }, - "max_parallel_maintenance_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers_per_gather": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_replication_slots": { - "type": "integer" - }, - "max_slot_wal_keep_size": { - "type": "string" - }, - "max_standby_archive_delay": { - "type": "string" - }, - "max_standby_streaming_delay": { - "type": "string" - }, - "max_wal_size": { - "type": "string" - }, - "max_wal_senders": { - "type": "integer" - }, - "max_worker_processes": { - "type": "integer", - "minimum": 0, - "maximum": 262143 - }, - "shared_buffers": { - "type": "string" - }, - "statement_timeout": { - "type": "string" + "currentConfig": { + "type": "object", + "properties": { + "database": { + "type": "boolean" + } + }, + "required": ["database"] }, - "track_commit_timestamp": { + "appliedSuccessfully": { "type": "boolean" - }, - "wal_keep_size": { - "type": "string" - }, - "wal_sender_timeout": { - "type": "string" - }, - "work_mem": { - "type": "string" - }, - "session_replication_role": { - "enum": ["origin", "replica", "local"], - "type": "string" } - } + }, + "required": ["currentConfig", "appliedSuccessfully"] } } } }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, "500": { - "description": "Failed to retrieve project's Postgres config" + "description": "Failed to retrieve project's SSL enforcement config" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_ssl_config_read"] } - ] + ], + "summary": "[Beta] Get project's SSL enforcement configuration.", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" }, "put": { - "operationId": "v1-update-postgres-config", - "summary": "Updates project's Postgres config", + "operationId": "v1-update-ssl-enforcement-config", "parameters": [ { "name": "ref", @@ -5041,6 +6657,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -5052,92 +6669,17 @@ "schema": { "type": "object", "properties": { - "effective_cache_size": { - "type": "string" - }, - "logical_decoding_work_mem": { - "type": "string" - }, - "maintenance_work_mem": { - "type": "string" - }, - "track_activity_query_size": { - "type": "string" - }, - "max_connections": { - "type": "integer", - "minimum": 1, - "maximum": 262143 - }, - "max_locks_per_transaction": { - "type": "integer", - "minimum": 10, - "maximum": 2147483640 - }, - "max_parallel_maintenance_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers_per_gather": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_replication_slots": { - "type": "integer" - }, - "max_slot_wal_keep_size": { - "type": "string" - }, - "max_standby_archive_delay": { - "type": "string" - }, - "max_standby_streaming_delay": { - "type": "string" - }, - "max_wal_size": { - "type": "string" - }, - "max_wal_senders": { - "type": "integer" - }, - "max_worker_processes": { - "type": "integer", - "minimum": 0, - "maximum": 262143 - }, - "shared_buffers": { - "type": "string" - }, - "statement_timeout": { - "type": "string" - }, - "track_commit_timestamp": { - "type": "boolean" - }, - "wal_keep_size": { - "type": "string" - }, - "wal_sender_timeout": { - "type": "string" - }, - "work_mem": { - "type": "string" - }, - "restart_database": { - "type": "boolean" - }, - "session_replication_role": { - "enum": ["origin", "replica", "local"], - "type": "string" + "requestedConfig": { + "type": "object", + "properties": { + "database": { + "type": "boolean" + } + }, + "required": ["database"] } - } + }, + "required": ["requestedConfig"] } } } @@ -5150,113 +6692,71 @@ "schema": { "type": "object", "properties": { - "effective_cache_size": { - "type": "string" - }, - "logical_decoding_work_mem": { - "type": "string" - }, - "maintenance_work_mem": { - "type": "string" - }, - "track_activity_query_size": { - "type": "string" - }, - "max_connections": { - "type": "integer", - "minimum": 1, - "maximum": 262143 - }, - "max_locks_per_transaction": { - "type": "integer", - "minimum": 10, - "maximum": 2147483640 - }, - "max_parallel_maintenance_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_parallel_workers_per_gather": { - "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_replication_slots": { - "type": "integer" - }, - "max_slot_wal_keep_size": { - "type": "string" - }, - "max_standby_archive_delay": { - "type": "string" - }, - "max_standby_streaming_delay": { - "type": "string" - }, - "max_wal_size": { - "type": "string" - }, - "max_wal_senders": { - "type": "integer" - }, - "max_worker_processes": { - "type": "integer", - "minimum": 0, - "maximum": 262143 - }, - "shared_buffers": { - "type": "string" - }, - "statement_timeout": { - "type": "string" + "currentConfig": { + "type": "object", + "properties": { + "database": { + "type": "boolean" + } + }, + "required": ["database"] }, - "track_commit_timestamp": { + "appliedSuccessfully": { "type": "boolean" - }, - "wal_keep_size": { - "type": "string" - }, - "wal_sender_timeout": { - "type": "string" - }, - "work_mem": { - "type": "string" - }, - "session_replication_role": { - "enum": ["origin", "replica", "local"], - "type": "string" } - } + }, + "required": ["currentConfig", "appliedSuccessfully"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to update project's Postgres config" + "description": "Failed to update project's SSL enforcement configuration." } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_ssl_config_write"] } - ] + ], + "summary": "[Beta] Update project's SSL enforcement configuration.", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:write" } }, - "/v1/projects/{ref}/config/database/pgbouncer": { + "/v1/projects/{ref}/types/typescript": { "get": { - "operationId": "v1-get-project-pgbouncer-config", - "summary": "Get project's pgbouncer config", + "description": "Returns the TypeScript types of your schema for use with supabase-js.", + "operationId": "v1-generate-typescript-types", "parameters": [ + { + "name": "included_schemas", + "required": false, + "in": "query", + "schema": { + "default": "public", + "type": "string" + } + }, { "name": "ref", "required": true, @@ -5265,6 +6765,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -5277,38 +6778,51 @@ "schema": { "type": "object", "properties": { - "pool_mode": { - "type": "string", - "enum": ["transaction", "session", "statement"] - }, - "default_pool_size": { - "type": "number" - }, - "ignore_startup_parameters": { - "type": "string" - }, - "max_client_conn": { - "type": "number" - }, - "connection_string": { + "types": { "type": "string" } - } + }, + "required": ["types"] } } } }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, "500": { - "description": "Failed to retrieve project's pgbouncer config" + "description": "Failed to generate TypeScript types" } }, - "tags": ["Database"] + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_read"] + } + ], + "summary": "Generate TypeScript types", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/config/database/pooler": { + "/v1/projects/{ref}/vanity-subdomain": { "get": { - "operationId": "v1-get-supavisor-config", - "summary": "Gets project's supavisor config", + "operationId": "v1-get-vanity-subdomain-config", "parameters": [ { "name": "ref", @@ -5318,6 +6832,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -5328,80 +6843,56 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "database_type": { - "type": "string", - "enum": ["PRIMARY", "READ_REPLICA"] - }, - "db_port": { - "type": "integer" - }, - "default_pool_size": { - "type": "integer", - "nullable": true - }, - "max_client_conn": { - "type": "integer", - "nullable": true - }, - "identifier": { - "type": "string" - }, - "is_using_scram_auth": { - "type": "boolean" - }, - "db_user": { - "type": "string" - }, - "db_host": { - "type": "string" - }, - "db_name": { - "type": "string" - }, - "connectionString": { - "type": "string" - }, - "pool_mode": { - "enum": ["transaction", "session"], - "type": "string" - } + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["not-used", "custom-domain-used", "active"] }, - "required": [ - "database_type", - "db_port", - "default_pool_size", - "max_client_conn", - "identifier", - "is_using_scram_auth", - "db_user", - "db_host", - "db_name", - "connectionString", - "pool_mode" - ] - } + "custom_domain": { + "type": "string", + "minLength": 1 + } + }, + "required": ["status"] } } } }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, "500": { - "description": "Failed to retrieve project's supavisor config" + "description": "Failed to get project vanity subdomain configuration" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_read"] } - ] + ], + "summary": "[Beta] Gets current vanity subdomain config", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:read" }, - "patch": { - "operationId": "v1-update-supavisor-config", - "summary": "Updates project's supavisor config", + "delete": { + "operationId": "v1-deactivate-vanity-subdomain-config", "parameters": [ { "name": "ref", @@ -5411,75 +6902,304 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "default_pool_size": { - "type": "integer", - "nullable": true, - "minimum": 0, - "maximum": 1000 - }, - "pool_mode": { - "enum": ["transaction", "session"], - "type": "string", - "deprecated": true, - "description": "This field is deprecated and is ignored in this request" + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to delete project vanity subdomain configuration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] + } + ], + "summary": "[Beta] Deletes a project's vanity subdomain configuration", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/vanity-subdomain/check-availability": { + "post": { + "operationId": "v1-check-vanity-subdomain-availability", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vanity_subdomain": { + "type": "string" } + }, + "required": ["vanity_subdomain"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "available": { + "type": "boolean" + } + }, + "required": ["available"] } } } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to check project vanity subdomain configuration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] + } + ], + "summary": "[Beta] Checks vanity subdomain availability", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" + } + }, + "/v1/projects/{ref}/vanity-subdomain/activate": { + "post": { + "operationId": "v1-activate-vanity-subdomain-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vanity_subdomain": { + "type": "string" + } + }, + "required": ["vanity_subdomain"] + } + } } }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "default_pool_size": { - "type": "integer", - "nullable": true - }, - "pool_mode": { - "enum": ["transaction", "session"], + "custom_domain": { "type": "string" } }, - "required": ["default_pool_size", "pool_mode"] + "required": ["custom_domain"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" }, "500": { - "description": "Failed to update project's supavisor config" + "description": "Failed to activate project vanity subdomain configuration" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] } - ] + ], + "summary": "[Beta] Activates a vanity subdomain for a project.", + "tags": ["Domains"], + "x-badges": [ + { + "name": "OAuth scope: domains:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "domains:write" } }, - "/v1/projects/{ref}/config/auth": { + "/v1/projects/{ref}/upgrade": { + "post": { + "operationId": "v1-upgrade-postgres-version", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "target_version": { + "type": "string" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + } + }, + "required": ["target_version"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tracking_id": { + "type": "string" + } + }, + "required": ["tracking_id"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to initiate project upgrade" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_write", "database_write"] + } + ], + "summary": "[Beta] Upgrades the project's Postgres version", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/upgrade/eligibility": { "get": { - "operationId": "v1-get-auth-service-config", - "summary": "Gets project's auth config", + "operationId": "v1-get-postgres-upgrade-eligibility", "parameters": [ { "name": "ref", @@ -5489,6 +7209,7 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } @@ -5501,268 +7222,2974 @@ "schema": { "type": "object", "properties": { - "api_max_request_duration": { - "type": "integer", - "nullable": true - }, - "db_max_pool_size": { - "type": "integer", - "nullable": true - }, - "jwt_exp": { - "type": "integer", - "nullable": true + "eligible": { + "type": "boolean" }, - "mailer_otp_exp": { - "type": "integer" + "current_app_version": { + "type": "string" }, - "mailer_otp_length": { - "type": "integer", - "nullable": true + "current_app_version_release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] }, - "mfa_max_enrolled_factors": { - "type": "integer", - "nullable": true + "latest_app_version": { + "type": "string" }, - "mfa_phone_otp_length": { - "type": "integer" - }, - "mfa_phone_max_frequency": { - "type": "integer", - "nullable": true - }, - "password_min_length": { - "type": "integer", - "nullable": true - }, - "rate_limit_anonymous_users": { - "type": "integer", - "nullable": true + "target_upgrade_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "postgres_version": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "app_version": { + "type": "string" + } + }, + "required": ["postgres_version", "release_channel", "app_version"] + } }, - "rate_limit_email_sent": { - "type": "integer", - "nullable": true + "duration_estimate_hours": { + "type": "number" }, - "rate_limit_sms_sent": { - "type": "integer", - "nullable": true + "legacy_auth_custom_roles": { + "type": "array", + "items": { + "type": "string" + } }, - "rate_limit_token_refresh": { - "type": "integer", - "nullable": true + "objects_to_be_dropped": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." }, - "rate_limit_verify": { - "type": "integer", - "nullable": true + "unsupported_extensions": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." }, - "rate_limit_otp": { - "type": "integer", - "nullable": true + "user_defined_objects_in_internal_schemas": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." }, - "security_refresh_token_reuse_interval": { - "type": "integer", - "nullable": true - }, - "sessions_inactivity_timeout": { - "type": "integer", - "nullable": true - }, - "sessions_timebox": { - "type": "integer", - "nullable": true - }, - "sms_max_frequency": { - "type": "integer", - "nullable": true - }, - "sms_otp_exp": { - "type": "integer", - "nullable": true - }, - "sms_otp_length": { - "type": "integer" - }, - "smtp_max_frequency": { - "type": "integer", - "nullable": true - }, - "disable_signup": { - "type": "boolean", - "nullable": true - }, - "external_anonymous_users_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_additional_client_ids": { - "type": "string", - "nullable": true - }, - "external_apple_client_id": { - "type": "string", - "nullable": true - }, - "external_apple_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_secret": { - "type": "string", - "nullable": true - }, - "external_azure_client_id": { - "type": "string", - "nullable": true - }, - "external_azure_enabled": { - "type": "boolean", - "nullable": true - }, - "external_azure_secret": { - "type": "string", - "nullable": true - }, - "external_azure_url": { - "type": "string", - "nullable": true - }, - "external_bitbucket_client_id": { - "type": "string", - "nullable": true - }, - "external_bitbucket_enabled": { - "type": "boolean", - "nullable": true - }, - "external_bitbucket_secret": { - "type": "string", - "nullable": true - }, - "external_discord_client_id": { - "type": "string", - "nullable": true - }, - "external_discord_enabled": { - "type": "boolean", - "nullable": true - }, - "external_discord_secret": { - "type": "string", - "nullable": true - }, - "external_email_enabled": { - "type": "boolean", - "nullable": true - }, - "external_facebook_client_id": { - "type": "string", - "nullable": true - }, - "external_facebook_enabled": { - "type": "boolean", - "nullable": true - }, - "external_facebook_secret": { - "type": "string", - "nullable": true - }, - "external_figma_client_id": { - "type": "string", - "nullable": true - }, - "external_figma_enabled": { - "type": "boolean", - "nullable": true - }, - "external_figma_secret": { - "type": "string", - "nullable": true - }, - "external_github_client_id": { - "type": "string", - "nullable": true - }, - "external_github_enabled": { - "type": "boolean", - "nullable": true - }, - "external_github_secret": { - "type": "string", - "nullable": true - }, - "external_gitlab_client_id": { - "type": "string", - "nullable": true - }, - "external_gitlab_enabled": { - "type": "boolean", - "nullable": true - }, - "external_gitlab_secret": { - "type": "string", - "nullable": true - }, - "external_gitlab_url": { - "type": "string", - "nullable": true - }, - "external_google_additional_client_ids": { - "type": "string", - "nullable": true - }, - "external_google_client_id": { - "type": "string", - "nullable": true - }, - "external_google_enabled": { - "type": "boolean", - "nullable": true - }, - "external_google_secret": { - "type": "string", - "nullable": true - }, - "external_google_skip_nonce_check": { - "type": "boolean", - "nullable": true - }, - "external_kakao_client_id": { - "type": "string", - "nullable": true - }, - "external_kakao_enabled": { - "type": "boolean", - "nullable": true - }, - "external_kakao_secret": { - "type": "string", - "nullable": true - }, - "external_keycloak_client_id": { - "type": "string", - "nullable": true - }, - "external_keycloak_enabled": { - "type": "boolean", - "nullable": true - }, - "external_keycloak_secret": { - "type": "string", - "nullable": true - }, - "external_keycloak_url": { - "type": "string", - "nullable": true - }, - "external_linkedin_oidc_client_id": { - "type": "string", + "validation_errors": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["objects_depending_on_pg_cron"] + }, + "dependents": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["type", "dependents"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["indexes_referencing_ll_to_earth"] + }, + "schema_name": { + "type": "string" + }, + "table_name": { + "type": "string" + }, + "index_name": { + "type": "string" + } + }, + "required": ["type", "schema_name", "table_name", "index_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["function_using_obsolete_lang"] + }, + "schema_name": { + "type": "string" + }, + "function_name": { + "type": "string" + }, + "lang_name": { + "type": "string" + } + }, + "required": ["type", "schema_name", "function_name", "lang_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unsupported_extension"] + }, + "extension_name": { + "type": "string" + } + }, + "required": ["type", "extension_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unsupported_fdw_handler"] + }, + "fdw_name": { + "type": "string" + }, + "fdw_handler_name": { + "type": "string" + } + }, + "required": ["type", "fdw_name", "fdw_handler_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unlogged_table_with_persistent_sequence"] + }, + "schema_name": { + "type": "string" + }, + "table_name": { + "type": "string" + }, + "sequence_name": { + "type": "string" + } + }, + "required": ["type", "schema_name", "table_name", "sequence_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["user_defined_objects_in_internal_schemas"] + }, + "obj_type": { + "type": "string", + "enum": ["table", "function"] + }, + "schema_name": { + "type": "string" + }, + "obj_name": { + "type": "string" + } + }, + "required": ["type", "obj_type", "schema_name", "obj_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["active_replication_slot"] + }, + "slot_name": { + "type": "string" + } + }, + "required": ["type", "slot_name"] + } + ] + } + } + }, + "required": [ + "eligible", + "current_app_version", + "current_app_version_release_channel", + "latest_app_version", + "target_upgrade_versions", + "duration_estimate_hours", + "legacy_auth_custom_roles", + "objects_to_be_dropped", + "unsupported_extensions", + "user_defined_objects_in_internal_schemas", + "validation_errors" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to determine project upgrade eligibility" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_read", "database_read"] + } + ], + "summary": "[Beta] Returns the project's eligibility for upgrades", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/upgrade/status": { + "get": { + "operationId": "v1-get-postgres-upgrade-status", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "tracking_id", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "databaseUpgradeStatus": { + "type": "object", + "properties": { + "initiated_at": { + "type": "string" + }, + "latest_status_at": { + "type": "string" + }, + "target_version": { + "type": "number" + }, + "error": { + "type": "string", + "enum": [ + "1_upgraded_instance_launch_failed", + "2_volume_detachchment_from_upgraded_instance_failed", + "3_volume_attachment_to_original_instance_failed", + "4_data_upgrade_initiation_failed", + "5_data_upgrade_completion_failed", + "6_volume_detachchment_from_original_instance_failed", + "7_volume_attachment_to_upgraded_instance_failed", + "8_upgrade_completion_failed", + "9_post_physical_backup_failed" + ] + }, + "progress": { + "type": "string", + "enum": [ + "0_requested", + "1_started", + "2_launched_upgraded_instance", + "3_detached_volume_from_upgraded_instance", + "4_attached_volume_to_original_instance", + "5_initiated_data_upgrade", + "6_completed_data_upgrade", + "7_detached_volume_from_original_instance", + "8_attached_volume_to_upgraded_instance", + "9_completed_upgrade", + "10_completed_post_physical_backup" + ] + }, + "status": { + "type": "number" + } + }, + "required": ["initiated_at", "latest_status_at", "target_version", "status"], "nullable": true + } + }, + "required": ["databaseUpgradeStatus"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project upgrade status" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_read", "database_read"] + } + ], + "summary": "[Beta] Gets the latest status of the project's upgrade", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/readonly": { + "get": { + "operationId": "v1-get-readonly-mode-status", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" }, - "external_linkedin_oidc_enabled": { - "type": "boolean", - "nullable": true + "override_enabled": { + "type": "boolean" }, - "external_linkedin_oidc_secret": { + "override_active_until": { + "type": "string" + } + }, + "required": ["enabled", "override_enabled", "override_active_until"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get project readonly mode status" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_readonly_config_read"] + } + ], + "summary": "Returns project's readonly mode status", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra", "support-tooling"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/readonly/temporary-disable": { + "post": { + "operationId": "v1-disable-readonly-mode-temporarily", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to disable project's readonly mode" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_readonly_config_write"] + } + ], + "summary": "Disables project's readonly mode for the next 15 minutes", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra", "support-tooling"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/read-replicas/setup": { + "post": { + "operationId": "v1-setup-a-read-replica", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "read_replica_region": { + "type": "string", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ], + "description": "Region you want your read replica to reside in", + "example": "us-east-1" + } + }, + "required": ["read_replica_region"] + } + } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to set up read replica" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["infra_read_replicas_write"] + } + ], + "summary": "[Beta] Set up a read replica", + "tags": ["Database"], + "x-endpoint-owners": ["management-api", "infra"] + } + }, + "/v1/projects/{ref}/read-replicas/remove": { + "post": { + "operationId": "v1-remove-a-read-replica", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "database_identifier": { + "type": "string" + } + }, + "required": ["database_identifier"] + } + } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to remove read replica" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["infra_read_replicas_write"] + } + ], + "summary": "[Beta] Remove a read replica", + "tags": ["Database"], + "x-endpoint-owners": ["management-api", "infra"] + } + }, + "/v1/projects/{ref}/health": { + "get": { + "operationId": "v1-get-services-health", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "services", + "required": true, + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "auth", + "db", + "db_postgres_user", + "pooler", + "realtime", + "rest", + "storage", + "pg_bouncer" + ] + } + } + }, + { + "name": "timeout_ms", + "required": false, + "in": "query", + "schema": { + "minimum": 0, + "maximum": 10000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "auth", + "db", + "db_postgres_user", + "pooler", + "realtime", + "rest", + "storage", + "pg_bouncer" + ] + }, + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "status": { + "type": "string", + "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"] + }, + "info": { + "oneOf": [ + { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": ["GoTrue"] + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": ["name", "version", "description"] + }, + { + "type": "object", + "properties": { + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "db_connected": { + "type": "boolean" + }, + "connected_cluster": { + "type": "integer" + } + }, + "required": ["healthy", "db_connected", "connected_cluster"] + }, + { + "type": "object", + "properties": { + "db_schema": { + "type": "string" + } + }, + "required": ["db_schema"] + } + ] + }, + "error": { + "type": "string" + } + }, + "required": ["name", "healthy", "status"] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's service health status" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_read"] + } + ], + "summary": "Gets project's service health status", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/config/auth/signing-keys/legacy": { + "post": { + "operationId": "v1-create-legacy-signing-key", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] + } + ], + "summary": "Set up the project's existing JWT secret as an in_use JWT signing key. This endpoint will be removed in the future always check for HTTP 404 Not Found.", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" + }, + "get": { + "operationId": "v1-get-legacy-signing-key", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] + } + ], + "summary": "Get the signing key information for the JWT secret imported as signing key for this project. This endpoint will be removed in the future, check for HTTP 404 Not Found.", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:read" + } + }, + "/v1/projects/{ref}/config/auth/signing-keys": { + "post": { + "operationId": "v1-create-project-signing-key", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "standby"] + }, + "private_jwk": { + "discriminator": { + "propertyName": "kty" + }, + "oneOf": [ + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] + }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["RSA"] + }, + "alg": { + "type": "string", + "enum": ["RS256"] + }, + "n": { + "type": "string" + }, + "e": { + "type": "string", + "enum": ["AQAB"] + }, + "d": { + "type": "string" + }, + "p": { + "type": "string" + }, + "q": { + "type": "string" + }, + "dp": { + "type": "string" + }, + "dq": { + "type": "string" + }, + "qi": { + "type": "string" + } + }, + "required": ["kty", "n", "e", "d", "p", "q", "dp", "dq", "qi"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] + }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["EC"] + }, + "alg": { + "type": "string", + "enum": ["ES256"] + }, + "crv": { + "type": "string", + "enum": ["P-256"] + }, + "x": { + "type": "string" + }, + "y": { + "type": "string" + }, + "d": { + "type": "string" + } + }, + "required": ["kty", "crv", "x", "y", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] + }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["OKP"] + }, + "alg": { + "type": "string", + "enum": ["EdDSA"] + }, + "crv": { + "type": "string", + "enum": ["Ed25519"] + }, + "x": { + "type": "string" + }, + "d": { + "type": "string" + } + }, + "required": ["kty", "crv", "x", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] + }, + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["oct"] + }, + "alg": { + "type": "string", + "enum": ["HS256"] + }, + "k": { + "type": "string", + "minLength": 16 + } + }, + "required": ["kty", "k"], + "additionalProperties": false + } + ] + } + }, + "required": ["algorithm"], + "additionalProperties": false + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] + } + ], + "summary": "Create a new signing key for the project in standby status", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" + }, + "get": { + "operationId": "v1-get-project-signing-keys", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + }, + "required": ["keys"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] + } + ], + "summary": "List all signing keys for the project", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:read" + } + }, + "/v1/projects/{ref}/config/auth/signing-keys/{id}": { + "get": { + "operationId": "v1-get-project-signing-key", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] + } + ], + "summary": "Get information about a signing key", + "tags": ["Auth"], + "x-endpoint-owners": ["auth"] + }, + "delete": { + "operationId": "v1-remove-project-signing-key", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] + } + ], + "summary": "Remove a signing key from a project. Only possible if the key has been in revoked status for a while.", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" + }, + "patch": { + "operationId": "v1-update-project-signing-key", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + } + }, + "required": ["status"], + "additionalProperties": false + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] + } + ], + "summary": "Update a signing key, mainly its status", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: secrets:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "secrets:write" + } + }, + "/v1/projects/{ref}/config/storage": { + "get": { + "operationId": "v1-get-storage-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "fileSizeLimit": { + "type": "integer", + "format": "int64" + }, + "features": { + "type": "object", + "properties": { + "imageTransformation": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "s3Protocol": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxNamespaces": { + "type": "integer", + "minimum": 0 + }, + "maxTables": { + "type": "integer", + "minimum": 0 + }, + "maxCatalogs": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] + }, + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxBuckets": { + "type": "integer", + "minimum": 0 + }, + "maxIndexes": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + }, + "required": [ + "imageTransformation", + "s3Protocol", + "icebergCatalog", + "vectorBuckets" + ] + }, + "capabilities": { + "type": "object", + "properties": { + "list_v2": { + "type": "boolean" + }, + "iceberg_catalog": { + "type": "boolean" + } + }, + "required": ["list_v2", "iceberg_catalog"] + }, + "external": { + "type": "object", + "properties": { + "upstreamTarget": { + "type": "string", + "enum": ["main", "canary"] + } + }, + "required": ["upstreamTarget"] + }, + "migrationVersion": { + "type": "string" + }, + "databasePoolMode": { + "type": "string" + } + }, + "required": [ + "fileSizeLimit", + "features", + "capabilities", + "external", + "migrationVersion", + "databasePoolMode" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's storage config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["storage_config_read"] + } + ], + "summary": "Gets project's storage config", + "tags": ["Storage"], + "x-endpoint-owners": ["storage"] + }, + "patch": { + "operationId": "v1-update-storage-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "fileSizeLimit": { + "type": "integer", + "minimum": 0, + "maximum": 536870912000, + "format": "int64" + }, + "features": { + "type": "object", + "properties": { + "imageTransformation": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "s3Protocol": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxNamespaces": { + "type": "integer", + "minimum": 0 + }, + "maxTables": { + "type": "integer", + "minimum": 0 + }, + "maxCatalogs": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] + }, + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxBuckets": { + "type": "integer", + "minimum": 0 + }, + "maxIndexes": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + } + }, + "external": { + "type": "object", + "properties": { + "upstreamTarget": { + "type": "string", + "enum": ["main", "canary"] + } + }, + "required": ["upstreamTarget"] + } + }, + "additionalProperties": false + } + } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update project's storage config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["storage_config_write"] + } + ], + "summary": "Updates project's storage config", + "tags": ["Storage"], + "x-endpoint-owners": ["storage"] + } + }, + "/v1/projects/{ref}/config/database/postgres": { + "get": { + "operationId": "v1-get-postgres-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "effective_cache_size": { + "type": "string" + }, + "logical_decoding_work_mem": { + "type": "string" + }, + "maintenance_work_mem": { + "type": "string" + }, + "track_activity_query_size": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "minimum": 1, + "maximum": 262143 + }, + "max_locks_per_transaction": { + "type": "integer", + "minimum": 10, + "maximum": 2147483640 + }, + "max_parallel_maintenance_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers_per_gather": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_replication_slots": { + "type": "integer" + }, + "max_slot_wal_keep_size": { + "type": "string" + }, + "max_standby_archive_delay": { + "type": "string" + }, + "max_standby_streaming_delay": { + "type": "string" + }, + "max_wal_size": { + "type": "string" + }, + "max_wal_senders": { + "type": "integer" + }, + "max_worker_processes": { + "type": "integer", + "minimum": 0, + "maximum": 262143 + }, + "session_replication_role": { + "type": "string", + "enum": ["origin", "replica", "local"] + }, + "shared_buffers": { + "type": "string" + }, + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "track_commit_timestamp": { + "type": "boolean" + }, + "wal_keep_size": { + "type": "string" + }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "work_mem": { + "type": "string" + }, + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { + "type": "boolean" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's Postgres config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_config_read"] + } + ], + "summary": "Gets project's Postgres config", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" + }, + "put": { + "operationId": "v1-update-postgres-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "effective_cache_size": { + "type": "string" + }, + "logical_decoding_work_mem": { + "type": "string" + }, + "maintenance_work_mem": { + "type": "string" + }, + "track_activity_query_size": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "minimum": 1, + "maximum": 262143 + }, + "max_locks_per_transaction": { + "type": "integer", + "minimum": 10, + "maximum": 2147483640 + }, + "max_parallel_maintenance_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers_per_gather": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_replication_slots": { + "type": "integer" + }, + "max_slot_wal_keep_size": { + "type": "string" + }, + "max_standby_archive_delay": { + "type": "string" + }, + "max_standby_streaming_delay": { + "type": "string" + }, + "max_wal_size": { + "type": "string" + }, + "max_wal_senders": { + "type": "integer" + }, + "max_worker_processes": { + "type": "integer", + "minimum": 0, + "maximum": 262143 + }, + "session_replication_role": { + "type": "string", + "enum": ["origin", "replica", "local"] + }, + "shared_buffers": { + "type": "string" + }, + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "track_commit_timestamp": { + "type": "boolean" + }, + "wal_keep_size": { + "type": "string" + }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "work_mem": { + "type": "string" + }, + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { + "type": "boolean" + }, + "restart_database": { + "type": "boolean" + } + }, + "additionalProperties": false + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "effective_cache_size": { + "type": "string" + }, + "logical_decoding_work_mem": { + "type": "string" + }, + "maintenance_work_mem": { + "type": "string" + }, + "track_activity_query_size": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "minimum": 1, + "maximum": 262143 + }, + "max_locks_per_transaction": { + "type": "integer", + "minimum": 10, + "maximum": 2147483640 + }, + "max_parallel_maintenance_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers_per_gather": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_replication_slots": { + "type": "integer" + }, + "max_slot_wal_keep_size": { + "type": "string" + }, + "max_standby_archive_delay": { + "type": "string" + }, + "max_standby_streaming_delay": { + "type": "string" + }, + "max_wal_size": { + "type": "string" + }, + "max_wal_senders": { + "type": "integer" + }, + "max_worker_processes": { + "type": "integer", + "minimum": 0, + "maximum": 262143 + }, + "session_replication_role": { + "type": "string", + "enum": ["origin", "replica", "local"] + }, + "shared_buffers": { + "type": "string" + }, + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "track_commit_timestamp": { + "type": "boolean" + }, + "wal_keep_size": { + "type": "string" + }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "work_mem": { + "type": "string" + }, + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { + "type": "boolean" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update project's Postgres config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_config_write"] + } + ], + "summary": "Updates project's Postgres config", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/config/database/pgbouncer": { + "get": { + "operationId": "v1-get-project-pgbouncer-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "default_pool_size": { + "type": "integer" + }, + "ignore_startup_parameters": { + "type": "string" + }, + "max_client_conn": { + "type": "integer" + }, + "pool_mode": { + "type": "string", + "enum": ["transaction", "session", "statement"] + }, + "connection_string": { + "type": "string" + }, + "server_idle_timeout": { + "type": "integer" + }, + "server_lifetime": { + "type": "integer" + }, + "query_wait_timeout": { + "type": "integer" + }, + "reserve_pool_size": { + "type": "integer" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's pgbouncer config" + } + }, + "security": [ + { + "fga_permissions": ["database_read"] + } + ], + "summary": "Get project's pgbouncer config", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/config/database/pooler": { + "get": { + "operationId": "v1-get-pooler-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "identifier": { + "type": "string" + }, + "database_type": { + "type": "string", + "enum": ["PRIMARY", "READ_REPLICA"] + }, + "is_using_scram_auth": { + "type": "boolean" + }, + "db_user": { + "type": "string" + }, + "db_host": { + "type": "string" + }, + "db_port": { + "type": "integer" + }, + "db_name": { + "type": "string" + }, + "connection_string": { + "type": "string" + }, + "connectionString": { + "type": "string", + "description": "Use connection_string instead" + }, + "default_pool_size": { + "type": "integer", + "nullable": true + }, + "max_client_conn": { + "type": "integer", + "nullable": true + }, + "pool_mode": { + "type": "string", + "enum": ["transaction", "session"] + } + }, + "required": [ + "identifier", + "database_type", + "is_using_scram_auth", + "db_user", + "db_host", + "db_port", + "db_name", + "connection_string", + "connectionString", + "default_pool_size", + "max_client_conn", + "pool_mode" + ] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's supavisor config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_pooling_config_read"] + } + ], + "summary": "Gets project's supavisor config", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" + }, + "patch": { + "operationId": "v1-update-pooler-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "default_pool_size": { + "type": "integer", + "minimum": 0, + "maximum": 3000, + "nullable": true + }, + "pool_mode": { + "type": "string", + "enum": ["transaction", "session"], + "description": "Dedicated pooler mode for the project" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "default_pool_size": { + "type": "integer", + "nullable": true + }, + "pool_mode": { + "type": "string" + } + }, + "required": ["default_pool_size", "pool_mode"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update project's supavisor config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_pooling_config_write"] + } + ], + "summary": "Updates project's supavisor config", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/config/auth": { + "get": { + "operationId": "v1-get-auth-service-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "api_max_request_duration": { + "type": "integer", + "nullable": true + }, + "db_max_pool_size": { + "type": "integer", + "nullable": true + }, + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true + }, + "disable_signup": { + "type": "boolean", + "nullable": true + }, + "external_anonymous_users_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_additional_client_ids": { + "type": "string", + "nullable": true + }, + "external_apple_client_id": { + "type": "string", + "nullable": true + }, + "external_apple_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_apple_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_secret": { + "type": "string", + "nullable": true + }, + "external_azure_client_id": { + "type": "string", + "nullable": true + }, + "external_azure_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_azure_enabled": { + "type": "boolean", + "nullable": true + }, + "external_azure_secret": { + "type": "string", + "nullable": true + }, + "external_azure_url": { + "type": "string", + "nullable": true + }, + "external_bitbucket_client_id": { + "type": "string", + "nullable": true + }, + "external_bitbucket_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_enabled": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_secret": { + "type": "string", + "nullable": true + }, + "external_discord_client_id": { + "type": "string", + "nullable": true + }, + "external_discord_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_discord_enabled": { + "type": "boolean", + "nullable": true + }, + "external_discord_secret": { + "type": "string", + "nullable": true + }, + "external_email_enabled": { + "type": "boolean", + "nullable": true + }, + "external_facebook_client_id": { + "type": "string", + "nullable": true + }, + "external_facebook_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_facebook_enabled": { + "type": "boolean", + "nullable": true + }, + "external_facebook_secret": { + "type": "string", + "nullable": true + }, + "external_figma_client_id": { + "type": "string", + "nullable": true + }, + "external_figma_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_figma_enabled": { + "type": "boolean", + "nullable": true + }, + "external_figma_secret": { + "type": "string", + "nullable": true + }, + "external_github_client_id": { + "type": "string", + "nullable": true + }, + "external_github_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_github_enabled": { + "type": "boolean", + "nullable": true + }, + "external_github_secret": { + "type": "string", + "nullable": true + }, + "external_gitlab_client_id": { + "type": "string", + "nullable": true + }, + "external_gitlab_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_gitlab_enabled": { + "type": "boolean", + "nullable": true + }, + "external_gitlab_secret": { + "type": "string", + "nullable": true + }, + "external_gitlab_url": { + "type": "string", + "nullable": true + }, + "external_google_additional_client_ids": { + "type": "string", + "nullable": true + }, + "external_google_client_id": { + "type": "string", + "nullable": true + }, + "external_google_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_google_enabled": { + "type": "boolean", + "nullable": true + }, + "external_google_secret": { + "type": "string", + "nullable": true + }, + "external_google_skip_nonce_check": { + "type": "boolean", + "nullable": true + }, + "external_kakao_client_id": { + "type": "string", + "nullable": true + }, + "external_kakao_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_kakao_enabled": { + "type": "boolean", + "nullable": true + }, + "external_kakao_secret": { + "type": "string", + "nullable": true + }, + "external_keycloak_client_id": { + "type": "string", + "nullable": true + }, + "external_keycloak_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_enabled": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_secret": { + "type": "string", + "nullable": true + }, + "external_keycloak_url": { + "type": "string", + "nullable": true + }, + "external_linkedin_oidc_client_id": { + "type": "string", + "nullable": true + }, + "external_linkedin_oidc_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_linkedin_oidc_enabled": { + "type": "boolean", + "nullable": true + }, + "external_linkedin_oidc_secret": { "type": "string", "nullable": true }, @@ -5770,6 +10197,10 @@ "type": "string", "nullable": true }, + "external_slack_oidc_email_optional": { + "type": "boolean", + "nullable": true + }, "external_slack_oidc_enabled": { "type": "boolean", "nullable": true @@ -5782,6 +10213,10 @@ "type": "string", "nullable": true }, + "external_notion_email_optional": { + "type": "boolean", + "nullable": true + }, "external_notion_enabled": { "type": "boolean", "nullable": true @@ -5798,6 +10233,10 @@ "type": "string", "nullable": true }, + "external_slack_email_optional": { + "type": "boolean", + "nullable": true + }, "external_slack_enabled": { "type": "boolean", "nullable": true @@ -5810,6 +10249,10 @@ "type": "string", "nullable": true }, + "external_spotify_email_optional": { + "type": "boolean", + "nullable": true + }, "external_spotify_enabled": { "type": "boolean", "nullable": true @@ -5822,6 +10265,10 @@ "type": "string", "nullable": true }, + "external_twitch_email_optional": { + "type": "boolean", + "nullable": true + }, "external_twitch_enabled": { "type": "boolean", "nullable": true @@ -5834,6 +10281,10 @@ "type": "string", "nullable": true }, + "external_twitter_email_optional": { + "type": "boolean", + "nullable": true + }, "external_twitter_enabled": { "type": "boolean", "nullable": true @@ -5842,6 +10293,22 @@ "type": "string", "nullable": true }, + "external_x_client_id": { + "type": "string", + "nullable": true + }, + "external_x_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_x_enabled": { + "type": "boolean", + "nullable": true + }, + "external_x_secret": { + "type": "string", + "nullable": true + }, "external_workos_client_id": { "type": "string", "nullable": true @@ -5858,10 +10325,22 @@ "type": "string", "nullable": true }, + "external_web3_solana_enabled": { + "type": "boolean", + "nullable": true + }, + "external_web3_ethereum_enabled": { + "type": "boolean", + "nullable": true + }, "external_zoom_client_id": { "type": "string", "nullable": true }, + "external_zoom_email_optional": { + "type": "boolean", + "nullable": true + }, "external_zoom_enabled": { "type": "boolean", "nullable": true @@ -5930,6 +10409,34 @@ "type": "string", "nullable": true }, + "hook_before_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_before_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_before_user_created_secrets": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_after_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_secrets": { + "type": "string", + "nullable": true + }, + "jwt_exp": { + "type": "integer", + "nullable": true + }, "mailer_allow_unverified_email_sign_ins": { "type": "boolean", "nullable": true @@ -5938,6 +10445,13 @@ "type": "boolean", "nullable": true }, + "mailer_otp_exp": { + "type": "integer" + }, + "mailer_otp_length": { + "type": "integer", + "nullable": true + }, "mailer_secure_email_change_enabled": { "type": "boolean", "nullable": true @@ -5966,6 +10480,34 @@ "type": "string", "nullable": true }, + "mailer_subjects_password_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_email_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_phone_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_enrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_linked_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_unlinked_notification": { + "type": "string", + "nullable": true + }, "mailer_templates_confirmation_content": { "type": "string", "nullable": true @@ -5990,6 +10532,66 @@ "type": "string", "nullable": true }, + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_email_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_phone_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_unlinked_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_max_enrolled_factors": { + "type": "integer", + "nullable": true + }, "mfa_totp_enroll_enabled": { "type": "boolean", "nullable": true @@ -5998,32 +10600,89 @@ "type": "boolean", "nullable": true }, - "mfa_phone_enroll_enabled": { - "type": "boolean", + "mfa_phone_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_otp_length": { + "type": "integer" + }, + "mfa_phone_template": { + "type": "string", + "nullable": true + }, + "mfa_phone_max_frequency": { + "type": "integer", + "nullable": true + }, + "nimbus_oauth_client_id": { + "type": "string", + "nullable": true + }, + "nimbus_oauth_email_optional": { + "type": "boolean", + "nullable": true + }, + "nimbus_oauth_client_secret": { + "type": "string", + "nullable": true + }, + "password_hibp_enabled": { + "type": "boolean", + "nullable": true + }, + "password_min_length": { + "type": "integer", + "nullable": true + }, + "password_required_characters": { + "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], + "nullable": true + }, + "rate_limit_anonymous_users": { + "type": "integer", "nullable": true }, - "mfa_phone_verify_enabled": { - "type": "boolean", + "rate_limit_email_sent": { + "type": "integer", "nullable": true }, - "mfa_web_authn_enroll_enabled": { - "type": "boolean", + "rate_limit_sms_sent": { + "type": "integer", "nullable": true }, - "mfa_web_authn_verify_enabled": { - "type": "boolean", + "rate_limit_token_refresh": { + "type": "integer", "nullable": true }, - "mfa_phone_template": { - "type": "string", + "rate_limit_verify": { + "type": "integer", "nullable": true }, - "password_hibp_enabled": { - "type": "boolean", + "rate_limit_otp": { + "type": "integer", "nullable": true }, - "password_required_characters": { - "type": "string", + "rate_limit_web3": { + "type": "integer", "nullable": true }, "refresh_token_rotation_enabled": { @@ -6048,6 +10707,7 @@ }, "security_captcha_provider": { "type": "string", + "enum": ["turnstile", "hcaptcha"], "nullable": true }, "security_captcha_secret": { @@ -6058,10 +10718,18 @@ "type": "boolean", "nullable": true }, + "security_refresh_token_reuse_interval": { + "type": "integer", + "nullable": true + }, "security_update_password_require_reauthentication": { "type": "boolean", "nullable": true }, + "sessions_inactivity_timeout": { + "type": "integer", + "nullable": true + }, "sessions_single_per_user": { "type": "boolean", "nullable": true @@ -6070,6 +10738,10 @@ "type": "string", "nullable": true }, + "sessions_timebox": { + "type": "integer", + "nullable": true + }, "site_url": { "type": "string", "nullable": true @@ -6078,6 +10750,10 @@ "type": "boolean", "nullable": true }, + "sms_max_frequency": { + "type": "integer", + "nullable": true + }, "sms_messagebird_access_key": { "type": "string", "nullable": true @@ -6086,8 +10762,16 @@ "type": "string", "nullable": true }, + "sms_otp_exp": { + "type": "integer", + "nullable": true + }, + "sms_otp_length": { + "type": "integer" + }, "sms_provider": { "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], "nullable": true }, "sms_template": { @@ -6100,6 +10784,7 @@ }, "sms_test_otp_valid_until": { "type": "string", + "format": "date-time", "nullable": true }, "sms_textlocal_api_key": { @@ -6152,12 +10837,17 @@ }, "smtp_admin_email": { "type": "string", + "format": "email", "nullable": true }, "smtp_host": { "type": "string", "nullable": true }, + "smtp_max_frequency": { + "type": "integer", + "nullable": true + }, "smtp_pass": { "type": "string", "nullable": true @@ -6177,100 +10867,116 @@ "uri_allow_list": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean" + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean" + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } }, "required": [ "api_max_request_duration", "db_max_pool_size", - "jwt_exp", - "mailer_otp_exp", - "mailer_otp_length", - "mfa_max_enrolled_factors", - "mfa_phone_otp_length", - "mfa_phone_max_frequency", - "password_min_length", - "rate_limit_anonymous_users", - "rate_limit_email_sent", - "rate_limit_sms_sent", - "rate_limit_token_refresh", - "rate_limit_verify", - "rate_limit_otp", - "security_refresh_token_reuse_interval", - "sessions_inactivity_timeout", - "sessions_timebox", - "sms_max_frequency", - "sms_otp_exp", - "sms_otp_length", - "smtp_max_frequency", + "db_max_pool_size_unit", "disable_signup", "external_anonymous_users_enabled", "external_apple_additional_client_ids", "external_apple_client_id", + "external_apple_email_optional", "external_apple_enabled", "external_apple_secret", "external_azure_client_id", + "external_azure_email_optional", "external_azure_enabled", "external_azure_secret", "external_azure_url", "external_bitbucket_client_id", + "external_bitbucket_email_optional", "external_bitbucket_enabled", "external_bitbucket_secret", "external_discord_client_id", + "external_discord_email_optional", "external_discord_enabled", "external_discord_secret", "external_email_enabled", "external_facebook_client_id", + "external_facebook_email_optional", "external_facebook_enabled", "external_facebook_secret", "external_figma_client_id", + "external_figma_email_optional", "external_figma_enabled", "external_figma_secret", "external_github_client_id", + "external_github_email_optional", "external_github_enabled", "external_github_secret", "external_gitlab_client_id", + "external_gitlab_email_optional", "external_gitlab_enabled", "external_gitlab_secret", "external_gitlab_url", "external_google_additional_client_ids", "external_google_client_id", + "external_google_email_optional", "external_google_enabled", "external_google_secret", "external_google_skip_nonce_check", "external_kakao_client_id", + "external_kakao_email_optional", "external_kakao_enabled", "external_kakao_secret", "external_keycloak_client_id", + "external_keycloak_email_optional", "external_keycloak_enabled", "external_keycloak_secret", "external_keycloak_url", "external_linkedin_oidc_client_id", + "external_linkedin_oidc_email_optional", "external_linkedin_oidc_enabled", "external_linkedin_oidc_secret", "external_slack_oidc_client_id", + "external_slack_oidc_email_optional", "external_slack_oidc_enabled", "external_slack_oidc_secret", "external_notion_client_id", + "external_notion_email_optional", "external_notion_enabled", "external_notion_secret", "external_phone_enabled", "external_slack_client_id", + "external_slack_email_optional", "external_slack_enabled", "external_slack_secret", "external_spotify_client_id", + "external_spotify_email_optional", "external_spotify_enabled", "external_spotify_secret", "external_twitch_client_id", + "external_twitch_email_optional", "external_twitch_enabled", "external_twitch_secret", "external_twitter_client_id", + "external_twitter_email_optional", "external_twitter_enabled", "external_twitter_secret", + "external_x_client_id", + "external_x_email_optional", + "external_x_enabled", + "external_x_secret", "external_workos_client_id", "external_workos_enabled", "external_workos_secret", "external_workos_url", + "external_web3_solana_enabled", + "external_web3_ethereum_enabled", "external_zoom_client_id", + "external_zoom_email_optional", "external_zoom_enabled", "external_zoom_secret", "hook_custom_access_token_enabled", @@ -6288,8 +10994,17 @@ "hook_send_email_enabled", "hook_send_email_uri", "hook_send_email_secrets", + "hook_before_user_created_enabled", + "hook_before_user_created_uri", + "hook_before_user_created_secrets", + "hook_after_user_created_enabled", + "hook_after_user_created_uri", + "hook_after_user_created_secrets", + "jwt_exp", "mailer_allow_unverified_email_sign_ins", "mailer_autoconfirm", + "mailer_otp_exp", + "mailer_otp_length", "mailer_secure_email_change_enabled", "mailer_subjects_confirmation", "mailer_subjects_email_change", @@ -6297,21 +11012,56 @@ "mailer_subjects_magic_link", "mailer_subjects_reauthentication", "mailer_subjects_recovery", + "mailer_subjects_password_changed_notification", + "mailer_subjects_email_changed_notification", + "mailer_subjects_phone_changed_notification", + "mailer_subjects_mfa_factor_enrolled_notification", + "mailer_subjects_mfa_factor_unenrolled_notification", + "mailer_subjects_identity_linked_notification", + "mailer_subjects_identity_unlinked_notification", "mailer_templates_confirmation_content", "mailer_templates_email_change_content", "mailer_templates_invite_content", "mailer_templates_magic_link_content", "mailer_templates_reauthentication_content", "mailer_templates_recovery_content", + "mailer_templates_password_changed_notification_content", + "mailer_templates_email_changed_notification_content", + "mailer_templates_phone_changed_notification_content", + "mailer_templates_mfa_factor_enrolled_notification_content", + "mailer_templates_mfa_factor_unenrolled_notification_content", + "mailer_templates_identity_linked_notification_content", + "mailer_templates_identity_unlinked_notification_content", + "mailer_notifications_password_changed_enabled", + "mailer_notifications_email_changed_enabled", + "mailer_notifications_phone_changed_enabled", + "mailer_notifications_mfa_factor_enrolled_enabled", + "mailer_notifications_mfa_factor_unenrolled_enabled", + "mailer_notifications_identity_linked_enabled", + "mailer_notifications_identity_unlinked_enabled", + "mfa_max_enrolled_factors", "mfa_totp_enroll_enabled", "mfa_totp_verify_enabled", "mfa_phone_enroll_enabled", "mfa_phone_verify_enabled", "mfa_web_authn_enroll_enabled", "mfa_web_authn_verify_enabled", + "mfa_phone_otp_length", "mfa_phone_template", + "mfa_phone_max_frequency", + "nimbus_oauth_client_id", + "nimbus_oauth_email_optional", + "nimbus_oauth_client_secret", "password_hibp_enabled", + "password_min_length", "password_required_characters", + "rate_limit_anonymous_users", + "rate_limit_email_sent", + "rate_limit_sms_sent", + "rate_limit_token_refresh", + "rate_limit_verify", + "rate_limit_otp", + "rate_limit_web3", "refresh_token_rotation_enabled", "saml_enabled", "saml_external_url", @@ -6320,13 +11070,19 @@ "security_captcha_provider", "security_captcha_secret", "security_manual_linking_enabled", + "security_refresh_token_reuse_interval", "security_update_password_require_reauthentication", + "sessions_inactivity_timeout", "sessions_single_per_user", "sessions_tags", + "sessions_timebox", "site_url", "sms_autoconfirm", + "sms_max_frequency", "sms_messagebird_access_key", "sms_messagebird_originator", + "sms_otp_exp", + "sms_otp_length", "sms_provider", "sms_template", "sms_test_otp", @@ -6339,273 +11095,389 @@ "sms_twilio_message_service_sid", "sms_twilio_verify_account_sid", "sms_twilio_verify_auth_token", - "sms_twilio_verify_message_service_sid", - "sms_vonage_api_key", - "sms_vonage_api_secret", - "sms_vonage_from", - "smtp_admin_email", - "smtp_host", - "smtp_pass", - "smtp_port", - "smtp_sender_name", - "smtp_user", - "uri_allow_list" - ] - } - } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to retrieve project's auth config" - } - }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] - } - ] - }, - "patch": { - "operationId": "v1-update-auth-service-config", - "summary": "Updates a project's auth config", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "jwt_exp": { - "type": "integer", - "minimum": 0, - "maximum": 604800 - }, - "smtp_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, - "mfa_max_enrolled_factors": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "sessions_timebox": { - "type": "integer", - "minimum": 0 - }, - "sessions_inactivity_timeout": { - "type": "integer", - "minimum": 0 - }, - "rate_limit_anonymous_users": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "rate_limit_email_sent": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "rate_limit_sms_sent": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "rate_limit_verify": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "rate_limit_token_refresh": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "rate_limit_otp": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - }, - "password_min_length": { - "type": "integer", - "minimum": 6, - "maximum": 32767 - }, - "security_refresh_token_reuse_interval": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "mailer_otp_exp": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "mailer_otp_length": { - "type": "integer", - "minimum": 6, - "maximum": 10 - }, - "sms_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, - "sms_otp_exp": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "sms_otp_length": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, - "db_max_pool_size": { - "type": "integer" - }, - "api_max_request_duration": { - "type": "integer" - }, - "mfa_phone_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, - "mfa_phone_otp_length": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, + "sms_twilio_verify_message_service_sid", + "sms_vonage_api_key", + "sms_vonage_api_secret", + "sms_vonage_from", + "smtp_admin_email", + "smtp_host", + "smtp_max_frequency", + "smtp_pass", + "smtp_port", + "smtp_sender_name", + "smtp_user", + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's auth config" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] + } + ], + "summary": "Gets project's auth config", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + }, + "patch": { + "operationId": "v1-update-auth-service-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { "site_url": { "type": "string", - "pattern": "/^[^,]+$/" + "pattern": "^[^,]+$", + "nullable": true }, "disable_signup": { - "type": "boolean" + "type": "boolean", + "nullable": true + }, + "jwt_exp": { + "type": "integer", + "minimum": 0, + "maximum": 604800, + "nullable": true }, "smtp_admin_email": { - "type": "string" + "type": "string", + "format": "email", + "nullable": true }, "smtp_host": { - "type": "string" + "type": "string", + "nullable": true }, "smtp_port": { - "type": "string" + "type": "string", + "nullable": true }, "smtp_user": { - "type": "string" + "type": "string", + "nullable": true }, "smtp_pass": { - "type": "string" + "type": "string", + "nullable": true + }, + "smtp_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true }, "smtp_sender_name": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_allow_unverified_email_sign_ins": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "mailer_autoconfirm": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "mailer_subjects_invite": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_subjects_confirmation": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_subjects_recovery": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_subjects_email_change": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_subjects_magic_link": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_subjects_reauthentication": { - "type": "string" + "type": "string", + "nullable": true + }, + "mailer_subjects_password_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_email_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_phone_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_enrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_linked_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_unlinked_notification": { + "type": "string", + "nullable": true }, "mailer_templates_invite_content": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_templates_confirmation_content": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_templates_recovery_content": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_templates_email_change_content": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_templates_magic_link_content": { - "type": "string" + "type": "string", + "nullable": true }, "mailer_templates_reauthentication_content": { - "type": "string" + "type": "string", + "nullable": true + }, + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_email_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_phone_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_unlinked_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_max_enrolled_factors": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true }, "uri_allow_list": { - "type": "string" + "type": "string", + "nullable": true }, "external_anonymous_users_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_email_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_phone_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "saml_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "saml_external_url": { "type": "string", - "pattern": "/^[^,]+$/" + "pattern": "^[^,]+$", + "nullable": true + }, + "security_captcha_enabled": { + "type": "boolean", + "nullable": true + }, + "security_captcha_provider": { + "type": "string", + "enum": ["turnstile", "hcaptcha"], + "nullable": true + }, + "security_captcha_secret": { + "type": "string", + "nullable": true + }, + "sessions_timebox": { + "type": "integer", + "minimum": 0, + "nullable": true + }, + "sessions_inactivity_timeout": { + "type": "integer", + "minimum": 0, + "nullable": true + }, + "sessions_single_per_user": { + "type": "boolean", + "nullable": true + }, + "sessions_tags": { + "type": "string", + "pattern": "^\\s*([a-zA-Z0-9_-]+(\\s*,+\\s*)?)*\\s*$", + "nullable": true + }, + "rate_limit_anonymous_users": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true + }, + "rate_limit_email_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, - "security_captcha_enabled": { - "type": "boolean" + "rate_limit_sms_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, - "security_captcha_provider": { - "type": "string" + "rate_limit_verify": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, - "security_captcha_secret": { - "type": "string" + "rate_limit_token_refresh": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, - "sessions_single_per_user": { - "type": "boolean" + "rate_limit_otp": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, - "sessions_tags": { - "type": "string", - "pattern": "/^\\s*([a-z0-9_-]+(\\s*,+\\s*)?)*\\s*$/i" + "rate_limit_web3": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, + "nullable": true }, "mailer_secure_email_change_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "refresh_token_rotation_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "password_hibp_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true + }, + "password_min_length": { + "type": "integer", + "minimum": 6, + "maximum": 32767, + "nullable": true }, "password_required_characters": { "type": "string", @@ -6614,1225 +11486,8135 @@ "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", "" - ] + ], + "nullable": true }, "security_manual_linking_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "security_update_password_require_reauthentication": { - "type": "boolean" + "type": "boolean", + "nullable": true + }, + "security_refresh_token_reuse_interval": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true + }, + "mailer_otp_exp": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "mailer_otp_length": { + "type": "integer", + "minimum": 6, + "maximum": 10, + "nullable": true }, "sms_autoconfirm": { - "type": "boolean" + "type": "boolean", + "nullable": true + }, + "sms_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true + }, + "sms_otp_exp": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "nullable": true + }, + "sms_otp_length": { + "type": "integer", + "minimum": 0, + "maximum": 32767 }, "sms_provider": { - "type": "string" + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], + "nullable": true }, "sms_messagebird_access_key": { - "type": "string" + "type": "string", + "nullable": true }, "sms_messagebird_originator": { - "type": "string" + "type": "string", + "nullable": true }, "sms_test_otp": { "type": "string", - "pattern": "/^([0-9]{1,15}=[0-9]+,?)*$/" + "pattern": "^([0-9]{1,15}=[0-9]+,?)*$", + "nullable": true }, "sms_test_otp_valid_until": { - "type": "string" + "type": "string", + "format": "date-time", + "nullable": true }, "sms_textlocal_api_key": { - "type": "string" + "type": "string", + "nullable": true }, "sms_textlocal_sender": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_account_sid": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_auth_token": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_content_sid": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_message_service_sid": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_verify_account_sid": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_verify_auth_token": { - "type": "string" + "type": "string", + "nullable": true }, "sms_twilio_verify_message_service_sid": { - "type": "string" + "type": "string", + "nullable": true }, "sms_vonage_api_key": { - "type": "string" + "type": "string", + "nullable": true }, "sms_vonage_api_secret": { - "type": "string" + "type": "string", + "nullable": true }, "sms_vonage_from": { - "type": "string" + "type": "string", + "nullable": true }, "sms_template": { - "type": "string" + "type": "string", + "nullable": true }, "hook_mfa_verification_attempt_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "hook_mfa_verification_attempt_uri": { - "type": "string" + "type": "string", + "nullable": true }, "hook_mfa_verification_attempt_secrets": { - "type": "string" + "type": "string", + "nullable": true }, "hook_password_verification_attempt_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "hook_password_verification_attempt_uri": { - "type": "string" + "type": "string", + "nullable": true }, "hook_password_verification_attempt_secrets": { - "type": "string" + "type": "string", + "nullable": true }, "hook_custom_access_token_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "hook_custom_access_token_uri": { - "type": "string" + "type": "string", + "nullable": true }, "hook_custom_access_token_secrets": { - "type": "string" + "type": "string", + "nullable": true }, "hook_send_sms_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "hook_send_sms_uri": { - "type": "string" + "type": "string", + "nullable": true }, "hook_send_sms_secrets": { - "type": "string" + "type": "string", + "nullable": true }, "hook_send_email_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "hook_send_email_uri": { - "type": "string" + "type": "string", + "nullable": true }, "hook_send_email_secrets": { - "type": "string" + "type": "string", + "nullable": true + }, + "hook_before_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_before_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_before_user_created_secrets": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_after_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_secrets": { + "type": "string", + "nullable": true }, "external_apple_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_apple_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_apple_email_optional": { + "type": "boolean", + "nullable": true }, "external_apple_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_apple_additional_client_ids": { - "type": "string" + "type": "string", + "nullable": true }, "external_azure_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_azure_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_azure_email_optional": { + "type": "boolean", + "nullable": true }, "external_azure_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_azure_url": { - "type": "string" + "type": "string", + "nullable": true }, "external_bitbucket_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_bitbucket_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_bitbucket_email_optional": { + "type": "boolean", + "nullable": true }, "external_bitbucket_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_discord_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_discord_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_discord_email_optional": { + "type": "boolean", + "nullable": true }, "external_discord_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_facebook_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_facebook_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_facebook_email_optional": { + "type": "boolean", + "nullable": true }, "external_facebook_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_figma_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_figma_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_figma_email_optional": { + "type": "boolean", + "nullable": true }, "external_figma_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_github_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_github_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_github_email_optional": { + "type": "boolean", + "nullable": true }, "external_github_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_gitlab_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_gitlab_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_gitlab_email_optional": { + "type": "boolean", + "nullable": true }, "external_gitlab_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_gitlab_url": { - "type": "string" + "type": "string", + "nullable": true }, "external_google_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_google_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_google_email_optional": { + "type": "boolean", + "nullable": true }, "external_google_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_google_additional_client_ids": { - "type": "string" + "type": "string", + "nullable": true }, "external_google_skip_nonce_check": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_kakao_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_kakao_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_kakao_email_optional": { + "type": "boolean", + "nullable": true }, "external_kakao_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_keycloak_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_keycloak_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_keycloak_email_optional": { + "type": "boolean", + "nullable": true }, "external_keycloak_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_keycloak_url": { - "type": "string" + "type": "string", + "nullable": true }, "external_linkedin_oidc_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_linkedin_oidc_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_linkedin_oidc_email_optional": { + "type": "boolean", + "nullable": true }, "external_linkedin_oidc_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_slack_oidc_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_slack_oidc_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_slack_oidc_email_optional": { + "type": "boolean", + "nullable": true }, "external_slack_oidc_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_notion_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_notion_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_notion_email_optional": { + "type": "boolean", + "nullable": true }, "external_notion_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_slack_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_slack_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_slack_email_optional": { + "type": "boolean", + "nullable": true }, "external_slack_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_spotify_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_spotify_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_spotify_email_optional": { + "type": "boolean", + "nullable": true }, "external_spotify_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_twitch_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_twitch_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_twitch_email_optional": { + "type": "boolean", + "nullable": true }, "external_twitch_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_twitter_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_twitter_client_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_twitter_email_optional": { + "type": "boolean", + "nullable": true }, "external_twitter_secret": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_x_enabled": { + "type": "boolean", + "nullable": true + }, + "external_x_client_id": { + "type": "string", + "nullable": true + }, + "external_x_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_x_secret": { + "type": "string", + "nullable": true }, "external_workos_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true }, "external_workos_client_id": { - "type": "string" + "type": "string", + "nullable": true }, "external_workos_secret": { - "type": "string" + "type": "string", + "nullable": true }, "external_workos_url": { - "type": "string" + "type": "string", + "nullable": true + }, + "external_web3_solana_enabled": { + "type": "boolean", + "nullable": true + }, + "external_web3_ethereum_enabled": { + "type": "boolean", + "nullable": true }, "external_zoom_enabled": { - "type": "boolean" + "type": "boolean", + "nullable": true + }, + "external_zoom_client_id": { + "type": "string", + "nullable": true + }, + "external_zoom_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_zoom_secret": { + "type": "string", + "nullable": true + }, + "db_max_pool_size": { + "type": "integer", + "nullable": true + }, + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true + }, + "api_max_request_duration": { + "type": "integer", + "nullable": true + }, + "mfa_totp_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_totp_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_verify_enabled": { + "type": "boolean", + "nullable": true }, - "external_zoom_client_id": { - "type": "string" + "mfa_phone_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true }, - "external_zoom_secret": { - "type": "string" + "mfa_phone_otp_length": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true }, - "mfa_totp_enroll_enabled": { - "type": "boolean" + "mfa_phone_template": { + "type": "string", + "nullable": true }, - "mfa_totp_verify_enabled": { - "type": "boolean" + "nimbus_oauth_client_id": { + "type": "string", + "nullable": true }, - "mfa_web_authn_enroll_enabled": { - "type": "boolean" + "nimbus_oauth_client_secret": { + "type": "string", + "nullable": true }, - "mfa_web_authn_verify_enabled": { - "type": "boolean" + "oauth_server_enabled": { + "type": "boolean", + "nullable": true }, - "mfa_phone_enroll_enabled": { - "type": "boolean" + "oauth_server_allow_dynamic_registration": { + "type": "boolean", + "nullable": true }, - "mfa_phone_verify_enabled": { - "type": "boolean" + "oauth_server_authorization_path": { + "type": "string", + "nullable": true + } + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "api_max_request_duration": { + "type": "integer", + "nullable": true + }, + "db_max_pool_size": { + "type": "integer", + "nullable": true + }, + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true + }, + "disable_signup": { + "type": "boolean", + "nullable": true + }, + "external_anonymous_users_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_additional_client_ids": { + "type": "string", + "nullable": true + }, + "external_apple_client_id": { + "type": "string", + "nullable": true + }, + "external_apple_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_apple_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_secret": { + "type": "string", + "nullable": true + }, + "external_azure_client_id": { + "type": "string", + "nullable": true + }, + "external_azure_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_azure_enabled": { + "type": "boolean", + "nullable": true + }, + "external_azure_secret": { + "type": "string", + "nullable": true + }, + "external_azure_url": { + "type": "string", + "nullable": true + }, + "external_bitbucket_client_id": { + "type": "string", + "nullable": true + }, + "external_bitbucket_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_enabled": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_secret": { + "type": "string", + "nullable": true + }, + "external_discord_client_id": { + "type": "string", + "nullable": true + }, + "external_discord_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_discord_enabled": { + "type": "boolean", + "nullable": true + }, + "external_discord_secret": { + "type": "string", + "nullable": true + }, + "external_email_enabled": { + "type": "boolean", + "nullable": true + }, + "external_facebook_client_id": { + "type": "string", + "nullable": true + }, + "external_facebook_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_facebook_enabled": { + "type": "boolean", + "nullable": true + }, + "external_facebook_secret": { + "type": "string", + "nullable": true + }, + "external_figma_client_id": { + "type": "string", + "nullable": true + }, + "external_figma_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_figma_enabled": { + "type": "boolean", + "nullable": true + }, + "external_figma_secret": { + "type": "string", + "nullable": true + }, + "external_github_client_id": { + "type": "string", + "nullable": true + }, + "external_github_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_github_enabled": { + "type": "boolean", + "nullable": true + }, + "external_github_secret": { + "type": "string", + "nullable": true + }, + "external_gitlab_client_id": { + "type": "string", + "nullable": true + }, + "external_gitlab_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_gitlab_enabled": { + "type": "boolean", + "nullable": true + }, + "external_gitlab_secret": { + "type": "string", + "nullable": true + }, + "external_gitlab_url": { + "type": "string", + "nullable": true + }, + "external_google_additional_client_ids": { + "type": "string", + "nullable": true + }, + "external_google_client_id": { + "type": "string", + "nullable": true + }, + "external_google_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_google_enabled": { + "type": "boolean", + "nullable": true + }, + "external_google_secret": { + "type": "string", + "nullable": true + }, + "external_google_skip_nonce_check": { + "type": "boolean", + "nullable": true + }, + "external_kakao_client_id": { + "type": "string", + "nullable": true + }, + "external_kakao_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_kakao_enabled": { + "type": "boolean", + "nullable": true + }, + "external_kakao_secret": { + "type": "string", + "nullable": true + }, + "external_keycloak_client_id": { + "type": "string", + "nullable": true + }, + "external_keycloak_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_enabled": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_secret": { + "type": "string", + "nullable": true + }, + "external_keycloak_url": { + "type": "string", + "nullable": true + }, + "external_linkedin_oidc_client_id": { + "type": "string", + "nullable": true + }, + "external_linkedin_oidc_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_linkedin_oidc_enabled": { + "type": "boolean", + "nullable": true + }, + "external_linkedin_oidc_secret": { + "type": "string", + "nullable": true + }, + "external_slack_oidc_client_id": { + "type": "string", + "nullable": true + }, + "external_slack_oidc_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_slack_oidc_enabled": { + "type": "boolean", + "nullable": true + }, + "external_slack_oidc_secret": { + "type": "string", + "nullable": true + }, + "external_notion_client_id": { + "type": "string", + "nullable": true + }, + "external_notion_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_notion_enabled": { + "type": "boolean", + "nullable": true + }, + "external_notion_secret": { + "type": "string", + "nullable": true + }, + "external_phone_enabled": { + "type": "boolean", + "nullable": true + }, + "external_slack_client_id": { + "type": "string", + "nullable": true + }, + "external_slack_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_slack_enabled": { + "type": "boolean", + "nullable": true + }, + "external_slack_secret": { + "type": "string", + "nullable": true + }, + "external_spotify_client_id": { + "type": "string", + "nullable": true + }, + "external_spotify_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_spotify_enabled": { + "type": "boolean", + "nullable": true + }, + "external_spotify_secret": { + "type": "string", + "nullable": true + }, + "external_twitch_client_id": { + "type": "string", + "nullable": true + }, + "external_twitch_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_twitch_enabled": { + "type": "boolean", + "nullable": true + }, + "external_twitch_secret": { + "type": "string", + "nullable": true + }, + "external_twitter_client_id": { + "type": "string", + "nullable": true + }, + "external_twitter_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_twitter_enabled": { + "type": "boolean", + "nullable": true + }, + "external_twitter_secret": { + "type": "string", + "nullable": true + }, + "external_x_client_id": { + "type": "string", + "nullable": true + }, + "external_x_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_x_enabled": { + "type": "boolean", + "nullable": true + }, + "external_x_secret": { + "type": "string", + "nullable": true + }, + "external_workos_client_id": { + "type": "string", + "nullable": true + }, + "external_workos_enabled": { + "type": "boolean", + "nullable": true + }, + "external_workos_secret": { + "type": "string", + "nullable": true + }, + "external_workos_url": { + "type": "string", + "nullable": true + }, + "external_web3_solana_enabled": { + "type": "boolean", + "nullable": true + }, + "external_web3_ethereum_enabled": { + "type": "boolean", + "nullable": true + }, + "external_zoom_client_id": { + "type": "string", + "nullable": true + }, + "external_zoom_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_zoom_enabled": { + "type": "boolean", + "nullable": true + }, + "external_zoom_secret": { + "type": "string", + "nullable": true + }, + "hook_custom_access_token_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_custom_access_token_uri": { + "type": "string", + "nullable": true + }, + "hook_custom_access_token_secrets": { + "type": "string", + "nullable": true + }, + "hook_mfa_verification_attempt_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_mfa_verification_attempt_uri": { + "type": "string", + "nullable": true + }, + "hook_mfa_verification_attempt_secrets": { + "type": "string", + "nullable": true + }, + "hook_password_verification_attempt_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_password_verification_attempt_uri": { + "type": "string", + "nullable": true + }, + "hook_password_verification_attempt_secrets": { + "type": "string", + "nullable": true + }, + "hook_send_sms_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_send_sms_uri": { + "type": "string", + "nullable": true + }, + "hook_send_sms_secrets": { + "type": "string", + "nullable": true + }, + "hook_send_email_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_send_email_uri": { + "type": "string", + "nullable": true + }, + "hook_send_email_secrets": { + "type": "string", + "nullable": true + }, + "hook_before_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_before_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_before_user_created_secrets": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_after_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_secrets": { + "type": "string", + "nullable": true + }, + "jwt_exp": { + "type": "integer", + "nullable": true + }, + "mailer_allow_unverified_email_sign_ins": { + "type": "boolean", + "nullable": true + }, + "mailer_autoconfirm": { + "type": "boolean", + "nullable": true + }, + "mailer_otp_exp": { + "type": "integer" + }, + "mailer_otp_length": { + "type": "integer", + "nullable": true + }, + "mailer_secure_email_change_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_subjects_confirmation": { + "type": "string", + "nullable": true + }, + "mailer_subjects_email_change": { + "type": "string", + "nullable": true + }, + "mailer_subjects_invite": { + "type": "string", + "nullable": true + }, + "mailer_subjects_magic_link": { + "type": "string", + "nullable": true + }, + "mailer_subjects_reauthentication": { + "type": "string", + "nullable": true + }, + "mailer_subjects_recovery": { + "type": "string", + "nullable": true + }, + "mailer_subjects_password_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_email_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_phone_changed_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_enrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_linked_notification": { + "type": "string", + "nullable": true + }, + "mailer_subjects_identity_unlinked_notification": { + "type": "string", + "nullable": true + }, + "mailer_templates_confirmation_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_change_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_invite_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_magic_link_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_reauthentication_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_recovery_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_email_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_phone_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_unlinked_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_max_enrolled_factors": { + "type": "integer", + "nullable": true + }, + "mfa_totp_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_totp_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_otp_length": { + "type": "integer" + }, + "mfa_phone_template": { + "type": "string", + "nullable": true + }, + "mfa_phone_max_frequency": { + "type": "integer", + "nullable": true + }, + "nimbus_oauth_client_id": { + "type": "string", + "nullable": true + }, + "nimbus_oauth_email_optional": { + "type": "boolean", + "nullable": true + }, + "nimbus_oauth_client_secret": { + "type": "string", + "nullable": true + }, + "password_hibp_enabled": { + "type": "boolean", + "nullable": true + }, + "password_min_length": { + "type": "integer", + "nullable": true + }, + "password_required_characters": { + "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], + "nullable": true + }, + "rate_limit_anonymous_users": { + "type": "integer", + "nullable": true + }, + "rate_limit_email_sent": { + "type": "integer", + "nullable": true + }, + "rate_limit_sms_sent": { + "type": "integer", + "nullable": true + }, + "rate_limit_token_refresh": { + "type": "integer", + "nullable": true + }, + "rate_limit_verify": { + "type": "integer", + "nullable": true + }, + "rate_limit_otp": { + "type": "integer", + "nullable": true + }, + "rate_limit_web3": { + "type": "integer", + "nullable": true + }, + "refresh_token_rotation_enabled": { + "type": "boolean", + "nullable": true + }, + "saml_enabled": { + "type": "boolean", + "nullable": true + }, + "saml_external_url": { + "type": "string", + "nullable": true + }, + "saml_allow_encrypted_assertions": { + "type": "boolean", + "nullable": true + }, + "security_captcha_enabled": { + "type": "boolean", + "nullable": true + }, + "security_captcha_provider": { + "type": "string", + "enum": ["turnstile", "hcaptcha"], + "nullable": true + }, + "security_captcha_secret": { + "type": "string", + "nullable": true + }, + "security_manual_linking_enabled": { + "type": "boolean", + "nullable": true + }, + "security_refresh_token_reuse_interval": { + "type": "integer", + "nullable": true + }, + "security_update_password_require_reauthentication": { + "type": "boolean", + "nullable": true + }, + "sessions_inactivity_timeout": { + "type": "integer", + "nullable": true + }, + "sessions_single_per_user": { + "type": "boolean", + "nullable": true + }, + "sessions_tags": { + "type": "string", + "nullable": true + }, + "sessions_timebox": { + "type": "integer", + "nullable": true + }, + "site_url": { + "type": "string", + "nullable": true + }, + "sms_autoconfirm": { + "type": "boolean", + "nullable": true + }, + "sms_max_frequency": { + "type": "integer", + "nullable": true + }, + "sms_messagebird_access_key": { + "type": "string", + "nullable": true + }, + "sms_messagebird_originator": { + "type": "string", + "nullable": true + }, + "sms_otp_exp": { + "type": "integer", + "nullable": true + }, + "sms_otp_length": { + "type": "integer" + }, + "sms_provider": { + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], + "nullable": true + }, + "sms_template": { + "type": "string", + "nullable": true + }, + "sms_test_otp": { + "type": "string", + "nullable": true + }, + "sms_test_otp_valid_until": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "sms_textlocal_api_key": { + "type": "string", + "nullable": true + }, + "sms_textlocal_sender": { + "type": "string", + "nullable": true + }, + "sms_twilio_account_sid": { + "type": "string", + "nullable": true + }, + "sms_twilio_auth_token": { + "type": "string", + "nullable": true + }, + "sms_twilio_content_sid": { + "type": "string", + "nullable": true + }, + "sms_twilio_message_service_sid": { + "type": "string", + "nullable": true + }, + "sms_twilio_verify_account_sid": { + "type": "string", + "nullable": true + }, + "sms_twilio_verify_auth_token": { + "type": "string", + "nullable": true + }, + "sms_twilio_verify_message_service_sid": { + "type": "string", + "nullable": true + }, + "sms_vonage_api_key": { + "type": "string", + "nullable": true + }, + "sms_vonage_api_secret": { + "type": "string", + "nullable": true + }, + "sms_vonage_from": { + "type": "string", + "nullable": true + }, + "smtp_admin_email": { + "type": "string", + "format": "email", + "nullable": true + }, + "smtp_host": { + "type": "string", + "nullable": true + }, + "smtp_max_frequency": { + "type": "integer", + "nullable": true + }, + "smtp_pass": { + "type": "string", + "nullable": true + }, + "smtp_port": { + "type": "string", + "nullable": true + }, + "smtp_sender_name": { + "type": "string", + "nullable": true + }, + "smtp_user": { + "type": "string", + "nullable": true + }, + "uri_allow_list": { + "type": "string", + "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean" + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean" + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true + } }, - "mfa_phone_template": { - "type": "string" - } + "required": [ + "api_max_request_duration", + "db_max_pool_size", + "db_max_pool_size_unit", + "disable_signup", + "external_anonymous_users_enabled", + "external_apple_additional_client_ids", + "external_apple_client_id", + "external_apple_email_optional", + "external_apple_enabled", + "external_apple_secret", + "external_azure_client_id", + "external_azure_email_optional", + "external_azure_enabled", + "external_azure_secret", + "external_azure_url", + "external_bitbucket_client_id", + "external_bitbucket_email_optional", + "external_bitbucket_enabled", + "external_bitbucket_secret", + "external_discord_client_id", + "external_discord_email_optional", + "external_discord_enabled", + "external_discord_secret", + "external_email_enabled", + "external_facebook_client_id", + "external_facebook_email_optional", + "external_facebook_enabled", + "external_facebook_secret", + "external_figma_client_id", + "external_figma_email_optional", + "external_figma_enabled", + "external_figma_secret", + "external_github_client_id", + "external_github_email_optional", + "external_github_enabled", + "external_github_secret", + "external_gitlab_client_id", + "external_gitlab_email_optional", + "external_gitlab_enabled", + "external_gitlab_secret", + "external_gitlab_url", + "external_google_additional_client_ids", + "external_google_client_id", + "external_google_email_optional", + "external_google_enabled", + "external_google_secret", + "external_google_skip_nonce_check", + "external_kakao_client_id", + "external_kakao_email_optional", + "external_kakao_enabled", + "external_kakao_secret", + "external_keycloak_client_id", + "external_keycloak_email_optional", + "external_keycloak_enabled", + "external_keycloak_secret", + "external_keycloak_url", + "external_linkedin_oidc_client_id", + "external_linkedin_oidc_email_optional", + "external_linkedin_oidc_enabled", + "external_linkedin_oidc_secret", + "external_slack_oidc_client_id", + "external_slack_oidc_email_optional", + "external_slack_oidc_enabled", + "external_slack_oidc_secret", + "external_notion_client_id", + "external_notion_email_optional", + "external_notion_enabled", + "external_notion_secret", + "external_phone_enabled", + "external_slack_client_id", + "external_slack_email_optional", + "external_slack_enabled", + "external_slack_secret", + "external_spotify_client_id", + "external_spotify_email_optional", + "external_spotify_enabled", + "external_spotify_secret", + "external_twitch_client_id", + "external_twitch_email_optional", + "external_twitch_enabled", + "external_twitch_secret", + "external_twitter_client_id", + "external_twitter_email_optional", + "external_twitter_enabled", + "external_twitter_secret", + "external_x_client_id", + "external_x_email_optional", + "external_x_enabled", + "external_x_secret", + "external_workos_client_id", + "external_workos_enabled", + "external_workos_secret", + "external_workos_url", + "external_web3_solana_enabled", + "external_web3_ethereum_enabled", + "external_zoom_client_id", + "external_zoom_email_optional", + "external_zoom_enabled", + "external_zoom_secret", + "hook_custom_access_token_enabled", + "hook_custom_access_token_uri", + "hook_custom_access_token_secrets", + "hook_mfa_verification_attempt_enabled", + "hook_mfa_verification_attempt_uri", + "hook_mfa_verification_attempt_secrets", + "hook_password_verification_attempt_enabled", + "hook_password_verification_attempt_uri", + "hook_password_verification_attempt_secrets", + "hook_send_sms_enabled", + "hook_send_sms_uri", + "hook_send_sms_secrets", + "hook_send_email_enabled", + "hook_send_email_uri", + "hook_send_email_secrets", + "hook_before_user_created_enabled", + "hook_before_user_created_uri", + "hook_before_user_created_secrets", + "hook_after_user_created_enabled", + "hook_after_user_created_uri", + "hook_after_user_created_secrets", + "jwt_exp", + "mailer_allow_unverified_email_sign_ins", + "mailer_autoconfirm", + "mailer_otp_exp", + "mailer_otp_length", + "mailer_secure_email_change_enabled", + "mailer_subjects_confirmation", + "mailer_subjects_email_change", + "mailer_subjects_invite", + "mailer_subjects_magic_link", + "mailer_subjects_reauthentication", + "mailer_subjects_recovery", + "mailer_subjects_password_changed_notification", + "mailer_subjects_email_changed_notification", + "mailer_subjects_phone_changed_notification", + "mailer_subjects_mfa_factor_enrolled_notification", + "mailer_subjects_mfa_factor_unenrolled_notification", + "mailer_subjects_identity_linked_notification", + "mailer_subjects_identity_unlinked_notification", + "mailer_templates_confirmation_content", + "mailer_templates_email_change_content", + "mailer_templates_invite_content", + "mailer_templates_magic_link_content", + "mailer_templates_reauthentication_content", + "mailer_templates_recovery_content", + "mailer_templates_password_changed_notification_content", + "mailer_templates_email_changed_notification_content", + "mailer_templates_phone_changed_notification_content", + "mailer_templates_mfa_factor_enrolled_notification_content", + "mailer_templates_mfa_factor_unenrolled_notification_content", + "mailer_templates_identity_linked_notification_content", + "mailer_templates_identity_unlinked_notification_content", + "mailer_notifications_password_changed_enabled", + "mailer_notifications_email_changed_enabled", + "mailer_notifications_phone_changed_enabled", + "mailer_notifications_mfa_factor_enrolled_enabled", + "mailer_notifications_mfa_factor_unenrolled_enabled", + "mailer_notifications_identity_linked_enabled", + "mailer_notifications_identity_unlinked_enabled", + "mfa_max_enrolled_factors", + "mfa_totp_enroll_enabled", + "mfa_totp_verify_enabled", + "mfa_phone_enroll_enabled", + "mfa_phone_verify_enabled", + "mfa_web_authn_enroll_enabled", + "mfa_web_authn_verify_enabled", + "mfa_phone_otp_length", + "mfa_phone_template", + "mfa_phone_max_frequency", + "nimbus_oauth_client_id", + "nimbus_oauth_email_optional", + "nimbus_oauth_client_secret", + "password_hibp_enabled", + "password_min_length", + "password_required_characters", + "rate_limit_anonymous_users", + "rate_limit_email_sent", + "rate_limit_sms_sent", + "rate_limit_token_refresh", + "rate_limit_verify", + "rate_limit_otp", + "rate_limit_web3", + "refresh_token_rotation_enabled", + "saml_enabled", + "saml_external_url", + "saml_allow_encrypted_assertions", + "security_captcha_enabled", + "security_captcha_provider", + "security_captcha_secret", + "security_manual_linking_enabled", + "security_refresh_token_reuse_interval", + "security_update_password_require_reauthentication", + "sessions_inactivity_timeout", + "sessions_single_per_user", + "sessions_tags", + "sessions_timebox", + "site_url", + "sms_autoconfirm", + "sms_max_frequency", + "sms_messagebird_access_key", + "sms_messagebird_originator", + "sms_otp_exp", + "sms_otp_length", + "sms_provider", + "sms_template", + "sms_test_otp", + "sms_test_otp_valid_until", + "sms_textlocal_api_key", + "sms_textlocal_sender", + "sms_twilio_account_sid", + "sms_twilio_auth_token", + "sms_twilio_content_sid", + "sms_twilio_message_service_sid", + "sms_twilio_verify_account_sid", + "sms_twilio_verify_auth_token", + "sms_twilio_verify_message_service_sid", + "sms_vonage_api_key", + "sms_vonage_api_secret", + "sms_vonage_from", + "smtp_admin_email", + "smtp_host", + "smtp_max_frequency", + "smtp_pass", + "smtp_port", + "smtp_sender_name", + "smtp_user", + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" + ] } } } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update project's auth config" } }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_write", "project_admin_write"] + } + ], + "summary": "Updates a project's auth config", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + } + }, + "/v1/projects/{ref}/config/realtime": { + "get": { + "operationId": "v1-get-realtime-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], "responses": { "200": { - "description": "", + "description": "Gets project's realtime configuration", "content": { "application/json": { "schema": { "type": "object", "properties": { - "api_max_request_duration": { - "type": "integer", - "nullable": true - }, - "db_max_pool_size": { - "type": "integer", - "nullable": true - }, - "jwt_exp": { - "type": "integer", - "nullable": true - }, - "mailer_otp_exp": { - "type": "integer" - }, - "mailer_otp_length": { - "type": "integer", - "nullable": true - }, - "mfa_max_enrolled_factors": { - "type": "integer", - "nullable": true - }, - "mfa_phone_otp_length": { - "type": "integer" - }, - "mfa_phone_max_frequency": { - "type": "integer", - "nullable": true - }, - "password_min_length": { - "type": "integer", - "nullable": true - }, - "rate_limit_anonymous_users": { - "type": "integer", - "nullable": true - }, - "rate_limit_email_sent": { - "type": "integer", - "nullable": true - }, - "rate_limit_sms_sent": { - "type": "integer", - "nullable": true - }, - "rate_limit_token_refresh": { - "type": "integer", - "nullable": true + "private_only": { + "type": "boolean", + "nullable": true, + "description": "Whether to only allow private channels" }, - "rate_limit_verify": { + "connection_pool": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 100, + "nullable": true, + "description": "Sets connection pool size for Realtime Authorization" }, - "rate_limit_otp": { + "max_concurrent_users": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of concurrent users rate limit" }, - "security_refresh_token_reuse_interval": { + "max_events_per_second": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of events per second rate per channel limit" }, - "sessions_inactivity_timeout": { + "max_bytes_per_second": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 10000000, + "nullable": true, + "description": "Sets maximum number of bytes per second rate per channel limit" }, - "sessions_timebox": { + "max_channels_per_client": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of channels per client rate limit" }, - "sms_max_frequency": { + "max_joins_per_second": { "type": "integer", - "nullable": true + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of joins per second rate limit" }, - "sms_otp_exp": { + "max_presence_events_per_second": { "type": "integer", - "nullable": true - }, - "sms_otp_length": { - "type": "integer" + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of presence events per second rate limit" }, - "smtp_max_frequency": { + "max_payload_size_in_kb": { "type": "integer", - "nullable": true - }, - "disable_signup": { - "type": "boolean", - "nullable": true - }, - "external_anonymous_users_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_additional_client_ids": { - "type": "string", - "nullable": true - }, - "external_apple_client_id": { - "type": "string", - "nullable": true - }, - "external_apple_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_secret": { - "type": "string", - "nullable": true - }, - "external_azure_client_id": { - "type": "string", - "nullable": true - }, - "external_azure_enabled": { - "type": "boolean", - "nullable": true - }, - "external_azure_secret": { - "type": "string", - "nullable": true - }, - "external_azure_url": { - "type": "string", - "nullable": true - }, - "external_bitbucket_client_id": { - "type": "string", - "nullable": true + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of payload size in KB rate limit" }, - "external_bitbucket_enabled": { + "suspend": { "type": "boolean", - "nullable": true - }, - "external_bitbucket_secret": { - "type": "string", - "nullable": true - }, - "external_discord_client_id": { + "nullable": true, + "description": "Whether to suspend realtime" + } + }, + "required": [ + "private_only", + "connection_pool", + "max_concurrent_users", + "max_events_per_second", + "max_bytes_per_second", + "max_channels_per_client", + "max_joins_per_second", + "max_presence_events_per_second", + "max_payload_size_in_kb", + "suspend" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "Gets realtime configuration", + "tags": ["Realtime"], + "x-endpoint-owners": ["realtime"] + }, + "patch": { + "operationId": "v1-update-realtime-config", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "private_only": { + "type": "boolean", + "description": "Whether to only allow private channels" + }, + "connection_pool": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Sets connection pool size for Realtime Authorization" + }, + "max_concurrent_users": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of concurrent users rate limit" + }, + "max_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of events per second rate per channel limit" + }, + "max_bytes_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 10000000, + "description": "Sets maximum number of bytes per second rate per channel limit" + }, + "max_channels_per_client": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of channels per client rate limit" + }, + "max_joins_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of joins per second rate limit" + }, + "max_presence_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of presence events per second rate limit" + }, + "max_payload_size_in_kb": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of payload size in KB rate limit" + }, + "suspend": { + "type": "boolean", + "description": "Whether to suspend realtime" + } + }, + "additionalProperties": false + } + } + } + }, + "responses": { + "204": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + } + ], + "summary": "Updates realtime configuration", + "tags": ["Realtime"], + "x-endpoint-owners": ["realtime"] + } + }, + "/v1/projects/{ref}/config/auth/third-party-auth": { + "post": { + "operationId": "v1-create-project-tpa-integration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "oidc_issuer_url": { + "type": "string" + }, + "jwks_url": { + "type": "string" + }, + "custom_jwks": {} + } + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", - "nullable": true + "format": "uuid" }, - "external_discord_enabled": { - "type": "boolean", - "nullable": true + "type": { + "type": "string" }, - "external_discord_secret": { + "oidc_issuer_url": { "type": "string", "nullable": true }, - "external_email_enabled": { - "type": "boolean", - "nullable": true - }, - "external_facebook_client_id": { + "jwks_url": { "type": "string", "nullable": true }, - "external_facebook_enabled": { - "type": "boolean", + "custom_jwks": { "nullable": true }, - "external_facebook_secret": { - "type": "string", + "resolved_jwks": { "nullable": true }, - "external_figma_client_id": { - "type": "string", - "nullable": true + "inserted_at": { + "type": "string" }, - "external_figma_enabled": { - "type": "boolean", - "nullable": true + "updated_at": { + "type": "string" }, - "external_figma_secret": { + "resolved_at": { "type": "string", "nullable": true + } + }, + "required": ["id", "type", "inserted_at", "updated_at"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] + } + ], + "summary": "Creates a new third-party auth integration", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "get": { + "operationId": "v1-list-project-tpa-integrations", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "type": { + "type": "string" + }, + "oidc_issuer_url": { + "type": "string", + "nullable": true + }, + "jwks_url": { + "type": "string", + "nullable": true + }, + "custom_jwks": { + "nullable": true + }, + "resolved_jwks": { + "nullable": true + }, + "inserted_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "resolved_at": { + "type": "string", + "nullable": true + } }, - "external_github_client_id": { + "required": ["id", "type", "inserted_at", "updated_at"] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] + } + ], + "summary": "Lists all third-party auth integrations", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + } + }, + "/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}": { + "delete": { + "operationId": "v1-delete-project-tpa-integration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "tpa_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", - "nullable": true - }, - "external_github_enabled": { - "type": "boolean", - "nullable": true + "format": "uuid" }, - "external_github_secret": { - "type": "string", - "nullable": true + "type": { + "type": "string" }, - "external_gitlab_client_id": { + "oidc_issuer_url": { "type": "string", "nullable": true }, - "external_gitlab_enabled": { - "type": "boolean", - "nullable": true - }, - "external_gitlab_secret": { + "jwks_url": { "type": "string", "nullable": true }, - "external_gitlab_url": { - "type": "string", + "custom_jwks": { "nullable": true }, - "external_google_additional_client_ids": { - "type": "string", + "resolved_jwks": { "nullable": true }, - "external_google_client_id": { - "type": "string", - "nullable": true + "inserted_at": { + "type": "string" }, - "external_google_enabled": { - "type": "boolean", - "nullable": true + "updated_at": { + "type": "string" }, - "external_google_secret": { + "resolved_at": { "type": "string", "nullable": true - }, - "external_google_skip_nonce_check": { - "type": "boolean", - "nullable": true - }, - "external_kakao_client_id": { + } + }, + "required": ["id", "type", "inserted_at", "updated_at"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] + } + ], + "summary": "Removes a third-party auth integration", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "get": { + "operationId": "v1-get-project-tpa-integration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "tpa_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", - "nullable": true + "format": "uuid" }, - "external_kakao_enabled": { - "type": "boolean", - "nullable": true + "type": { + "type": "string" }, - "external_kakao_secret": { + "oidc_issuer_url": { "type": "string", "nullable": true }, - "external_keycloak_client_id": { + "jwks_url": { "type": "string", "nullable": true }, - "external_keycloak_enabled": { - "type": "boolean", - "nullable": true - }, - "external_keycloak_secret": { - "type": "string", + "custom_jwks": { "nullable": true }, - "external_keycloak_url": { - "type": "string", + "resolved_jwks": { "nullable": true }, - "external_linkedin_oidc_client_id": { - "type": "string", - "nullable": true + "inserted_at": { + "type": "string" }, - "external_linkedin_oidc_enabled": { - "type": "boolean", - "nullable": true + "updated_at": { + "type": "string" }, - "external_linkedin_oidc_secret": { + "resolved_at": { "type": "string", "nullable": true + } + }, + "required": ["id", "type", "inserted_at", "updated_at"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] + } + ], + "summary": "Get a third-party integration", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + } + }, + "/v1/projects/{ref}/pause": { + "post": { + "operationId": "v1-pause-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] + } + ], + "summary": "Pauses the given project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra", "management-api"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/restore": { + "get": { + "operationId": "v1-list-available-restore-versions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "available_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "postgres_engine": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + } + }, + "required": ["version", "release_channel", "postgres_engine"] + } + } + }, + "required": ["available_versions"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_read"] + } + ], + "summary": "Lists available restore versions for the given project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:read" + }, + "post": { + "operationId": "v1-restore-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] + } + ], + "summary": "Restores the given project", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/restore/cancel": { + "post": { + "operationId": "v1-cancel-a-project-restoration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] + } + ], + "summary": "Cancels the given project restoration", + "tags": ["Projects"], + "x-badges": [ + { + "name": "OAuth scope: projects:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "projects:write" + } + }, + "/v1/projects/{ref}/billing/addons": { + "get": { + "description": "Returns the billing addons that are currently applied, including the active compute instance size, and lists every addon option that can be provisioned with pricing metadata.", + "operationId": "v1-list-project-addons", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "selected_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "variant": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_phone_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_web_authn_default"] + }, + { + "type": "string", + "enum": ["log_drain_default"] + } + ] + }, + "name": { + "type": "string" + }, + "price": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["fixed", "usage"] + }, + "interval": { + "type": "string", + "enum": ["monthly", "hourly"] + }, + "amount": { + "type": "number" + } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { + "description": "Any JSON-serializable value" + } + }, + "required": ["id", "name", "price"] + } + }, + "required": ["type", "variant"] + } }, - "external_slack_oidc_client_id": { - "type": "string", - "nullable": true + "available_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "name": { + "type": "string" + }, + "variants": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_phone_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_web_authn_default"] + }, + { + "type": "string", + "enum": ["log_drain_default"] + } + ] + }, + "name": { + "type": "string" + }, + "price": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["fixed", "usage"] + }, + "interval": { + "type": "string", + "enum": ["monthly", "hourly"] + }, + "amount": { + "type": "number" + } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { + "description": "Any JSON-serializable value" + } + }, + "required": ["id", "name", "price"] + } + } + }, + "required": ["type", "name", "variants"] + } + } + }, + "required": ["selected_addons", "available_addons"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to list project addons" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_read"] + } + ], + "summary": "List billing addons and compute instance selections", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] + }, + "patch": { + "description": "Selects an addon variant, for example scaling the project’s compute instance up or down, and applies it to the project.", + "operationId": "v1-apply-project-addon", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "addon_variant": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + } + ] + }, + "addon_type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + } + }, + "required": ["addon_variant", "addon_type"] + } + } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to apply project addon" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_write"] + } + ], + "summary": "Apply or update billing addons, including compute instance size", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] + } + }, + "/v1/projects/{ref}/billing/addons/{addon_variant}": { + "delete": { + "description": "Disables the selected addon variant, including rolling the compute instance back to its previous size.", + "operationId": "v1-remove-project-addon", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "addon_variant", + "required": true, + "in": "path", + "schema": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + } + ] + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to remove project addon" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_write"] + } + ], + "summary": "Remove billing addons or revert compute instance sizing", + "tags": ["Billing"], + "x-endpoint-owners": ["billing"] + } + }, + "/v1/projects/{ref}/claim-token": { + "get": { + "operationId": "v1-get-project-claim-token", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "token_alias": { + "type": "string" }, - "external_slack_oidc_enabled": { - "type": "boolean", - "nullable": true + "expires_at": { + "type": "string" }, - "external_slack_oidc_secret": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, - "external_notion_client_id": { + "created_by": { "type": "string", - "nullable": true + "format": "uuid" + } + }, + "required": ["token_alias", "expires_at", "created_at", "created_by"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["project_admin_read"] + } + ], + "summary": "Gets project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, + "post": { + "operationId": "v1-create-project-claim-token", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "token": { + "type": "string" }, - "external_notion_enabled": { - "type": "boolean", - "nullable": true + "token_alias": { + "type": "string" }, - "external_notion_secret": { - "type": "string", - "nullable": true + "expires_at": { + "type": "string" }, - "external_phone_enabled": { - "type": "boolean", - "nullable": true + "created_at": { + "type": "string" }, - "external_slack_client_id": { + "created_by": { "type": "string", - "nullable": true - }, - "external_slack_enabled": { - "type": "boolean", - "nullable": true + "format": "uuid" + } + }, + "required": ["token", "token_alias", "expires_at", "created_at", "created_by"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["organization_admin_write", "project_admin_write"] + } + ], + "summary": "Creates project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, + "delete": { + "operationId": "v1-delete-project-claim-token", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["organization_admin_write", "project_admin_write"] + } + ], + "summary": "Revokes project claim token", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + } + }, + "/v1/projects/{ref}/advisors/performance": { + "get": { + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-performance-advisors", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "lints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "unindexed_foreign_keys", + "auth_users_exposed", + "auth_rls_initplan", + "no_primary_key", + "unused_index", + "multiple_permissive_policies", + "policy_exists_rls_disabled", + "rls_enabled_no_policy", + "duplicate_index", + "security_definer_view", + "function_search_path_mutable", + "rls_disabled_in_public", + "extension_in_public", + "rls_references_user_metadata", + "materialized_view_in_api", + "foreign_table_in_api", + "unsupported_reg_types", + "auth_otp_long_expiry", + "auth_otp_short_length", + "ssl_not_enforced", + "network_restrictions_not_set", + "password_requirements_min_length", + "pitr_not_enabled", + "auth_leaked_password_protection", + "auth_insufficient_mfa_options", + "auth_password_policy_missing", + "leaked_service_key", + "no_backup_admin", + "vulnerable_postgres_version" + ] + }, + "title": { + "type": "string" + }, + "level": { + "type": "string", + "enum": ["ERROR", "WARN", "INFO"] + }, + "facing": { + "type": "string", + "enum": ["EXTERNAL"] + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": ["PERFORMANCE", "SECURITY"] + } + }, + "description": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "metadata": { + "type": "object", + "properties": { + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "table", + "view", + "auth", + "function", + "extension", + "compliance" + ] + }, + "fkey_name": { + "type": "string" + }, + "fkey_columns": { + "type": "array", + "items": { + "type": "number" + } + } + } + }, + "cache_key": { + "type": "string" + } + }, + "required": [ + "name", + "title", + "level", + "facing", + "categories", + "description", + "detail", + "remediation", + "cache_key" + ] + } + } + }, + "required": ["lints"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["advisors_read"] + } + ], + "summary": "Gets project performance advisors.", + "tags": ["Advisors"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/advisors/security": { + "get": { + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-security-advisors", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "lint_type", + "required": false, + "in": "query", + "schema": { + "type": "string", + "enum": ["sql"] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "lints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "unindexed_foreign_keys", + "auth_users_exposed", + "auth_rls_initplan", + "no_primary_key", + "unused_index", + "multiple_permissive_policies", + "policy_exists_rls_disabled", + "rls_enabled_no_policy", + "duplicate_index", + "security_definer_view", + "function_search_path_mutable", + "rls_disabled_in_public", + "extension_in_public", + "rls_references_user_metadata", + "materialized_view_in_api", + "foreign_table_in_api", + "unsupported_reg_types", + "auth_otp_long_expiry", + "auth_otp_short_length", + "ssl_not_enforced", + "network_restrictions_not_set", + "password_requirements_min_length", + "pitr_not_enabled", + "auth_leaked_password_protection", + "auth_insufficient_mfa_options", + "auth_password_policy_missing", + "leaked_service_key", + "no_backup_admin", + "vulnerable_postgres_version" + ] + }, + "title": { + "type": "string" + }, + "level": { + "type": "string", + "enum": ["ERROR", "WARN", "INFO"] + }, + "facing": { + "type": "string", + "enum": ["EXTERNAL"] + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": ["PERFORMANCE", "SECURITY"] + } + }, + "description": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "metadata": { + "type": "object", + "properties": { + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "table", + "view", + "auth", + "function", + "extension", + "compliance" + ] + }, + "fkey_name": { + "type": "string" + }, + "fkey_columns": { + "type": "array", + "items": { + "type": "number" + } + } + } + }, + "cache_key": { + "type": "string" + } + }, + "required": [ + "name", + "title", + "level", + "facing", + "categories", + "description", + "detail", + "remediation", + "cache_key" + ] + } + } + }, + "required": ["lints"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["advisors_read"] + } + ], + "summary": "Gets project security advisors.", + "tags": ["Advisors"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/analytics/endpoints/logs.all": { + "get": { + "description": "Executes a SQL query on the project's logs.\n\nEither the `iso_timestamp_start` and `iso_timestamp_end` parameters must be provided.\nIf both are not provided, only the last 1 minute of logs will be queried.\nThe timestamp range must be no more than 24 hours and is rounded to the nearest minute. If the range is more than 24 hours, a validation error will be thrown.\n\nNote: Unless the `sql` parameter is provided, only edge_logs will be queried. See the [log query docs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer:~:text=logs%20from%20the-,Sources,-drop%2Ddown%3A) for all available sources. \n", + "operationId": "v1-get-project-logs", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "sql", + "required": false, + "in": "query", + "description": "Custom SQL query to execute on the logs. See [querying logs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer) for more details.", + "schema": { + "type": "string" + } + }, + { + "name": "iso_timestamp_start", + "required": false, + "in": "query", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "iso_timestamp_end", + "required": false, + "in": "query", + "schema": { + "format": "date-time", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": {} }, - "external_slack_secret": { - "type": "string", - "nullable": true + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "domain", + "location", + "locationType", + "message", + "reason" + ] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["analytics_logs_read"] + } + ], + "summary": "Gets project's logs", + "tags": ["Analytics"], + "x-badges": [ + { + "name": "OAuth scope: analytics:read", + "position": "after" + } + ], + "x-endpoint-owners": ["analytics"], + "x-oauth-scope": "analytics:read" + } + }, + "/v1/projects/{ref}/analytics/endpoints/usage.api-counts": { + "get": { + "operationId": "v1-get-project-usage-api-count", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "interval", + "required": false, + "in": "query", + "schema": { + "type": "string", + "enum": ["15min", "30min", "1hr", "3hr", "1day", "3day", "7day"] + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time" + }, + "total_auth_requests": { + "type": "number" + }, + "total_realtime_requests": { + "type": "number" + }, + "total_rest_requests": { + "type": "number" + }, + "total_storage_requests": { + "type": "number" + } + }, + "required": [ + "timestamp", + "total_auth_requests", + "total_realtime_requests", + "total_rest_requests", + "total_storage_requests" + ] + } }, - "external_spotify_client_id": { - "type": "string", - "nullable": true + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "domain", + "location", + "locationType", + "message", + "reason" + ] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get project's usage api counts" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] + } + ], + "summary": "Gets project's usage api counts", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] + } + }, + "/v1/projects/{ref}/analytics/endpoints/usage.api-requests-count": { + "get": { + "operationId": "v1-get-project-usage-request-count", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "count": { + "type": "number" + } + }, + "required": ["count"] + } }, - "external_spotify_enabled": { - "type": "boolean", - "nullable": true + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "domain", + "location", + "locationType", + "message", + "reason" + ] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get project's usage api requests count" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] + } + ], + "summary": "Gets project's usage api requests count", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] + } + }, + "/v1/projects/{ref}/analytics/endpoints/functions.combined-stats": { + "get": { + "operationId": "v1-get-project-function-combined-stats", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "interval", + "required": true, + "in": "query", + "schema": { + "type": "string", + "enum": ["15min", "1hr", "3hr", "1day"] + } + }, + { + "name": "function_id", + "required": true, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": {} }, - "external_spotify_secret": { + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "domain", + "location", + "locationType", + "message", + "reason" + ] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get project's function combined statistics" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] + } + ], + "summary": "Gets a project's function combined statistics", + "tags": ["Analytics"], + "x-endpoint-owners": ["analytics"] + } + }, + "/v1/projects/{ref}/cli/login-role": { + "post": { + "operationId": "v1-create-login-role", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "read_only": { + "type": "boolean" + } + }, + "required": ["read_only"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "role": { "type": "string", - "nullable": true + "minLength": 1 }, - "external_twitch_client_id": { + "password": { "type": "string", - "nullable": true + "minLength": 1 }, - "external_twitch_enabled": { - "type": "boolean", - "nullable": true - }, - "external_twitch_secret": { + "ttl_seconds": { + "type": "integer", + "minimum": 1, + "format": "int64" + } + }, + "required": ["role", "password", "ttl_seconds"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to create login role" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_write"] + } + ], + "summary": "[Beta] Create a login role for CLI with temporary password", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:write" + }, + "delete": { + "operationId": "v1-delete-login-roles", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { "type": "string", - "nullable": true + "enum": ["ok"] + } + }, + "required": ["message"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to delete login roles" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_write"] + } + ], + "summary": "[Beta] Delete existing login roles used by CLI", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["dev-workflows"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/migrations": { + "get": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-list-migration-history", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string" + } }, - "external_twitter_client_id": { + "required": ["version"] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to list database migrations" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_read"] + } + ], + "summary": "[Beta] List applied migration versions", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" + }, + "post": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-apply-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "Idempotency-Key", + "required": false, + "in": "header", + "description": "A unique key to ensure the same migration is tracked only once.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string" + }, + "rollback": { + "type": "string" + } + }, + "required": ["query"] + } + } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to apply database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] + } + ], + "summary": "[Beta] Apply a database migration", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + }, + "put": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-upsert-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "Idempotency-Key", + "required": false, + "in": "header", + "description": "A unique key to ensure the same migration is tracked only once.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string" + }, + "rollback": { + "type": "string" + } + }, + "required": ["query"] + } + } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to upsert database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] + } + ], + "summary": "[Beta] Upsert a database migration without applying", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + }, + "delete": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-rollback-migrations", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "gte", + "required": true, + "in": "query", + "description": "Rollback migrations greater or equal to this version", + "schema": { + "pattern": "^\\d+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to rollback database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] + } + ], + "summary": "[Beta] Rollback database migrations and remove them from history table", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/migrations/{version}": { + "get": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-get-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "version", + "required": true, + "in": "path", + "schema": { + "pattern": "^\\d+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "version": { "type": "string", - "nullable": true - }, - "external_twitter_enabled": { - "type": "boolean", - "nullable": true + "minLength": 1 }, - "external_twitter_secret": { - "type": "string", - "nullable": true + "name": { + "type": "string" }, - "external_workos_client_id": { - "type": "string", - "nullable": true + "statements": { + "type": "array", + "items": { + "type": "string" + } }, - "external_workos_enabled": { - "type": "boolean", - "nullable": true + "rollback": { + "type": "array", + "items": { + "type": "string" + } }, - "external_workos_secret": { - "type": "string", - "nullable": true + "created_by": { + "type": "string" }, - "external_workos_url": { + "idempotency_key": { + "type": "string" + } + }, + "required": ["version"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_read"] + } + ], + "summary": "[Beta] Fetch an existing entry from migration history", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" + }, + "patch": { + "description": "Only available to selected partner OAuth apps", + "operationId": "v1-patch-a-migration", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "version", + "required": true, + "in": "path", + "schema": { + "pattern": "^\\d+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rollback": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to patch database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] + } + ], + "summary": "[Beta] Patch an existing entry in migration history", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/query": { + "post": { + "operationId": "v1-run-a-query", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 + }, + "parameters": { + "type": "array", + "items": {} + }, + "read_only": { + "type": "boolean" + } + }, + "required": ["query"] + } + } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to run sql query" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_write"] + } + ], + "summary": "[Beta] Run sql query", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/query/read-only": { + "post": { + "description": "All entity references must be schema qualified.", + "operationId": "v1-read-only-query", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 + }, + "parameters": { + "type": "array", + "items": {} + } + }, + "required": ["query"] + } + } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to run read-only sql query" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_read"] + } + ], + "summary": "[Beta] Run a sql query as supabase_read_only_user", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/database/webhooks/enable": { + "post": { + "operationId": "v1-enable-database-webhook", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to enable Database Webhooks on the project" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_webhooks_config_write"] + } + ], + "summary": "[Beta] Enables Database Webhooks on the project", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/context": { + "get": { + "deprecated": true, + "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", + "operationId": "v1-get-database-metadata", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "schemas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "additionalProperties": true + } + } + }, + "required": ["name", "schemas"], + "additionalProperties": true + } + } + }, + "required": ["databases"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_read"] + } + ], + "summary": "Gets database metadata for the given project.", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: projects:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "projects:read" + } + }, + "/v1/projects/{ref}/database/password": { + "patch": { + "operationId": "v1-update-database-password", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string", + "minLength": 4 + } + }, + "required": ["password"] + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update database password" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_write"] + } + ], + "summary": "Updates the database password", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api", "infra"], + "x-oauth-scope": "database:write" + } + }, + "/v1/projects/{ref}/database/jit": { + "get": { + "description": "Mappings of roles a user can assume in the project database", + "operationId": "v1-get-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user_id": { "type": "string", - "nullable": true + "format": "uuid" }, - "external_zoom_client_id": { + "user_roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "user_roles"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to list database jit access" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] + } + ], + "summary": "Get user-id to role mappings for JIT access", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["security"], + "x-oauth-scope": "database:read" + }, + "post": { + "description": "Authorizes the request to assume a role in the project database", + "operationId": "v1-authorize-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "rhost": { + "type": "string", + "minLength": 1 + } + }, + "required": ["role", "rhost"] + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user_id": { "type": "string", - "nullable": true - }, - "external_zoom_enabled": { - "type": "boolean", - "nullable": true + "format": "uuid" }, - "external_zoom_secret": { + "user_role": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + }, + "required": ["user_id", "user_role"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to authorize database jit access" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] + } + ], + "summary": "Authorize user-id to role mappings for JIT access", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["security"], + "x-oauth-scope": "database:read" + }, + "put": { + "description": "Modifies the roles that can be assumed and for how long", + "operationId": "v1-update-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user_id": { + "type": "string", + "format": "uuid", + "minLength": 1 + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "roles"] + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user_id": { "type": "string", - "nullable": true - }, - "hook_custom_access_token_enabled": { - "type": "boolean", - "nullable": true + "format": "uuid" }, - "hook_custom_access_token_uri": { - "type": "string", - "nullable": true + "user_roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "user_roles"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to upsert database migration" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_jit_write"] + } + ], + "summary": "Updates a user mapping for JIT access", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/database/jit/list": { + "get": { + "description": "Mappings of roles a user can assume in the project database", + "operationId": "v1-list-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "user_id": { + "type": "string", + "format": "uuid" + }, + "user_roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "user_roles"] + } + } + }, + "required": ["items"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to list database jit access" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] + } + ], + "summary": "List all user-id to role mappings for JIT access", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/database/jit/{user_id}": { + "delete": { + "description": "Remove JIT mappings of a user, revoking all JIT database access", + "operationId": "v1-delete-jit-access", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "user_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to remove JIT access" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["database_jit_write"] + } + ], + "summary": "Delete JIT access by user-id", + "tags": ["Database"], + "x-endpoint-owners": ["security"] + } + }, + "/v1/projects/{ref}/functions": { + "get": { + "description": "Returns all functions you've previously added to the specified project.", + "operationId": "v1-list-all-functions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" + }, + "verify_jwt": { + "type": "boolean" + }, + "import_map": { + "type": "boolean" + }, + "entrypoint_path": { + "type": "string" + }, + "import_map_path": { + "type": "string" + }, + "ezbr_sha256": { + "type": "string" + } }, - "hook_custom_access_token_secrets": { - "type": "string", - "nullable": true + "required": [ + "id", + "slug", + "name", + "status", + "version", + "created_at", + "updated_at" + ] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve project's functions" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] + } + ], + "summary": "List all functions", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:read", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" + }, + "post": { + "deprecated": true, + "description": "This endpoint is deprecated - use the deploy endpoint. Creates a function and adds it to the specified project.", + "operationId": "v1-create-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "slug", + "required": false, + "in": "query", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + }, + { + "name": "name", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "verify_jwt", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "import_map", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "entrypoint_path", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "import_map_path", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ezbr_sha256", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.denoland.eszip": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/json": { + "schema": { + "type": "object", + "properties": { + "slug": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + }, + "verify_jwt": { + "type": "boolean" + } + }, + "required": ["slug", "name", "body"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "hook_mfa_verification_attempt_enabled": { - "type": "boolean", - "nullable": true + "slug": { + "type": "string" }, - "hook_mfa_verification_attempt_uri": { - "type": "string", - "nullable": true + "name": { + "type": "string" }, - "hook_mfa_verification_attempt_secrets": { + "status": { "type": "string", - "nullable": true + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, - "hook_password_verification_attempt_enabled": { - "type": "boolean", - "nullable": true + "version": { + "type": "integer" }, - "hook_password_verification_attempt_uri": { - "type": "string", - "nullable": true + "created_at": { + "type": "integer", + "format": "int64" }, - "hook_password_verification_attempt_secrets": { - "type": "string", - "nullable": true + "updated_at": { + "type": "integer", + "format": "int64" }, - "hook_send_sms_enabled": { - "type": "boolean", - "nullable": true + "verify_jwt": { + "type": "boolean" }, - "hook_send_sms_uri": { - "type": "string", - "nullable": true + "import_map": { + "type": "boolean" }, - "hook_send_sms_secrets": { - "type": "string", - "nullable": true + "entrypoint_path": { + "type": "string" }, - "hook_send_email_enabled": { - "type": "boolean", - "nullable": true + "import_map_path": { + "type": "string" }, - "hook_send_email_uri": { - "type": "string", - "nullable": true + "ezbr_sha256": { + "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "status", + "version", + "created_at", + "updated_at" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "402": { + "description": "Maximum number of functions reached for Plan" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to create project's function" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] + } + ], + "summary": "Create a function", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + }, + "put": { + "description": "Bulk update functions. It will create a new function or replace existing. The operation is idempotent. NOTE: You will need to manually bump the version.", + "operationId": "v1-bulk-update-functions", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "hook_send_email_secrets": { + "slug": { "type": "string", - "nullable": true - }, - "mailer_allow_unverified_email_sign_ins": { - "type": "boolean", - "nullable": true - }, - "mailer_autoconfirm": { - "type": "boolean", - "nullable": true + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" }, - "mailer_secure_email_change_enabled": { - "type": "boolean", - "nullable": true + "name": { + "type": "string" }, - "mailer_subjects_confirmation": { + "status": { "type": "string", - "nullable": true + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, - "mailer_subjects_email_change": { - "type": "string", - "nullable": true + "version": { + "type": "integer" }, - "mailer_subjects_invite": { - "type": "string", - "nullable": true + "created_at": { + "type": "integer", + "format": "int64" }, - "mailer_subjects_magic_link": { - "type": "string", - "nullable": true + "verify_jwt": { + "type": "boolean" }, - "mailer_subjects_reauthentication": { - "type": "string", - "nullable": true + "import_map": { + "type": "boolean" }, - "mailer_subjects_recovery": { - "type": "string", - "nullable": true + "entrypoint_path": { + "type": "string" }, - "mailer_templates_confirmation_content": { - "type": "string", - "nullable": true + "import_map_path": { + "type": "string" }, - "mailer_templates_email_change_content": { + "ezbr_sha256": { + "type": "string" + } + }, + "required": ["id", "slug", "name", "status", "version"] + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "functions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" + }, + "verify_jwt": { + "type": "boolean" + }, + "import_map": { + "type": "boolean" + }, + "entrypoint_path": { + "type": "string" + }, + "import_map_path": { + "type": "string" + }, + "ezbr_sha256": { + "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "status", + "version", + "created_at", + "updated_at" + ] + } + } + }, + "required": ["functions"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "402": { + "description": "Maximum number of functions reached for Plan" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update functions" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] + } + ], + "summary": "Bulk update functions", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/deploy": { + "post": { + "description": "A new endpoint to deploy functions. It will create if function does not exist.", + "operationId": "v1-deploy-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "slug", + "required": false, + "in": "query", + "schema": { + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "type": "string" + } + }, + { + "name": "bundleOnly", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "array", + "items": { "type": "string", - "nullable": true + "format": "binary" + } + }, + "metadata": { + "type": "object", + "properties": { + "entrypoint_path": { + "type": "string" + }, + "import_map_path": { + "type": "string" + }, + "static_patterns": { + "type": "array", + "items": { + "type": "string" + } + }, + "verify_jwt": { + "type": "boolean" + }, + "name": { + "type": "string" + } }, - "mailer_templates_invite_content": { - "type": "string", - "nullable": true + "required": ["entrypoint_path"] + } + }, + "required": ["metadata"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "mailer_templates_magic_link_content": { - "type": "string", - "nullable": true + "slug": { + "type": "string" }, - "mailer_templates_reauthentication_content": { - "type": "string", - "nullable": true + "name": { + "type": "string" }, - "mailer_templates_recovery_content": { + "status": { "type": "string", - "nullable": true - }, - "mfa_totp_enroll_enabled": { - "type": "boolean", - "nullable": true + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, - "mfa_totp_verify_enabled": { - "type": "boolean", - "nullable": true + "version": { + "type": "integer" }, - "mfa_phone_enroll_enabled": { - "type": "boolean", - "nullable": true + "created_at": { + "type": "integer", + "format": "int64" }, - "mfa_phone_verify_enabled": { - "type": "boolean", - "nullable": true + "updated_at": { + "type": "integer", + "format": "int64" }, - "mfa_web_authn_enroll_enabled": { - "type": "boolean", - "nullable": true + "verify_jwt": { + "type": "boolean" }, - "mfa_web_authn_verify_enabled": { - "type": "boolean", - "nullable": true + "import_map": { + "type": "boolean" }, - "mfa_phone_template": { - "type": "string", - "nullable": true + "entrypoint_path": { + "type": "string" }, - "password_hibp_enabled": { - "type": "boolean", - "nullable": true + "import_map_path": { + "type": "string" }, - "password_required_characters": { - "type": "string", - "nullable": true + "ezbr_sha256": { + "type": "string" + } + }, + "required": ["id", "slug", "name", "status", "version"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "402": { + "description": "Maximum number of functions reached for Plan" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to deploy function" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] + } + ], + "summary": "Deploy a function", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/{function_slug}": { + "get": { + "description": "Retrieves a function with the specified slug and project.", + "operationId": "v1-get-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "refresh_token_rotation_enabled": { - "type": "boolean", - "nullable": true + "slug": { + "type": "string" }, - "saml_enabled": { - "type": "boolean", - "nullable": true + "name": { + "type": "string" }, - "saml_external_url": { + "status": { "type": "string", - "nullable": true + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, - "saml_allow_encrypted_assertions": { - "type": "boolean", - "nullable": true + "version": { + "type": "integer" }, - "security_captcha_enabled": { - "type": "boolean", - "nullable": true + "created_at": { + "type": "integer", + "format": "int64" }, - "security_captcha_provider": { - "type": "string", - "nullable": true + "updated_at": { + "type": "integer", + "format": "int64" }, - "security_captcha_secret": { - "type": "string", - "nullable": true + "verify_jwt": { + "type": "boolean" }, - "security_manual_linking_enabled": { - "type": "boolean", - "nullable": true + "import_map": { + "type": "boolean" }, - "security_update_password_require_reauthentication": { - "type": "boolean", - "nullable": true + "entrypoint_path": { + "type": "string" }, - "sessions_single_per_user": { - "type": "boolean", - "nullable": true + "import_map_path": { + "type": "string" }, - "sessions_tags": { - "type": "string", - "nullable": true + "ezbr_sha256": { + "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "status", + "version", + "created_at", + "updated_at" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve function with given slug" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] + } + ], + "summary": "Retrieve a function", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:read", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" + }, + "patch": { + "description": "Updates a function with the specified slug and project.", + "operationId": "v1-update-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + }, + { + "name": "slug", + "required": false, + "in": "query", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + }, + { + "name": "name", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "verify_jwt", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "import_map", + "required": false, + "in": "query", + "description": "Boolean string, true or false", + "schema": { + "type": "boolean" + } + }, + { + "name": "entrypoint_path", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "import_map_path", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ezbr_sha256", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.denoland.eszip": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "body": { + "type": "string" + }, + "verify_jwt": { + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "site_url": { - "type": "string", - "nullable": true + "slug": { + "type": "string" }, - "sms_autoconfirm": { - "type": "boolean", - "nullable": true + "name": { + "type": "string" }, - "sms_messagebird_access_key": { + "status": { "type": "string", - "nullable": true + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] }, - "sms_messagebird_originator": { - "type": "string", - "nullable": true + "version": { + "type": "integer" }, - "sms_provider": { - "type": "string", - "nullable": true + "created_at": { + "type": "integer", + "format": "int64" }, - "sms_template": { - "type": "string", - "nullable": true + "updated_at": { + "type": "integer", + "format": "int64" }, - "sms_test_otp": { - "type": "string", - "nullable": true + "verify_jwt": { + "type": "boolean" }, - "sms_test_otp_valid_until": { - "type": "string", - "nullable": true + "import_map": { + "type": "boolean" }, - "sms_textlocal_api_key": { - "type": "string", - "nullable": true + "entrypoint_path": { + "type": "string" }, - "sms_textlocal_sender": { - "type": "string", - "nullable": true + "import_map_path": { + "type": "string" }, - "sms_twilio_account_sid": { - "type": "string", - "nullable": true + "ezbr_sha256": { + "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "status", + "version", + "created_at", + "updated_at" + ] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to update function with given slug" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] + } + ], + "summary": "Update a function", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + }, + "delete": { + "description": "Deletes a function with the specified slug from the specified project.", + "operationId": "v1-delete-a-function", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to delete function with given slug" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] + } + ], + "summary": "Delete a function", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:write", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:write" + } + }, + "/v1/projects/{ref}/functions/{function_slug}/body": { + "get": { + "description": "Retrieves a function body for the specified slug and project.", + "operationId": "v1-get-a-function-body", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "function_slug", + "required": true, + "in": "path", + "description": "Function slug", + "schema": { + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {} + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to retrieve function body with given slug" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] + } + ], + "summary": "Retrieve a function body", + "tags": ["Edge Functions"], + "x-badges": [ + { + "name": "OAuth scope: edge_functions:read", + "position": "after" + } + ], + "x-endpoint-owners": ["functions"], + "x-oauth-scope": "edge_functions:read" + } + }, + "/v1/projects/{ref}/storage/buckets": { + "get": { + "operationId": "v1-list-all-buckets", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "public": { + "type": "boolean" + } + }, + "required": ["id", "name", "owner", "created_at", "updated_at", "public"] + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get list of buckets" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["storage_read"] + } + ], + "summary": "Lists all buckets", + "tags": ["Storage"], + "x-badges": [ + { + "name": "OAuth scope: storage:read", + "position": "after" + } + ], + "x-endpoint-owners": ["storage"], + "x-oauth-scope": "storage:read" + } + }, + "/v1/projects/{ref}/config/auth/sso/providers": { + "post": { + "operationId": "v1-create-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["saml"], + "description": "What type of provider will be created" + }, + "metadata_xml": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "string" + } + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } }, - "sms_twilio_auth_token": { - "type": "string", - "nullable": true + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["type"] + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "sms_twilio_content_sid": { - "type": "string", - "nullable": true + "saml": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "metadata_xml": { + "type": "string" + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] }, - "sms_twilio_message_service_sid": { - "type": "string", - "nullable": true + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } }, - "sms_twilio_verify_account_sid": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, - "sms_twilio_verify_auth_token": { - "type": "string", - "nullable": true + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "404": { + "description": "SAML 2.0 support is not enabled for this project" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] + } + ], + "summary": "Creates a new SSO provider", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "get": { + "operationId": "v1-list-all-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "saml": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "metadata_xml": { + "type": "string" + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + } + }, + "required": ["items"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "404": { + "description": "SAML 2.0 support is not enabled for this project" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] + } + ], + "summary": "Lists all SSO providers", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + } + }, + "/v1/projects/{ref}/config/auth/sso/providers/{provider_id}": { + "get": { + "operationId": "v1-get-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "sms_twilio_verify_message_service_sid": { - "type": "string", - "nullable": true + "saml": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "metadata_xml": { + "type": "string" + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] }, - "sms_vonage_api_key": { - "type": "string", - "nullable": true + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } }, - "sms_vonage_api_secret": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, - "sms_vonage_from": { - "type": "string", - "nullable": true + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] + } + ], + "summary": "Gets a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:read", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:read" + }, + "put": { + "operationId": "v1-update-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "metadata_xml": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "string" + } + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } }, - "smtp_admin_email": { - "type": "string", - "nullable": true + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "smtp_host": { - "type": "string", - "nullable": true + "saml": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "metadata_xml": { + "type": "string" + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] }, - "smtp_pass": { - "type": "string", - "nullable": true + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } }, - "smtp_port": { - "type": "string", - "nullable": true + "created_at": { + "type": "string" }, - "smtp_sender_name": { - "type": "string", - "nullable": true + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] + } + ], + "summary": "Updates a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" + }, + "delete": { + "operationId": "v1-delete-a-sso-provider", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "type": "string" + } + }, + { + "name": "provider_id", + "required": true, + "in": "path", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "smtp_user": { - "type": "string", - "nullable": true + "saml": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "metadata_url": { + "type": "string" + }, + "metadata_xml": { + "type": "string" + }, + "attribute_mapping": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "oneOf": [ + { + "type": "object", + "properties": {} + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "array": { + "type": "boolean" + } + } + } + } + }, + "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] + } + }, + "required": ["id", "entity_id"] }, - "uri_allow_list": { - "type": "string", - "nullable": true - } - }, - "required": [ - "api_max_request_duration", - "db_max_pool_size", - "jwt_exp", - "mailer_otp_exp", - "mailer_otp_length", - "mfa_max_enrolled_factors", - "mfa_phone_otp_length", - "mfa_phone_max_frequency", - "password_min_length", - "rate_limit_anonymous_users", - "rate_limit_email_sent", - "rate_limit_sms_sent", - "rate_limit_token_refresh", - "rate_limit_verify", - "rate_limit_otp", - "security_refresh_token_reuse_interval", - "sessions_inactivity_timeout", - "sessions_timebox", - "sms_max_frequency", - "sms_otp_exp", - "sms_otp_length", - "smtp_max_frequency", - "disable_signup", - "external_anonymous_users_enabled", - "external_apple_additional_client_ids", - "external_apple_client_id", - "external_apple_enabled", - "external_apple_secret", - "external_azure_client_id", - "external_azure_enabled", - "external_azure_secret", - "external_azure_url", - "external_bitbucket_client_id", - "external_bitbucket_enabled", - "external_bitbucket_secret", - "external_discord_client_id", - "external_discord_enabled", - "external_discord_secret", - "external_email_enabled", - "external_facebook_client_id", - "external_facebook_enabled", - "external_facebook_secret", - "external_figma_client_id", - "external_figma_enabled", - "external_figma_secret", - "external_github_client_id", - "external_github_enabled", - "external_github_secret", - "external_gitlab_client_id", - "external_gitlab_enabled", - "external_gitlab_secret", - "external_gitlab_url", - "external_google_additional_client_ids", - "external_google_client_id", - "external_google_enabled", - "external_google_secret", - "external_google_skip_nonce_check", - "external_kakao_client_id", - "external_kakao_enabled", - "external_kakao_secret", - "external_keycloak_client_id", - "external_keycloak_enabled", - "external_keycloak_secret", - "external_keycloak_url", - "external_linkedin_oidc_client_id", - "external_linkedin_oidc_enabled", - "external_linkedin_oidc_secret", - "external_slack_oidc_client_id", - "external_slack_oidc_enabled", - "external_slack_oidc_secret", - "external_notion_client_id", - "external_notion_enabled", - "external_notion_secret", - "external_phone_enabled", - "external_slack_client_id", - "external_slack_enabled", - "external_slack_secret", - "external_spotify_client_id", - "external_spotify_enabled", - "external_spotify_secret", - "external_twitch_client_id", - "external_twitch_enabled", - "external_twitch_secret", - "external_twitter_client_id", - "external_twitter_enabled", - "external_twitter_secret", - "external_workos_client_id", - "external_workos_enabled", - "external_workos_secret", - "external_workos_url", - "external_zoom_client_id", - "external_zoom_enabled", - "external_zoom_secret", - "hook_custom_access_token_enabled", - "hook_custom_access_token_uri", - "hook_custom_access_token_secrets", - "hook_mfa_verification_attempt_enabled", - "hook_mfa_verification_attempt_uri", - "hook_mfa_verification_attempt_secrets", - "hook_password_verification_attempt_enabled", - "hook_password_verification_attempt_uri", - "hook_password_verification_attempt_secrets", - "hook_send_sms_enabled", - "hook_send_sms_uri", - "hook_send_sms_secrets", - "hook_send_email_enabled", - "hook_send_email_uri", - "hook_send_email_secrets", - "mailer_allow_unverified_email_sign_ins", - "mailer_autoconfirm", - "mailer_secure_email_change_enabled", - "mailer_subjects_confirmation", - "mailer_subjects_email_change", - "mailer_subjects_invite", - "mailer_subjects_magic_link", - "mailer_subjects_reauthentication", - "mailer_subjects_recovery", - "mailer_templates_confirmation_content", - "mailer_templates_email_change_content", - "mailer_templates_invite_content", - "mailer_templates_magic_link_content", - "mailer_templates_reauthentication_content", - "mailer_templates_recovery_content", - "mfa_totp_enroll_enabled", - "mfa_totp_verify_enabled", - "mfa_phone_enroll_enabled", - "mfa_phone_verify_enabled", - "mfa_web_authn_enroll_enabled", - "mfa_web_authn_verify_enabled", - "mfa_phone_template", - "password_hibp_enabled", - "password_required_characters", - "refresh_token_rotation_enabled", - "saml_enabled", - "saml_external_url", - "saml_allow_encrypted_assertions", - "security_captcha_enabled", - "security_captcha_provider", - "security_captcha_secret", - "security_manual_linking_enabled", - "security_update_password_require_reauthentication", - "sessions_single_per_user", - "sessions_tags", - "site_url", - "sms_autoconfirm", - "sms_messagebird_access_key", - "sms_messagebird_originator", - "sms_provider", - "sms_template", - "sms_test_otp", - "sms_test_otp_valid_until", - "sms_textlocal_api_key", - "sms_textlocal_sender", - "sms_twilio_account_sid", - "sms_twilio_auth_token", - "sms_twilio_content_sid", - "sms_twilio_message_service_sid", - "sms_twilio_verify_account_sid", - "sms_twilio_verify_auth_token", - "sms_twilio_verify_message_service_sid", - "sms_vonage_api_key", - "sms_vonage_api_secret", - "sms_vonage_from", - "smtp_admin_email", - "smtp_host", - "smtp_pass", - "smtp_port", - "smtp_sender_name", - "smtp_user", - "uri_allow_list" - ] + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] + } + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": ["id"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" }, - "500": { - "description": "Failed to update project's auth config" + "404": { + "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Auth"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } - ] + ], + "summary": "Removes a SSO provider by its UUID", + "tags": ["Auth"], + "x-badges": [ + { + "name": "OAuth scope: auth:write", + "position": "after" + } + ], + "x-endpoint-owners": ["auth"], + "x-oauth-scope": "auth:write" } }, - "/v1/projects/{ref}/config/auth/third-party-auth": { - "post": { - "operationId": "createTPAForProject", - "summary": "Creates a new third-party auth integration", + "/v1/projects/{ref}/database/backups": { + "get": { + "operationId": "v1-list-all-backups", "parameters": [ { "name": "ref", @@ -7842,91 +19624,113 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "oidc_issuer_url": { - "type": "string" - }, - "jwks_url": { - "type": "string" - }, - "custom_jwks": { - "type": "object" - } - } - } - } - } - }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "type": { + "region": { "type": "string" }, - "oidc_issuer_url": { - "type": "string", - "nullable": true + "walg_enabled": { + "type": "boolean" }, - "jwks_url": { - "type": "string", - "nullable": true + "pitr_enabled": { + "type": "boolean" }, - "custom_jwks": { - "type": "object", - "nullable": true + "backups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "is_physical_backup": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "COMPLETED", + "FAILED", + "PENDING", + "REMOVED", + "ARCHIVED", + "CANCELLED" + ] + }, + "inserted_at": { + "type": "string" + } + }, + "required": ["is_physical_backup", "status", "inserted_at"] + } }, - "resolved_jwks": { + "physical_backup_data": { "type": "object", - "nullable": true - }, - "inserted_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "resolved_at": { - "type": "string", - "nullable": true + "properties": { + "earliest_physical_backup_date_unix": { + "type": "integer" + }, + "latest_physical_backup_date_unix": { + "type": "integer" + } + } } }, - "required": ["id", "type", "inserted_at", "updated_at"] + "required": [ + "region", + "walg_enabled", + "pitr_enabled", + "backups", + "physical_backup_data" + ] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get backups" } }, - "tags": ["Auth"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_read"] } - ] - }, - "get": { - "operationId": "listTPAForProject", - "summary": "[Alpha] Lists all third-party auth integrations", + ], + "summary": "Lists all backups", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:read" + } + }, + "/v1/projects/{ref}/database/backups/restore-pitr": { + "post": { + "operationId": "v1-restore-pitr-backup", "parameters": [ { "name": "ref", @@ -7936,75 +19740,66 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "oidc_issuer_url": { - "type": "string", - "nullable": true - }, - "jwks_url": { - "type": "string", - "nullable": true - }, - "custom_jwks": { - "type": "object", - "nullable": true - }, - "resolved_jwks": { - "type": "object", - "nullable": true - }, - "inserted_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "resolved_at": { - "type": "string", - "nullable": true - } - }, - "required": ["id", "type", "inserted_at", "updated_at"] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "recovery_time_target_unix": { + "type": "integer", + "minimum": 0, + "format": "int64" } - } + }, + "required": ["recovery_time_target_unix"] } } + } + }, + "responses": { + "201": { + "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Auth"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } - ] + ], + "summary": "Restores a PITR backup for a database", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-oauth-scope": "database:write" } }, - "/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}": { - "delete": { - "operationId": "deleteTPAForProject", - "summary": "[Alpha] Removes a third-party auth integration", + "/v1/projects/{ref}/database/backups/restore-point": { + "post": { + "operationId": "v1-create-restore-point", "parameters": [ { "name": "ref", @@ -8014,78 +19809,81 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } - }, - { - "name": "tpa_id", - "required": true, - "in": "path", - "schema": { - "type": "string" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 20 + } + }, + "required": ["name"] + } } } - ], + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "oidc_issuer_url": { - "type": "string", - "nullable": true - }, - "jwks_url": { - "type": "string", - "nullable": true - }, - "custom_jwks": { - "type": "object", - "nullable": true - }, - "resolved_jwks": { - "type": "object", - "nullable": true - }, - "inserted_at": { - "type": "string" - }, - "updated_at": { + "name": { "type": "string" }, - "resolved_at": { + "status": { "type": "string", - "nullable": true + "enum": ["AVAILABLE", "PENDING", "REMOVED", "FAILED"] } }, - "required": ["id", "type", "inserted_at", "updated_at"] + "required": ["name", "status"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Auth"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } - ] + ], + "summary": "Initiates a creation of a restore point for a database", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:write" }, "get": { - "operationId": "getTPAForProject", - "summary": "[Alpha] Get a third-party integration", + "operationId": "v1-get-restore-point", "parameters": [ { "name": "ref", @@ -8095,14 +19893,16 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } }, { - "name": "tpa_id", - "required": true, - "in": "path", + "name": "name", + "required": false, + "in": "query", "schema": { + "maxLength": 20, "type": "string" } } @@ -8115,60 +19915,56 @@ "schema": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "oidc_issuer_url": { - "type": "string", - "nullable": true - }, - "jwks_url": { - "type": "string", - "nullable": true - }, - "custom_jwks": { - "type": "object", - "nullable": true - }, - "resolved_jwks": { - "type": "object", - "nullable": true - }, - "inserted_at": { - "type": "string" - }, - "updated_at": { + "name": { "type": "string" }, - "resolved_at": { + "status": { "type": "string", - "nullable": true + "enum": ["AVAILABLE", "PENDING", "REMOVED", "FAILED"] } }, - "required": ["id", "type", "inserted_at", "updated_at"] + "required": ["name", "status"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + }, + "500": { + "description": "Failed to get requested restore points" } }, - "tags": ["Auth"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_read"] } - ] + ], + "summary": "Get restore points for project", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:read", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:read" } }, - "/v1/projects/{ref}/pause": { + "/v1/projects/{ref}/database/backups/undo": { "post": { - "operationId": "v1-pause-a-project", - "summary": "Pauses the given project", + "operationId": "v1-undo", "parameters": [ { "name": "ref", @@ -8178,36 +19974,74 @@ "schema": { "minLength": 20, "maxLength": 20, + "pattern": "^[a-z]+$", "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 20 + } + }, + "required": ["name"] + } + } + } + }, "responses": { - "200": { + "201": { "description": "" }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } - ] + ], + "summary": "Initiates an undo to a given restore point", + "tags": ["Database"], + "x-badges": [ + { + "name": "OAuth scope: database:write", + "position": "after" + } + ], + "x-endpoint-owners": ["infra"], + "x-internal": true, + "x-oauth-scope": "database:write" } }, - "/v1/projects/{ref}/restore": { + "/v1/organizations/{slug}/members": { "get": { - "operationId": "v1-list-available-restore-versions", - "summary": "Lists available restore versions for the given project", + "operationId": "v1-list-organization-members", "parameters": [ { - "name": "ref", + "name": "slug", "required": true, "in": "path", + "description": "Organization slug", "schema": { + "pattern": "^[\\w-]+$", "type": "string" } } @@ -8218,147 +20052,165 @@ "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "available_versions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "postgres_engine": { - "type": "string", - "enum": ["13", "14", "15", "17", "17-oriole"] - } - }, - "required": ["version", "release_channel", "postgres_engine"] + "type": "array", + "items": { + "type": "object", + "properties": { + "user_id": { + "type": "string" + }, + "user_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "role_name": { + "type": "string" + }, + "mfa_enabled": { + "type": "boolean" } - } - }, - "required": ["available_versions"] + }, + "required": ["user_id", "user_name", "role_name", "mfa_enabled"] + } } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Projects"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["members_read"] } - ] - }, - "post": { - "operationId": "v1-restore-a-project", - "summary": "Restores the given project", + ], + "summary": "List members of an organization", + "tags": ["Organizations"], + "x-badges": [ + { + "name": "OAuth scope: organizations:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" + } + }, + "/v1/organizations/{slug}": { + "get": { + "operationId": "v1-get-an-organization", "parameters": [ { - "name": "ref", + "name": "slug", "required": true, "in": "path", + "description": "Organization slug", "schema": { + "pattern": "^[\\w-]+$", "type": "string" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "hideDefinitions": ["release_channel", "postgres_engine"] - } - } - } - }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"] + }, + "opt_in_tags": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "AI_SQL_GENERATOR_OPT_IN", + "AI_DATA_GENERATOR_OPT_IN", + "AI_LOG_GENERATOR_OPT_IN" + ] + } + }, + "allowed_release_channels": { + "type": "array", + "items": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + } + } + }, + "required": ["id", "name", "opt_in_tags", "allowed_release_channels"] + } + } + } + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Projects"], "security": [ { "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/restore/cancel": { - "post": { - "operationId": "v1-cancel-a-project-restoration", - "summary": "Cancels the given project restoration", - "parameters": [ + }, { - "name": "ref", - "required": true, - "in": "path", - "schema": { - "type": "string" - } + "fga_permissions": ["organization_admin_read"] } ], - "responses": { - "200": { - "description": "" - }, - "403": { - "description": "" - } - }, - "tags": ["Projects"], - "security": [ + "summary": "Gets information about the organization", + "tags": ["Organizations"], + "x-badges": [ { - "bearer": [] + "name": "OAuth scope: organizations:read", + "position": "after" } - ] + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" } }, - "/v1/projects/{ref}/analytics/endpoints/logs.all": { + "/v1/organizations/{slug}/project-claim/{token}": { "get": { - "operationId": "getLogs", - "summary": "Gets project's logs", + "operationId": "v1-get-organization-project-claim", "parameters": [ { - "name": "iso_timestamp_end", - "required": false, - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "iso_timestamp_start", - "required": false, - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "sql", - "required": false, - "in": "query", + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", "schema": { + "pattern": "^[\\w-]+$", "type": "string" } }, { - "name": "ref", + "name": "token", "required": true, "in": "path", "schema": { @@ -8374,178 +20226,258 @@ "schema": { "type": "object", "properties": { - "error": { - "oneOf": [ - { - "properties": { - "code": { - "type": "number" + "project": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] + }, + "preview": { + "type": "object", + "properties": { + "valid": { + "type": "boolean" + }, + "warnings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" + } }, - "errors": { - "type": "array", - "items": { - "properties": { - "domain": { - "type": "string" - }, - "location": { - "type": "string" - }, - "locationType": { - "type": "string" - }, - "message": { - "type": "string" - }, - "reason": { - "type": "string" - } - } + "required": ["key", "message"] + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" } }, - "message": { - "type": "string" + "required": ["key", "message"] + } + }, + "info": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" + } }, - "status": { - "type": "string" - } + "required": ["key", "message"] } }, - { - "type": "string" + "members_exceeding_free_project_limit": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "limit": { + "type": "number" + } + }, + "required": ["name", "limit"] + } + }, + "source_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"] + }, + "target_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"], + "nullable": true } + }, + "required": [ + "valid", + "warnings", + "errors", + "info", + "members_exceeding_free_project_limit", + "source_subscription_plan", + "target_subscription_plan" ] }, - "result": { - "type": "array", - "items": { - "type": "object" - } + "expires_at": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "created_by": { + "type": "string", + "format": "uuid" } - } + }, + "required": ["project", "preview", "expires_at", "created_at", "created_by"] } } } }, + "401": { + "description": "Unauthorized" + }, "403": { - "description": "" + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Analytics"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organization_admin_write"] } - ] - } - }, - "/v1/projects/{ref}/database/query": { + ], + "summary": "Gets project details for the specified organization and claim token", + "tags": ["Organizations"], + "x-endpoint-owners": ["management-api"], + "x-internal": true + }, "post": { - "operationId": "v1-run-a-query", - "summary": "[Beta] Run sql query", + "operationId": "v1-claim-project-for-organization", "parameters": [ { - "name": "ref", + "name": "slug", "required": true, "in": "path", - "description": "Project ref", + "description": "Organization slug", "schema": { - "minLength": 20, - "maxLength": 20, + "pattern": "^[\\w-]+$", "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "query": { - "type": "string" - } - }, - "required": ["query"] - } + }, + { + "name": "token", + "required": true, + "in": "path", + "schema": { + "type": "string" } } - }, + ], "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } + "204": { + "description": "" + }, + "401": { + "description": "Unauthorized" }, "403": { - "description": "" + "description": "Forbidden action" }, - "500": { - "description": "Failed to run sql query" + "429": { + "description": "Rate limit exceeded" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organization_admin_write"] } - ] + ], + "summary": "Claims project for the specified organization", + "tags": ["Organizations"], + "x-endpoint-owners": ["management-api"], + "x-internal": true } }, - "/v1/projects/{ref}/database/webhooks/enable": { - "post": { - "operationId": "v1-enable-database-webhook", - "summary": "[Beta] Enables Database Webhooks on the project", + "/v1/organizations/{slug}/projects": { + "get": { + "description": "Returns a paginated list of projects for the specified organization.\n\nThis endpoint uses offset-based pagination. Use the `offset` parameter to skip a number of projects and the `limit` parameter to control the number of projects returned per page.", + "operationId": "v1-get-all-projects-for-organization", "parameters": [ { - "name": "ref", + "name": "slug", "required": true, "in": "path", - "description": "Project ref", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "type": "string" + } + }, + { + "name": "offset", + "required": false, + "in": "query", + "description": "Number of projects to skip", + "schema": { + "minimum": 0, + "default": 0, + "type": "integer" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "Number of projects to return per page", + "schema": { + "minimum": 1, + "maximum": 100, + "default": 100, + "type": "integer" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Search projects by name", "schema": { - "minLength": 20, - "maxLength": 20, "type": "string" } - } - ], - "responses": { - "201": { - "description": "" - }, - "403": { - "description": "" }, - "500": { - "description": "Failed to enable Database Webhooks on the project" - } - }, - "tags": ["Database"], - "security": [ { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/database/context": { - "get": { - "operationId": "getDatabaseMetadata", - "summary": "Gets database metadata for the given project.", - "description": "This is an **experimental** endpoint. It is subject to change or removal in future versions. Use it with caution, as it may not remain supported or stable.", - "deprecated": true, - "parameters": [ + "name": "sort", + "required": false, + "in": "query", + "description": "Sort order for projects", + "schema": { + "default": "name_asc", + "type": "string", + "enum": ["name_asc", "name_desc", "created_asc", "created_desc"] + } + }, { - "name": "ref", - "required": true, - "in": "path", + "name": "statuses", + "required": false, + "in": "query", + "description": "A comma-separated list of project statuses to filter by.\n\nThe following values are supported: `ACTIVE_HEALTHY`, `INACTIVE`.", "schema": { + "example": "?statuses=ACTIVE_HEALTHY,INACTIVE", "type": "string" } } @@ -8558,6198 +20490,6942 @@ "schema": { "type": "object", "properties": { - "databases": { + "projects": { "type": "array", "items": { "type": "object", "properties": { + "ref": { + "type": "string" + }, "name": { "type": "string" }, - "schemas": { + "cloud_provider": { + "type": "string" + }, + "region": { + "type": "string" + }, + "is_branch": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "inserted_at": { + "type": "string" + }, + "databases": { "type": "array", "items": { "type": "object", "properties": { - "name": { + "infra_compute_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "region": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UNKNOWN", + "INIT_READ_REPLICA", + "INIT_READ_REPLICA_FAILED", + "RESTARTING", + "RESIZING" + ] + }, + "cloud_provider": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["PRIMARY", "READ_REPLICA"] + }, + "disk_volume_size_gb": { + "type": "number" + }, + "disk_type": { + "type": "string", + "enum": ["gp3", "io2"] + }, + "disk_throughput_mbps": { + "type": "number" + }, + "disk_last_modified_at": { "type": "string" } }, - "required": ["name"], - "additionalProperties": true + "required": [ + "region", + "status", + "cloud_provider", + "identifier", + "type" + ] } } }, - "required": ["name", "schemas"], - "additionalProperties": true + "required": [ + "ref", + "name", + "cloud_provider", + "region", + "is_branch", + "status", + "inserted_at", + "databases" + ] } + }, + "pagination": { + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "Total number of projects. Use this to calculate the total number of pages." + }, + "limit": { + "type": "number", + "description": "Maximum number of projects per page" + }, + "offset": { + "type": "number", + "description": "Number of projects skipped in this response" + } + }, + "required": ["count", "limit", "offset"] } }, - "required": ["databases"] + "required": ["projects", "pagination"] } } } }, - "403": { - "description": "" + "500": { + "description": "Failed to retrieve projects" } }, - "tags": ["Database"], "security": [ { "bearer": [] + }, + { + "fga_permissions": ["organization_projects_read"] } - ] + ], + "summary": "Gets all projects for the given organization", + "tags": ["Projects"], + "x-endpoint-owners": ["management-api"] + } + } + }, + "components": { + "securitySchemes": { + "bearer": { + "scheme": "bearer", + "bearerFormat": "JWT", + "type": "http" } }, - "/v1/projects/{ref}/functions": { - "get": { - "operationId": "v1-list-all-functions", - "summary": "List all functions", - "description": "Returns all functions you've previously added to the specified project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "schemas": { + "BranchDetailResponse": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "postgres_version": { + "type": "string" + }, + "postgres_engine": { + "type": "string" + }, + "release_channel": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "db_host": { + "type": "string" + }, + "db_port": { + "type": "integer", + "minimum": 0, + "exclusiveMinimum": true + }, + "db_user": { + "type": "string" + }, + "db_pass": { + "type": "string" + }, + "jwt_secret": { + "type": "string" } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - } - }, - "required": [ - "version", - "created_at", - "updated_at", - "id", - "slug", - "name", - "status" - ] - } - } - } - } + }, + "required": [ + "ref", + "postgres_version", + "postgres_engine", + "release_channel", + "status", + "db_host", + "db_port" + ] + }, + "UpdateBranchBody": { + "type": "object", + "properties": { + "branch_name": { + "type": "string" + }, + "git_branch": { + "type": "string" + }, + "reset_on_push": { + "type": "boolean", + "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead.", + "deprecated": true }, - "403": { - "description": "" + "persistent": { + "type": "boolean" }, - "500": { - "description": "Failed to retrieve project's functions" - } - }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "request_review": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." } - ] + } }, - "post": { - "operationId": "v1-create-a-function", - "summary": "Create a function", - "description": "This endpoint is deprecated - use the deploy endpoint. Creates a function and adds it to the specified project.", - "deprecated": true, - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "BranchResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } + "name": { + "type": "string" }, - { - "name": "name", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "project_ref": { + "type": "string" }, - { - "name": "verify_jwt", - "required": false, - "in": "query", - "schema": { - "type": "boolean" - } + "parent_project_ref": { + "type": "string" }, - { - "name": "import_map", - "required": false, - "in": "query", - "schema": { - "type": "boolean" - } + "is_default": { + "type": "boolean" }, - { - "name": "entrypoint_path", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "git_branch": { + "type": "string" }, - { - "name": "import_map_path", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "pr_number": { + "type": "integer", + "format": "int32" + }, + "latest_check_run_id": { + "type": "number", + "description": "This field is deprecated and will not be populated.", + "deprecated": true + }, + "persistent": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "CREATING_PROJECT", + "RUNNING_MIGRATIONS", + "MIGRATIONS_PASSED", + "MIGRATIONS_FAILED", + "FUNCTIONS_DEPLOYED", + "FUNCTIONS_FAILED" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "review_requested_at": { + "type": "string", + "format": "date-time" + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri" + }, + "deletion_scheduled_at": { + "type": "string", + "format": "date-time" + }, + "preview_project_status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "slug": { - "type": "string", - "pattern": "/^[A-Za-z0-9_-]+$/" - }, - "name": { - "type": "string" - }, - "body": { - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - } + }, + "required": [ + "id", + "name", + "project_ref", + "parent_project_ref", + "is_default", + "persistent", + "status", + "created_at", + "updated_at", + "with_data" + ] + }, + "BranchDeleteResponse": { + "type": "object", + "properties": { + "message": { + "type": "string", + "enum": ["ok"] + } + }, + "required": ["message"] + }, + "BranchActionBody": { + "type": "object", + "properties": { + "migration_version": { + "type": "string" + } + } + }, + "BranchUpdateResponse": { + "type": "object", + "properties": { + "workflow_run_id": { + "type": "string" + }, + "message": { + "type": "string", + "enum": ["ok"] + } + }, + "required": ["workflow_run_id", "message"] + }, + "BranchRestoreResponse": { + "type": "object", + "properties": { + "message": { + "type": "string", + "enum": ["Branch restoration initiated"] + } + }, + "required": ["message"] + }, + "V1ListProjectsPaginatedResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "cloud_provider": { + "type": "string" + }, + "inserted_at": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "organization_id": { + "type": "number" + }, + "organization_slug": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "region": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subscription_id": { + "type": "string", + "nullable": true + }, + "is_branch_enabled": { + "type": "boolean" + }, + "is_physical_backups_enabled": { + "type": "boolean", + "nullable": true }, - "required": ["slug", "name", "body"] - } - }, - "application/vnd.denoland.eszip": { - "schema": { - "type": "object", - "properties": { - "slug": { - "type": "string", - "pattern": "/^[A-Za-z0-9_-]+$/" - }, - "name": { - "type": "string" - }, - "body": { + "preview_branch_refs": { + "type": "array", + "items": { "type": "string" - }, - "verify_jwt": { - "type": "boolean" } }, - "required": ["slug", "name", "body"] - } - } - } - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - } - }, - "required": [ - "version", - "created_at", - "updated_at", - "id", - "slug", - "name", - "status" + "disk_volume_size_gb": { + "type": "number" + }, + "infra_compute_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" ] } - } + }, + "required": [ + "id", + "cloud_provider", + "inserted_at", + "name", + "organization_id", + "organization_slug", + "ref", + "region", + "status", + "subscription_id", + "is_branch_enabled", + "is_physical_backups_enabled", + "preview_branch_refs" + ] } }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to create project's function" + "pagination": { + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "Total number of projects. Use this to calculate the total number of pages." + }, + "limit": { + "type": "number", + "description": "Maximum number of projects per page (actual number may be less)" + }, + "offset": { + "type": "number", + "description": "Number of projects skipped in this response" + } + }, + "required": ["count", "limit", "offset"] } }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] + "required": ["projects", "pagination"] + }, + "V1ProjectWithDatabaseResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "deprecated": true, + "description": "Deprecated: Use `ref` instead." + }, + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" + }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "name": { + "type": "string", + "description": "Name of your project" + }, + "region": { + "type": "string", + "description": "Region of your project", + "example": "us-east-1" + }, + "created_at": { + "type": "string", + "description": "Creation timestamp", + "example": "2023-03-29T16:32:59Z" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "database": { + "type": "object", + "properties": { + "host": { + "type": "string", + "description": "Database host" + }, + "version": { + "type": "string", + "description": "Database version" + }, + "postgres_engine": { + "type": "string", + "description": "Database engine" + }, + "release_channel": { + "type": "string", + "description": "Release channel" + } + }, + "required": ["host", "version", "postgres_engine", "release_channel"] } + }, + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status", + "database" ] }, - "put": { - "operationId": "v1-bulk-update-functions", - "summary": "Bulk update functions", - "description": "Bulk update functions. It will create a new function or replace existing. The operation is idempotent. NOTE: You will need to manually bump the version.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - } + "V1CreateProjectBody": { + "type": "object", + "properties": { + "db_pass": { + "type": "string", + "description": "Database password" + }, + "name": { + "type": "string", + "maxLength": 256, + "description": "Name of your project" + }, + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "plan": { + "type": "string", + "enum": ["free", "pro"], + "deprecated": true, + "description": "Subscription Plan is now set on organization level and is ignored in this request" + }, + "region": { + "type": "string", + "description": "Region you want your server to reside in. Use region_selection instead.", + "deprecated": true, + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ] + }, + "region_selection": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["specific"] }, - "required": ["version", "id", "slug", "name", "status"] - } - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "functions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - } - }, - "required": [ - "version", - "created_at", - "updated_at", - "id", - "slug", - "name", - "status" - ] - } - } + "code": { + "type": "string", + "minLength": 1, + "description": "Specific region code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ] + } + }, + "required": ["type", "code"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["smartGroup"] }, - "required": ["functions"] - } + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"], + "description": "The Smart Region Group's code. The codes supported are not a stable API, and should be retrieved from the /available-regions endpoint.", + "example": "apac" + } + }, + "required": ["type", "code"] } - } + ], + "description": "Region selection. Only one of region or region_selection can be specified.", + "example": "{ type: 'smartGroup', code: 'americas' }" }, - "403": { - "description": "" + "kps_enabled": { + "type": "boolean", + "deprecated": true, + "description": "This field is deprecated and is ignored in this request" }, - "500": { - "description": "Failed to update functions" + "desired_instance_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "template_url": { + "type": "string", + "format": "uri", + "description": "Template URL used to create the project from the CLI.", + "example": "https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used.", + "deprecated": true + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used.", + "deprecated": true } }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/functions/deploy": { - "post": { - "operationId": "v1-deploy-a-function", - "summary": "Deploy a function", - "description": "A new endpoint to deploy functions. It will create if function does not exist.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "required": ["db_pass", "name", "organization_slug"], + "additionalProperties": false, + "hideDefinitions": ["release_channel", "postgres_engine"] + }, + "V1ProjectResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "deprecated": true, + "description": "Deprecated: Use `ref` instead." }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } + "ref": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "description": "Project ref" }, - { - "name": "bundleOnly", - "required": false, - "in": "query", - "schema": { - "type": "boolean" - } + "organization_id": { + "type": "string", + "description": "Deprecated: Use `organization_slug` instead.", + "deprecated": true + }, + "organization_slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" + }, + "name": { + "type": "string", + "description": "Name of your project" + }, + "region": { + "type": "string", + "description": "Region of your project", + "example": "us-east-1" + }, + "created_at": { + "type": "string", + "description": "Creation timestamp", + "example": "2023-03-29T16:32:59Z" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] } - ], - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { + }, + "required": [ + "id", + "ref", + "organization_id", + "organization_slug", + "name", + "region", + "created_at", + "status" + ] + }, + "RegionsInfo": { + "type": "object", + "properties": { + "recommendations": { + "type": "object", + "properties": { + "smartGroup": { "type": "object", "properties": { - "file": { - "type": "array", - "items": { - "type": "string", - "format": "binary" - } + "name": { + "type": "string" }, - "metadata": { - "type": "object", - "properties": { - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - }, - "static_patterns": { - "type": "array", - "items": { - "type": "string" - } - }, - "verify_jwt": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "required": ["entrypoint_path"] + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"] + }, + "type": { + "type": "string", + "enum": ["smartGroup"] } }, - "required": ["file", "metadata"] - } - } - } - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { + "required": ["name", "code", "type"] + }, + "specific": { + "type": "array", + "items": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, "name": { "type": "string" }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], + "code": { "type": "string" }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" + "type": { + "type": "string", + "enum": ["specific"] }, - "entrypoint_path": { - "type": "string" + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] }, - "import_map_path": { - "type": "string" + "status": { + "type": "string", + "enum": ["capacity", "other"] } }, - "required": ["version", "id", "slug", "name", "status"] + "required": ["name", "code", "type", "provider"] } } - } - }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to deploy function" - } - }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/functions/{function_slug}": { - "get": { - "operationId": "v1-get-a-function", - "summary": "Retrieve a function", - "description": "Retrieves a function with the specified slug and project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + }, + "required": ["smartGroup", "specific"] }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + "all": { + "type": "object", + "properties": { + "smartGroup": { + "type": "array", + "items": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, - "id": { + "name": { "type": "string" }, - "slug": { - "type": "string" + "code": { + "type": "string", + "enum": ["americas", "emea", "apac"] }, + "type": { + "type": "string", + "enum": ["smartGroup"] + } + }, + "required": ["name", "code", "type"] + } + }, + "specific": { + "type": "array", + "items": { + "type": "object", + "properties": { "name": { "type": "string" }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], + "code": { "type": "string" }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" + "type": { + "type": "string", + "enum": ["specific"] }, - "entrypoint_path": { - "type": "string" + "provider": { + "type": "string", + "enum": ["AWS", "FLY", "AWS_K8S", "AWS_NIMBUS"] }, - "import_map_path": { - "type": "string" + "status": { + "type": "string", + "enum": ["capacity", "other"] } }, - "required": [ - "version", - "created_at", - "updated_at", - "id", - "slug", - "name", - "status" - ] + "required": ["name", "code", "type", "provider"] } } - } + }, + "required": ["smartGroup", "specific"] + } + }, + "required": ["recommendations", "all"] + }, + "OrganizationResponseV1": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Deprecated: Use `slug` instead.", + "deprecated": true }, - "403": { - "description": "" + "slug": { + "type": "string", + "pattern": "^[\\w-]+$", + "description": "Organization slug" }, - "500": { - "description": "Failed to retrieve function with given slug" + "name": { + "type": "string" } }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] + "required": ["id", "slug", "name"] + }, + "CreateOrganizationV1": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 256 } - ] + }, + "required": ["name"], + "additionalProperties": false }, - "patch": { - "operationId": "v1-update-a-function", - "summary": "Update a function", - "description": "Updates a function with the specified slug and project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "OAuthTokenBody": { + "type": "object", + "properties": { + "grant_type": { + "type": "string", + "enum": ["authorization_code", "refresh_token"] + }, + "client_id": { + "type": "string", + "format": "uuid" }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } + "client_secret": { + "type": "string" }, - { - "name": "slug", - "required": false, - "in": "query", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } + "code": { + "type": "string" }, - { - "name": "name", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "code_verifier": { + "type": "string" }, - { - "name": "verify_jwt", - "required": false, - "in": "query", - "schema": { - "type": "boolean" - } + "redirect_uri": { + "type": "string" }, - { - "name": "import_map", - "required": false, - "in": "query", - "schema": { - "type": "boolean" - } + "refresh_token": { + "type": "string" }, - { - "name": "entrypoint_path", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "resource": { + "type": "string", + "format": "uri", + "description": "Resource indicator for MCP (Model Context Protocol) clients" }, - { - "name": "import_map_path", - "required": false, - "in": "query", - "schema": { - "type": "string" - } + "scope": { + "type": "string" } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "body": { - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - } - } - } - }, - "application/vnd.denoland.eszip": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "body": { - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - } - } - } - } + }, + "additionalProperties": false + }, + "OAuthTokenResponse": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "refresh_token": { + "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "token_type": { + "type": "string", + "enum": ["Bearer"] } }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "additionalProperties": false + }, + "OAuthRevokeTokenBody": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "format": "uuid" + }, + "client_secret": { + "type": "string" + }, + "refresh_token": { + "type": "string" + } + }, + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": false + }, + "SnippetList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "inserted_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["sql"] + }, + "visibility": { + "type": "string", + "enum": ["user", "project", "org", "public"] + }, + "name": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "project": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, "id": { - "type": "string" - }, - "slug": { - "type": "string" + "type": "number" }, "name": { "type": "string" + } + }, + "required": ["id", "name"] + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { + "username": { "type": "string" + } + }, + "required": ["id", "username"] + }, + "updated_by": { + "type": "object", + "properties": { + "id": { + "type": "number" }, - "import_map_path": { + "username": { "type": "string" } }, - "required": [ - "version", - "created_at", - "updated_at", - "id", - "slug", - "name", - "status" - ] + "required": ["id", "username"] + }, + "favorite": { + "type": "boolean" } - } + }, + "required": [ + "id", + "inserted_at", + "updated_at", + "type", + "visibility", + "name", + "description", + "project", + "owner", + "updated_by", + "favorite" + ] } }, - "403": { - "description": "" - }, - "500": { - "description": "Failed to update function with given slug" + "cursor": { + "type": "string" } }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] - } - ] + "required": ["data"] }, - "delete": { - "operationId": "v1-delete-a-function", - "summary": "Delete a function", - "description": "Deletes a function with the specified slug from the specified project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "SnippetResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" + "inserted_at": { + "type": "string" }, - "403": { - "description": "" + "updated_at": { + "type": "string" }, - "500": { - "description": "Failed to delete function with given slug" - } - }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/functions/{function_slug}/body": { - "get": { - "operationId": "v1-get-a-function-body", - "summary": "Retrieve a function body", - "description": "Retrieves a function body for the specified slug and project.", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + "type": { + "type": "string", + "enum": ["sql"] }, - { - "name": "function_slug", - "required": true, - "in": "path", - "description": "Function slug", - "schema": { - "pattern": "/^[A-Za-z0-9_-]+$/", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" + "visibility": { + "type": "string", + "enum": ["user", "project", "org", "public"] }, - "403": { - "description": "" + "name": { + "type": "string" }, - "500": { - "description": "Failed to retrieve function body with given slug" - } - }, - "tags": ["Edge Functions"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/storage/buckets": { - "get": { - "operationId": "v1-list-all-buckets", - "summary": "Lists all buckets", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "owner": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "public": { - "type": "boolean" - } - }, - "required": ["id", "name", "owner", "created_at", "updated_at", "public"] - } - } + "description": { + "type": "string", + "nullable": true + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" } - } + }, + "required": ["id", "name"] }, - "403": { - "description": "" + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "username": { + "type": "string" + } + }, + "required": ["id", "username"] }, - "500": { - "description": "Failed to get list of buckets" + "updated_by": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "username": { + "type": "string" + } + }, + "required": ["id", "username"] + }, + "favorite": { + "type": "boolean" + }, + "content": { + "type": "object", + "properties": { + "favorite": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated: Rely on root-level favorite property instead." + }, + "schema_version": { + "type": "string" + }, + "sql": { + "type": "string" + } + }, + "required": ["schema_version", "sql"] } }, - "tags": ["Storage"], - "security": [ - { - "bearer": [] - } + "required": [ + "id", + "inserted_at", + "updated_at", + "type", + "visibility", + "name", + "description", + "project", + "owner", + "updated_by", + "favorite", + "content" ] - } - }, - "/v1/projects/{ref}/config/auth/sso/providers": { - "post": { - "operationId": "v1-create-a-sso-provider", - "summary": "Creates a new SSO provider", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, + }, + "ListActionRunResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { + }, + "branch_id": { + "type": "string" + }, + "run_steps": { + "type": "array", + "items": { "type": "object", "properties": { - "type": { + "name": { "type": "string", - "enum": ["saml"], - "description": "What type of provider will be created" + "enum": ["clone", "pull", "health", "configure", "migrate", "seed", "deploy"] }, - "metadata_xml": { - "type": "string" + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] }, - "metadata_url": { + "created_at": { "type": "string" }, - "domains": { - "type": "array", - "items": { - "type": "string" - } - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] + "updated_at": { + "type": "string" } }, - "required": ["type"] + "required": ["name", "status", "created_at", "updated_at"] } + }, + "git_config": { + "nullable": true + }, + "workdir": { + "type": "string", + "nullable": true + }, + "check_run_id": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" } - } - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - }, - "required": ["id", "entity_id"] - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - } - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] + }, + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] + } + }, + "ActionRunResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "branch_id": { + "type": "string" + }, + "run_steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": ["clone", "pull", "health", "configure", "migrate", "seed", "deploy"] + }, + "status": { + "type": "string", + "enum": [ + "CREATED", + "DEAD", + "EXITED", + "PAUSED", + "REMOVING", + "RESTARTING", + "RUNNING" + ] + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" } - } + }, + "required": ["name", "status", "created_at", "updated_at"] } }, - "403": { - "description": "" + "git_config": { + "nullable": true + }, + "workdir": { + "type": "string", + "nullable": true + }, + "check_run_id": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "id", + "branch_id", + "run_steps", + "workdir", + "check_run_id", + "created_at", + "updated_at" + ] + }, + "UpdateRunStatusBody": { + "type": "object", + "properties": { + "clone": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "pull": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "health": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "configure": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "migrate": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "seed": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + }, + "deploy": { + "type": "string", + "enum": ["CREATED", "DEAD", "EXITED", "PAUSED", "REMOVING", "RESTARTING", "RUNNING"] + } + } + }, + "UpdateRunStatusResponse": { + "type": "object", + "properties": { + "message": { + "type": "string", + "enum": ["ok"] + } + }, + "required": ["message"] + }, + "ApiKeyResponse": { + "type": "object", + "properties": { + "api_key": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "enum": ["legacy", "publishable", "secret"], + "nullable": true }, - "404": { - "description": "SAML 2.0 support is not enabled for this project" + "prefix": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "hash": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true + }, + "inserted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true } }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] + "required": ["name"] + }, + "LegacyApiKeysResponse": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" } - ] + }, + "required": ["enabled"] }, - "get": { - "operationId": "v1-list-all-sso-provider", - "summary": "Lists all SSO providers", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, + "CreateApiKeyBody": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["publishable", "secret"] + }, + "name": { + "type": "string", + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" + }, + "description": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true + } + }, + "required": ["type", "name"] + }, + "UpdateApiKeyBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 4, + "maxLength": 64, + "pattern": "^[a-z_][a-z0-9_]+$" + }, + "description": { + "type": "string", + "nullable": true + }, + "secret_jwt_template": { + "type": "object", + "additionalProperties": {}, + "nullable": true + } + } + }, + "CreateBranchBody": { + "type": "object", + "properties": { + "branch_name": { + "type": "string", + "minLength": 1 + }, + "git_branch": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "persistent": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "desired_instance_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"], + "description": "Release channel. If not provided, GA will be used." + }, + "postgres_engine": { + "type": "string", + "enum": ["15", "17", "17-oriole"], + "description": "Postgres engine version. If not provided, the latest version will be used." + }, + "secrets": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "with_data": { + "type": "boolean" + }, + "notify_url": { + "type": "string", + "format": "uri", + "description": "HTTP endpoint to receive branch status updates." } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } + }, + "required": ["branch_name"] + }, + "UpdateCustomHostnameResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "1_not_started", + "2_initiated", + "3_challenge_verified", + "4_origin_setup_completed", + "5_services_reconfigured" + ] + }, + "custom_hostname": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "errors": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "messages": { + "type": "array", + "items": { + "description": "Any JSON-serializable value" + } + }, + "result": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "ssl": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "validation_records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txt_name": { + "type": "string" }, - "required": ["id", "entity_id"] - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] + "txt_value": { + "type": "string" } }, - "created_at": { - "type": "string" + "required": ["txt_name", "txt_value"] + } + }, + "validation_errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] + "required": ["message"] + } + } + }, + "required": ["status", "validation_records"] + }, + "ownership_verification": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" } + }, + "required": ["type", "name", "value"] + }, + "custom_origin_server": { + "type": "string" + }, + "verification_errors": { + "type": "array", + "items": { + "type": "string" } }, - "required": ["items"] - } + "status": { + "type": "string" + } + }, + "required": [ + "id", + "hostname", + "ssl", + "ownership_verification", + "custom_origin_server", + "status" + ] } + }, + "required": ["success", "errors", "messages", "result"] + } + }, + "required": ["status", "custom_hostname", "data"] + }, + "UpdateCustomHostnameBody": { + "type": "object", + "properties": { + "custom_hostname": { + "type": "string", + "minLength": 1 + } + }, + "required": ["custom_hostname"] + }, + "NetworkBanResponse": { + "type": "object", + "properties": { + "banned_ipv4_addresses": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["banned_ipv4_addresses"] + }, + "NetworkBanResponseEnriched": { + "type": "object", + "properties": { + "banned_ipv4_addresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "banned_address": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": ["banned_address", "identifier", "type"] } + } + }, + "required": ["banned_ipv4_addresses"] + }, + "RemoveNetworkBanRequest": { + "type": "object", + "properties": { + "ipv4_addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP addresses to unban." }, - "403": { - "description": "" + "requester_ip": { + "default": false, + "type": "boolean", + "description": "Include requester's public IP in the list of addresses to unban." }, - "404": { - "description": "SAML 2.0 support is not enabled for this project" + "identifier": { + "type": "string" } }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] + "required": ["ipv4_addresses"] + }, + "NetworkRestrictionsResponse": { + "type": "object", + "properties": { + "entitlement": { + "type": "string", + "enum": ["disallowed", "allowed"] + }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "status": { + "type": "string", + "enum": ["stored", "applied"] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "applied_at": { + "type": "string", + "format": "date-time" } - ] - } - }, - "/v1/projects/{ref}/config/auth/sso/providers/{provider_id}": { - "get": { - "operationId": "v1-get-a-sso-provider", - "summary": "Gets a SSO provider by its UUID", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, + }, + "required": ["entitlement", "config", "status"] + }, + "NetworkRestrictionsRequest": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { "type": "string" } + } + } + }, + "NetworkRestrictionsPatchRequest": { + "type": "object", + "properties": { + "add": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } + } }, - { - "name": "provider_id", - "required": true, - "in": "path", - "schema": { - "type": "string" + "remove": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "string" + } + }, + "dbAllowedCidrsV6": { + "type": "array", + "items": { + "type": "string" + } + } } } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + } + }, + "NetworkRestrictionsV2Response": { + "type": "object", + "properties": { + "entitlement": { + "type": "string", + "enum": ["disallowed", "allowed"] + }, + "config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { "type": "object", "properties": { - "id": { + "address": { "type": "string" }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - }, - "required": ["id", "entity_id"] - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - } - }, - "created_at": { + "type": { + "type": "string", + "enum": ["v4", "v6"] + } + }, + "required": ["address", "type"] + } + } + }, + "description": "At any given point in time, this is the config that the user has requested be applied to their project. The `status` field indicates if it has been applied to the project, or is pending. When an updated config is received, the applied config is moved to `old_config`." + }, + "old_config": { + "type": "object", + "properties": { + "dbAllowedCidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { "type": "string" }, - "updated_at": { - "type": "string" + "type": { + "type": "string", + "enum": ["v4", "v6"] } }, - "required": ["id"] + "required": ["address", "type"] } } - } + }, + "description": "Populated when a new config has been received, but not registered as successfully applied to a project." + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "applied_at": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": ["stored", "applied"] + } + }, + "required": ["entitlement", "config", "status"] + }, + "PgsodiumConfigResponse": { + "type": "object", + "properties": { + "root_key": { + "type": "string" + } + }, + "required": ["root_key"] + }, + "UpdatePgsodiumConfigBody": { + "type": "object", + "properties": { + "root_key": { + "type": "string" + } + }, + "required": ["root_key"] + }, + "PostgrestConfigWithJWTSecretResponse": { + "type": "object", + "properties": { + "db_schema": { + "type": "string" + }, + "max_rows": { + "type": "integer" + }, + "db_extra_search_path": { + "type": "string" + }, + "db_pool": { + "type": "integer", + "nullable": true, + "description": "If `null`, the value is automatically configured based on compute size." + }, + "jwt_secret": { + "type": "string" + } + }, + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] + }, + "V1UpdatePostgrestConfigBody": { + "type": "object", + "properties": { + "db_extra_search_path": { + "type": "string" + }, + "db_schema": { + "type": "string" + }, + "max_rows": { + "type": "integer", + "minimum": 0, + "maximum": 1000000 + }, + "db_pool": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + } + } + }, + "V1PostgrestConfigResponse": { + "type": "object", + "properties": { + "db_schema": { + "type": "string" + }, + "max_rows": { + "type": "integer" + }, + "db_extra_search_path": { + "type": "string" + }, + "db_pool": { + "type": "integer", + "nullable": true, + "description": "If `null`, the value is automatically configured based on compute size." + } + }, + "required": ["db_schema", "max_rows", "db_extra_search_path", "db_pool"] + }, + "V1ProjectRefResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["id", "ref", "name"] + }, + "V1UpdateProjectBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": ["name"] + }, + "SecretResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "403": { - "description": "" + "value": { + "type": "string" }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + "updated_at": { + "type": "string" } }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] - } - ] + "required": ["name", "value"] }, - "put": { - "operationId": "v1-update-a-sso-provider", - "summary": "Updates a SSO provider by its UUID", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" + "CreateSecretBody": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 256, + "pattern": "^(?!SUPABASE_).*", + "description": "Secret name must not start with the SUPABASE_ prefix.", + "example": "string" + }, + "value": { + "type": "string", + "maxLength": 24576 } }, - { - "name": "provider_id", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "metadata_xml": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "domains": { - "type": "array", - "items": { - "type": "string" - } - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - } + "required": ["name", "value"] + } + }, + "DeleteSecretsBody": { + "type": "array", + "items": { + "type": "string" + } + }, + "SslEnforcementResponse": { + "type": "object", + "properties": { + "currentConfig": { + "type": "object", + "properties": { + "database": { + "type": "boolean" } - } + }, + "required": ["database"] + }, + "appliedSuccessfully": { + "type": "boolean" } }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - }, - "required": ["id", "entity_id"] - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - } - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - } + "required": ["currentConfig", "appliedSuccessfully"] + }, + "SslEnforcementRequest": { + "type": "object", + "properties": { + "requestedConfig": { + "type": "object", + "properties": { + "database": { + "type": "boolean" } - } + }, + "required": ["database"] + } + }, + "required": ["requestedConfig"] + }, + "TypescriptResponse": { + "type": "object", + "properties": { + "types": { + "type": "string" + } + }, + "required": ["types"] + }, + "VanitySubdomainConfigResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["not-used", "custom-domain-used", "active"] }, - "403": { - "description": "" + "custom_domain": { + "type": "string", + "minLength": 1 + } + }, + "required": ["status"] + }, + "VanitySubdomainBody": { + "type": "object", + "properties": { + "vanity_subdomain": { + "type": "string" + } + }, + "required": ["vanity_subdomain"] + }, + "SubdomainAvailabilityResponse": { + "type": "object", + "properties": { + "available": { + "type": "boolean" + } + }, + "required": ["available"] + }, + "ActivateVanitySubdomainResponse": { + "type": "object", + "properties": { + "custom_domain": { + "type": "string" + } + }, + "required": ["custom_domain"] + }, + "UpgradeDatabaseBody": { + "type": "object", + "properties": { + "target_version": { + "type": "string" }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] } }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] + "required": ["target_version"] + }, + "ProjectUpgradeInitiateResponse": { + "type": "object", + "properties": { + "tracking_id": { + "type": "string" } - ] + }, + "required": ["tracking_id"] }, - "delete": { - "operationId": "v1-delete-a-sso-provider", - "summary": "Removes a SSO provider by its UUID", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" + "ProjectUpgradeEligibilityResponse": { + "type": "object", + "properties": { + "eligible": { + "type": "boolean" + }, + "current_app_version": { + "type": "string" + }, + "current_app_version_release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "latest_app_version": { + "type": "string" + }, + "target_upgrade_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "postgres_version": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "app_version": { + "type": "string" + } + }, + "required": ["postgres_version", "release_channel", "app_version"] } }, - { - "name": "provider_id", - "required": true, - "in": "path", - "schema": { + "duration_estimate_hours": { + "type": "number" + }, + "legacy_auth_custom_roles": { + "type": "array", + "items": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + }, + "objects_to_be_dropped": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "unsupported_extensions": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "user_defined_objects_in_internal_schemas": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true, + "description": "Use validation_errors instead." + }, + "validation_errors": { + "type": "array", + "items": { + "oneOf": [ + { "type": "object", "properties": { - "id": { - "type": "string" - }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - }, - "required": ["id", "entity_id"] + "type": { + "type": "string", + "enum": ["objects_depending_on_pg_cron"] }, - "domains": { + "dependents": { "type": "array", "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] + "type": "string" } + } + }, + "required": ["type", "dependents"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["indexes_referencing_ll_to_earth"] + }, + "schema_name": { + "type": "string" + }, + "table_name": { + "type": "string" + }, + "index_name": { + "type": "string" + } + }, + "required": ["type", "schema_name", "table_name", "index_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["function_using_obsolete_lang"] }, - "created_at": { + "schema_name": { "type": "string" }, - "updated_at": { + "function_name": { + "type": "string" + }, + "lang_name": { "type": "string" } }, - "required": ["id"] - } - } - } - }, - "403": { - "description": "" - }, - "404": { - "description": "Either SAML 2.0 was not enabled for this project, or the provider does not exist" - } - }, - "tags": ["Auth"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/projects/{ref}/database/backups": { - "get": { - "operationId": "v1-list-all-backups", - "summary": "Lists all backups", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { + "required": ["type", "schema_name", "function_name", "lang_name"] + }, + { "type": "object", "properties": { - "region": { + "type": { + "type": "string", + "enum": ["unsupported_extension"] + }, + "extension_name": { "type": "string" + } + }, + "required": ["type", "extension_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unsupported_fdw_handler"] }, - "walg_enabled": { - "type": "boolean" + "fdw_name": { + "type": "string" }, - "pitr_enabled": { - "type": "boolean" + "fdw_handler_name": { + "type": "string" + } + }, + "required": ["type", "fdw_name", "fdw_handler_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["unlogged_table_with_persistent_sequence"] }, - "backups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "COMPLETED", - "FAILED", - "PENDING", - "REMOVED", - "ARCHIVED", - "CANCELLED" - ] - }, - "is_physical_backup": { - "type": "boolean" - }, - "inserted_at": { - "type": "string" - } - }, - "required": ["status", "is_physical_backup", "inserted_at"] - } + "schema_name": { + "type": "string" }, - "physical_backup_data": { - "type": "object", - "properties": { - "earliest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" - }, - "latest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" - } - } + "table_name": { + "type": "string" + }, + "sequence_name": { + "type": "string" } }, - "required": [ - "region", - "walg_enabled", - "pitr_enabled", - "backups", - "physical_backup_data" - ] + "required": ["type", "schema_name", "table_name", "sequence_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["user_defined_objects_in_internal_schemas"] + }, + "obj_type": { + "type": "string", + "enum": ["table", "function"] + }, + "schema_name": { + "type": "string" + }, + "obj_name": { + "type": "string" + } + }, + "required": ["type", "obj_type", "schema_name", "obj_name"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["active_replication_slot"] + }, + "slot_name": { + "type": "string" + } + }, + "required": ["type", "slot_name"] } - } + ] } - }, - "500": { - "description": "Failed to get backups" } }, - "tags": ["Database"], - "security": [ - { - "bearer": [] - } + "required": [ + "eligible", + "current_app_version", + "current_app_version_release_channel", + "latest_app_version", + "target_upgrade_versions", + "duration_estimate_hours", + "legacy_auth_custom_roles", + "objects_to_be_dropped", + "unsupported_extensions", + "user_defined_objects_in_internal_schemas", + "validation_errors" ] - } - }, - "/v1/projects/{ref}/database/backups/restore-pitr": { - "post": { - "operationId": "v1-restore-pitr-backup", - "summary": "Restores a PITR backup for a database", - "parameters": [ - { - "name": "ref", - "required": true, - "in": "path", - "description": "Project ref", - "schema": { - "minLength": 20, - "maxLength": 20, - "type": "string" - } + }, + "DatabaseUpgradeStatusResponse": { + "type": "object", + "properties": { + "databaseUpgradeStatus": { + "type": "object", + "properties": { + "initiated_at": { + "type": "string" + }, + "latest_status_at": { + "type": "string" + }, + "target_version": { + "type": "number" + }, + "error": { + "type": "string", + "enum": [ + "1_upgraded_instance_launch_failed", + "2_volume_detachchment_from_upgraded_instance_failed", + "3_volume_attachment_to_original_instance_failed", + "4_data_upgrade_initiation_failed", + "5_data_upgrade_completion_failed", + "6_volume_detachchment_from_original_instance_failed", + "7_volume_attachment_to_upgraded_instance_failed", + "8_upgrade_completion_failed", + "9_post_physical_backup_failed" + ] + }, + "progress": { + "type": "string", + "enum": [ + "0_requested", + "1_started", + "2_launched_upgraded_instance", + "3_detached_volume_from_upgraded_instance", + "4_attached_volume_to_original_instance", + "5_initiated_data_upgrade", + "6_completed_data_upgrade", + "7_detached_volume_from_original_instance", + "8_attached_volume_to_upgraded_instance", + "9_completed_upgrade", + "10_completed_post_physical_backup" + ] + }, + "status": { + "type": "number" + } + }, + "required": ["initiated_at", "latest_status_at", "target_version", "status"], + "nullable": true } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { + }, + "required": ["databaseUpgradeStatus"] + }, + "ReadOnlyStatusResponse": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "override_enabled": { + "type": "boolean" + }, + "override_active_until": { + "type": "string" + } + }, + "required": ["enabled", "override_enabled", "override_active_until"] + }, + "SetUpReadReplicaBody": { + "type": "object", + "properties": { + "read_replica_region": { + "type": "string", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-east-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-central-2", + "ca-central-1", + "ap-south-1", + "sa-east-1" + ], + "description": "Region you want your read replica to reside in", + "example": "us-east-1" + } + }, + "required": ["read_replica_region"] + }, + "RemoveReadReplicaBody": { + "type": "object", + "properties": { + "database_identifier": { + "type": "string" + } + }, + "required": ["database_identifier"] + }, + "V1ServiceHealthResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "auth", + "db", + "db_postgres_user", + "pooler", + "realtime", + "rest", + "storage", + "pg_bouncer" + ] + }, + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "status": { + "type": "string", + "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"] + }, + "info": { + "oneOf": [ + { "type": "object", "properties": { - "recovery_time_target_unix": { - "type": "integer", - "minimum": 0, - "format": "int64" + "name": { + "type": "string", + "enum": ["GoTrue"] + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" } }, - "required": ["recovery_time_target_unix"] + "required": ["name", "version", "description"] + }, + { + "type": "object", + "properties": { + "healthy": { + "type": "boolean", + "deprecated": true, + "description": "Deprecated. Use `status` instead." + }, + "db_connected": { + "type": "boolean" + }, + "connected_cluster": { + "type": "integer" + } + }, + "required": ["healthy", "db_connected", "connected_cluster"] + }, + { + "type": "object", + "properties": { + "db_schema": { + "type": "string" + } + }, + "required": ["db_schema"] } - } + ] + }, + "error": { + "type": "string" } }, - "responses": { - "201": { - "description": "" + "required": ["name", "healthy", "status"] + }, + "SigningKeyResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, - "tags": ["Database"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/organizations/{slug}/members": { - "get": { - "operationId": "v1-list-organization-members", - "summary": "List members of an organization", - "parameters": [ - { - "name": "slug", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "user_id": { - "type": "string" - }, - "user_name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "role_name": { - "type": "string" - }, - "mfa_enabled": { - "type": "boolean" - } + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + }, + "CreateSigningKeyBody": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "standby"] + }, + "private_jwk": { + "discriminator": { + "propertyName": "kty" + }, + "oneOf": [ + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] }, - "required": ["user_id", "user_name", "role_name", "mfa_enabled"] + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["RSA"] + }, + "alg": { + "type": "string", + "enum": ["RS256"] + }, + "n": { + "type": "string" + }, + "e": { + "type": "string", + "enum": ["AQAB"] + }, + "d": { + "type": "string" + }, + "p": { + "type": "string" + }, + "q": { + "type": "string" + }, + "dp": { + "type": "string" + }, + "dq": { + "type": "string" + }, + "qi": { + "type": "string" } - } - } - } - } - }, - "tags": ["Organizations"], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/v1/organizations/{slug}": { - "get": { - "operationId": "v1-get-an-organization", - "summary": "Gets information about the organization", - "parameters": [ - { - "name": "slug", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "plan": { + }, + "required": ["kty", "n", "e", "d", "p", "q", "dp", "dq", "qi"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { "type": "string", - "enum": ["free", "pro", "team", "enterprise"] - }, - "opt_in_tags": { - "type": "array", - "items": { - "type": "string", - "enum": ["AI_SQL_GENERATOR_OPT_IN"] - } + "enum": ["sign", "verify"] }, - "allowed_release_channels": { - "type": "array", - "items": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - } + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["EC"] + }, + "alg": { + "type": "string", + "enum": ["ES256"] + }, + "crv": { + "type": "string", + "enum": ["P-256"] + }, + "x": { + "type": "string" + }, + "y": { + "type": "string" + }, + "d": { + "type": "string" + } + }, + "required": ["kty", "crv", "x", "y", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] }, - "id": { - "type": "string" + "minItems": 2, + "maxItems": 2 + }, + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["OKP"] + }, + "alg": { + "type": "string", + "enum": ["EdDSA"] + }, + "crv": { + "type": "string", + "enum": ["Ed25519"] + }, + "x": { + "type": "string" + }, + "d": { + "type": "string" + } + }, + "required": ["kty", "crv", "x", "d"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "kid": { + "type": "string", + "format": "uuid" + }, + "use": { + "type": "string", + "enum": ["sig"] + }, + "key_ops": { + "type": "array", + "items": { + "type": "string", + "enum": ["sign", "verify"] }, - "name": { - "type": "string" - } + "minItems": 2, + "maxItems": 2 }, - "required": ["opt_in_tags", "allowed_release_channels", "id", "name"] - } + "ext": { + "type": "boolean", + "enum": [true] + }, + "kty": { + "type": "string", + "enum": ["oct"] + }, + "alg": { + "type": "string", + "enum": ["HS256"] + }, + "k": { + "type": "string", + "minLength": 16 + } + }, + "required": ["kty", "k"], + "additionalProperties": false } - } + ] } }, - "tags": ["Organizations"], - "security": [ - { - "bearer": [] - } - ] - } - } - }, - "components": { - "securitySchemes": { - "bearer": { - "scheme": "bearer", - "bearerFormat": "JWT", - "type": "http" - } - }, - "schemas": { - "BranchDetailResponse": { + "required": ["algorithm"], + "additionalProperties": false + }, + "SigningKeysResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] - }, - "db_port": { - "type": "integer" - }, - "ref": { - "type": "string" - }, - "postgres_version": { - "type": "string" - }, - "postgres_engine": { - "type": "string" - }, - "release_channel": { - "type": "string" - }, - "db_host": { - "type": "string" - }, - "db_user": { - "type": "string" - }, - "db_pass": { - "type": "string" - }, - "jwt_secret": { - "type": "string" + "keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "algorithm": { + "type": "string", + "enum": ["EdDSA", "ES256", "RS256", "HS256"] + }, + "status": { + "type": "string", + "enum": ["in_use", "previously_used", "revoked", "standby"] + }, + "public_jwk": { + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "algorithm", "status", "created_at", "updated_at"], + "additionalProperties": false + } } }, - "required": [ - "status", - "db_port", - "ref", - "postgres_version", - "postgres_engine", - "release_channel", - "db_host" - ] + "required": ["keys"], + "additionalProperties": false }, - "UpdateBranchBody": { + "UpdateSigningKeyBody": { "type": "object", "properties": { - "reset_on_push": { - "type": "boolean", - "deprecated": true, - "description": "This field is deprecated and will be ignored. Use v1-reset-a-branch endpoint directly instead." - }, - "branch_name": { - "type": "string" - }, - "git_branch": { - "type": "string" - }, - "persistent": { - "type": "boolean" - }, "status": { "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] + "enum": ["in_use", "previously_used", "revoked", "standby"] } - } + }, + "required": ["status"], + "additionalProperties": false }, - "BranchResponse": { + "StorageConfigResponse": { "type": "object", "properties": { - "pr_number": { + "fileSizeLimit": { "type": "integer", - "format": "int32" - }, - "latest_check_run_id": { - "type": "number", - "deprecated": true, - "description": "This field is deprecated and will not be populated." - }, - "status": { - "type": "string", - "enum": [ - "CREATING_PROJECT", - "RUNNING_MIGRATIONS", - "MIGRATIONS_PASSED", - "MIGRATIONS_FAILED", - "FUNCTIONS_DEPLOYED", - "FUNCTIONS_FAILED" - ] - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "project_ref": { - "type": "string" - }, - "parent_project_ref": { - "type": "string" + "format": "int64" }, - "is_default": { - "type": "boolean" + "features": { + "type": "object", + "properties": { + "imageTransformation": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "s3Protocol": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxNamespaces": { + "type": "integer", + "minimum": 0 + }, + "maxTables": { + "type": "integer", + "minimum": 0 + }, + "maxCatalogs": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] + }, + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxBuckets": { + "type": "integer", + "minimum": 0 + }, + "maxIndexes": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + }, + "required": ["imageTransformation", "s3Protocol", "icebergCatalog", "vectorBuckets"] }, - "git_branch": { - "type": "string" + "capabilities": { + "type": "object", + "properties": { + "list_v2": { + "type": "boolean" + }, + "iceberg_catalog": { + "type": "boolean" + } + }, + "required": ["list_v2", "iceberg_catalog"] }, - "persistent": { - "type": "boolean" + "external": { + "type": "object", + "properties": { + "upstreamTarget": { + "type": "string", + "enum": ["main", "canary"] + } + }, + "required": ["upstreamTarget"] }, - "created_at": { + "migrationVersion": { "type": "string" }, - "updated_at": { + "databasePoolMode": { "type": "string" } }, "required": [ - "status", - "id", - "name", - "project_ref", - "parent_project_ref", - "is_default", - "persistent", - "created_at", - "updated_at" + "fileSizeLimit", + "features", + "capabilities", + "external", + "migrationVersion", + "databasePoolMode" ] }, - "BranchDeleteResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - }, - "BranchUpdateResponse": { - "type": "object", - "properties": { - "workflow_run_id": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": ["workflow_run_id", "message"] - }, - "V1DatabaseResponse": { - "type": "object", - "properties": { - "host": { - "type": "string", - "description": "Database host" - }, - "version": { - "type": "string", - "description": "Database version" - }, - "postgres_engine": { - "type": "string", - "description": "Database engine" - }, - "release_channel": { - "type": "string", - "description": "Release channel" - } - }, - "required": ["host", "version", "postgres_engine", "release_channel"] - }, - "V1ProjectWithDatabaseResponse": { + "UpdateStorageConfigBody": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Id of your project" - }, - "organization_id": { - "type": "string", - "description": "Slug of your organization" - }, - "name": { - "type": "string", - "description": "Name of your project" - }, - "region": { - "type": "string", - "description": "Region of your project", - "example": "us-east-1" - }, - "created_at": { - "type": "string", - "description": "Creation timestamp", - "example": "2023-03-29T16:32:59Z" - }, - "status": { - "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] + "fileSizeLimit": { + "type": "integer", + "minimum": 0, + "maximum": 536870912000, + "format": "int64" }, - "database": { + "features": { "type": "object", "properties": { - "host": { - "type": "string", - "description": "Database host" + "imageTransformation": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] }, - "version": { - "type": "string", - "description": "Database version" + "s3Protocol": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] }, - "postgres_engine": { - "type": "string", - "description": "Database engine" + "icebergCatalog": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxNamespaces": { + "type": "integer", + "minimum": 0 + }, + "maxTables": { + "type": "integer", + "minimum": 0 + }, + "maxCatalogs": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxNamespaces", "maxTables", "maxCatalogs"] }, - "release_channel": { + "vectorBuckets": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxBuckets": { + "type": "integer", + "minimum": 0 + }, + "maxIndexes": { + "type": "integer", + "minimum": 0 + } + }, + "required": ["enabled", "maxBuckets", "maxIndexes"] + } + } + }, + "external": { + "type": "object", + "properties": { + "upstreamTarget": { "type": "string", - "description": "Release channel" + "enum": ["main", "canary"] } }, - "required": ["host", "version", "postgres_engine", "release_channel"] + "required": ["upstreamTarget"] } }, - "required": ["id", "organization_id", "name", "region", "created_at", "status", "database"] + "additionalProperties": false }, - "V1CreateProjectBodyDto": { + "PostgresConfigResponse": { "type": "object", "properties": { - "db_pass": { - "type": "string", - "description": "Database password" + "effective_cache_size": { + "type": "string" }, - "name": { - "type": "string", - "description": "Name of your project" + "logical_decoding_work_mem": { + "type": "string" }, - "organization_id": { - "type": "string", - "description": "Slug of your organization" + "maintenance_work_mem": { + "type": "string" }, - "plan": { - "type": "string", - "enum": ["free", "pro"], - "deprecated": true, - "description": "Subscription Plan is now set on organization level and is ignored in this request" + "track_activity_query_size": { + "type": "string" }, - "region": { - "type": "string", - "description": "Region you want your server to reside in", - "enum": [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "ap-east-1", - "ap-southeast-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-southeast-2", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-north-1", - "eu-central-1", - "eu-central-2", - "ca-central-1", - "ap-south-1", - "sa-east-1" - ] + "max_connections": { + "type": "integer", + "minimum": 1, + "maximum": 262143 + }, + "max_locks_per_transaction": { + "type": "integer", + "minimum": 10, + "maximum": 2147483640 + }, + "max_parallel_maintenance_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers_per_gather": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_replication_slots": { + "type": "integer" + }, + "max_slot_wal_keep_size": { + "type": "string" + }, + "max_standby_archive_delay": { + "type": "string" }, - "kps_enabled": { - "type": "boolean", - "deprecated": true, - "description": "This field is deprecated and is ignored in this request" + "max_standby_streaming_delay": { + "type": "string" }, - "desired_instance_size": { - "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] + "max_wal_size": { + "type": "string" }, - "template_url": { - "type": "string", - "format": "uri", - "description": "Template URL used to create the project from the CLI.", - "example": "https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone" - } - }, - "required": ["db_pass", "name", "organization_id", "region"], - "additionalProperties": false, - "hideDefinitions": ["release_channel", "postgres_engine"] - }, - "V1ProjectResponse": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Id of your project" + "max_wal_senders": { + "type": "integer" }, - "organization_id": { - "type": "string", - "description": "Slug of your organization" + "max_worker_processes": { + "type": "integer", + "minimum": 0, + "maximum": 262143 }, - "name": { + "session_replication_role": { "type": "string", - "description": "Name of your project" + "enum": ["origin", "replica", "local"] }, - "region": { + "shared_buffers": { + "type": "string" + }, + "statement_timeout": { "type": "string", - "description": "Region of your project", - "example": "us-east-1" + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" }, - "created_at": { + "track_commit_timestamp": { + "type": "boolean" + }, + "wal_keep_size": { + "type": "string" + }, + "wal_sender_timeout": { "type": "string", - "description": "Creation timestamp", - "example": "2023-03-29T16:32:59Z" + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" }, - "status": { + "work_mem": { + "type": "string" + }, + "checkpoint_timeout": { "type": "string", - "enum": [ - "INACTIVE", - "ACTIVE_HEALTHY", - "ACTIVE_UNHEALTHY", - "COMING_UP", - "UNKNOWN", - "GOING_DOWN", - "INIT_FAILED", - "REMOVED", - "RESTORING", - "UPGRADING", - "PAUSING", - "RESTORE_FAILED", - "RESTARTING", - "PAUSE_FAILED", - "RESIZING" - ] + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { + "type": "boolean" } - }, - "required": ["id", "organization_id", "name", "region", "created_at", "status"] + } }, - "OrganizationResponseV1": { + "UpdatePostgresConfigBody": { "type": "object", "properties": { - "id": { + "effective_cache_size": { "type": "string" }, - "name": { + "logical_decoding_work_mem": { "type": "string" - } - }, - "required": ["id", "name"] - }, - "CreateOrganizationV1Dto": { - "type": "object", - "properties": { - "name": { + }, + "maintenance_work_mem": { "type": "string" - } - }, - "required": ["name"], - "additionalProperties": false - }, - "OAuthTokenBody": { - "type": "object", - "properties": { - "grant_type": { - "enum": ["authorization_code", "refresh_token"], + }, + "track_activity_query_size": { "type": "string" }, - "client_id": { + "max_connections": { + "type": "integer", + "minimum": 1, + "maximum": 262143 + }, + "max_locks_per_transaction": { + "type": "integer", + "minimum": 10, + "maximum": 2147483640 + }, + "max_parallel_maintenance_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_parallel_workers_per_gather": { + "type": "integer", + "minimum": 0, + "maximum": 1024 + }, + "max_replication_slots": { + "type": "integer" + }, + "max_slot_wal_keep_size": { "type": "string" }, - "client_secret": { + "max_standby_archive_delay": { "type": "string" }, - "code": { + "max_standby_streaming_delay": { "type": "string" }, - "code_verifier": { + "max_wal_size": { "type": "string" }, - "redirect_uri": { + "max_wal_senders": { + "type": "integer" + }, + "max_worker_processes": { + "type": "integer", + "minimum": 0, + "maximum": 262143 + }, + "session_replication_role": { + "type": "string", + "enum": ["origin", "replica", "local"] + }, + "shared_buffers": { "type": "string" }, - "refresh_token": { + "statement_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "track_commit_timestamp": { + "type": "boolean" + }, + "wal_keep_size": { + "type": "string" + }, + "wal_sender_timeout": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "work_mem": { "type": "string" + }, + "checkpoint_timeout": { + "type": "string", + "description": "Default unit: s", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "hot_standby_feedback": { + "type": "boolean" + }, + "restart_database": { + "type": "boolean" } }, - "required": ["grant_type", "client_id", "client_secret"] + "additionalProperties": false }, - "OAuthTokenResponse": { + "V1PgbouncerConfigResponse": { "type": "object", "properties": { - "expires_in": { - "type": "integer", - "format": "int64" + "default_pool_size": { + "type": "integer" }, - "token_type": { + "ignore_startup_parameters": { + "type": "string" + }, + "max_client_conn": { + "type": "integer" + }, + "pool_mode": { "type": "string", - "enum": ["Bearer"] + "enum": ["transaction", "session", "statement"] }, - "access_token": { + "connection_string": { "type": "string" }, - "refresh_token": { - "type": "string" + "server_idle_timeout": { + "type": "integer" + }, + "server_lifetime": { + "type": "integer" + }, + "query_wait_timeout": { + "type": "integer" + }, + "reserve_pool_size": { + "type": "integer" } - }, - "required": ["expires_in", "token_type", "access_token", "refresh_token"] + } }, - "OAuthRevokeTokenBodyDto": { + "SupavisorConfigResponse": { "type": "object", "properties": { - "client_id": { + "identifier": { + "type": "string" + }, + "database_type": { "type": "string", - "format": "uuid" + "enum": ["PRIMARY", "READ_REPLICA"] }, - "client_secret": { + "is_using_scram_auth": { + "type": "boolean" + }, + "db_user": { "type": "string" }, - "refresh_token": { + "db_host": { + "type": "string" + }, + "db_port": { + "type": "integer" + }, + "db_name": { + "type": "string" + }, + "connection_string": { "type": "string" + }, + "connectionString": { + "type": "string", + "description": "Use connection_string instead" + }, + "default_pool_size": { + "type": "integer", + "nullable": true + }, + "max_client_conn": { + "type": "integer", + "nullable": true + }, + "pool_mode": { + "type": "string", + "enum": ["transaction", "session"] } }, - "required": ["client_id", "client_secret", "refresh_token"], - "additionalProperties": false + "required": [ + "identifier", + "database_type", + "is_using_scram_auth", + "db_user", + "db_host", + "db_port", + "db_name", + "connection_string", + "connectionString", + "default_pool_size", + "max_client_conn", + "pool_mode" + ] }, - "SnippetProject": { + "UpdateSupavisorConfigBody": { "type": "object", "properties": { - "id": { + "default_pool_size": { "type": "integer", - "format": "int64" + "minimum": 0, + "maximum": 3000, + "nullable": true }, - "name": { - "type": "string" + "pool_mode": { + "type": "string", + "enum": ["transaction", "session"], + "description": "Dedicated pooler mode for the project" } - }, - "required": ["id", "name"] + } }, - "SnippetUser": { + "UpdateSupavisorConfigResponse": { "type": "object", "properties": { - "id": { + "default_pool_size": { "type": "integer", - "format": "int64" + "nullable": true }, - "username": { + "pool_mode": { "type": "string" } }, - "required": ["id", "username"] + "required": ["default_pool_size", "pool_mode"] }, - "SnippetMeta": { + "AuthConfigResponse": { "type": "object", "properties": { - "id": { - "type": "string" + "api_max_request_duration": { + "type": "integer", + "nullable": true }, - "inserted_at": { - "type": "string" + "db_max_pool_size": { + "type": "integer", + "nullable": true }, - "updated_at": { - "type": "string" + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true }, - "type": { + "disable_signup": { + "type": "boolean", + "nullable": true + }, + "external_anonymous_users_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_additional_client_ids": { "type": "string", - "enum": ["sql"] + "nullable": true }, - "visibility": { + "external_apple_client_id": { "type": "string", - "enum": ["user", "project", "org", "public"] + "nullable": true }, - "name": { - "type": "string" + "external_apple_email_optional": { + "type": "boolean", + "nullable": true }, - "description": { + "external_apple_enabled": { + "type": "boolean", + "nullable": true + }, + "external_apple_secret": { "type": "string", "nullable": true }, - "project": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "required": ["id", "name"] + "external_azure_client_id": { + "type": "string", + "nullable": true }, - "owner": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] + "external_azure_email_optional": { + "type": "boolean", + "nullable": true }, - "updated_by": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] - } - }, - "required": [ - "id", - "inserted_at", - "updated_at", - "type", - "visibility", - "name", - "description", - "project", - "owner", - "updated_by" - ] - }, - "SnippetList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "inserted_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["sql"] - }, - "visibility": { - "type": "string", - "enum": ["user", "project", "org", "public"] - }, - "name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "project": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "required": ["id", "name"] - }, - "owner": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] - }, - "updated_by": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] - } - }, - "required": [ - "id", - "inserted_at", - "updated_at", - "type", - "visibility", - "name", - "description", - "project", - "owner", - "updated_by" - ] - } + "external_azure_enabled": { + "type": "boolean", + "nullable": true }, - "cursor": { - "type": "string" - } - }, - "required": ["data"] - }, - "SnippetContent": { - "type": "object", - "properties": { - "favorite": { - "type": "boolean" + "external_azure_secret": { + "type": "string", + "nullable": true + }, + "external_azure_url": { + "type": "string", + "nullable": true + }, + "external_bitbucket_client_id": { + "type": "string", + "nullable": true + }, + "external_bitbucket_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_enabled": { + "type": "boolean", + "nullable": true + }, + "external_bitbucket_secret": { + "type": "string", + "nullable": true + }, + "external_discord_client_id": { + "type": "string", + "nullable": true + }, + "external_discord_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_discord_enabled": { + "type": "boolean", + "nullable": true + }, + "external_discord_secret": { + "type": "string", + "nullable": true }, - "schema_version": { - "type": "string" + "external_email_enabled": { + "type": "boolean", + "nullable": true }, - "sql": { - "type": "string" - } - }, - "required": ["favorite", "schema_version", "sql"] - }, - "SnippetResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" + "external_facebook_client_id": { + "type": "string", + "nullable": true }, - "inserted_at": { - "type": "string" + "external_facebook_email_optional": { + "type": "boolean", + "nullable": true }, - "updated_at": { - "type": "string" + "external_facebook_enabled": { + "type": "boolean", + "nullable": true }, - "type": { + "external_facebook_secret": { "type": "string", - "enum": ["sql"] + "nullable": true }, - "visibility": { - "enum": ["user", "project", "org", "public"], - "type": "string" + "external_figma_client_id": { + "type": "string", + "nullable": true }, - "name": { - "type": "string" + "external_figma_email_optional": { + "type": "boolean", + "nullable": true }, - "description": { + "external_figma_enabled": { + "type": "boolean", + "nullable": true + }, + "external_figma_secret": { "type": "string", "nullable": true }, - "project": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "required": ["id", "name"] + "external_github_client_id": { + "type": "string", + "nullable": true }, - "owner": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] + "external_github_email_optional": { + "type": "boolean", + "nullable": true }, - "updated_by": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - } - }, - "required": ["id", "username"] + "external_github_enabled": { + "type": "boolean", + "nullable": true }, - "content": { - "type": "object", - "properties": { - "favorite": { - "type": "boolean" - }, - "schema_version": { - "type": "string" - }, - "sql": { - "type": "string" - } - }, - "required": ["favorite", "schema_version", "sql"] - } - }, - "required": [ - "id", - "inserted_at", - "updated_at", - "type", - "visibility", - "name", - "description", - "project", - "owner", - "updated_by", - "content" - ] - }, - "ApiKeySecretJWTTemplate": { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - }, - "ApiKeyResponse": { - "type": "object", - "properties": { - "type": { - "nullable": true, + "external_github_secret": { "type": "string", - "enum": ["publishable", "secret", "legacy"] + "nullable": true }, - "name": { - "type": "string" + "external_gitlab_client_id": { + "type": "string", + "nullable": true }, - "api_key": { - "type": "string" + "external_gitlab_email_optional": { + "type": "boolean", + "nullable": true }, - "id": { + "external_gitlab_enabled": { + "type": "boolean", + "nullable": true + }, + "external_gitlab_secret": { "type": "string", "nullable": true }, - "prefix": { + "external_gitlab_url": { "type": "string", "nullable": true }, - "description": { + "external_google_additional_client_ids": { "type": "string", "nullable": true }, - "hash": { + "external_google_client_id": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] + "external_google_email_optional": { + "type": "boolean", + "nullable": true }, - "inserted_at": { - "type": "string", + "external_google_enabled": { + "type": "boolean", "nullable": true }, - "updated_at": { + "external_google_secret": { "type": "string", "nullable": true - } - }, - "required": ["name", "api_key"] - }, - "CreateApiKeyBody": { - "type": "object", - "properties": { - "type": { - "enum": ["publishable", "secret"], - "type": "string" }, - "description": { + "external_google_skip_nonce_check": { + "type": "boolean", + "nullable": true + }, + "external_kakao_client_id": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - } - }, - "required": ["type"] - }, - "UpdateApiKeyBody": { - "type": "object", - "properties": { - "description": { + "external_kakao_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_kakao_enabled": { + "type": "boolean", + "nullable": true + }, + "external_kakao_secret": { "type": "string", "nullable": true }, - "secret_jwt_template": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - }, - "required": ["role"] - } - ] - } - } - }, - "DesiredInstanceSize": { - "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] - }, - "ReleaseChannel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "PostgresEngine": { - "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] - }, - "CreateBranchBody": { - "type": "object", - "properties": { - "desired_instance_size": { + "external_keycloak_client_id": { "type": "string", - "enum": [ - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge", - "4xlarge", - "8xlarge", - "12xlarge", - "16xlarge" - ] + "nullable": true }, - "release_channel": { + "external_keycloak_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_enabled": { + "type": "boolean", + "nullable": true + }, + "external_keycloak_secret": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "nullable": true }, - "postgres_engine": { + "external_keycloak_url": { "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] + "nullable": true }, - "branch_name": { - "type": "string" + "external_linkedin_oidc_client_id": { + "type": "string", + "nullable": true }, - "git_branch": { - "type": "string" + "external_linkedin_oidc_email_optional": { + "type": "boolean", + "nullable": true }, - "persistent": { - "type": "boolean" + "external_linkedin_oidc_enabled": { + "type": "boolean", + "nullable": true }, - "region": { - "type": "string" - } - }, - "required": ["branch_name"] - }, - "ValidationRecord": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" + "external_linkedin_oidc_secret": { + "type": "string", + "nullable": true }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - }, - "ValidationError": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - }, - "SslValidation": { - "type": "object", - "properties": { - "status": { - "type": "string" + "external_slack_oidc_client_id": { + "type": "string", + "nullable": true }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } + "external_slack_oidc_email_optional": { + "type": "boolean", + "nullable": true }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "OwnershipVerification": { - "type": "object", - "properties": { - "type": { - "type": "string" + "external_slack_oidc_enabled": { + "type": "boolean", + "nullable": true }, - "name": { - "type": "string" + "external_slack_oidc_secret": { + "type": "string", + "nullable": true }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "CustomHostnameDetails": { - "type": "object", - "properties": { - "id": { - "type": "string" + "external_notion_client_id": { + "type": "string", + "nullable": true }, - "hostname": { - "type": "string" + "external_notion_email_optional": { + "type": "boolean", + "nullable": true }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] + "external_notion_enabled": { + "type": "boolean", + "nullable": true }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] + "external_notion_secret": { + "type": "string", + "nullable": true }, - "custom_origin_server": { - "type": "string" + "external_phone_enabled": { + "type": "boolean", + "nullable": true }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } + "external_slack_client_id": { + "type": "string", + "nullable": true }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - }, - "CfResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean" + "external_slack_email_optional": { + "type": "boolean", + "nullable": true }, - "errors": { - "type": "array", - "items": { - "type": "object" - } + "external_slack_enabled": { + "type": "boolean", + "nullable": true }, - "messages": { - "type": "array", - "items": { - "type": "object" - } + "external_slack_secret": { + "type": "string", + "nullable": true }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] - }, - "UpdateCustomHostnameResponse": { - "type": "object", - "properties": { - "status": { - "enum": [ - "1_not_started", - "2_initiated", - "3_challenge_verified", - "4_origin_setup_completed", - "5_services_reconfigured" - ], - "type": "string" + "external_spotify_client_id": { + "type": "string", + "nullable": true }, - "custom_hostname": { - "type": "string" + "external_spotify_email_optional": { + "type": "boolean", + "nullable": true }, - "data": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "result": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ssl": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "validation_records": { - "type": "array", - "items": { - "type": "object", - "properties": { - "txt_name": { - "type": "string" - }, - "txt_value": { - "type": "string" - } - }, - "required": ["txt_name", "txt_value"] - } - }, - "validation_errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] - } - } - }, - "required": ["status", "validation_records"] - }, - "ownership_verification": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": ["type", "name", "value"] - }, - "custom_origin_server": { - "type": "string" - }, - "verification_errors": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "id", - "hostname", - "ssl", - "ownership_verification", - "custom_origin_server", - "status" - ] - } - }, - "required": ["success", "errors", "messages", "result"] - } - }, - "required": ["status", "custom_hostname", "data"] - }, - "UpdateCustomHostnameBody": { - "type": "object", - "properties": { - "custom_hostname": { - "type": "string" - } - }, - "required": ["custom_hostname"] - }, - "NetworkBanResponse": { - "type": "object", - "properties": { - "banned_ipv4_addresses": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["banned_ipv4_addresses"] - }, - "RemoveNetworkBanRequest": { - "type": "object", - "properties": { - "ipv4_addresses": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["ipv4_addresses"] - }, - "NetworkRestrictionsRequest": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } + "external_spotify_enabled": { + "type": "boolean", + "nullable": true }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "NetworkRestrictionsResponse": { - "type": "object", - "properties": { - "entitlement": { - "enum": ["disallowed", "allowed"], - "type": "string" + "external_spotify_secret": { + "type": "string", + "nullable": true }, - "config": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } - }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } + "external_twitch_client_id": { + "type": "string", + "nullable": true }, - "old_config": { - "type": "object", - "properties": { - "dbAllowedCidrs": { - "type": "array", - "items": { - "type": "string" - } - }, - "dbAllowedCidrsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } + "external_twitch_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_twitch_enabled": { + "type": "boolean", + "nullable": true + }, + "external_twitch_secret": { + "type": "string", + "nullable": true + }, + "external_twitter_client_id": { + "type": "string", + "nullable": true + }, + "external_twitter_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_twitter_enabled": { + "type": "boolean", + "nullable": true + }, + "external_twitter_secret": { + "type": "string", + "nullable": true + }, + "external_x_client_id": { + "type": "string", + "nullable": true + }, + "external_x_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_x_enabled": { + "type": "boolean", + "nullable": true + }, + "external_x_secret": { + "type": "string", + "nullable": true + }, + "external_workos_client_id": { + "type": "string", + "nullable": true + }, + "external_workos_enabled": { + "type": "boolean", + "nullable": true + }, + "external_workos_secret": { + "type": "string", + "nullable": true + }, + "external_workos_url": { + "type": "string", + "nullable": true }, - "status": { - "enum": ["stored", "applied"], - "type": "string" - } - }, - "required": ["entitlement", "config", "status"] - }, - "PgsodiumConfigResponse": { - "type": "object", - "properties": { - "root_key": { - "type": "string" - } - }, - "required": ["root_key"] - }, - "UpdatePgsodiumConfigBody": { - "type": "object", - "properties": { - "root_key": { - "type": "string" - } - }, - "required": ["root_key"] - }, - "PostgrestConfigWithJWTSecretResponse": { - "type": "object", - "properties": { - "max_rows": { - "type": "integer" + "external_web3_solana_enabled": { + "type": "boolean", + "nullable": true }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." + "external_web3_ethereum_enabled": { + "type": "boolean", + "nullable": true }, - "db_schema": { - "type": "string" + "external_zoom_client_id": { + "type": "string", + "nullable": true }, - "db_extra_search_path": { - "type": "string" + "external_zoom_email_optional": { + "type": "boolean", + "nullable": true }, - "jwt_secret": { - "type": "string" - } - }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - }, - "UpdatePostgrestConfigBody": { - "type": "object", - "properties": { - "max_rows": { - "type": "integer", - "minimum": 0, - "maximum": 1000000 + "external_zoom_enabled": { + "type": "boolean", + "nullable": true }, - "db_pool": { - "type": "integer", - "minimum": 0, - "maximum": 1000 + "external_zoom_secret": { + "type": "string", + "nullable": true }, - "db_extra_search_path": { - "type": "string" + "hook_custom_access_token_enabled": { + "type": "boolean", + "nullable": true }, - "db_schema": { - "type": "string" - } - } - }, - "V1PostgrestConfigResponse": { - "type": "object", - "properties": { - "max_rows": { - "type": "integer" + "hook_custom_access_token_uri": { + "type": "string", + "nullable": true }, - "db_pool": { - "type": "integer", - "nullable": true, - "description": "If `null`, the value is automatically configured based on compute size." + "hook_custom_access_token_secrets": { + "type": "string", + "nullable": true }, - "db_schema": { - "type": "string" + "hook_mfa_verification_attempt_enabled": { + "type": "boolean", + "nullable": true }, - "db_extra_search_path": { - "type": "string" - } - }, - "required": ["max_rows", "db_pool", "db_schema", "db_extra_search_path"] - }, - "V1ProjectRefResponse": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64" + "hook_mfa_verification_attempt_uri": { + "type": "string", + "nullable": true }, - "ref": { - "type": "string" + "hook_mfa_verification_attempt_secrets": { + "type": "string", + "nullable": true }, - "name": { - "type": "string" - } - }, - "required": ["id", "ref", "name"] - }, - "SecretResponse": { - "type": "object", - "properties": { - "name": { - "type": "string" + "hook_password_verification_attempt_enabled": { + "type": "boolean", + "nullable": true }, - "value": { - "type": "string" - } - }, - "required": ["name", "value"] - }, - "CreateSecretBody": { - "type": "object", - "properties": { - "name": { + "hook_password_verification_attempt_uri": { "type": "string", - "maxLength": 256, - "pattern": "/^(?!SUPABASE_).*/", - "description": "Secret name must not start with the SUPABASE_ prefix.", - "example": "string" + "nullable": true }, - "value": { + "hook_password_verification_attempt_secrets": { "type": "string", - "maxLength": 24576 - } - }, - "required": ["name", "value"] - }, - "SslEnforcements": { - "type": "object", - "properties": { - "database": { - "type": "boolean" - } - }, - "required": ["database"] - }, - "SslEnforcementResponse": { - "type": "object", - "properties": { - "currentConfig": { - "type": "object", - "properties": { - "database": { - "type": "boolean" - } - }, - "required": ["database"] + "nullable": true }, - "appliedSuccessfully": { - "type": "boolean" - } - }, - "required": ["currentConfig", "appliedSuccessfully"] - }, - "SslEnforcementRequest": { - "type": "object", - "properties": { - "requestedConfig": { - "type": "object", - "properties": { - "database": { - "type": "boolean" - } - }, - "required": ["database"] - } - }, - "required": ["requestedConfig"] - }, - "TypescriptResponse": { - "type": "object", - "properties": { - "types": { - "type": "string" - } - }, - "required": ["types"] - }, - "VanitySubdomainConfigResponse": { - "type": "object", - "properties": { - "status": { - "enum": ["not-used", "custom-domain-used", "active"], - "type": "string" + "hook_send_sms_enabled": { + "type": "boolean", + "nullable": true }, - "custom_domain": { - "type": "string" - } - }, - "required": ["status"] - }, - "VanitySubdomainBody": { - "type": "object", - "properties": { - "vanity_subdomain": { - "type": "string" - } - }, - "required": ["vanity_subdomain"] - }, - "SubdomainAvailabilityResponse": { - "type": "object", - "properties": { - "available": { - "type": "boolean" - } - }, - "required": ["available"] - }, - "ActivateVanitySubdomainResponse": { - "type": "object", - "properties": { - "custom_domain": { - "type": "string" - } - }, - "required": ["custom_domain"] - }, - "UpgradeDatabaseBody": { - "type": "object", - "properties": { - "release_channel": { + "hook_send_sms_uri": { + "type": "string", + "nullable": true + }, + "hook_send_sms_secrets": { + "type": "string", + "nullable": true + }, + "hook_send_email_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_send_email_uri": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "nullable": true }, - "target_version": { - "type": "string" - } - }, - "required": ["release_channel", "target_version"] - }, - "ProjectUpgradeInitiateResponse": { - "type": "object", - "properties": { - "tracking_id": { - "type": "string" - } - }, - "required": ["tracking_id"] - }, - "ProjectVersion": { - "type": "object", - "properties": { - "postgres_version": { + "hook_send_email_secrets": { "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] + "nullable": true }, - "release_channel": { + "hook_before_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_before_user_created_uri": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "nullable": true }, - "app_version": { - "type": "string" - } - }, - "required": ["postgres_version", "release_channel", "app_version"] - }, - "ProjectUpgradeEligibilityResponse": { - "type": "object", - "properties": { - "current_app_version_release_channel": { + "hook_before_user_created_secrets": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "nullable": true }, - "duration_estimate_hours": { + "hook_after_user_created_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_after_user_created_uri": { + "type": "string", + "nullable": true + }, + "hook_after_user_created_secrets": { + "type": "string", + "nullable": true + }, + "jwt_exp": { + "type": "integer", + "nullable": true + }, + "mailer_allow_unverified_email_sign_ins": { + "type": "boolean", + "nullable": true + }, + "mailer_autoconfirm": { + "type": "boolean", + "nullable": true + }, + "mailer_otp_exp": { "type": "integer" }, - "eligible": { - "type": "boolean" + "mailer_otp_length": { + "type": "integer", + "nullable": true }, - "current_app_version": { - "type": "string" + "mailer_secure_email_change_enabled": { + "type": "boolean", + "nullable": true }, - "latest_app_version": { - "type": "string" + "mailer_subjects_confirmation": { + "type": "string", + "nullable": true }, - "target_upgrade_versions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "postgres_version": { - "type": "string", - "description": "Postgres engine version. If not provided, the latest version will be used.", - "enum": ["15", "17-oriole"] - }, - "release_channel": { - "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] - }, - "app_version": { - "type": "string" - } - }, - "required": ["postgres_version", "release_channel", "app_version"] - } + "mailer_subjects_email_change": { + "type": "string", + "nullable": true }, - "potential_breaking_changes": { - "type": "array", - "items": { - "type": "string" - } + "mailer_subjects_invite": { + "type": "string", + "nullable": true }, - "legacy_auth_custom_roles": { - "type": "array", - "items": { - "type": "string" - } + "mailer_subjects_magic_link": { + "type": "string", + "nullable": true }, - "extension_dependent_objects": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "current_app_version_release_channel", - "duration_estimate_hours", - "eligible", - "current_app_version", - "latest_app_version", - "target_upgrade_versions", - "potential_breaking_changes", - "legacy_auth_custom_roles", - "extension_dependent_objects" - ] - }, - "DatabaseUpgradeStatus": { - "type": "object", - "properties": { - "target_version": { - "type": "integer" + "mailer_subjects_reauthentication": { + "type": "string", + "nullable": true }, - "status": { - "enum": [0, 1, 2], - "type": "integer" + "mailer_subjects_recovery": { + "type": "string", + "nullable": true }, - "initiated_at": { - "type": "string" + "mailer_subjects_password_changed_notification": { + "type": "string", + "nullable": true }, - "latest_status_at": { - "type": "string" + "mailer_subjects_email_changed_notification": { + "type": "string", + "nullable": true }, - "error": { + "mailer_subjects_phone_changed_notification": { "type": "string", - "enum": [ - "1_upgraded_instance_launch_failed", - "2_volume_detachchment_from_upgraded_instance_failed", - "3_volume_attachment_to_original_instance_failed", - "4_data_upgrade_initiation_failed", - "5_data_upgrade_completion_failed", - "6_volume_detachchment_from_original_instance_failed", - "7_volume_attachment_to_upgraded_instance_failed", - "8_upgrade_completion_failed", - "9_post_physical_backup_failed" - ] + "nullable": true }, - "progress": { + "mailer_subjects_mfa_factor_enrolled_notification": { "type": "string", - "enum": [ - "0_requested", - "1_started", - "2_launched_upgraded_instance", - "3_detached_volume_from_upgraded_instance", - "4_attached_volume_to_original_instance", - "5_initiated_data_upgrade", - "6_completed_data_upgrade", - "7_detached_volume_from_original_instance", - "8_attached_volume_to_upgraded_instance", - "9_completed_upgrade", - "10_completed_post_physical_backup" - ] - } - }, - "required": ["target_version", "status", "initiated_at", "latest_status_at"] - }, - "DatabaseUpgradeStatusResponse": { - "type": "object", - "properties": { - "databaseUpgradeStatus": { - "nullable": true, - "allOf": [ - { - "type": "object", - "properties": { - "target_version": { - "type": "integer" - }, - "status": { - "enum": [0, 1, 2], - "type": "integer" - }, - "initiated_at": { - "type": "string" - }, - "latest_status_at": { - "type": "string" - }, - "error": { - "type": "string", - "enum": [ - "1_upgraded_instance_launch_failed", - "2_volume_detachchment_from_upgraded_instance_failed", - "3_volume_attachment_to_original_instance_failed", - "4_data_upgrade_initiation_failed", - "5_data_upgrade_completion_failed", - "6_volume_detachchment_from_original_instance_failed", - "7_volume_attachment_to_upgraded_instance_failed", - "8_upgrade_completion_failed", - "9_post_physical_backup_failed" - ] - }, - "progress": { - "type": "string", - "enum": [ - "0_requested", - "1_started", - "2_launched_upgraded_instance", - "3_detached_volume_from_upgraded_instance", - "4_attached_volume_to_original_instance", - "5_initiated_data_upgrade", - "6_completed_data_upgrade", - "7_detached_volume_from_original_instance", - "8_attached_volume_to_upgraded_instance", - "9_completed_upgrade", - "10_completed_post_physical_backup" - ] - } - }, - "required": ["target_version", "status", "initiated_at", "latest_status_at"] - } - ] - } - }, - "required": ["databaseUpgradeStatus"] - }, - "ReadOnlyStatusResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" + "nullable": true }, - "override_enabled": { - "type": "boolean" + "mailer_subjects_mfa_factor_unenrolled_notification": { + "type": "string", + "nullable": true }, - "override_active_until": { - "type": "string" - } - }, - "required": ["enabled", "override_enabled", "override_active_until"] - }, - "SetUpReadReplicaBody": { - "type": "object", - "properties": { - "read_replica_region": { + "mailer_subjects_identity_linked_notification": { "type": "string", - "enum": [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "ap-east-1", - "ap-southeast-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-southeast-2", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-north-1", - "eu-central-1", - "eu-central-2", - "ca-central-1", - "ap-south-1", - "sa-east-1" - ], - "description": "Region you want your read replica to reside in", - "example": "us-east-1" - } - }, - "required": ["read_replica_region"] - }, - "RemoveReadReplicaBody": { - "type": "object", - "properties": { - "database_identifier": { - "type": "string" - } - }, - "required": ["database_identifier"] - }, - "AuthHealthResponse": { - "type": "object", - "properties": { - "name": { + "nullable": true + }, + "mailer_subjects_identity_unlinked_notification": { + "type": "string", + "nullable": true + }, + "mailer_templates_confirmation_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_change_content": { "type": "string", - "enum": ["GoTrue"] - } - }, - "required": ["name"] - }, - "RealtimeHealthResponse": { - "type": "object", - "properties": { - "connected_cluster": { - "type": "integer" - } - }, - "required": ["connected_cluster"] - }, - "V1ServiceHealthResponse": { - "type": "object", - "properties": { - "info": { - "oneOf": [ - { - "type": "object", - "properties": { - "name": { - "type": "string", - "enum": ["GoTrue"] - } - }, - "required": ["name"] - }, - { - "type": "object", - "properties": { - "connected_cluster": { - "type": "integer" - } - }, - "required": ["connected_cluster"] - } - ] + "nullable": true }, - "name": { - "enum": ["auth", "db", "pooler", "realtime", "rest", "storage"], - "type": "string" + "mailer_templates_invite_content": { + "type": "string", + "nullable": true }, - "healthy": { - "type": "boolean" + "mailer_templates_magic_link_content": { + "type": "string", + "nullable": true }, - "status": { - "enum": ["COMING_UP", "ACTIVE_HEALTHY", "UNHEALTHY"], - "type": "string" + "mailer_templates_reauthentication_content": { + "type": "string", + "nullable": true }, - "error": { - "type": "string" - } - }, - "required": ["name", "healthy", "status"] - }, - "StorageFeatureImageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "StorageFeatureS3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "StorageFeatures": { - "type": "object", - "properties": { - "imageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] + "mailer_templates_recovery_content": { + "type": "string", + "nullable": true }, - "s3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - }, - "required": ["imageTransformation", "s3Protocol"] - }, - "StorageConfigResponse": { - "type": "object", - "properties": { - "fileSizeLimit": { + "mailer_templates_password_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_email_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_phone_changed_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_enrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_linked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_templates_identity_unlinked_notification_content": { + "type": "string", + "nullable": true + }, + "mailer_notifications_password_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_email_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_phone_changed_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_mfa_factor_unenrolled_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_linked_enabled": { + "type": "boolean", + "nullable": true + }, + "mailer_notifications_identity_unlinked_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_max_enrolled_factors": { "type": "integer", - "format": "int64" + "nullable": true }, - "features": { - "type": "object", - "properties": { - "imageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "s3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - }, - "required": ["imageTransformation", "s3Protocol"] - } - }, - "required": ["fileSizeLimit", "features"] - }, - "UpdateStorageConfigBody": { - "type": "object", - "properties": { - "fileSizeLimit": { + "mfa_totp_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_totp_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_enroll_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_web_authn_verify_enabled": { + "type": "boolean", + "nullable": true + }, + "mfa_phone_otp_length": { + "type": "integer" + }, + "mfa_phone_template": { + "type": "string", + "nullable": true + }, + "mfa_phone_max_frequency": { "type": "integer", - "minimum": 0, - "maximum": 53687091200, - "format": "int64" + "nullable": true }, - "features": { - "type": "object", - "properties": { - "imageTransformation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "s3Protocol": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - }, - "required": ["imageTransformation", "s3Protocol"] - } - } - }, - "PostgresConfigResponse": { - "type": "object", - "properties": { - "effective_cache_size": { - "type": "string" + "nimbus_oauth_client_id": { + "type": "string", + "nullable": true }, - "logical_decoding_work_mem": { - "type": "string" + "nimbus_oauth_email_optional": { + "type": "boolean", + "nullable": true }, - "maintenance_work_mem": { - "type": "string" + "nimbus_oauth_client_secret": { + "type": "string", + "nullable": true }, - "track_activity_query_size": { - "type": "string" + "password_hibp_enabled": { + "type": "boolean", + "nullable": true + }, + "password_min_length": { + "type": "integer", + "nullable": true + }, + "password_required_characters": { + "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], + "nullable": true }, - "max_connections": { + "rate_limit_anonymous_users": { "type": "integer", - "minimum": 1, - "maximum": 262143 + "nullable": true }, - "max_locks_per_transaction": { + "rate_limit_email_sent": { "type": "integer", - "minimum": 10, - "maximum": 2147483640 + "nullable": true }, - "max_parallel_maintenance_workers": { + "rate_limit_sms_sent": { "type": "integer", - "minimum": 0, - "maximum": 1024 + "nullable": true }, - "max_parallel_workers": { + "rate_limit_token_refresh": { "type": "integer", - "minimum": 0, - "maximum": 1024 + "nullable": true }, - "max_parallel_workers_per_gather": { + "rate_limit_verify": { "type": "integer", - "minimum": 0, - "maximum": 1024 - }, - "max_replication_slots": { - "type": "integer" - }, - "max_slot_wal_keep_size": { - "type": "string" - }, - "max_standby_archive_delay": { - "type": "string" - }, - "max_standby_streaming_delay": { - "type": "string" - }, - "max_wal_size": { - "type": "string" + "nullable": true }, - "max_wal_senders": { - "type": "integer" + "rate_limit_otp": { + "type": "integer", + "nullable": true }, - "max_worker_processes": { + "rate_limit_web3": { "type": "integer", - "minimum": 0, - "maximum": 262143 + "nullable": true }, - "shared_buffers": { - "type": "string" + "refresh_token_rotation_enabled": { + "type": "boolean", + "nullable": true }, - "statement_timeout": { - "type": "string" + "saml_enabled": { + "type": "boolean", + "nullable": true }, - "track_commit_timestamp": { - "type": "boolean" + "saml_external_url": { + "type": "string", + "nullable": true }, - "wal_keep_size": { - "type": "string" + "saml_allow_encrypted_assertions": { + "type": "boolean", + "nullable": true }, - "wal_sender_timeout": { - "type": "string" + "security_captcha_enabled": { + "type": "boolean", + "nullable": true }, - "work_mem": { - "type": "string" + "security_captcha_provider": { + "type": "string", + "enum": ["turnstile", "hcaptcha"], + "nullable": true }, - "session_replication_role": { - "enum": ["origin", "replica", "local"], - "type": "string" - } - } - }, - "UpdatePostgresConfigBody": { - "type": "object", - "properties": { - "effective_cache_size": { - "type": "string" + "security_captcha_secret": { + "type": "string", + "nullable": true }, - "logical_decoding_work_mem": { - "type": "string" + "security_manual_linking_enabled": { + "type": "boolean", + "nullable": true }, - "maintenance_work_mem": { - "type": "string" + "security_refresh_token_reuse_interval": { + "type": "integer", + "nullable": true }, - "track_activity_query_size": { - "type": "string" + "security_update_password_require_reauthentication": { + "type": "boolean", + "nullable": true }, - "max_connections": { + "sessions_inactivity_timeout": { "type": "integer", - "minimum": 1, - "maximum": 262143 + "nullable": true }, - "max_locks_per_transaction": { - "type": "integer", - "minimum": 10, - "maximum": 2147483640 + "sessions_single_per_user": { + "type": "boolean", + "nullable": true }, - "max_parallel_maintenance_workers": { - "type": "integer", - "minimum": 0, - "maximum": 1024 + "sessions_tags": { + "type": "string", + "nullable": true }, - "max_parallel_workers": { + "sessions_timebox": { "type": "integer", - "minimum": 0, - "maximum": 1024 + "nullable": true }, - "max_parallel_workers_per_gather": { - "type": "integer", - "minimum": 0, - "maximum": 1024 + "site_url": { + "type": "string", + "nullable": true }, - "max_replication_slots": { - "type": "integer" + "sms_autoconfirm": { + "type": "boolean", + "nullable": true }, - "max_slot_wal_keep_size": { - "type": "string" + "sms_max_frequency": { + "type": "integer", + "nullable": true }, - "max_standby_archive_delay": { - "type": "string" + "sms_messagebird_access_key": { + "type": "string", + "nullable": true }, - "max_standby_streaming_delay": { - "type": "string" + "sms_messagebird_originator": { + "type": "string", + "nullable": true }, - "max_wal_size": { - "type": "string" + "sms_otp_exp": { + "type": "integer", + "nullable": true }, - "max_wal_senders": { + "sms_otp_length": { "type": "integer" }, - "max_worker_processes": { - "type": "integer", - "minimum": 0, - "maximum": 262143 + "sms_provider": { + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], + "nullable": true }, - "shared_buffers": { - "type": "string" + "sms_template": { + "type": "string", + "nullable": true }, - "statement_timeout": { - "type": "string" + "sms_test_otp": { + "type": "string", + "nullable": true }, - "track_commit_timestamp": { - "type": "boolean" + "sms_test_otp_valid_until": { + "type": "string", + "format": "date-time", + "nullable": true }, - "wal_keep_size": { - "type": "string" + "sms_textlocal_api_key": { + "type": "string", + "nullable": true }, - "wal_sender_timeout": { - "type": "string" + "sms_textlocal_sender": { + "type": "string", + "nullable": true }, - "work_mem": { - "type": "string" + "sms_twilio_account_sid": { + "type": "string", + "nullable": true }, - "restart_database": { - "type": "boolean" + "sms_twilio_auth_token": { + "type": "string", + "nullable": true }, - "session_replication_role": { - "enum": ["origin", "replica", "local"], - "type": "string" - } - } - }, - "V1PgbouncerConfigResponse": { - "type": "object", - "properties": { - "pool_mode": { + "sms_twilio_content_sid": { "type": "string", - "enum": ["transaction", "session", "statement"] + "nullable": true }, - "default_pool_size": { - "type": "number" + "sms_twilio_message_service_sid": { + "type": "string", + "nullable": true }, - "ignore_startup_parameters": { - "type": "string" + "sms_twilio_verify_account_sid": { + "type": "string", + "nullable": true }, - "max_client_conn": { - "type": "number" + "sms_twilio_verify_auth_token": { + "type": "string", + "nullable": true }, - "connection_string": { - "type": "string" - } - } - }, - "SupavisorConfigResponse": { - "type": "object", - "properties": { - "database_type": { + "sms_twilio_verify_message_service_sid": { + "type": "string", + "nullable": true + }, + "sms_vonage_api_key": { + "type": "string", + "nullable": true + }, + "sms_vonage_api_secret": { "type": "string", - "enum": ["PRIMARY", "READ_REPLICA"] + "nullable": true }, - "db_port": { - "type": "integer" + "sms_vonage_from": { + "type": "string", + "nullable": true }, - "default_pool_size": { - "type": "integer", + "smtp_admin_email": { + "type": "string", + "format": "email", "nullable": true }, - "max_client_conn": { + "smtp_host": { + "type": "string", + "nullable": true + }, + "smtp_max_frequency": { "type": "integer", "nullable": true }, - "identifier": { - "type": "string" + "smtp_pass": { + "type": "string", + "nullable": true }, - "is_using_scram_auth": { - "type": "boolean" + "smtp_port": { + "type": "string", + "nullable": true }, - "db_user": { - "type": "string" + "smtp_sender_name": { + "type": "string", + "nullable": true }, - "db_host": { - "type": "string" + "smtp_user": { + "type": "string", + "nullable": true }, - "db_name": { - "type": "string" + "uri_allow_list": { + "type": "string", + "nullable": true }, - "connectionString": { - "type": "string" + "oauth_server_enabled": { + "type": "boolean" }, - "pool_mode": { - "enum": ["transaction", "session"], - "type": "string" - } - }, - "required": [ - "database_type", - "db_port", - "default_pool_size", - "max_client_conn", - "identifier", - "is_using_scram_auth", - "db_user", - "db_host", - "db_name", - "connectionString", - "pool_mode" - ] - }, - "UpdateSupavisorConfigBody": { - "type": "object", - "properties": { - "default_pool_size": { - "type": "integer", - "nullable": true, - "minimum": 0, - "maximum": 1000 + "oauth_server_allow_dynamic_registration": { + "type": "boolean" }, - "pool_mode": { - "enum": ["transaction", "session"], + "oauth_server_authorization_path": { "type": "string", - "deprecated": true, - "description": "This field is deprecated and is ignored in this request" - } - } - }, - "UpdateSupavisorConfigResponse": { - "type": "object", - "properties": { - "default_pool_size": { - "type": "integer", "nullable": true - }, - "pool_mode": { - "enum": ["transaction", "session"], - "type": "string" } }, - "required": ["default_pool_size", "pool_mode"] + "required": [ + "api_max_request_duration", + "db_max_pool_size", + "db_max_pool_size_unit", + "disable_signup", + "external_anonymous_users_enabled", + "external_apple_additional_client_ids", + "external_apple_client_id", + "external_apple_email_optional", + "external_apple_enabled", + "external_apple_secret", + "external_azure_client_id", + "external_azure_email_optional", + "external_azure_enabled", + "external_azure_secret", + "external_azure_url", + "external_bitbucket_client_id", + "external_bitbucket_email_optional", + "external_bitbucket_enabled", + "external_bitbucket_secret", + "external_discord_client_id", + "external_discord_email_optional", + "external_discord_enabled", + "external_discord_secret", + "external_email_enabled", + "external_facebook_client_id", + "external_facebook_email_optional", + "external_facebook_enabled", + "external_facebook_secret", + "external_figma_client_id", + "external_figma_email_optional", + "external_figma_enabled", + "external_figma_secret", + "external_github_client_id", + "external_github_email_optional", + "external_github_enabled", + "external_github_secret", + "external_gitlab_client_id", + "external_gitlab_email_optional", + "external_gitlab_enabled", + "external_gitlab_secret", + "external_gitlab_url", + "external_google_additional_client_ids", + "external_google_client_id", + "external_google_email_optional", + "external_google_enabled", + "external_google_secret", + "external_google_skip_nonce_check", + "external_kakao_client_id", + "external_kakao_email_optional", + "external_kakao_enabled", + "external_kakao_secret", + "external_keycloak_client_id", + "external_keycloak_email_optional", + "external_keycloak_enabled", + "external_keycloak_secret", + "external_keycloak_url", + "external_linkedin_oidc_client_id", + "external_linkedin_oidc_email_optional", + "external_linkedin_oidc_enabled", + "external_linkedin_oidc_secret", + "external_slack_oidc_client_id", + "external_slack_oidc_email_optional", + "external_slack_oidc_enabled", + "external_slack_oidc_secret", + "external_notion_client_id", + "external_notion_email_optional", + "external_notion_enabled", + "external_notion_secret", + "external_phone_enabled", + "external_slack_client_id", + "external_slack_email_optional", + "external_slack_enabled", + "external_slack_secret", + "external_spotify_client_id", + "external_spotify_email_optional", + "external_spotify_enabled", + "external_spotify_secret", + "external_twitch_client_id", + "external_twitch_email_optional", + "external_twitch_enabled", + "external_twitch_secret", + "external_twitter_client_id", + "external_twitter_email_optional", + "external_twitter_enabled", + "external_twitter_secret", + "external_x_client_id", + "external_x_email_optional", + "external_x_enabled", + "external_x_secret", + "external_workos_client_id", + "external_workos_enabled", + "external_workos_secret", + "external_workos_url", + "external_web3_solana_enabled", + "external_web3_ethereum_enabled", + "external_zoom_client_id", + "external_zoom_email_optional", + "external_zoom_enabled", + "external_zoom_secret", + "hook_custom_access_token_enabled", + "hook_custom_access_token_uri", + "hook_custom_access_token_secrets", + "hook_mfa_verification_attempt_enabled", + "hook_mfa_verification_attempt_uri", + "hook_mfa_verification_attempt_secrets", + "hook_password_verification_attempt_enabled", + "hook_password_verification_attempt_uri", + "hook_password_verification_attempt_secrets", + "hook_send_sms_enabled", + "hook_send_sms_uri", + "hook_send_sms_secrets", + "hook_send_email_enabled", + "hook_send_email_uri", + "hook_send_email_secrets", + "hook_before_user_created_enabled", + "hook_before_user_created_uri", + "hook_before_user_created_secrets", + "hook_after_user_created_enabled", + "hook_after_user_created_uri", + "hook_after_user_created_secrets", + "jwt_exp", + "mailer_allow_unverified_email_sign_ins", + "mailer_autoconfirm", + "mailer_otp_exp", + "mailer_otp_length", + "mailer_secure_email_change_enabled", + "mailer_subjects_confirmation", + "mailer_subjects_email_change", + "mailer_subjects_invite", + "mailer_subjects_magic_link", + "mailer_subjects_reauthentication", + "mailer_subjects_recovery", + "mailer_subjects_password_changed_notification", + "mailer_subjects_email_changed_notification", + "mailer_subjects_phone_changed_notification", + "mailer_subjects_mfa_factor_enrolled_notification", + "mailer_subjects_mfa_factor_unenrolled_notification", + "mailer_subjects_identity_linked_notification", + "mailer_subjects_identity_unlinked_notification", + "mailer_templates_confirmation_content", + "mailer_templates_email_change_content", + "mailer_templates_invite_content", + "mailer_templates_magic_link_content", + "mailer_templates_reauthentication_content", + "mailer_templates_recovery_content", + "mailer_templates_password_changed_notification_content", + "mailer_templates_email_changed_notification_content", + "mailer_templates_phone_changed_notification_content", + "mailer_templates_mfa_factor_enrolled_notification_content", + "mailer_templates_mfa_factor_unenrolled_notification_content", + "mailer_templates_identity_linked_notification_content", + "mailer_templates_identity_unlinked_notification_content", + "mailer_notifications_password_changed_enabled", + "mailer_notifications_email_changed_enabled", + "mailer_notifications_phone_changed_enabled", + "mailer_notifications_mfa_factor_enrolled_enabled", + "mailer_notifications_mfa_factor_unenrolled_enabled", + "mailer_notifications_identity_linked_enabled", + "mailer_notifications_identity_unlinked_enabled", + "mfa_max_enrolled_factors", + "mfa_totp_enroll_enabled", + "mfa_totp_verify_enabled", + "mfa_phone_enroll_enabled", + "mfa_phone_verify_enabled", + "mfa_web_authn_enroll_enabled", + "mfa_web_authn_verify_enabled", + "mfa_phone_otp_length", + "mfa_phone_template", + "mfa_phone_max_frequency", + "nimbus_oauth_client_id", + "nimbus_oauth_email_optional", + "nimbus_oauth_client_secret", + "password_hibp_enabled", + "password_min_length", + "password_required_characters", + "rate_limit_anonymous_users", + "rate_limit_email_sent", + "rate_limit_sms_sent", + "rate_limit_token_refresh", + "rate_limit_verify", + "rate_limit_otp", + "rate_limit_web3", + "refresh_token_rotation_enabled", + "saml_enabled", + "saml_external_url", + "saml_allow_encrypted_assertions", + "security_captcha_enabled", + "security_captcha_provider", + "security_captcha_secret", + "security_manual_linking_enabled", + "security_refresh_token_reuse_interval", + "security_update_password_require_reauthentication", + "sessions_inactivity_timeout", + "sessions_single_per_user", + "sessions_tags", + "sessions_timebox", + "site_url", + "sms_autoconfirm", + "sms_max_frequency", + "sms_messagebird_access_key", + "sms_messagebird_originator", + "sms_otp_exp", + "sms_otp_length", + "sms_provider", + "sms_template", + "sms_test_otp", + "sms_test_otp_valid_until", + "sms_textlocal_api_key", + "sms_textlocal_sender", + "sms_twilio_account_sid", + "sms_twilio_auth_token", + "sms_twilio_content_sid", + "sms_twilio_message_service_sid", + "sms_twilio_verify_account_sid", + "sms_twilio_verify_auth_token", + "sms_twilio_verify_message_service_sid", + "sms_vonage_api_key", + "sms_vonage_api_secret", + "sms_vonage_from", + "smtp_admin_email", + "smtp_host", + "smtp_max_frequency", + "smtp_pass", + "smtp_port", + "smtp_sender_name", + "smtp_user", + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" + ] }, - "AuthConfigResponse": { + "UpdateAuthConfigBody": { "type": "object", "properties": { - "api_max_request_duration": { - "type": "integer", - "nullable": true - }, - "db_max_pool_size": { - "type": "integer", - "nullable": true - }, - "jwt_exp": { - "type": "integer", - "nullable": true - }, - "mailer_otp_exp": { - "type": "integer" - }, - "mailer_otp_length": { - "type": "integer", - "nullable": true - }, - "mfa_max_enrolled_factors": { - "type": "integer", - "nullable": true - }, - "mfa_phone_otp_length": { - "type": "integer" - }, - "mfa_phone_max_frequency": { - "type": "integer", - "nullable": true - }, - "password_min_length": { - "type": "integer", - "nullable": true - }, - "rate_limit_anonymous_users": { - "type": "integer", - "nullable": true - }, - "rate_limit_email_sent": { - "type": "integer", - "nullable": true - }, - "rate_limit_sms_sent": { - "type": "integer", - "nullable": true - }, - "rate_limit_token_refresh": { - "type": "integer", - "nullable": true - }, - "rate_limit_verify": { - "type": "integer", - "nullable": true - }, - "rate_limit_otp": { - "type": "integer", - "nullable": true - }, - "security_refresh_token_reuse_interval": { - "type": "integer", - "nullable": true - }, - "sessions_inactivity_timeout": { - "type": "integer", - "nullable": true - }, - "sessions_timebox": { - "type": "integer", - "nullable": true - }, - "sms_max_frequency": { - "type": "integer", - "nullable": true - }, - "sms_otp_exp": { - "type": "integer", - "nullable": true - }, - "sms_otp_length": { - "type": "integer" - }, - "smtp_max_frequency": { - "type": "integer", - "nullable": true - }, - "disable_signup": { - "type": "boolean", - "nullable": true - }, - "external_anonymous_users_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_additional_client_ids": { - "type": "string", - "nullable": true - }, - "external_apple_client_id": { - "type": "string", - "nullable": true - }, - "external_apple_enabled": { - "type": "boolean", - "nullable": true - }, - "external_apple_secret": { - "type": "string", - "nullable": true - }, - "external_azure_client_id": { - "type": "string", - "nullable": true - }, - "external_azure_enabled": { - "type": "boolean", - "nullable": true - }, - "external_azure_secret": { - "type": "string", - "nullable": true - }, - "external_azure_url": { - "type": "string", - "nullable": true - }, - "external_bitbucket_client_id": { + "site_url": { "type": "string", + "pattern": "^[^,]+$", "nullable": true }, - "external_bitbucket_enabled": { + "disable_signup": { "type": "boolean", "nullable": true }, - "external_bitbucket_secret": { - "type": "string", + "jwt_exp": { + "type": "integer", + "minimum": 0, + "maximum": 604800, "nullable": true }, - "external_discord_client_id": { + "smtp_admin_email": { "type": "string", + "format": "email", "nullable": true }, - "external_discord_enabled": { - "type": "boolean", - "nullable": true - }, - "external_discord_secret": { + "smtp_host": { "type": "string", "nullable": true }, - "external_email_enabled": { - "type": "boolean", - "nullable": true - }, - "external_facebook_client_id": { + "smtp_port": { "type": "string", "nullable": true }, - "external_facebook_enabled": { - "type": "boolean", - "nullable": true - }, - "external_facebook_secret": { + "smtp_user": { "type": "string", "nullable": true }, - "external_figma_client_id": { + "smtp_pass": { "type": "string", "nullable": true }, - "external_figma_enabled": { - "type": "boolean", - "nullable": true - }, - "external_figma_secret": { - "type": "string", + "smtp_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, "nullable": true }, - "external_github_client_id": { + "smtp_sender_name": { "type": "string", "nullable": true }, - "external_github_enabled": { + "mailer_allow_unverified_email_sign_ins": { "type": "boolean", "nullable": true }, - "external_github_secret": { - "type": "string", - "nullable": true - }, - "external_gitlab_client_id": { - "type": "string", - "nullable": true - }, - "external_gitlab_enabled": { + "mailer_autoconfirm": { "type": "boolean", "nullable": true }, - "external_gitlab_secret": { - "type": "string", - "nullable": true - }, - "external_gitlab_url": { - "type": "string", - "nullable": true - }, - "external_google_additional_client_ids": { + "mailer_subjects_invite": { "type": "string", "nullable": true }, - "external_google_client_id": { + "mailer_subjects_confirmation": { "type": "string", "nullable": true }, - "external_google_enabled": { - "type": "boolean", - "nullable": true - }, - "external_google_secret": { + "mailer_subjects_recovery": { "type": "string", "nullable": true }, - "external_google_skip_nonce_check": { - "type": "boolean", - "nullable": true - }, - "external_kakao_client_id": { + "mailer_subjects_email_change": { "type": "string", "nullable": true }, - "external_kakao_enabled": { - "type": "boolean", - "nullable": true - }, - "external_kakao_secret": { + "mailer_subjects_magic_link": { "type": "string", "nullable": true }, - "external_keycloak_client_id": { + "mailer_subjects_reauthentication": { "type": "string", "nullable": true }, - "external_keycloak_enabled": { - "type": "boolean", - "nullable": true - }, - "external_keycloak_secret": { + "mailer_subjects_password_changed_notification": { "type": "string", "nullable": true }, - "external_keycloak_url": { + "mailer_subjects_email_changed_notification": { "type": "string", "nullable": true }, - "external_linkedin_oidc_client_id": { + "mailer_subjects_phone_changed_notification": { "type": "string", "nullable": true }, - "external_linkedin_oidc_enabled": { - "type": "boolean", - "nullable": true - }, - "external_linkedin_oidc_secret": { + "mailer_subjects_mfa_factor_enrolled_notification": { "type": "string", "nullable": true }, - "external_slack_oidc_client_id": { + "mailer_subjects_mfa_factor_unenrolled_notification": { "type": "string", "nullable": true }, - "external_slack_oidc_enabled": { - "type": "boolean", - "nullable": true - }, - "external_slack_oidc_secret": { + "mailer_subjects_identity_linked_notification": { "type": "string", "nullable": true }, - "external_notion_client_id": { + "mailer_subjects_identity_unlinked_notification": { "type": "string", "nullable": true }, - "external_notion_enabled": { - "type": "boolean", - "nullable": true - }, - "external_notion_secret": { + "mailer_templates_invite_content": { "type": "string", "nullable": true }, - "external_phone_enabled": { - "type": "boolean", - "nullable": true - }, - "external_slack_client_id": { + "mailer_templates_confirmation_content": { "type": "string", "nullable": true }, - "external_slack_enabled": { - "type": "boolean", - "nullable": true - }, - "external_slack_secret": { + "mailer_templates_recovery_content": { "type": "string", "nullable": true }, - "external_spotify_client_id": { + "mailer_templates_email_change_content": { "type": "string", "nullable": true }, - "external_spotify_enabled": { - "type": "boolean", + "mailer_templates_magic_link_content": { + "type": "string", "nullable": true }, - "external_spotify_secret": { + "mailer_templates_reauthentication_content": { "type": "string", "nullable": true }, - "external_twitch_client_id": { + "mailer_templates_password_changed_notification_content": { "type": "string", "nullable": true }, - "external_twitch_enabled": { - "type": "boolean", + "mailer_templates_email_changed_notification_content": { + "type": "string", "nullable": true }, - "external_twitch_secret": { + "mailer_templates_phone_changed_notification_content": { "type": "string", "nullable": true }, - "external_twitter_client_id": { + "mailer_templates_mfa_factor_enrolled_notification_content": { "type": "string", "nullable": true }, - "external_twitter_enabled": { - "type": "boolean", + "mailer_templates_mfa_factor_unenrolled_notification_content": { + "type": "string", "nullable": true }, - "external_twitter_secret": { + "mailer_templates_identity_linked_notification_content": { "type": "string", "nullable": true }, - "external_workos_client_id": { + "mailer_templates_identity_unlinked_notification_content": { "type": "string", "nullable": true }, - "external_workos_enabled": { + "mailer_notifications_password_changed_enabled": { "type": "boolean", "nullable": true }, - "external_workos_secret": { - "type": "string", + "mailer_notifications_email_changed_enabled": { + "type": "boolean", "nullable": true }, - "external_workos_url": { - "type": "string", + "mailer_notifications_phone_changed_enabled": { + "type": "boolean", "nullable": true }, - "external_zoom_client_id": { - "type": "string", + "mailer_notifications_mfa_factor_enrolled_enabled": { + "type": "boolean", "nullable": true }, - "external_zoom_enabled": { + "mailer_notifications_mfa_factor_unenrolled_enabled": { "type": "boolean", "nullable": true }, - "external_zoom_secret": { - "type": "string", + "mailer_notifications_identity_linked_enabled": { + "type": "boolean", "nullable": true }, - "hook_custom_access_token_enabled": { + "mailer_notifications_identity_unlinked_enabled": { "type": "boolean", "nullable": true }, - "hook_custom_access_token_uri": { - "type": "string", + "mfa_max_enrolled_factors": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, "nullable": true }, - "hook_custom_access_token_secrets": { + "uri_allow_list": { "type": "string", "nullable": true }, - "hook_mfa_verification_attempt_enabled": { + "external_anonymous_users_enabled": { "type": "boolean", "nullable": true }, - "hook_mfa_verification_attempt_uri": { - "type": "string", - "nullable": true - }, - "hook_mfa_verification_attempt_secrets": { - "type": "string", + "external_email_enabled": { + "type": "boolean", "nullable": true }, - "hook_password_verification_attempt_enabled": { + "external_phone_enabled": { "type": "boolean", "nullable": true }, - "hook_password_verification_attempt_uri": { - "type": "string", + "saml_enabled": { + "type": "boolean", "nullable": true }, - "hook_password_verification_attempt_secrets": { + "saml_external_url": { "type": "string", + "pattern": "^[^,]+$", "nullable": true }, - "hook_send_sms_enabled": { + "security_captcha_enabled": { "type": "boolean", "nullable": true }, - "hook_send_sms_uri": { + "security_captcha_provider": { "type": "string", + "enum": ["turnstile", "hcaptcha"], "nullable": true }, - "hook_send_sms_secrets": { + "security_captcha_secret": { "type": "string", "nullable": true }, - "hook_send_email_enabled": { + "sessions_timebox": { + "type": "integer", + "minimum": 0, + "nullable": true + }, + "sessions_inactivity_timeout": { + "type": "integer", + "minimum": 0, + "nullable": true + }, + "sessions_single_per_user": { "type": "boolean", "nullable": true }, - "hook_send_email_uri": { + "sessions_tags": { "type": "string", + "pattern": "^\\s*([a-zA-Z0-9_-]+(\\s*,+\\s*)?)*\\s*$", "nullable": true }, - "hook_send_email_secrets": { - "type": "string", + "rate_limit_anonymous_users": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_allow_unverified_email_sign_ins": { - "type": "boolean", + "rate_limit_email_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_autoconfirm": { - "type": "boolean", + "rate_limit_sms_sent": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_secure_email_change_enabled": { - "type": "boolean", + "rate_limit_verify": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_subjects_confirmation": { - "type": "string", + "rate_limit_token_refresh": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_subjects_email_change": { - "type": "string", + "rate_limit_otp": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_subjects_invite": { - "type": "string", + "rate_limit_web3": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647, "nullable": true }, - "mailer_subjects_magic_link": { - "type": "string", + "mailer_secure_email_change_enabled": { + "type": "boolean", "nullable": true }, - "mailer_subjects_reauthentication": { - "type": "string", + "refresh_token_rotation_enabled": { + "type": "boolean", "nullable": true }, - "mailer_subjects_recovery": { - "type": "string", + "password_hibp_enabled": { + "type": "boolean", "nullable": true }, - "mailer_templates_confirmation_content": { - "type": "string", + "password_min_length": { + "type": "integer", + "minimum": 6, + "maximum": 32767, "nullable": true }, - "mailer_templates_email_change_content": { + "password_required_characters": { "type": "string", + "enum": [ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", + "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", + "" + ], "nullable": true }, - "mailer_templates_invite_content": { - "type": "string", + "security_manual_linking_enabled": { + "type": "boolean", "nullable": true }, - "mailer_templates_magic_link_content": { - "type": "string", + "security_update_password_require_reauthentication": { + "type": "boolean", "nullable": true }, - "mailer_templates_reauthentication_content": { - "type": "string", + "security_refresh_token_reuse_interval": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, "nullable": true }, - "mailer_templates_recovery_content": { - "type": "string", + "mailer_otp_exp": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "mailer_otp_length": { + "type": "integer", + "minimum": 6, + "maximum": 10, "nullable": true }, - "mfa_totp_enroll_enabled": { + "sms_autoconfirm": { "type": "boolean", "nullable": true }, - "mfa_totp_verify_enabled": { - "type": "boolean", + "sms_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, "nullable": true }, - "mfa_phone_enroll_enabled": { - "type": "boolean", + "sms_otp_exp": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647, "nullable": true }, - "mfa_phone_verify_enabled": { - "type": "boolean", + "sms_otp_length": { + "type": "integer", + "minimum": 0, + "maximum": 32767 + }, + "sms_provider": { + "type": "string", + "enum": ["messagebird", "textlocal", "twilio", "twilio_verify", "vonage"], "nullable": true }, - "mfa_web_authn_enroll_enabled": { - "type": "boolean", + "sms_messagebird_access_key": { + "type": "string", "nullable": true }, - "mfa_web_authn_verify_enabled": { - "type": "boolean", + "sms_messagebird_originator": { + "type": "string", "nullable": true }, - "mfa_phone_template": { + "sms_test_otp": { "type": "string", + "pattern": "^([0-9]{1,15}=[0-9]+,?)*$", "nullable": true }, - "password_hibp_enabled": { - "type": "boolean", + "sms_test_otp_valid_until": { + "type": "string", + "format": "date-time", "nullable": true }, - "password_required_characters": { + "sms_textlocal_api_key": { "type": "string", "nullable": true }, - "refresh_token_rotation_enabled": { - "type": "boolean", + "sms_textlocal_sender": { + "type": "string", "nullable": true }, - "saml_enabled": { - "type": "boolean", + "sms_twilio_account_sid": { + "type": "string", "nullable": true }, - "saml_external_url": { + "sms_twilio_auth_token": { "type": "string", "nullable": true }, - "saml_allow_encrypted_assertions": { - "type": "boolean", + "sms_twilio_content_sid": { + "type": "string", "nullable": true }, - "security_captcha_enabled": { - "type": "boolean", + "sms_twilio_message_service_sid": { + "type": "string", "nullable": true }, - "security_captcha_provider": { + "sms_twilio_verify_account_sid": { "type": "string", "nullable": true }, - "security_captcha_secret": { + "sms_twilio_verify_auth_token": { "type": "string", "nullable": true }, - "security_manual_linking_enabled": { - "type": "boolean", + "sms_twilio_verify_message_service_sid": { + "type": "string", "nullable": true }, - "security_update_password_require_reauthentication": { - "type": "boolean", + "sms_vonage_api_key": { + "type": "string", "nullable": true }, - "sessions_single_per_user": { - "type": "boolean", + "sms_vonage_api_secret": { + "type": "string", "nullable": true }, - "sessions_tags": { + "sms_vonage_from": { "type": "string", "nullable": true }, - "site_url": { + "sms_template": { "type": "string", "nullable": true }, - "sms_autoconfirm": { + "hook_mfa_verification_attempt_enabled": { "type": "boolean", "nullable": true }, - "sms_messagebird_access_key": { + "hook_mfa_verification_attempt_uri": { "type": "string", "nullable": true }, - "sms_messagebird_originator": { + "hook_mfa_verification_attempt_secrets": { "type": "string", "nullable": true }, - "sms_provider": { + "hook_password_verification_attempt_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_password_verification_attempt_uri": { "type": "string", "nullable": true }, - "sms_template": { + "hook_password_verification_attempt_secrets": { "type": "string", "nullable": true }, - "sms_test_otp": { + "hook_custom_access_token_enabled": { + "type": "boolean", + "nullable": true + }, + "hook_custom_access_token_uri": { "type": "string", "nullable": true }, - "sms_test_otp_valid_until": { + "hook_custom_access_token_secrets": { "type": "string", "nullable": true }, - "sms_textlocal_api_key": { - "type": "string", + "hook_send_sms_enabled": { + "type": "boolean", "nullable": true }, - "sms_textlocal_sender": { + "hook_send_sms_uri": { "type": "string", "nullable": true }, - "sms_twilio_account_sid": { + "hook_send_sms_secrets": { "type": "string", "nullable": true }, - "sms_twilio_auth_token": { - "type": "string", + "hook_send_email_enabled": { + "type": "boolean", "nullable": true }, - "sms_twilio_content_sid": { + "hook_send_email_uri": { "type": "string", "nullable": true }, - "sms_twilio_message_service_sid": { + "hook_send_email_secrets": { "type": "string", "nullable": true }, - "sms_twilio_verify_account_sid": { - "type": "string", + "hook_before_user_created_enabled": { + "type": "boolean", "nullable": true }, - "sms_twilio_verify_auth_token": { + "hook_before_user_created_uri": { "type": "string", "nullable": true }, - "sms_twilio_verify_message_service_sid": { + "hook_before_user_created_secrets": { "type": "string", "nullable": true }, - "sms_vonage_api_key": { - "type": "string", + "hook_after_user_created_enabled": { + "type": "boolean", "nullable": true }, - "sms_vonage_api_secret": { + "hook_after_user_created_uri": { "type": "string", "nullable": true }, - "sms_vonage_from": { + "hook_after_user_created_secrets": { "type": "string", "nullable": true }, - "smtp_admin_email": { - "type": "string", + "external_apple_enabled": { + "type": "boolean", "nullable": true }, - "smtp_host": { + "external_apple_client_id": { "type": "string", "nullable": true }, - "smtp_pass": { - "type": "string", + "external_apple_email_optional": { + "type": "boolean", "nullable": true }, - "smtp_port": { + "external_apple_secret": { "type": "string", "nullable": true }, - "smtp_sender_name": { + "external_apple_additional_client_ids": { "type": "string", "nullable": true }, - "smtp_user": { - "type": "string", + "external_azure_enabled": { + "type": "boolean", "nullable": true }, - "uri_allow_list": { + "external_azure_client_id": { "type": "string", "nullable": true - } - }, - "required": [ - "api_max_request_duration", - "db_max_pool_size", - "jwt_exp", - "mailer_otp_exp", - "mailer_otp_length", - "mfa_max_enrolled_factors", - "mfa_phone_otp_length", - "mfa_phone_max_frequency", - "password_min_length", - "rate_limit_anonymous_users", - "rate_limit_email_sent", - "rate_limit_sms_sent", - "rate_limit_token_refresh", - "rate_limit_verify", - "rate_limit_otp", - "security_refresh_token_reuse_interval", - "sessions_inactivity_timeout", - "sessions_timebox", - "sms_max_frequency", - "sms_otp_exp", - "sms_otp_length", - "smtp_max_frequency", - "disable_signup", - "external_anonymous_users_enabled", - "external_apple_additional_client_ids", - "external_apple_client_id", - "external_apple_enabled", - "external_apple_secret", - "external_azure_client_id", - "external_azure_enabled", - "external_azure_secret", - "external_azure_url", - "external_bitbucket_client_id", - "external_bitbucket_enabled", - "external_bitbucket_secret", - "external_discord_client_id", - "external_discord_enabled", - "external_discord_secret", - "external_email_enabled", - "external_facebook_client_id", - "external_facebook_enabled", - "external_facebook_secret", - "external_figma_client_id", - "external_figma_enabled", - "external_figma_secret", - "external_github_client_id", - "external_github_enabled", - "external_github_secret", - "external_gitlab_client_id", - "external_gitlab_enabled", - "external_gitlab_secret", - "external_gitlab_url", - "external_google_additional_client_ids", - "external_google_client_id", - "external_google_enabled", - "external_google_secret", - "external_google_skip_nonce_check", - "external_kakao_client_id", - "external_kakao_enabled", - "external_kakao_secret", - "external_keycloak_client_id", - "external_keycloak_enabled", - "external_keycloak_secret", - "external_keycloak_url", - "external_linkedin_oidc_client_id", - "external_linkedin_oidc_enabled", - "external_linkedin_oidc_secret", - "external_slack_oidc_client_id", - "external_slack_oidc_enabled", - "external_slack_oidc_secret", - "external_notion_client_id", - "external_notion_enabled", - "external_notion_secret", - "external_phone_enabled", - "external_slack_client_id", - "external_slack_enabled", - "external_slack_secret", - "external_spotify_client_id", - "external_spotify_enabled", - "external_spotify_secret", - "external_twitch_client_id", - "external_twitch_enabled", - "external_twitch_secret", - "external_twitter_client_id", - "external_twitter_enabled", - "external_twitter_secret", - "external_workos_client_id", - "external_workos_enabled", - "external_workos_secret", - "external_workos_url", - "external_zoom_client_id", - "external_zoom_enabled", - "external_zoom_secret", - "hook_custom_access_token_enabled", - "hook_custom_access_token_uri", - "hook_custom_access_token_secrets", - "hook_mfa_verification_attempt_enabled", - "hook_mfa_verification_attempt_uri", - "hook_mfa_verification_attempt_secrets", - "hook_password_verification_attempt_enabled", - "hook_password_verification_attempt_uri", - "hook_password_verification_attempt_secrets", - "hook_send_sms_enabled", - "hook_send_sms_uri", - "hook_send_sms_secrets", - "hook_send_email_enabled", - "hook_send_email_uri", - "hook_send_email_secrets", - "mailer_allow_unverified_email_sign_ins", - "mailer_autoconfirm", - "mailer_secure_email_change_enabled", - "mailer_subjects_confirmation", - "mailer_subjects_email_change", - "mailer_subjects_invite", - "mailer_subjects_magic_link", - "mailer_subjects_reauthentication", - "mailer_subjects_recovery", - "mailer_templates_confirmation_content", - "mailer_templates_email_change_content", - "mailer_templates_invite_content", - "mailer_templates_magic_link_content", - "mailer_templates_reauthentication_content", - "mailer_templates_recovery_content", - "mfa_totp_enroll_enabled", - "mfa_totp_verify_enabled", - "mfa_phone_enroll_enabled", - "mfa_phone_verify_enabled", - "mfa_web_authn_enroll_enabled", - "mfa_web_authn_verify_enabled", - "mfa_phone_template", - "password_hibp_enabled", - "password_required_characters", - "refresh_token_rotation_enabled", - "saml_enabled", - "saml_external_url", - "saml_allow_encrypted_assertions", - "security_captcha_enabled", - "security_captcha_provider", - "security_captcha_secret", - "security_manual_linking_enabled", - "security_update_password_require_reauthentication", - "sessions_single_per_user", - "sessions_tags", - "site_url", - "sms_autoconfirm", - "sms_messagebird_access_key", - "sms_messagebird_originator", - "sms_provider", - "sms_template", - "sms_test_otp", - "sms_test_otp_valid_until", - "sms_textlocal_api_key", - "sms_textlocal_sender", - "sms_twilio_account_sid", - "sms_twilio_auth_token", - "sms_twilio_content_sid", - "sms_twilio_message_service_sid", - "sms_twilio_verify_account_sid", - "sms_twilio_verify_auth_token", - "sms_twilio_verify_message_service_sid", - "sms_vonage_api_key", - "sms_vonage_api_secret", - "sms_vonage_from", - "smtp_admin_email", - "smtp_host", - "smtp_pass", - "smtp_port", - "smtp_sender_name", - "smtp_user", - "uri_allow_list" - ] - }, - "UpdateAuthConfigBody": { - "type": "object", - "properties": { - "jwt_exp": { - "type": "integer", - "minimum": 0, - "maximum": 604800 - }, - "smtp_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 - }, - "mfa_max_enrolled_factors": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "sessions_timebox": { - "type": "integer", - "minimum": 0 - }, - "sessions_inactivity_timeout": { - "type": "integer", - "minimum": 0 - }, - "rate_limit_anonymous_users": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 }, - "rate_limit_email_sent": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 + "external_azure_email_optional": { + "type": "boolean", + "nullable": true }, - "rate_limit_sms_sent": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 + "external_azure_secret": { + "type": "string", + "nullable": true }, - "rate_limit_verify": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 + "external_azure_url": { + "type": "string", + "nullable": true }, - "rate_limit_token_refresh": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 + "external_bitbucket_enabled": { + "type": "boolean", + "nullable": true }, - "rate_limit_otp": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 + "external_bitbucket_client_id": { + "type": "string", + "nullable": true }, - "password_min_length": { - "type": "integer", - "minimum": 6, - "maximum": 32767 + "external_bitbucket_email_optional": { + "type": "boolean", + "nullable": true }, - "security_refresh_token_reuse_interval": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 + "external_bitbucket_secret": { + "type": "string", + "nullable": true }, - "mailer_otp_exp": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 + "external_discord_enabled": { + "type": "boolean", + "nullable": true }, - "mailer_otp_length": { - "type": "integer", - "minimum": 6, - "maximum": 10 + "external_discord_client_id": { + "type": "string", + "nullable": true }, - "sms_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 + "external_discord_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_otp_exp": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 + "external_discord_secret": { + "type": "string", + "nullable": true }, - "sms_otp_length": { - "type": "integer", - "minimum": 0, - "maximum": 32767 + "external_facebook_enabled": { + "type": "boolean", + "nullable": true }, - "db_max_pool_size": { - "type": "integer" + "external_facebook_client_id": { + "type": "string", + "nullable": true }, - "api_max_request_duration": { - "type": "integer" + "external_facebook_email_optional": { + "type": "boolean", + "nullable": true }, - "mfa_phone_max_frequency": { - "type": "integer", - "minimum": 0, - "maximum": 32767 + "external_facebook_secret": { + "type": "string", + "nullable": true }, - "mfa_phone_otp_length": { - "type": "integer", - "minimum": 0, - "maximum": 32767 + "external_figma_enabled": { + "type": "boolean", + "nullable": true }, - "site_url": { + "external_figma_client_id": { "type": "string", - "pattern": "/^[^,]+$/" + "nullable": true }, - "disable_signup": { - "type": "boolean" + "external_figma_email_optional": { + "type": "boolean", + "nullable": true }, - "smtp_admin_email": { - "type": "string" + "external_figma_secret": { + "type": "string", + "nullable": true }, - "smtp_host": { - "type": "string" + "external_github_enabled": { + "type": "boolean", + "nullable": true }, - "smtp_port": { - "type": "string" + "external_github_client_id": { + "type": "string", + "nullable": true }, - "smtp_user": { - "type": "string" + "external_github_email_optional": { + "type": "boolean", + "nullable": true }, - "smtp_pass": { - "type": "string" + "external_github_secret": { + "type": "string", + "nullable": true }, - "smtp_sender_name": { - "type": "string" + "external_gitlab_enabled": { + "type": "boolean", + "nullable": true }, - "mailer_allow_unverified_email_sign_ins": { - "type": "boolean" + "external_gitlab_client_id": { + "type": "string", + "nullable": true }, - "mailer_autoconfirm": { - "type": "boolean" + "external_gitlab_email_optional": { + "type": "boolean", + "nullable": true }, - "mailer_subjects_invite": { - "type": "string" + "external_gitlab_secret": { + "type": "string", + "nullable": true }, - "mailer_subjects_confirmation": { - "type": "string" + "external_gitlab_url": { + "type": "string", + "nullable": true }, - "mailer_subjects_recovery": { - "type": "string" + "external_google_enabled": { + "type": "boolean", + "nullable": true }, - "mailer_subjects_email_change": { - "type": "string" + "external_google_client_id": { + "type": "string", + "nullable": true }, - "mailer_subjects_magic_link": { - "type": "string" + "external_google_email_optional": { + "type": "boolean", + "nullable": true }, - "mailer_subjects_reauthentication": { - "type": "string" + "external_google_secret": { + "type": "string", + "nullable": true }, - "mailer_templates_invite_content": { - "type": "string" + "external_google_additional_client_ids": { + "type": "string", + "nullable": true }, - "mailer_templates_confirmation_content": { - "type": "string" + "external_google_skip_nonce_check": { + "type": "boolean", + "nullable": true }, - "mailer_templates_recovery_content": { - "type": "string" + "external_kakao_enabled": { + "type": "boolean", + "nullable": true }, - "mailer_templates_email_change_content": { - "type": "string" + "external_kakao_client_id": { + "type": "string", + "nullable": true }, - "mailer_templates_magic_link_content": { - "type": "string" + "external_kakao_email_optional": { + "type": "boolean", + "nullable": true }, - "mailer_templates_reauthentication_content": { - "type": "string" + "external_kakao_secret": { + "type": "string", + "nullable": true }, - "uri_allow_list": { - "type": "string" + "external_keycloak_enabled": { + "type": "boolean", + "nullable": true }, - "external_anonymous_users_enabled": { - "type": "boolean" + "external_keycloak_client_id": { + "type": "string", + "nullable": true }, - "external_email_enabled": { - "type": "boolean" + "external_keycloak_email_optional": { + "type": "boolean", + "nullable": true }, - "external_phone_enabled": { - "type": "boolean" + "external_keycloak_secret": { + "type": "string", + "nullable": true }, - "saml_enabled": { - "type": "boolean" + "external_keycloak_url": { + "type": "string", + "nullable": true }, - "saml_external_url": { + "external_linkedin_oidc_enabled": { + "type": "boolean", + "nullable": true + }, + "external_linkedin_oidc_client_id": { "type": "string", - "pattern": "/^[^,]+$/" + "nullable": true }, - "security_captcha_enabled": { - "type": "boolean" + "external_linkedin_oidc_email_optional": { + "type": "boolean", + "nullable": true }, - "security_captcha_provider": { - "type": "string" + "external_linkedin_oidc_secret": { + "type": "string", + "nullable": true }, - "security_captcha_secret": { - "type": "string" + "external_slack_oidc_enabled": { + "type": "boolean", + "nullable": true }, - "sessions_single_per_user": { - "type": "boolean" + "external_slack_oidc_client_id": { + "type": "string", + "nullable": true }, - "sessions_tags": { + "external_slack_oidc_email_optional": { + "type": "boolean", + "nullable": true + }, + "external_slack_oidc_secret": { "type": "string", - "pattern": "/^\\s*([a-z0-9_-]+(\\s*,+\\s*)?)*\\s*$/i" + "nullable": true }, - "mailer_secure_email_change_enabled": { - "type": "boolean" + "external_notion_enabled": { + "type": "boolean", + "nullable": true }, - "refresh_token_rotation_enabled": { - "type": "boolean" + "external_notion_client_id": { + "type": "string", + "nullable": true }, - "password_hibp_enabled": { - "type": "boolean" + "external_notion_email_optional": { + "type": "boolean", + "nullable": true }, - "password_required_characters": { + "external_notion_secret": { "type": "string", - "enum": [ - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", - "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789", - "abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~", - "" - ] - }, - "security_manual_linking_enabled": { - "type": "boolean" + "nullable": true }, - "security_update_password_require_reauthentication": { - "type": "boolean" + "external_slack_enabled": { + "type": "boolean", + "nullable": true }, - "sms_autoconfirm": { - "type": "boolean" + "external_slack_client_id": { + "type": "string", + "nullable": true }, - "sms_provider": { - "type": "string" + "external_slack_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_messagebird_access_key": { - "type": "string" + "external_slack_secret": { + "type": "string", + "nullable": true }, - "sms_messagebird_originator": { - "type": "string" + "external_spotify_enabled": { + "type": "boolean", + "nullable": true }, - "sms_test_otp": { + "external_spotify_client_id": { "type": "string", - "pattern": "/^([0-9]{1,15}=[0-9]+,?)*$/" + "nullable": true }, - "sms_test_otp_valid_until": { - "type": "string" + "external_spotify_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_textlocal_api_key": { - "type": "string" + "external_spotify_secret": { + "type": "string", + "nullable": true }, - "sms_textlocal_sender": { - "type": "string" + "external_twitch_enabled": { + "type": "boolean", + "nullable": true }, - "sms_twilio_account_sid": { - "type": "string" + "external_twitch_client_id": { + "type": "string", + "nullable": true }, - "sms_twilio_auth_token": { - "type": "string" + "external_twitch_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_twilio_content_sid": { - "type": "string" + "external_twitch_secret": { + "type": "string", + "nullable": true }, - "sms_twilio_message_service_sid": { - "type": "string" + "external_twitter_enabled": { + "type": "boolean", + "nullable": true }, - "sms_twilio_verify_account_sid": { - "type": "string" + "external_twitter_client_id": { + "type": "string", + "nullable": true }, - "sms_twilio_verify_auth_token": { - "type": "string" + "external_twitter_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_twilio_verify_message_service_sid": { - "type": "string" + "external_twitter_secret": { + "type": "string", + "nullable": true }, - "sms_vonage_api_key": { - "type": "string" + "external_x_enabled": { + "type": "boolean", + "nullable": true }, - "sms_vonage_api_secret": { - "type": "string" + "external_x_client_id": { + "type": "string", + "nullable": true }, - "sms_vonage_from": { - "type": "string" + "external_x_email_optional": { + "type": "boolean", + "nullable": true }, - "sms_template": { - "type": "string" + "external_x_secret": { + "type": "string", + "nullable": true }, - "hook_mfa_verification_attempt_enabled": { - "type": "boolean" + "external_workos_enabled": { + "type": "boolean", + "nullable": true }, - "hook_mfa_verification_attempt_uri": { - "type": "string" + "external_workos_client_id": { + "type": "string", + "nullable": true }, - "hook_mfa_verification_attempt_secrets": { - "type": "string" + "external_workos_secret": { + "type": "string", + "nullable": true }, - "hook_password_verification_attempt_enabled": { - "type": "boolean" + "external_workos_url": { + "type": "string", + "nullable": true }, - "hook_password_verification_attempt_uri": { - "type": "string" + "external_web3_solana_enabled": { + "type": "boolean", + "nullable": true }, - "hook_password_verification_attempt_secrets": { - "type": "string" + "external_web3_ethereum_enabled": { + "type": "boolean", + "nullable": true }, - "hook_custom_access_token_enabled": { - "type": "boolean" + "external_zoom_enabled": { + "type": "boolean", + "nullable": true }, - "hook_custom_access_token_uri": { - "type": "string" + "external_zoom_client_id": { + "type": "string", + "nullable": true }, - "hook_custom_access_token_secrets": { - "type": "string" + "external_zoom_email_optional": { + "type": "boolean", + "nullable": true }, - "hook_send_sms_enabled": { - "type": "boolean" + "external_zoom_secret": { + "type": "string", + "nullable": true }, - "hook_send_sms_uri": { - "type": "string" + "db_max_pool_size": { + "type": "integer", + "nullable": true }, - "hook_send_sms_secrets": { - "type": "string" + "db_max_pool_size_unit": { + "type": "string", + "enum": ["connections", "percent"], + "nullable": true }, - "hook_send_email_enabled": { - "type": "boolean" + "api_max_request_duration": { + "type": "integer", + "nullable": true }, - "hook_send_email_uri": { - "type": "string" + "mfa_totp_enroll_enabled": { + "type": "boolean", + "nullable": true }, - "hook_send_email_secrets": { - "type": "string" + "mfa_totp_verify_enabled": { + "type": "boolean", + "nullable": true }, - "external_apple_enabled": { - "type": "boolean" + "mfa_web_authn_enroll_enabled": { + "type": "boolean", + "nullable": true }, - "external_apple_client_id": { - "type": "string" + "mfa_web_authn_verify_enabled": { + "type": "boolean", + "nullable": true }, - "external_apple_secret": { - "type": "string" + "mfa_phone_enroll_enabled": { + "type": "boolean", + "nullable": true }, - "external_apple_additional_client_ids": { - "type": "string" + "mfa_phone_verify_enabled": { + "type": "boolean", + "nullable": true }, - "external_azure_enabled": { - "type": "boolean" + "mfa_phone_max_frequency": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true }, - "external_azure_client_id": { - "type": "string" + "mfa_phone_otp_length": { + "type": "integer", + "minimum": 0, + "maximum": 32767, + "nullable": true }, - "external_azure_secret": { - "type": "string" + "mfa_phone_template": { + "type": "string", + "nullable": true }, - "external_azure_url": { - "type": "string" + "nimbus_oauth_client_id": { + "type": "string", + "nullable": true }, - "external_bitbucket_enabled": { - "type": "boolean" + "nimbus_oauth_client_secret": { + "type": "string", + "nullable": true }, - "external_bitbucket_client_id": { - "type": "string" + "oauth_server_enabled": { + "type": "boolean", + "nullable": true }, - "external_bitbucket_secret": { - "type": "string" + "oauth_server_allow_dynamic_registration": { + "type": "boolean", + "nullable": true }, - "external_discord_enabled": { - "type": "boolean" + "oauth_server_authorization_path": { + "type": "string", + "nullable": true + } + } + }, + "RealtimeConfigResponse": { + "type": "object", + "properties": { + "private_only": { + "type": "boolean", + "nullable": true, + "description": "Whether to only allow private channels" }, - "external_discord_client_id": { - "type": "string" + "connection_pool": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "nullable": true, + "description": "Sets connection pool size for Realtime Authorization" }, - "external_discord_secret": { - "type": "string" + "max_concurrent_users": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of concurrent users rate limit" }, - "external_facebook_enabled": { - "type": "boolean" + "max_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "nullable": true, + "description": "Sets maximum number of events per second rate per channel limit" }, - "external_facebook_client_id": { - "type": "string" + "max_bytes_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 10000000, + "nullable": true, + "description": "Sets maximum number of bytes per second rate per channel limit" }, - "external_facebook_secret": { - "type": "string" + "max_channels_per_client": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of channels per client rate limit" }, - "external_figma_enabled": { - "type": "boolean" + "max_joins_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of joins per second rate limit" }, - "external_figma_client_id": { - "type": "string" + "max_presence_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "nullable": true, + "description": "Sets maximum number of presence events per second rate limit" }, - "external_figma_secret": { - "type": "string" + "max_payload_size_in_kb": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "nullable": true, + "description": "Sets maximum number of payload size in KB rate limit" }, - "external_github_enabled": { - "type": "boolean" + "suspend": { + "type": "boolean", + "nullable": true, + "description": "Whether to suspend realtime" + } + }, + "required": [ + "private_only", + "connection_pool", + "max_concurrent_users", + "max_events_per_second", + "max_bytes_per_second", + "max_channels_per_client", + "max_joins_per_second", + "max_presence_events_per_second", + "max_payload_size_in_kb", + "suspend" + ] + }, + "UpdateRealtimeConfigBody": { + "type": "object", + "properties": { + "private_only": { + "type": "boolean", + "description": "Whether to only allow private channels" }, - "external_github_client_id": { - "type": "string" + "connection_pool": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Sets connection pool size for Realtime Authorization" }, - "external_github_secret": { - "type": "string" + "max_concurrent_users": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of concurrent users rate limit" }, - "external_gitlab_enabled": { - "type": "boolean" + "max_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 50000, + "description": "Sets maximum number of events per second rate per channel limit" }, - "external_gitlab_client_id": { - "type": "string" + "max_bytes_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 10000000, + "description": "Sets maximum number of bytes per second rate per channel limit" }, - "external_gitlab_secret": { - "type": "string" + "max_channels_per_client": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of channels per client rate limit" }, - "external_gitlab_url": { - "type": "string" + "max_joins_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of joins per second rate limit" }, - "external_google_enabled": { - "type": "boolean" + "max_presence_events_per_second": { + "type": "integer", + "minimum": 1, + "maximum": 5000, + "description": "Sets maximum number of presence events per second rate limit" }, - "external_google_client_id": { - "type": "string" + "max_payload_size_in_kb": { + "type": "integer", + "minimum": 1, + "maximum": 10000, + "description": "Sets maximum number of payload size in KB rate limit" }, - "external_google_secret": { + "suspend": { + "type": "boolean", + "description": "Whether to suspend realtime" + } + }, + "additionalProperties": false + }, + "CreateThirdPartyAuthBody": { + "type": "object", + "properties": { + "oidc_issuer_url": { "type": "string" }, - "external_google_additional_client_ids": { + "jwks_url": { "type": "string" }, - "external_google_skip_nonce_check": { - "type": "boolean" - }, - "external_kakao_enabled": { - "type": "boolean" + "custom_jwks": {} + } + }, + "ThirdPartyAuth": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" }, - "external_kakao_client_id": { + "type": { "type": "string" }, - "external_kakao_secret": { - "type": "string" + "oidc_issuer_url": { + "type": "string", + "nullable": true }, - "external_keycloak_enabled": { - "type": "boolean" + "jwks_url": { + "type": "string", + "nullable": true }, - "external_keycloak_client_id": { - "type": "string" + "custom_jwks": { + "nullable": true }, - "external_keycloak_secret": { + "resolved_jwks": { + "nullable": true + }, + "inserted_at": { "type": "string" }, - "external_keycloak_url": { + "updated_at": { "type": "string" }, - "external_linkedin_oidc_enabled": { - "type": "boolean" + "resolved_at": { + "type": "string", + "nullable": true + } + }, + "required": ["id", "type", "inserted_at", "updated_at"] + }, + "GetProjectAvailableRestoreVersionsResponse": { + "type": "object", + "properties": { + "available_versions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "release_channel": { + "type": "string", + "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + }, + "postgres_engine": { + "type": "string", + "enum": ["13", "14", "15", "17", "17-oriole"] + } + }, + "required": ["version", "release_channel", "postgres_engine"] + } + } + }, + "required": ["available_versions"] + }, + "ListProjectAddonsResponse": { + "type": "object", + "properties": { + "selected_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "variant": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_phone_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_web_authn_default"] + }, + { + "type": "string", + "enum": ["log_drain_default"] + } + ] + }, + "name": { + "type": "string" + }, + "price": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["fixed", "usage"] + }, + "interval": { + "type": "string", + "enum": ["monthly", "hourly"] + }, + "amount": { + "type": "number" + } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { + "description": "Any JSON-serializable value" + } + }, + "required": ["id", "name", "price"] + } + }, + "required": ["type", "variant"] + } }, - "external_linkedin_oidc_client_id": { - "type": "string" + "available_addons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + }, + "name": { + "type": "string" + }, + "variants": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_phone_default"] + }, + { + "type": "string", + "enum": ["auth_mfa_web_authn_default"] + }, + { + "type": "string", + "enum": ["log_drain_default"] + } + ] + }, + "name": { + "type": "string" + }, + "price": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["fixed", "usage"] + }, + "interval": { + "type": "string", + "enum": ["monthly", "hourly"] + }, + "amount": { + "type": "number" + } + }, + "required": ["description", "type", "interval", "amount"] + }, + "meta": { + "description": "Any JSON-serializable value" + } + }, + "required": ["id", "name", "price"] + } + } + }, + "required": ["type", "name", "variants"] + } + } + }, + "required": ["selected_addons", "available_addons"] + }, + "ApplyProjectAddonBody": { + "type": "object", + "properties": { + "addon_variant": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ci_micro", + "ci_small", + "ci_medium", + "ci_large", + "ci_xlarge", + "ci_2xlarge", + "ci_4xlarge", + "ci_8xlarge", + "ci_12xlarge", + "ci_16xlarge", + "ci_24xlarge", + "ci_24xlarge_optimized_cpu", + "ci_24xlarge_optimized_memory", + "ci_24xlarge_high_memory", + "ci_48xlarge", + "ci_48xlarge_optimized_cpu", + "ci_48xlarge_optimized_memory", + "ci_48xlarge_high_memory" + ] + }, + { + "type": "string", + "enum": ["cd_default"] + }, + { + "type": "string", + "enum": ["pitr_7", "pitr_14", "pitr_28"] + }, + { + "type": "string", + "enum": ["ipv4_default"] + } + ] }, - "external_linkedin_oidc_secret": { + "addon_type": { + "type": "string", + "enum": [ + "custom_domain", + "compute_instance", + "pitr", + "ipv4", + "auth_mfa_phone", + "auth_mfa_web_authn", + "log_drain" + ] + } + }, + "required": ["addon_variant", "addon_type"] + }, + "ProjectClaimTokenResponse": { + "type": "object", + "properties": { + "token_alias": { "type": "string" }, - "external_slack_oidc_enabled": { - "type": "boolean" - }, - "external_slack_oidc_client_id": { + "expires_at": { "type": "string" }, - "external_slack_oidc_secret": { + "created_at": { "type": "string" }, - "external_notion_enabled": { - "type": "boolean" - }, - "external_notion_client_id": { + "created_by": { + "type": "string", + "format": "uuid" + } + }, + "required": ["token_alias", "expires_at", "created_at", "created_by"] + }, + "CreateProjectClaimTokenResponse": { + "type": "object", + "properties": { + "token": { "type": "string" }, - "external_notion_secret": { + "token_alias": { "type": "string" }, - "external_slack_enabled": { - "type": "boolean" - }, - "external_slack_client_id": { + "expires_at": { "type": "string" }, - "external_slack_secret": { + "created_at": { "type": "string" }, - "external_spotify_enabled": { - "type": "boolean" + "created_by": { + "type": "string", + "format": "uuid" + } + }, + "required": ["token", "token_alias", "expires_at", "created_at", "created_by"] + }, + "V1ProjectAdvisorsResponse": { + "type": "object", + "properties": { + "lints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "unindexed_foreign_keys", + "auth_users_exposed", + "auth_rls_initplan", + "no_primary_key", + "unused_index", + "multiple_permissive_policies", + "policy_exists_rls_disabled", + "rls_enabled_no_policy", + "duplicate_index", + "security_definer_view", + "function_search_path_mutable", + "rls_disabled_in_public", + "extension_in_public", + "rls_references_user_metadata", + "materialized_view_in_api", + "foreign_table_in_api", + "unsupported_reg_types", + "auth_otp_long_expiry", + "auth_otp_short_length", + "ssl_not_enforced", + "network_restrictions_not_set", + "password_requirements_min_length", + "pitr_not_enabled", + "auth_leaked_password_protection", + "auth_insufficient_mfa_options", + "auth_password_policy_missing", + "leaked_service_key", + "no_backup_admin", + "vulnerable_postgres_version" + ] + }, + "title": { + "type": "string" + }, + "level": { + "type": "string", + "enum": ["ERROR", "WARN", "INFO"] + }, + "facing": { + "type": "string", + "enum": ["EXTERNAL"] + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": ["PERFORMANCE", "SECURITY"] + } + }, + "description": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "metadata": { + "type": "object", + "properties": { + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["table", "view", "auth", "function", "extension", "compliance"] + }, + "fkey_name": { + "type": "string" + }, + "fkey_columns": { + "type": "array", + "items": { + "type": "number" + } + } + } + }, + "cache_key": { + "type": "string" + } + }, + "required": [ + "name", + "title", + "level", + "facing", + "categories", + "description", + "detail", + "remediation", + "cache_key" + ] + } + } + }, + "required": ["lints"] + }, + "AnalyticsResponse": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": {} }, - "external_spotify_client_id": { - "type": "string" + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": ["domain", "location", "locationType", "message", "reason"] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + }, + "V1GetUsageApiCountResponse": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time" + }, + "total_auth_requests": { + "type": "number" + }, + "total_realtime_requests": { + "type": "number" + }, + "total_rest_requests": { + "type": "number" + }, + "total_storage_requests": { + "type": "number" + } + }, + "required": [ + "timestamp", + "total_auth_requests", + "total_realtime_requests", + "total_rest_requests", + "total_storage_requests" + ] + } }, - "external_spotify_secret": { - "type": "string" + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": ["domain", "location", "locationType", "message", "reason"] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + }, + "V1GetUsageApiRequestsCountResponse": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "count": { + "type": "number" + } + }, + "required": ["count"] + } }, - "external_twitch_enabled": { + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": ["domain", "location", "locationType", "message", "reason"] + } + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": ["code", "errors", "message", "status"] + } + ] + } + } + }, + "CreateRoleBody": { + "type": "object", + "properties": { + "read_only": { "type": "boolean" + } + }, + "required": ["read_only"] + }, + "CreateRoleResponse": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 }, - "external_twitch_client_id": { - "type": "string" + "password": { + "type": "string", + "minLength": 1 }, - "external_twitch_secret": { - "type": "string" + "ttl_seconds": { + "type": "integer", + "minimum": 1, + "format": "int64" + } + }, + "required": ["role", "password", "ttl_seconds"] + }, + "DeleteRolesResponse": { + "type": "object", + "properties": { + "message": { + "type": "string", + "enum": ["ok"] + } + }, + "required": ["message"] + }, + "V1ListMigrationsResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string" + } }, - "external_twitter_enabled": { - "type": "boolean" + "required": ["version"] + } + }, + "V1CreateMigrationBody": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 }, - "external_twitter_client_id": { + "name": { "type": "string" }, - "external_twitter_secret": { + "rollback": { "type": "string" + } + }, + "required": ["query"] + }, + "V1UpsertMigrationBody": { + "type": "object", + "properties": { + "query": { + "type": "string", + "minLength": 1 }, - "external_workos_enabled": { - "type": "boolean" - }, - "external_workos_client_id": { + "name": { "type": "string" }, - "external_workos_secret": { + "rollback": { "type": "string" + } + }, + "required": ["query"] + }, + "V1GetMigrationResponse": { + "type": "object", + "properties": { + "version": { + "type": "string", + "minLength": 1 }, - "external_workos_url": { + "name": { "type": "string" }, - "external_zoom_enabled": { - "type": "boolean" + "statements": { + "type": "array", + "items": { + "type": "string" + } }, - "external_zoom_client_id": { - "type": "string" + "rollback": { + "type": "array", + "items": { + "type": "string" + } }, - "external_zoom_secret": { + "created_by": { "type": "string" }, - "mfa_totp_enroll_enabled": { - "type": "boolean" - }, - "mfa_totp_verify_enabled": { - "type": "boolean" - }, - "mfa_web_authn_enroll_enabled": { - "type": "boolean" - }, - "mfa_web_authn_verify_enabled": { - "type": "boolean" - }, - "mfa_phone_enroll_enabled": { - "type": "boolean" - }, - "mfa_phone_verify_enabled": { - "type": "boolean" - }, - "mfa_phone_template": { + "idempotency_key": { "type": "string" } - } + }, + "required": ["version"] }, - "CreateThirdPartyAuthBody": { + "V1PatchMigrationBody": { "type": "object", "properties": { - "oidc_issuer_url": { + "name": { "type": "string" }, - "jwks_url": { + "rollback": { "type": "string" - }, - "custom_jwks": { - "type": "object" } } }, - "ThirdPartyAuth": { + "V1RunQueryBody": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "oidc_issuer_url": { - "type": "string", - "nullable": true - }, - "jwks_url": { + "query": { "type": "string", - "nullable": true - }, - "custom_jwks": { - "type": "object", - "nullable": true - }, - "resolved_jwks": { - "type": "object", - "nullable": true - }, - "inserted_at": { - "type": "string" + "minLength": 1 }, - "updated_at": { - "type": "string" + "parameters": { + "type": "array", + "items": {} }, - "resolved_at": { - "type": "string", - "nullable": true + "read_only": { + "type": "boolean" } }, - "required": ["id", "type", "inserted_at", "updated_at"] + "required": ["query"] }, - "ProjectAvailableRestoreVersion": { + "V1ReadOnlyQueryBody": { "type": "object", "properties": { - "version": { - "type": "string" - }, - "release_channel": { + "query": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "minLength": 1 }, - "postgres_engine": { + "parameters": { + "type": "array", + "items": {} + } + }, + "required": ["query"] + }, + "GetProjectDbMetadataResponse": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "schemas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "additionalProperties": true + } + } + }, + "required": ["name", "schemas"], + "additionalProperties": true + } + } + }, + "required": ["databases"] + }, + "V1UpdatePasswordBody": { + "type": "object", + "properties": { + "password": { "type": "string", - "enum": ["13", "14", "15", "17", "17-oriole"] + "minLength": 4 + } + }, + "required": ["password"] + }, + "V1UpdatePasswordResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" } }, - "required": ["version", "release_channel", "postgres_engine"] + "required": ["message"] }, - "GetProjectAvailableRestoreVersionsResponse": { + "JitAccessResponse": { "type": "object", "properties": { - "available_versions": { + "user_id": { + "type": "string", + "format": "uuid" + }, + "user_roles": { "type": "array", "items": { "type": "object", "properties": { - "version": { - "type": "string" - }, - "release_channel": { + "role": { "type": "string", - "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] + "minLength": 1 }, - "postgres_engine": { - "type": "string", - "enum": ["13", "14", "15", "17", "17-oriole"] + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } } }, - "required": ["version", "release_channel", "postgres_engine"] + "required": ["role"] } } }, - "required": ["available_versions"] + "required": ["user_id", "user_roles"] }, - "RestoreProjectBodyDto": { + "AuthorizeJitAccessBody": { "type": "object", - "properties": {}, - "hideDefinitions": ["release_channel", "postgres_engine"] + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "rhost": { + "type": "string", + "minLength": 1 + } + }, + "required": ["role", "rhost"] }, - "V1AnalyticsResponse": { + "JitAuthorizeAccessResponse": { "type": "object", "properties": { - "error": { - "oneOf": [ - { + "user_id": { + "type": "string", + "format": "uuid" + }, + "user_role": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", "properties": { - "code": { - "type": "number" - }, - "errors": { + "allowed_cidrs": { "type": "array", "items": { + "type": "object", "properties": { - "domain": { - "type": "string" - }, - "location": { - "type": "string" - }, - "locationType": { - "type": "string" - }, - "message": { - "type": "string" - }, - "reason": { + "cidr": { "type": "string" } - } + }, + "required": ["cidr"] } }, - "message": { - "type": "string" - }, - "status": { - "type": "string" + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } } } - }, - { - "type": "string" } - ] - }, - "result": { - "type": "array", - "items": { - "type": "object" - } - } - } - }, - "V1RunQueryBody": { - "type": "object", - "properties": { - "query": { - "type": "string" + }, + "required": ["role"] } }, - "required": ["query"] + "required": ["user_id", "user_role"] }, - "GetProjectDbMetadataResponseDto": { + "JitListAccessResponse": { "type": "object", "properties": { - "databases": { + "items": { "type": "array", "items": { "type": "object", "properties": { - "name": { - "type": "string" + "user_id": { + "type": "string", + "format": "uuid" }, - "schemas": { + "user_roles": { "type": "array", "items": { "type": "object", "properties": { - "name": { - "type": "string" + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } } }, - "required": ["name"], - "additionalProperties": true + "required": ["role"] } } }, - "required": ["name", "schemas"], - "additionalProperties": true + "required": ["user_id", "user_roles"] } } }, - "required": ["databases"] + "required": ["items"] }, - "FunctionResponse": { + "UpdateJitAccessBody": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" + "user_id": { + "type": "string", + "format": "uuid", + "minLength": 1 }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "minLength": 1 + }, + "expires_at": { + "type": "number" + }, + "allowed_networks": { + "type": "object", + "properties": { + "allowed_cidrs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + }, + "allowed_cidrs_v6": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cidr": { + "type": "string" + } + }, + "required": ["cidr"] + } + } + } + } + }, + "required": ["role"] + } + } + }, + "required": ["user_id", "roles"] + }, + "FunctionResponse": { + "type": "object", + "properties": { "id": { "type": "string" }, @@ -14760,8 +27436,19 @@ "type": "string" }, "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" }, "verify_jwt": { "type": "boolean" @@ -14774,16 +27461,19 @@ }, "import_map_path": { "type": "string" + }, + "ezbr_sha256": { + "type": "string" } }, - "required": ["version", "created_at", "updated_at", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] }, "V1CreateFunctionBody": { "type": "object", "properties": { "slug": { "type": "string", - "pattern": "/^[A-Za-z0-9_-]+$/" + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" }, "name": { "type": "string" @@ -14798,42 +27488,49 @@ "required": ["slug", "name", "body"] }, "BulkUpdateFunctionBody": { - "type": "object", - "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" - }, - "verify_jwt": { - "type": "boolean" - }, - "import_map": { - "type": "boolean" - }, - "entrypoint_path": { - "type": "string" + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "slug": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "verify_jwt": { + "type": "boolean" + }, + "import_map": { + "type": "boolean" + }, + "entrypoint_path": { + "type": "string" + }, + "import_map_path": { + "type": "string" + }, + "ezbr_sha256": { + "type": "string" + } }, - "import_map_path": { - "type": "string" - } - }, - "required": ["version", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version"] + } }, "BulkUpdateFunctionResponse": { "type": "object", @@ -14843,17 +27540,6 @@ "items": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, "id": { "type": "string" }, @@ -14864,8 +27550,19 @@ "type": "string" }, "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" }, "verify_jwt": { "type": "boolean" @@ -14878,38 +27575,17 @@ }, "import_map_path": { "type": "string" + }, + "ezbr_sha256": { + "type": "string" } }, - "required": ["version", "created_at", "updated_at", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] } } }, "required": ["functions"] }, - "FunctionDeployMetadata": { - "type": "object", - "properties": { - "entrypoint_path": { - "type": "string" - }, - "import_map_path": { - "type": "string" - }, - "static_patterns": { - "type": "array", - "items": { - "type": "string" - } - }, - "verify_jwt": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "required": ["entrypoint_path"] - }, "FunctionDeployBody": { "type": "object", "properties": { @@ -14945,22 +27621,11 @@ "required": ["entrypoint_path"] } }, - "required": ["file", "metadata"] + "required": ["metadata"] }, "DeployFunctionResponse": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, "id": { "type": "string" }, @@ -14971,8 +27636,19 @@ "type": "string" }, "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" }, "verify_jwt": { "type": "boolean" @@ -14985,24 +27661,16 @@ }, "import_map_path": { "type": "string" + }, + "ezbr_sha256": { + "type": "string" } }, - "required": ["version", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version"] }, "FunctionSlugResponse": { "type": "object", "properties": { - "version": { - "type": "integer" - }, - "created_at": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "integer", - "format": "int64" - }, "id": { "type": "string" }, @@ -15013,8 +27681,19 @@ "type": "string" }, "status": { - "enum": ["ACTIVE", "REMOVED", "THROTTLED"], - "type": "string" + "type": "string", + "enum": ["ACTIVE", "REMOVED", "THROTTLED"] + }, + "version": { + "type": "integer" + }, + "created_at": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "integer", + "format": "int64" }, "verify_jwt": { "type": "boolean" @@ -15027,9 +27706,16 @@ }, "import_map_path": { "type": "string" + }, + "ezbr_sha256": { + "type": "string" } }, - "required": ["version", "created_at", "updated_at", "id", "slug", "name", "status"] + "required": ["id", "slug", "name", "status", "version", "created_at", "updated_at"] + }, + "StreamableFile": { + "type": "object", + "properties": {} }, "V1UpdateFunctionBody": { "type": "object", @@ -15053,176 +27739,41 @@ }, "name": { "type": "string" - }, - "owner": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "public": { - "type": "boolean" - } - }, - "required": ["id", "name", "owner", "created_at", "updated_at", "public"] - }, - "AttributeValue": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - }, - "AttributeMapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - }, - "CreateProviderBody": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["saml"], - "description": "What type of provider will be created" - }, - "metadata_xml": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "domains": { - "type": "array", - "items": { - "type": "string" - } - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] + }, + "owner": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "public": { + "type": "boolean" } }, - "required": ["type"] + "required": ["id", "name", "owner", "created_at", "updated_at", "public"] }, - "SamlDescriptor": { + "CreateProviderBody": { "type": "object", "properties": { - "id": { - "type": "string" + "type": { + "type": "string", + "enum": ["saml"], + "description": "What type of provider will be created" }, - "entity_id": { + "metadata_xml": { "type": "string" }, "metadata_url": { "type": "string" }, - "metadata_xml": { - "type": "string" + "domains": { + "type": "array", + "items": { + "type": "string" + } }, "attribute_mapping": { "type": "object", @@ -15232,10 +27783,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15248,15 +27809,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15265,27 +27817,18 @@ } }, "required": ["keys"] - } - }, - "required": ["id", "entity_id"] - }, - "Domain": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" }, - "updated_at": { - "type": "string" + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, - "required": ["id"] + "required": ["type"] }, "CreateProviderResponse": { "type": "object", @@ -15316,22 +27859,6 @@ "additionalProperties": { "type": "object", "properties": { - "default": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, "name": { "type": "string" }, @@ -15341,81 +27868,11 @@ "type": "string" } }, - "array": { - "type": "boolean" - } - } - } - } - }, - "required": ["keys"] - } - }, - "required": ["id", "entity_id"] - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - } - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - }, - "required": ["id"] - }, - "Provider": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "saml": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "entity_id": { - "type": "string" - }, - "metadata_url": { - "type": "string" - }, - "metadata_xml": { - "type": "string" - }, - "attribute_mapping": { - "type": "object", - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15428,15 +27885,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15445,6 +27893,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, "required": ["id", "entity_id"] @@ -15513,10 +27970,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15529,15 +27996,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15546,6 +28004,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, "required": ["id", "entity_id"] @@ -15613,10 +28080,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15629,15 +28106,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15646,6 +28114,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, "required": ["id", "entity_id"] @@ -15703,10 +28180,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15719,15 +28206,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15736,6 +28214,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } } }, @@ -15768,10 +28255,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15779,19 +28276,10 @@ { "type": "string" }, - { - "type": "boolean" - } - ] - }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } + { + "type": "boolean" + } + ] }, "array": { "type": "boolean" @@ -15801,6 +28289,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, "required": ["id", "entity_id"] @@ -15864,10 +28361,20 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + }, "default": { "oneOf": [ { - "type": "object" + "type": "object", + "properties": {} }, { "type": "number" @@ -15880,15 +28387,6 @@ } ] }, - "name": { - "type": "string" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - }, "array": { "type": "boolean" } @@ -15897,6 +28395,15 @@ } }, "required": ["keys"] + }, + "name_id_format": { + "type": "string", + "enum": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + ] } }, "required": ["id", "entity_id"] @@ -15931,35 +28438,6 @@ }, "required": ["id"] }, - "V1Backup": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": ["COMPLETED", "FAILED", "PENDING", "REMOVED", "ARCHIVED", "CANCELLED"] - }, - "is_physical_backup": { - "type": "boolean" - }, - "inserted_at": { - "type": "string" - } - }, - "required": ["status", "is_physical_backup", "inserted_at"] - }, - "V1PhysicalBackup": { - "type": "object", - "properties": { - "earliest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" - }, - "latest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" - } - } - }, "V1BackupsResponse": { "type": "object", "properties": { @@ -15977,30 +28455,28 @@ "items": { "type": "object", "properties": { + "is_physical_backup": { + "type": "boolean" + }, "status": { "type": "string", "enum": ["COMPLETED", "FAILED", "PENDING", "REMOVED", "ARCHIVED", "CANCELLED"] }, - "is_physical_backup": { - "type": "boolean" - }, "inserted_at": { "type": "string" } }, - "required": ["status", "is_physical_backup", "inserted_at"] + "required": ["is_physical_backup", "status", "inserted_at"] } }, "physical_backup_data": { "type": "object", "properties": { "earliest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" + "type": "integer" }, "latest_physical_backup_date_unix": { - "type": "integer", - "format": "int64" + "type": "integer" } } } @@ -16018,6 +28494,39 @@ }, "required": ["recovery_time_target_unix"] }, + "V1RestorePointPostBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 20 + } + }, + "required": ["name"] + }, + "V1RestorePointResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["AVAILABLE", "PENDING", "REMOVED", "FAILED"] + } + }, + "required": ["name", "status"] + }, + "V1UndoBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 20 + } + }, + "required": ["name"] + }, "V1OrganizationMemberResponse": { "type": "object", "properties": { @@ -16039,22 +28548,28 @@ }, "required": ["user_id", "user_name", "role_name", "mfa_enabled"] }, - "BillingPlanId": { - "type": "string", - "enum": ["free", "pro", "team", "enterprise"] - }, "V1OrganizationSlugResponse": { "type": "object", "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, "plan": { "type": "string", - "enum": ["free", "pro", "team", "enterprise"] + "enum": ["free", "pro", "team", "enterprise", "platform"] }, "opt_in_tags": { "type": "array", "items": { "type": "string", - "enum": ["AI_SQL_GENERATOR_OPT_IN"] + "enum": [ + "AI_SQL_GENERATOR_OPT_IN", + "AI_DATA_GENERATOR_OPT_IN", + "AI_LOG_GENERATOR_OPT_IN" + ] } }, "allowed_release_channels": { @@ -16063,15 +28578,280 @@ "type": "string", "enum": ["internal", "alpha", "beta", "ga", "withdrawn", "preview"] } + } + }, + "required": ["id", "name", "opt_in_tags", "allowed_release_channels"] + }, + "OrganizationProjectClaimResponse": { + "type": "object", + "properties": { + "project": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] }, - "id": { + "preview": { + "type": "object", + "properties": { + "valid": { + "type": "boolean" + }, + "warnings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": ["key", "message"] + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": ["key", "message"] + } + }, + "info": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": ["key", "message"] + } + }, + "members_exceeding_free_project_limit": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "limit": { + "type": "number" + } + }, + "required": ["name", "limit"] + } + }, + "source_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"] + }, + "target_subscription_plan": { + "type": "string", + "enum": ["free", "pro", "team", "enterprise", "platform"], + "nullable": true + } + }, + "required": [ + "valid", + "warnings", + "errors", + "info", + "members_exceeding_free_project_limit", + "source_subscription_plan", + "target_subscription_plan" + ] + }, + "expires_at": { "type": "string" }, - "name": { + "created_at": { "type": "string" + }, + "created_by": { + "type": "string", + "format": "uuid" + } + }, + "required": ["project", "preview", "expires_at", "created_at", "created_by"] + }, + "OrganizationProjectsResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + }, + "cloud_provider": { + "type": "string" + }, + "region": { + "type": "string" + }, + "is_branch": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "UNKNOWN", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UPGRADING", + "PAUSING", + "RESTORE_FAILED", + "RESTARTING", + "PAUSE_FAILED", + "RESIZING" + ] + }, + "inserted_at": { + "type": "string" + }, + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "infra_compute_size": { + "type": "string", + "enum": [ + "pico", + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge", + "4xlarge", + "8xlarge", + "12xlarge", + "16xlarge", + "24xlarge", + "24xlarge_optimized_memory", + "24xlarge_optimized_cpu", + "24xlarge_high_memory", + "48xlarge", + "48xlarge_optimized_memory", + "48xlarge_optimized_cpu", + "48xlarge_high_memory" + ] + }, + "region": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE_HEALTHY", + "ACTIVE_UNHEALTHY", + "COMING_UP", + "GOING_DOWN", + "INIT_FAILED", + "REMOVED", + "RESTORING", + "UNKNOWN", + "INIT_READ_REPLICA", + "INIT_READ_REPLICA_FAILED", + "RESTARTING", + "RESIZING" + ] + }, + "cloud_provider": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["PRIMARY", "READ_REPLICA"] + }, + "disk_volume_size_gb": { + "type": "number" + }, + "disk_type": { + "type": "string", + "enum": ["gp3", "io2"] + }, + "disk_throughput_mbps": { + "type": "number" + }, + "disk_last_modified_at": { + "type": "string" + } + }, + "required": ["region", "status", "cloud_provider", "identifier", "type"] + } + } + }, + "required": [ + "ref", + "name", + "cloud_provider", + "region", + "is_branch", + "status", + "inserted_at", + "databases" + ] + } + }, + "pagination": { + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "Total number of projects. Use this to calculate the total number of pages." + }, + "limit": { + "type": "number", + "description": "Maximum number of projects per page" + }, + "offset": { + "type": "number", + "description": "Number of projects skipped in this response" + } + }, + "required": ["count", "limit", "offset"] } }, - "required": ["opt_in_tags", "allowed_release_channels", "id", "name"] + "required": ["projects", "pagination"] } } }