From 7d4ec098ea50ec31bcde8f4e83af75936c801a47 Mon Sep 17 00:00:00 2001 From: "supabase-supabase-autofixer[bot]" <248690971+supabase-supabase-autofixer[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 09:22:42 +0200 Subject: [PATCH] feat: update mgmt api docs (#46955) This PR updates mgmt api docs automatically. Co-authored-by: jbergstroem <176984+jbergstroem@users.noreply.github.com> --- apps/docs/spec/api_v1_openapi.json | 110 +++- apps/docs/spec/api_v2_openapi.json | 318 +++++++++ apps/docs/spec/common-api-sections.json | 18 + .../transforms/api_v1_openapi_deparsed.json | 306 ++++++++- .../transforms/api_v2_openapi_deparsed.json | 616 ++++++++++++++++++ 5 files changed, 1344 insertions(+), 24 deletions(-) diff --git a/apps/docs/spec/api_v1_openapi.json b/apps/docs/spec/api_v1_openapi.json index 3fcc8254819..5cbed875278 100644 --- a/apps/docs/spec/api_v1_openapi.json +++ b/apps/docs/spec/api_v1_openapi.json @@ -700,6 +700,7 @@ }, "/v1/oauth/token": { "post": { + "description": "Supports `authorization_code`, `refresh_token`, and `urn:ietf:params:oauth:grant-type:jwt-bearer` grant types. The `jwt-bearer` grant type (IDJAG — identity-directed JWT assertion) is in beta and available on Team and Enterprise plans only.", "operationId": "v1-exchange-oauth-token", "parameters": [], "requestBody": { @@ -3222,7 +3223,7 @@ } }, "responses": { - "201": { "description": "" }, + "204": { "description": "" }, "401": { "description": "Unauthorized" }, "402": { "description": "This feature requires the Pro, Team, or Enterprise organization plan." @@ -3266,7 +3267,7 @@ } }, "responses": { - "201": { "description": "" }, + "204": { "description": "" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" }, @@ -3956,6 +3957,38 @@ "x-oauth-scope": "projects:write" } }, + "/v1/projects/{ref}/restart": { + "post": { + "operationId": "v1-restart-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "example": "abcdefghijklmnopqrst", + "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": "Restarts 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", @@ -7965,13 +7998,24 @@ "OAuthTokenBody": { "type": "object", "properties": { - "grant_type": { "type": "string", "enum": ["authorization_code", "refresh_token"] }, + "grant_type": { + "type": "string", + "enum": [ + "authorization_code", + "refresh_token", + "urn:ietf:params:oauth:grant-type:jwt-bearer" + ] + }, "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" }, + "assertion": { + "type": "string", + "description": "IDJAG assertion JWT for grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer. Beta - available on Team and Enterprise plans only." + }, "resource": { "type": "string", "format": "uri", @@ -7994,11 +8038,14 @@ "type": "object", "properties": { "access_token": { "type": "string" }, - "refresh_token": { "type": "string" }, + "refresh_token": { + "type": "string", + "description": "The `urn:ietf:params:oauth:grant-type:jwt-bearer` grant type issues access tokens only, no refresh token is returned and the token cannot be revoked via `/v1/oauth/revoke`." + }, "expires_in": { "type": "integer" }, "token_type": { "type": "string", "enum": ["Bearer"] } }, - "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "required": ["access_token", "expires_in", "token_type"], "additionalProperties": false }, "OAuthRevokeTokenBody": { @@ -10309,7 +10356,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "variant": { @@ -10345,7 +10393,8 @@ { "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"] } + { "type": "string", "enum": ["log_drain_default"] }, + { "type": "string", "enum": ["etl_pipeline_default"] } ] }, "name": { "type": "string" }, @@ -10381,7 +10430,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "name": { "type": "string" }, @@ -10420,7 +10470,8 @@ { "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"] } + { "type": "string", "enum": ["log_drain_default"] }, + { "type": "string", "enum": ["etl_pipeline_default"] } ] }, "name": { "type": "string" }, @@ -10488,7 +10539,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] } }, @@ -11525,6 +11577,25 @@ "properties": { "effective_cache_size": { "type": "string" }, "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { "type": "boolean" }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { "type": "boolean" }, + "log_connections": { "type": "boolean" }, + "log_disconnections": { "type": "boolean" }, + "log_duration": { "type": "boolean" }, + "log_lock_waits": { "type": "boolean" }, + "log_recovery_conflict_waits": { "type": "boolean" }, + "log_replication_commands": { "type": "boolean" }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { "type": "string" }, "maintenance_work_mem": { "type": "string" }, "track_activity_query_size": { "type": "string" }, "max_connections": { "type": "integer", "minimum": 1, "maximum": 262143 }, @@ -11567,6 +11638,25 @@ "properties": { "effective_cache_size": { "type": "string" }, "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { "type": "boolean" }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { "type": "boolean" }, + "log_connections": { "type": "boolean" }, + "log_disconnections": { "type": "boolean" }, + "log_duration": { "type": "boolean" }, + "log_lock_waits": { "type": "boolean" }, + "log_recovery_conflict_waits": { "type": "boolean" }, + "log_replication_commands": { "type": "boolean" }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { "type": "string" }, "maintenance_work_mem": { "type": "string" }, "track_activity_query_size": { "type": "string" }, "max_connections": { "type": "integer", "minimum": 1, "maximum": 262143 }, diff --git a/apps/docs/spec/api_v2_openapi.json b/apps/docs/spec/api_v2_openapi.json index 464289a5721..a576b8f8cf3 100644 --- a/apps/docs/spec/api_v2_openapi.json +++ b/apps/docs/spec/api_v2_openapi.json @@ -265,6 +265,135 @@ "tags": ["Projects"], "x-endpoint-owners": ["management-api"] } + }, + "/v2/organizations/{slug}/members": { + "get": { + "description": "Returns a cursor-paginated list of organization members including their roles and project-scoped permissions.", + "operationId": "v2-list-organization-members", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "example": "tsrqponmlkjihgfedcba", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "schema": { + "properties": { + "size": { "type": "integer", "minimum": 1, "maximum": 100, "required": false }, + "after": { "type": "string", "format": "uuid", "required": false }, + "before": { "type": "string", "format": "uuid", "required": false } + }, + "type": "object" + } + }, + { + "name": "filter", + "required": false, + "in": "query", + "schema": { + "properties": { + "username": { "type": "string", "required": false }, + "primary_email": { "type": "string", "format": "email", "required": false } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V2ListMembersResponse" } + } + } + }, + "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" + } + }, + "/v2/organizations/{slug}/roles": { + "get": { + "description": "Returns a cursor-paginated list of organization roles including both org-scoped and project-scoped roles.", + "operationId": "v2-list-organization-roles", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "example": "tsrqponmlkjihgfedcba", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "schema": { + "properties": { + "size": { "type": "integer", "minimum": 1, "maximum": 100, "required": false }, + "after": { "type": "string", "required": false }, + "before": { "type": "string", "required": false } + }, + "type": "object" + } + }, + { + "name": "filter", + "required": false, + "in": "query", + "schema": { + "properties": { + "scope": { + "type": "string", + "enum": ["organization", "project"], + "required": false + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/V2ListRolesResponse" } + } + } + }, + "401": { "description": "Unauthorized" }, + "403": { "description": "Forbidden action" }, + "429": { "description": "Rate limit exceeded" } + }, + "security": [{ "bearer": [] }, { "fga_permissions": ["members_read"] }], + "summary": "List roles of an organization", + "tags": ["Organizations"], + "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" + } } }, "info": { @@ -893,6 +1022,195 @@ } }, "required": ["data"] + }, + "V2ListMembersResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_member"], + "description": "Resource type." + }, + "id": { "type": "string", "format": "uuid" }, + "attributes": { + "type": "object", + "properties": { + "username": { + "type": "string", + "nullable": true, + "description": "Member's username" + }, + "primary_email": { + "type": "string", + "nullable": true, + "description": "Member's primary email" + }, + "mfa_enabled": { + "type": "boolean", + "description": "Whether Multi-Factor Authentication is enabled for this member" + }, + "is_sso_user": { + "type": "boolean", + "description": "Whether this member is a Single Sign-On user" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "integer", "description": "Role ID." }, + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { "type": "string" }, + "name": { "type": "string" } + }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["id", "name", "scope", "projects"] + }, + "description": "Roles assigned to this member. Includes both org-level and project-scoped roles." + } + }, + "required": ["username", "primary_email", "mfa_enabled", "is_sso_user", "roles"] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] + }, + "V2ListRolesResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_role"], + "description": "Resource type." + }, + "id": { "type": "string" }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "base_role_id": { + "type": "integer", + "nullable": true, + "description": "null for org-level roles; the base role ID for project-scoped roles." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { "ref": { "type": "string" }, "name": { "type": "string" } }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["name", "scope", "base_role_id", "projects"] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] } } } diff --git a/apps/docs/spec/common-api-sections.json b/apps/docs/spec/common-api-sections.json index 6d4aad0cd97..254629246b8 100644 --- a/apps/docs/spec/common-api-sections.json +++ b/apps/docs/spec/common-api-sections.json @@ -735,6 +735,18 @@ "title": "List organization members", "slug": "v1-list-organization-members", "type": "operation" + }, + { + "id": "v2-list-organization-members", + "title": "List organization members", + "slug": "v2-list-organization-members", + "type": "operation" + }, + { + "id": "v2-list-organization-roles", + "title": "List organization roles", + "slug": "v2-list-organization-roles", + "type": "operation" } ] }, @@ -886,6 +898,12 @@ "slug": "v2-preview-a-project-transfer", "type": "operation" }, + { + "id": "v1-restart-a-project", + "title": "Restart a project", + "slug": "v1-restart-a-project", + "type": "operation" + }, { "id": "v1-restore-a-project", "title": "Restore a project", diff --git a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json index 0205bf7586a..de1ae800bcc 100644 --- a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json +++ b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json @@ -1858,6 +1858,7 @@ }, "/v1/oauth/token": { "post": { + "description": "Supports `authorization_code`, `refresh_token`, and `urn:ietf:params:oauth:grant-type:jwt-bearer` grant types. The `jwt-bearer` grant type (IDJAG — identity-directed JWT assertion) is in beta and available on Team and Enterprise plans only.", "operationId": "v1-exchange-oauth-token", "parameters": [], "requestBody": { @@ -1869,7 +1870,11 @@ "properties": { "grant_type": { "type": "string", - "enum": ["authorization_code", "refresh_token"] + "enum": [ + "authorization_code", + "refresh_token", + "urn:ietf:params:oauth:grant-type:jwt-bearer" + ] }, "client_id": { "type": "string", @@ -1890,6 +1895,10 @@ "refresh_token": { "type": "string" }, + "assertion": { + "type": "string", + "description": "IDJAG assertion JWT for grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer. Beta - available on Team and Enterprise plans only." + }, "resource": { "type": "string", "format": "uri", @@ -1925,7 +1934,8 @@ "type": "string" }, "refresh_token": { - "type": "string" + "type": "string", + "description": "The `urn:ietf:params:oauth:grant-type:jwt-bearer` grant type issues access tokens only, no refresh token is returned and the token cannot be revoked via `/v1/oauth/revoke`." }, "expires_in": { "type": "integer" @@ -1935,7 +1945,7 @@ "enum": ["Bearer"] } }, - "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "required": ["access_token", "expires_in", "token_type"], "additionalProperties": false } } @@ -8483,7 +8493,7 @@ } }, "responses": { - "201": { + "204": { "description": "" }, "401": { @@ -8560,7 +8570,7 @@ } }, "responses": { - "201": { + "204": { "description": "" }, "401": { @@ -13622,6 +13632,58 @@ "x-oauth-scope": "projects:write" } }, + "/v1/projects/{ref}/restart": { + "post": { + "operationId": "v1-restart-a-project", + "parameters": [ + { + "name": "ref", + "required": true, + "in": "path", + "description": "Project ref", + "schema": { + "minLength": 20, + "maxLength": 20, + "pattern": "^[a-z]+$", + "example": "abcdefghijklmnopqrst", + "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": "Restarts 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", @@ -13847,7 +13909,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "variant": { @@ -13901,6 +13964,10 @@ { "type": "string", "enum": ["log_drain_default"] + }, + { + "type": "string", + "enum": ["etl_pipeline_default"] } ] }, @@ -13951,7 +14018,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "name": { @@ -14010,6 +14078,10 @@ { "type": "string", "enum": ["log_drain_default"] + }, + { + "type": "string", + "enum": ["etl_pipeline_default"] } ] }, @@ -14151,7 +14223,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] } }, @@ -19469,6 +19542,43 @@ "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { + "type": "boolean" + }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { + "type": "boolean" + }, + "log_connections": { + "type": "boolean" + }, + "log_disconnections": { + "type": "boolean" + }, + "log_duration": { + "type": "boolean" + }, + "log_lock_waits": { + "type": "boolean" + }, + "log_recovery_conflict_waits": { + "type": "boolean" + }, + "log_replication_commands": { + "type": "boolean" + }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { + "type": "string" + }, "maintenance_work_mem": { "type": "string" }, @@ -19624,6 +19734,43 @@ "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { + "type": "boolean" + }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { + "type": "boolean" + }, + "log_connections": { + "type": "boolean" + }, + "log_disconnections": { + "type": "boolean" + }, + "log_duration": { + "type": "boolean" + }, + "log_lock_waits": { + "type": "boolean" + }, + "log_recovery_conflict_waits": { + "type": "boolean" + }, + "log_replication_commands": { + "type": "boolean" + }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { + "type": "string" + }, "maintenance_work_mem": { "type": "string" }, @@ -19741,6 +19888,43 @@ "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { + "type": "boolean" + }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { + "type": "boolean" + }, + "log_connections": { + "type": "boolean" + }, + "log_disconnections": { + "type": "boolean" + }, + "log_duration": { + "type": "boolean" + }, + "log_lock_waits": { + "type": "boolean" + }, + "log_recovery_conflict_waits": { + "type": "boolean" + }, + "log_replication_commands": { + "type": "boolean" + }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { + "type": "string" + }, "maintenance_work_mem": { "type": "string" }, @@ -23558,7 +23742,11 @@ "properties": { "grant_type": { "type": "string", - "enum": ["authorization_code", "refresh_token"] + "enum": [ + "authorization_code", + "refresh_token", + "urn:ietf:params:oauth:grant-type:jwt-bearer" + ] }, "client_id": { "type": "string", @@ -23579,6 +23767,10 @@ "refresh_token": { "type": "string" }, + "assertion": { + "type": "string", + "description": "IDJAG assertion JWT for grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer. Beta - available on Team and Enterprise plans only." + }, "resource": { "type": "string", "format": "uri", @@ -23606,7 +23798,8 @@ "type": "string" }, "refresh_token": { - "type": "string" + "type": "string", + "description": "The `urn:ietf:params:oauth:grant-type:jwt-bearer` grant type issues access tokens only, no refresh token is returned and the token cannot be revoked via `/v1/oauth/revoke`." }, "expires_in": { "type": "integer" @@ -23616,7 +23809,7 @@ "enum": ["Bearer"] } }, - "required": ["access_token", "refresh_token", "expires_in", "token_type"], + "required": ["access_token", "expires_in", "token_type"], "additionalProperties": false }, "OAuthRevokeTokenBody": { @@ -28019,7 +28212,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "variant": { @@ -28073,6 +28267,10 @@ { "type": "string", "enum": ["log_drain_default"] + }, + { + "type": "string", + "enum": ["etl_pipeline_default"] } ] }, @@ -28123,7 +28321,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] }, "name": { @@ -28182,6 +28381,10 @@ { "type": "string", "enum": ["log_drain_default"] + }, + { + "type": "string", + "enum": ["etl_pipeline_default"] } ] }, @@ -28273,7 +28476,8 @@ "ipv4", "auth_mfa_phone", "auth_mfa_web_authn", - "log_drain" + "log_drain", + "etl_pipeline" ] } }, @@ -30021,6 +30225,43 @@ "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { + "type": "boolean" + }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { + "type": "boolean" + }, + "log_connections": { + "type": "boolean" + }, + "log_disconnections": { + "type": "boolean" + }, + "log_duration": { + "type": "boolean" + }, + "log_lock_waits": { + "type": "boolean" + }, + "log_recovery_conflict_waits": { + "type": "boolean" + }, + "log_replication_commands": { + "type": "boolean" + }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { + "type": "string" + }, "maintenance_work_mem": { "type": "string" }, @@ -30120,6 +30361,43 @@ "logical_decoding_work_mem": { "type": "string" }, + "cron.log_statement": { + "type": "boolean" + }, + "log_autovacuum_min_duration": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_checkpoints": { + "type": "boolean" + }, + "log_connections": { + "type": "boolean" + }, + "log_disconnections": { + "type": "boolean" + }, + "log_duration": { + "type": "boolean" + }, + "log_lock_waits": { + "type": "boolean" + }, + "log_recovery_conflict_waits": { + "type": "boolean" + }, + "log_replication_commands": { + "type": "boolean" + }, + "log_startup_progress_interval": { + "type": "string", + "description": "Default unit: ms", + "pattern": "^(-?[0-9]+(?:\\.[0-9]+)?)(us|ms|s|min|h|d)?$" + }, + "log_temp_files": { + "type": "string" + }, "maintenance_work_mem": { "type": "string" }, diff --git a/apps/docs/spec/transforms/api_v2_openapi_deparsed.json b/apps/docs/spec/transforms/api_v2_openapi_deparsed.json index 3e430f5e530..45e90da5d75 100644 --- a/apps/docs/spec/transforms/api_v2_openapi_deparsed.json +++ b/apps/docs/spec/transforms/api_v2_openapi_deparsed.json @@ -1581,6 +1581,414 @@ "tags": ["Projects"], "x-endpoint-owners": ["management-api"] } + }, + "/v2/organizations/{slug}/members": { + "get": { + "description": "Returns a cursor-paginated list of organization members including their roles and project-scoped permissions.", + "operationId": "v2-list-organization-members", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "example": "tsrqponmlkjihgfedcba", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "schema": { + "properties": { + "size": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "required": false + }, + "after": { + "type": "string", + "format": "uuid", + "required": false + }, + "before": { + "type": "string", + "format": "uuid", + "required": false + } + }, + "type": "object" + } + }, + { + "name": "filter", + "required": false, + "in": "query", + "schema": { + "properties": { + "username": { + "type": "string", + "required": false + }, + "primary_email": { + "type": "string", + "format": "email", + "required": false + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_member"], + "description": "Resource type." + }, + "id": { + "type": "string", + "format": "uuid" + }, + "attributes": { + "type": "object", + "properties": { + "username": { + "type": "string", + "nullable": true, + "description": "Member's username" + }, + "primary_email": { + "type": "string", + "nullable": true, + "description": "Member's primary email" + }, + "mfa_enabled": { + "type": "boolean", + "description": "Whether Multi-Factor Authentication is enabled for this member" + }, + "is_sso_user": { + "type": "boolean", + "description": "Whether this member is a Single Sign-On user" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Role ID." + }, + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["id", "name", "scope", "projects"] + }, + "description": "Roles assigned to this member. Includes both org-level and project-scoped roles." + } + }, + "required": [ + "username", + "primary_email", + "mfa_enabled", + "is_sso_user", + "roles" + ] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] + } + } + } + }, + "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" + } + }, + "/v2/organizations/{slug}/roles": { + "get": { + "description": "Returns a cursor-paginated list of organization roles including both org-scoped and project-scoped roles.", + "operationId": "v2-list-organization-roles", + "parameters": [ + { + "name": "slug", + "required": true, + "in": "path", + "description": "Organization slug", + "schema": { + "pattern": "^[\\w-]+$", + "example": "tsrqponmlkjihgfedcba", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "schema": { + "properties": { + "size": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "required": false + }, + "after": { + "type": "string", + "required": false + }, + "before": { + "type": "string", + "required": false + } + }, + "type": "object" + } + }, + { + "name": "filter", + "required": false, + "in": "query", + "schema": { + "properties": { + "scope": { + "type": "string", + "enum": ["organization", "project"], + "required": false + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_role"], + "description": "Resource type." + }, + "id": { + "type": "string" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "base_role_id": { + "type": "integer", + "nullable": true, + "description": "null for org-level roles; the base role ID for project-scoped roles." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["name", "scope", "base_role_id", "projects"] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden action" + }, + "429": { + "description": "Rate limit exceeded" + } + }, + "security": [ + { + "bearer": [] + }, + { + "fga_permissions": ["members_read"] + } + ], + "summary": "List roles of an organization", + "tags": ["Organizations"], + "x-badges": [ + { + "name": "OAuth scope: organizations:read", + "position": "after" + } + ], + "x-endpoint-owners": ["management-api"], + "x-oauth-scope": "organizations:read" + } } }, "components": { @@ -2545,6 +2953,214 @@ } }, "required": ["data"] + }, + "V2ListMembersResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_member"], + "description": "Resource type." + }, + "id": { + "type": "string", + "format": "uuid" + }, + "attributes": { + "type": "object", + "properties": { + "username": { + "type": "string", + "nullable": true, + "description": "Member's username" + }, + "primary_email": { + "type": "string", + "nullable": true, + "description": "Member's primary email" + }, + "mfa_enabled": { + "type": "boolean", + "description": "Whether Multi-Factor Authentication is enabled for this member" + }, + "is_sso_user": { + "type": "boolean", + "description": "Whether this member is a Single Sign-On user" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Role ID." + }, + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["id", "name", "scope", "projects"] + }, + "description": "Roles assigned to this member. Includes both org-level and project-scoped roles." + } + }, + "required": ["username", "primary_email", "mfa_enabled", "is_sso_user", "roles"] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/members?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] + }, + "V2ListRolesResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["organization_role"], + "description": "Resource type." + }, + "id": { + "type": "string" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Role name. For project-scoped roles this is the base role name.", + "example": "Developer" + }, + "scope": { + "type": "string", + "enum": ["organization", "project"], + "description": "Whether this role applies org-wide or is scoped to specific projects for the user." + }, + "base_role_id": { + "type": "integer", + "nullable": true, + "description": "null for org-level roles; the base role ID for project-scoped roles." + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": ["ref", "name"] + }, + "description": "Project refs this role is scoped to. Empty array for org-level roles." + } + }, + "required": ["name", "scope", "base_role_id", "projects"] + } + }, + "required": ["type", "id", "attributes"] + } + }, + "links": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true, + "description": "URL path to the first page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10" + }, + "prev": { + "type": "string", + "nullable": true, + "description": "URL path to the previous page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7" + }, + "next": { + "type": "string", + "nullable": true, + "description": "URL path to the next page.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4" + }, + "last": { + "type": "string", + "nullable": true, + "description": "URL path to the last page if available.", + "example": "/v2/organizations/my-org/roles?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295" + } + }, + "required": ["prev", "next"] + } + }, + "required": ["data", "links"] } } }