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"]
}
}
}