{
  "swagger": "2.0",
  "info": {
    "description": "Partner API for Contio MeetingOS - External partner integration endpoints",
    "title": "Contio MeetingOS Partner API",
    "termsOfService": "https://contio.ai/tos",
    "contact": {
      "name": "Contio MeetingOS Partner Support",
      "url": "https://contio.ai/contact",
      "email": "partner-support@contio.ai"
    },
    "license": {
      "name": "MIT/Commercial",
      "url": "https://docs.contio.ai/partner-api/license/"
    },
    "version": "1.7.1"
  },
  "host": "api.contio.ai",
  "basePath": "/",
  "paths": {
    "/.well-known/jwks.json": {
      "get": {
        "description": "Returns the JSON Web Key Set for token verification",
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "JSON Web Key Set Endpoint",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.JWKSResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/.well-known/openid_configuration": {
      "get": {
        "description": "Returns the OpenID Connect discovery document",
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "OpenID Connect Discovery Endpoint",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.DiscoveryDocument"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/auth/initiate": {
      "post": {
        "description": "Initiates passwordless authentication for partner OAuth flow with client-specific SECRET_HASH. Supports optional workspace_id to provision users into a shared workspace instead of creating a personal one, and is_admin to grant admin role in that workspace.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Initiate Partner Passwordless Authentication",
        "parameters": [
          {
            "description": "Partner authentication initiation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/oauth.PartnerAuthInitiateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.PartnerAuthInitiateResponse"
            }
          },
          "400": {
            "description": "Invalid request format or workspace_id is not a valid UUID",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "403": {
            "description": "Workspace does not belong to this partner (workspace_not_authorized)",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Specified workspace_id does not exist (workspace_not_found)",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "User already belongs to a different workspace (workspace_conflict). Includes workspace_id field.",
            "schema": {
              "$ref": "#/definitions/errors.PartnerConflictErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/auth/verify": {
      "post": {
        "description": "Verifies OTP code for partner OAuth flow with client-specific SECRET_HASH",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Verify Partner Passwordless Authentication",
        "parameters": [
          {
            "description": "Partner authentication verification request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/oauth.PartnerAuthVerifyRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.PartnerAuthResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/authorize": {
      "get": {
        "description": "Handles OAuth 2.0 authorization requests for partner applications",
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "OAuth 2.0 Authorization Endpoint",
        "parameters": [
          {
            "type": "string",
            "description": "OAuth response type (code)",
            "name": "response_type",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth client ID",
            "name": "client_id",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth redirect URI",
            "name": "redirect_uri",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth scopes",
            "name": "scope",
            "in": "query"
          },
          {
            "type": "string",
            "description": "OAuth state parameter",
            "name": "state",
            "in": "query"
          },
          {
            "type": "string",
            "description": "PKCE code challenge",
            "name": "code_challenge",
            "in": "query"
          },
          {
            "type": "string",
            "description": "PKCE code challenge method",
            "name": "code_challenge_method",
            "in": "query"
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to authorization URL"
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      },
      "post": {
        "description": "Completes OAuth 2.0 authorization after user consent and returns Cognito authorization code",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Complete OAuth 2.0 Authorization",
        "parameters": [
          {
            "description": "OAuth consent request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/oauth.OAuthConsentRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Authorization completed successfully",
            "schema": {
              "$ref": "#/definitions/oauth.OAuthConsentResponse"
            }
          },
          "400": {
            "description": "Bad request",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      }
    },
    "/oauth2/check-consent": {
      "post": {
        "description": "Checks if user has already consented to the requested scopes and can skip consent page",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Check Existing Consent",
        "parameters": [
          {
            "description": "Consent check request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/oauth.OAuthConsentCheckRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.OAuthConsentCheckResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/health": {
      "get": {
        "description": "Tests connectivity to Cognito and returns service status",
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Health Check for OAuth/Cognito Service",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.HealthResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/introspect": {
      "post": {
        "description": "Introspects access tokens to get token information",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "OAuth 2.0 Token Introspection Endpoint",
        "parameters": [
          {
            "type": "string",
            "description": "Access token to introspect",
            "name": "token",
            "in": "formData",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.TokenIntrospection"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/revoke": {
      "post": {
        "description": "Revokes an access or refresh token. Per RFC 7009, returns success even for invalid tokens.",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "OAuth 2.0 Token Revocation Endpoint",
        "parameters": [
          {
            "type": "string",
            "description": "Token to revoke",
            "name": "token",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "Hint about token type (access_token or refresh_token)",
            "name": "token_type_hint",
            "in": "formData"
          }
        ],
        "responses": {
          "200": {
            "description": "Token revoked successfully"
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/scopes": {
      "get": {
        "description": "Returns the list of all available OAuth scopes for partner applications",
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Get Available OAuth Scopes",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.ScopesResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/token": {
      "post": {
        "description": "Exchanges authorization code for access tokens",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "OAuth 2.0 Token Endpoint",
        "parameters": [
          {
            "type": "string",
            "description": "OAuth grant type (authorization_code)",
            "name": "grant_type",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "Authorization code",
            "name": "code",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth redirect URI",
            "name": "redirect_uri",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth client ID",
            "name": "client_id",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "OAuth client secret",
            "name": "client_secret",
            "in": "formData"
          },
          {
            "type": "string",
            "description": "PKCE code verifier",
            "name": "code_verifier",
            "in": "formData"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.TokenResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/oauth2/userInfo": {
      "get": {
        "description": "Returns user information for the provided access token",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Get user information",
        "parameters": [
          {
            "type": "string",
            "description": "Bearer access token",
            "name": "Authorization",
            "in": "header",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.UserInfo"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/app": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves information about the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "App Management"
        ],
        "summary": "Get partner app information",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates partner app details like name, description, and webhook URL",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "App Management"
        ],
        "summary": "Update partner app",
        "parameters": [
          {
            "description": "Update app request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/app_management.UpdateAppRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/app_management.UpdateAppError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/app/status": {
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates the status of the authenticated partner app",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "App Management"
        ],
        "summary": "Update partner app status",
        "parameters": [
          {
            "description": "Status update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/app_management.UpdateAppStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/app_management.UpdateAppStatusError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/automation": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves all automations for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Automation Management"
        ],
        "summary": "Get automations",
        "parameters": [
          {
            "type": "integer",
            "default": 50,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_shared.ListResponse-automation_AutomationResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Creates a new automation for action item matching",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Automation Management"
        ],
        "summary": "Create a new automation",
        "parameters": [
          {
            "description": "Automation data",
            "name": "automation",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/automation.CreateAutomationRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/automation.AutomationResponse"
            }
          },
          "400": {
            "description": "Invalid request body or validation error",
            "schema": {
              "$ref": "#/definitions/automation.CreateAutomationError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/automation/{automationId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a specific automation by ID for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Automation Management"
        ],
        "summary": "Get automation by ID",
        "parameters": [
          {
            "type": "string",
            "description": "Automation ID",
            "name": "automationId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/automation.AutomationResponse"
            }
          },
          "400": {
            "description": "Invalid automation ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Automation not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates a specific automation for the authenticated partner app",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Automation Management"
        ],
        "summary": "Update automation",
        "parameters": [
          {
            "type": "string",
            "description": "Automation ID",
            "name": "automationId",
            "in": "path",
            "required": true
          },
          {
            "description": "Automation update data",
            "name": "automation",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/automation.UpdateAutomationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/automation.AutomationResponse"
            }
          },
          "400": {
            "description": "Invalid request body or validation error",
            "schema": {
              "$ref": "#/definitions/automation.UpdateAutomationError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Automation not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Deletes an automation by ID",
        "tags": [
          "Automation Management"
        ],
        "summary": "Delete automation",
        "parameters": [
          {
            "type": "string",
            "description": "Automation ID",
            "name": "automationId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Automation not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/connections": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves user connections for the authenticated partner app with pagination and filtering",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Connection Management"
        ],
        "summary": "Get user connections",
        "parameters": [
          {
            "type": "integer",
            "default": 50,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174000\"",
            "description": "Filter by user ID",
            "name": "user_id",
            "in": "query"
          },
          {
            "enum": [
              "active",
              "revoked",
              "expired"
            ],
            "type": "string",
            "description": "Filter by connection status",
            "name": "status",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_shared.ListResponse-connection_UserConnectionResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/connections/{connectionId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a specific user connection by ID if it belongs to the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Connection Management"
        ],
        "summary": "Get user connection by ID",
        "parameters": [
          {
            "type": "string",
            "description": "Connection ID",
            "name": "connectionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/connection.UserConnectionResponse"
            }
          },
          "400": {
            "description": "Invalid connection ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Connection not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Revokes a user connection by ID if it belongs to the authenticated partner app",
        "tags": [
          "Connection Management"
        ],
        "summary": "Revoke user connection",
        "parameters": [
          {
            "type": "string",
            "description": "Connection ID",
            "name": "connectionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Invalid connection ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Connection not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Returns the status, age, and health information for all partner credentials",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Get credential status",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/credential.CredentialStatusResponse"
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/api-key/rollback": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Restores the API key to the prior value after rotation",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Rollback API key",
        "parameters": [
          {
            "description": "Rollback request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/credential.CredentialRollbackRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Rollback successful"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/api-key/rotate": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Rotates the API key with optional grace period",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Rotate API key",
        "parameters": [
          {
            "description": "Rotation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/credential.RotateAPIKeyError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/client-secret/rollback": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Restores the client secret to the prior value after rotation",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Rollback Client secret",
        "parameters": [
          {
            "description": "Rollback request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/credential.CredentialRollbackRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Rollback successful"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/client-secret/rotate": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Rotates the client secret with optional grace period",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Rotate client secret",
        "parameters": [
          {
            "description": "Rotation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/credential.RotateClientSecretError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/history": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Returns the audit history for credential operations",
        "produces": [
          "application/json"
        ],
        "tags": [
          "App Management"
        ],
        "summary": "Get audit history",
        "parameters": [
          {
            "type": "integer",
            "default": 20,
            "description": "Number of events to return",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Number of events to skip",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by credential type",
            "name": "credential_type",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/credentials/webhook-secret/rotate": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Rotates the webhook secret with optional grace period",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Credential Management"
        ],
        "summary": "Rotate webhook secret",
        "parameters": [
          {
            "description": "Rotation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/credential.CredentialRotationResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/credential.RotateWebhookSecretError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/idp": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves the OIDC IdP configuration for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "IdP Management"
        ],
        "summary": "Get IdP configuration",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/idp.IdPConfigResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates the OIDC IdP configuration for the authenticated partner app. Note: idp_client_id and idp_client_secret are the OIDC credentials from your Identity Provider (e.g., Okta, Azure AD), NOT your Contio Partner OAuth credentials.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "IdP Management"
        ],
        "summary": "Update IdP configuration",
        "parameters": [
          {
            "description": "IdP configuration update data",
            "name": "config",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/idp.UpdateIdPConfigRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/idp.IdPConfigResponse"
            }
          },
          "400": {
            "description": "Invalid request body or validation error",
            "schema": {
              "$ref": "#/definitions/idp.UpdateIdPConfigError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "IdP config not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Domain already claimed",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Creates a new OIDC IdP configuration for the authenticated partner app. Note: idp_client_id and idp_client_secret are the OIDC credentials from your Identity Provider (e.g., Okta, Azure AD), NOT your Contio Partner OAuth credentials.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "IdP Management"
        ],
        "summary": "Create IdP configuration",
        "parameters": [
          {
            "description": "IdP configuration data",
            "name": "config",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/idp.CreateIdPConfigRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/idp.IdPConfigResponse"
            }
          },
          "400": {
            "description": "Invalid request body or validation error",
            "schema": {
              "$ref": "#/definitions/idp.CreateIdPConfigError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "IdP config already exists",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Deletes the OIDC IdP configuration for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "IdP Management"
        ],
        "summary": "Delete IdP configuration",
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/templates": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a paginated list of templates for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "List templates",
        "parameters": [
          {
            "type": "integer",
            "default": 50,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Creates a new template for the authenticated partner app. Optionally, provide a backing_meeting_id to clone content from an existing meeting.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Create a template",
        "parameters": [
          {
            "description": "Template creation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/template.CreateTemplateRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/template.TemplateResponse"
            }
          },
          "400": {
            "description": "Invalid request body or backing meeting validation error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "Partner does not have access to the backing meeting's workspace",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/templates/{templateId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a template for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Get a template",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/template.TemplateResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates a template for the authenticated partner app",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Update a template",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          },
          {
            "description": "Template update request",
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/template.UpdateTemplateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/template.TemplateResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Deletes a template for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Delete a template",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Template deleted"
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/templates/{templateId}/next-steps": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Returns the next steps for a template for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Get template next steps",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateNextStepResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Adds a next step to a template for the authenticated partner app",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Add next step to template",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          },
          {
            "description": "Add to template request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/template.AddToTemplateRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Next step added to template successfully"
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template or next step not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/templates/{templateId}/next-steps/{nextStepId}": {
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates the autopilot flag for a next step in a template",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Update template next step association",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Next Step ID",
            "name": "nextStepId",
            "in": "path",
            "required": true
          },
          {
            "description": "Update template next step request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/template.UpdateTemplateNextStepRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Template next step association updated successfully"
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template or next step not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Removes a next step from a template for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Template Management"
        ],
        "summary": "Remove next step from template",
        "parameters": [
          {
            "type": "string",
            "description": "Template ID",
            "name": "templateId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Next Step ID",
            "name": "nextStepId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Next step removed from template successfully"
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template or next step not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves all toolkits for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Get toolkits",
        "parameters": [
          {
            "type": "integer",
            "default": 50,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_admin_toolkit_ToolkitResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Creates a new toolkit for the authenticated partner app. Set dry_run=true to validate without creating.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Create a toolkit",
        "parameters": [
          {
            "description": "Toolkit creation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/toolkit.CreateToolkitRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Dry-run validation result",
            "schema": {
              "$ref": "#/definitions/toolkit.CreateToolkitResponse"
            }
          },
          "201": {
            "description": "Toolkit created",
            "schema": {
              "$ref": "#/definitions/toolkit.CreateToolkitResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/export": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Builds a portable toolkit manifest from selected entity IDs. Dependencies are auto-discovered.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Export entities as a portable manifest",
        "parameters": [
          {
            "description": "Export request with entity IDs",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/toolkit.ExportEntitiesRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.ExportResponse"
            }
          },
          "400": {
            "description": "Invalid request body or no entities specified",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a toolkit by ID for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Get a toolkit",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse"
            }
          },
          "400": {
            "description": "Invalid toolkit ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Deletes a toolkit for the authenticated partner app",
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Delete a toolkit",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Toolkit deleted"
          },
          "400": {
            "description": "Invalid toolkit ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates an existing toolkit's metadata (name, description, is_active) and propagation\nsettings (auto_propagate, auto_install_on_new_workspaces) for the authenticated partner app.\nAll fields are optional; only fields explicitly supplied in the request body are updated\n(true PATCH semantics). The 'manifest' and 'version' fields are deprecated and no longer\naccepted; use the toolkit versioning API instead.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Update a toolkit",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "description": "Toolkit update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/toolkit.UpdateToolkitRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Deprecated fields provided — use the versioning API",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/export": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Resolves an existing toolkit's manifest into a portable format with $id/$ref identifiers.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Export a toolkit as a portable manifest",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.ExportResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/installations": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Lists all installations of a toolkit owned by the authenticated partner app, including active and opted-out installations across the partner's connected workspaces. The response includes per-workspace installation details, summary counts (active, opted_out, never_installed), and the partner's total connected workspace count, supporting partner visibility into their toolkit's distribution footprint.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "List toolkit installations",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Maximum number of items to return (default 50, max 100)",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Number of items to skip from the beginning (default 0)",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.ListInstallationsResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/versions": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Lists all versions for a toolkit owned by the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "List toolkit versions",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/toolkit.VersionResponse"
              }
            }
          },
          "400": {
            "description": "Invalid toolkit ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Creates a new draft version for a toolkit owned by the authenticated partner app. Set dry_run=true to validate without creating.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Create a toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "description": "Version creation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/toolkit.CreateVersionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Dry-run validation result",
            "schema": {
              "$ref": "#/definitions/toolkit.CreateVersionResponse"
            }
          },
          "201": {
            "description": "Version created",
            "schema": {
              "$ref": "#/definitions/toolkit.CreateVersionResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Draft version already exists",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a specific version for a toolkit owned by the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Get a toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Version ID",
            "name": "versionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.VersionResponse"
            }
          },
          "400": {
            "description": "Invalid parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Version not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Permanently deletes a draft version. Only draft versions can be discarded.",
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Discard a draft toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Version ID",
            "name": "versionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Version discarded"
          },
          "400": {
            "description": "Version is not in draft status",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Version not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Updates the manifest, label, or changelog of a draft version",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Update a draft toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Version ID",
            "name": "versionId",
            "in": "path",
            "required": true
          },
          {
            "description": "Version update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/toolkit.UpdateVersionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.VersionResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Version not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Transitions a draft version to PUBLISHED status. Deprecates any previously published version.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Publish a toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Version ID",
            "name": "versionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Version published"
          },
          "400": {
            "description": "Version is not in draft status",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Version not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/republish": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Transitions a deprecated version back to PUBLISHED status. Deprecates any currently published version.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkit Management"
        ],
        "summary": "Republish a toolkit version",
        "parameters": [
          {
            "type": "string",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Version ID",
            "name": "versionId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Version republished"
          },
          "400": {
            "description": "Version is not in deprecated status",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Version not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/webhook-deliveries": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves webhook deliveries for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "List webhook deliveries",
        "parameters": [
          {
            "type": "string",
            "description": "Filter by delivery status (pending, delivered, failed, abandoned)",
            "name": "status",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by event type (e.g., meeting.created, automation.assignment.created)",
            "name": "event_type",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Maximum number of results to return (default 50, max 100)",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Number of results to skip (default 0)",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/webhook.WebhookDeliveriesResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/webhook-deliveries/{deliveryId}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a specific webhook delivery by ID",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "Get webhook delivery",
        "parameters": [
          {
            "type": "string",
            "description": "Webhook Delivery ID",
            "name": "deliveryId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/webhook.WebhookDeliveryResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Webhook delivery not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/webhook-deliveries/{deliveryId}/retry": {
      "post": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retries a failed webhook delivery",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "Retry webhook delivery",
        "parameters": [
          {
            "type": "string",
            "description": "Webhook Delivery ID",
            "name": "deliveryId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Webhook delivery not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/webhook-filter": {
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Configures include or exclude event filtering for webhook delivery",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "Update partner app webhook filter",
        "parameters": [
          {
            "description": "Webhook filter update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/app_management.SetWebhookFilterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "400": {
            "description": "Invalid request body or event types",
            "schema": {
              "$ref": "#/definitions/app_management.UpdateWebhookFilterError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Removes webhook event filtering for the authenticated partner app",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "Remove partner app webhook filter",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/webhook-status": {
      "put": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Enables or disables webhook delivery for the authenticated partner app",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Webhook Management"
        ],
        "summary": "Update partner app webhook status",
        "parameters": [
          {
            "description": "Webhook status update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/app_management.UpdateWebhookStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerAppResponse"
            }
          },
          "400": {
            "description": "Invalid request body or pending disposition",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/workflow-templates": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a paginated list of workflow templates owned by the authenticated partner app across all workspaces.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Workflow Management"
        ],
        "summary": "List workflow templates",
        "parameters": [
          {
            "type": "integer",
            "default": 50,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_admin_shared.ListResponse-workflow_PartnerWorkflowTemplateSummary"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/admin/workflow-templates/{id}": {
      "get": {
        "security": [
          {
            "PartnerAPIKeyAuth": []
          },
          {
            "PartnerClientIdAuth": []
          }
        ],
        "description": "Retrieves a single workflow template owned by the authenticated partner app, including the inlined DAG spec.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Workflow Management"
        ],
        "summary": "Get a workflow template",
        "parameters": [
          {
            "type": "string",
            "description": "Workflow Template ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/workflow.PartnerWorkflowTemplateResponse"
            }
          },
          "400": {
            "description": "Invalid workflow template ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Workflow template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/info/{client_id}/public": {
      "get": {
        "description": "Returns safe public partner app information for display in OAuth login/consent pages. This endpoint does not require client authentication and only returns safe public information like name and company.",
        "tags": [
          "OAuth 2.0"
        ],
        "summary": "Get Public Partner Information by Client ID",
        "parameters": [
          {
            "type": "string",
            "description": "Partner Client ID",
            "name": "client_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/oauth.PartnerInfoResponse"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/errors.ErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/sso/callback": {
      "get": {
        "description": "Handles the OIDC callback from the partner's identity provider. Exchanges the authorization code for tokens, validates the ID token, and provisions or authenticates the user.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Single Sign-On"
        ],
        "summary": "Handle partner SSO callback",
        "parameters": [
          {
            "type": "string",
            "description": "Authorization code from IdP",
            "name": "code",
            "in": "query"
          },
          {
            "type": "string",
            "description": "State parameter for session validation",
            "name": "state",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "description": "Error code if authentication failed",
            "name": "error",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Error description if authentication failed",
            "name": "error_description",
            "in": "query"
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to application after successful authentication",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Invalid request or authentication error",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "401": {
            "description": "Authentication failed",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      }
    },
    "/v1/partner/sso/info/{slug}": {
      "get": {
        "description": "Returns partner branding and SSO configuration status for landing pages. This endpoint is publicly accessible and rate-limited.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Single Sign-On"
        ],
        "summary": "Get partner SSO information",
        "parameters": [
          {
            "type": "string",
            "description": "Partner slug",
            "name": "slug",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Partner SSO information returned",
            "schema": {
              "$ref": "#/definitions/sso.PartnerSSOInfoResponse"
            }
          },
          "404": {
            "description": "Partner not found",
            "schema": {
              "$ref": "#/definitions/sso.ErrorResponse"
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "schema": {
              "$ref": "#/definitions/sso.ErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/sso/initiate": {
      "get": {
        "description": "Starts the SSO authentication flow for a partner's identity provider. Looks up the partner by slug, retrieves IdP configuration, generates PKCE parameters, and returns an authorization URL.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Single Sign-On"
        ],
        "summary": "Initiate partner SSO flow",
        "parameters": [
          {
            "type": "string",
            "description": "Partner app slug",
            "name": "slug",
            "in": "query",
            "required": true
          },
          {
            "enum": [
              "web",
              "desktop",
              "backlog"
            ],
            "type": "string",
            "description": "Target platform: web (default), desktop, backlog, or meeting:{id}",
            "name": "target",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Auto-redirect to authorization URL",
            "name": "auto",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Authorization URL and session ID",
            "schema": {
              "$ref": "#/definitions/sso.InitiateResponse"
            }
          },
          "302": {
            "description": "Redirect to authorization URL (when auto=true)",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "404": {
            "description": "Partner not found or IdP not configured",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      }
    },
    "/v1/partner/sso/session/{session_id}": {
      "get": {
        "description": "Returns the current status of a partner SSO session for polling. Used by clients to check if authentication has completed.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Single Sign-On"
        ],
        "summary": "Get partner SSO session status",
        "parameters": [
          {
            "type": "string",
            "description": "Session ID",
            "name": "session_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Session status",
            "schema": {
              "$ref": "#/definitions/sso.SessionStatusResponse"
            }
          },
          "400": {
            "description": "Invalid session ID",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "404": {
            "description": "Session not found",
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      }
    },
    "/v1/partner/user/action-items": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "action-items:read"
            ]
          }
        ],
        "description": "Retrieves action items accessible to the authenticated partner user",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Action Items"
        ],
        "summary": "Get action items",
        "parameters": [
          {
            "type": "integer",
            "default": 25,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174000\"",
            "description": "Filter by meeting ID",
            "name": "meeting_id",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Filter by completion status",
            "name": "is_completed",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Filter by partner assignment",
            "name": "has_partner_assignment",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-01-01T00:00:00Z\"",
            "description": "Filter by start date (ISO 8601)",
            "name": "start_date",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-12-31T23:59:59Z\"",
            "description": "Filter by end date (ISO 8601)",
            "name": "end_date",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-action_item_PartnerActionItemResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/action_item.GetActionItemsError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "action-items:write"
            ]
          }
        ],
        "description": "Creates a new action item on behalf of the authenticated user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Action Items"
        ],
        "summary": "Create action item",
        "parameters": [
          {
            "description": "Action item data",
            "name": "action_item",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/action_item.CreateActionItemRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/action_item.PartnerActionItemResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/action_item.CreateActionItemError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/action-items/{id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "action-items:read"
            ]
          }
        ],
        "description": "Retrieves a specific action item by ID if accessible to the authenticated partner user",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Action Items"
        ],
        "summary": "Get action item by ID",
        "parameters": [
          {
            "type": "string",
            "description": "Action Item ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/action_item.PartnerActionItemResponse"
            }
          },
          "400": {
            "description": "Invalid action item ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Action item not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "OAuth2Application": [
              "action-items:write"
            ]
          }
        ],
        "description": "Updates an existing action item if accessible to the authenticated user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Action Items"
        ],
        "summary": "Update action item",
        "parameters": [
          {
            "type": "string",
            "description": "Action Item ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Action item update data",
            "name": "action_item",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/action_item.UpdateActionItemRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/action_item.PartnerActionItemResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/action_item.UpdateActionItemError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Action item not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "OAuth2Application": [
              "action-items:write"
            ]
          }
        ],
        "description": "Deletes an action item if accessible to the authenticated user",
        "tags": [
          "Action Items"
        ],
        "summary": "Delete action item",
        "parameters": [
          {
            "type": "string",
            "description": "Action Item ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Invalid action item ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Action item not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/calendar/events": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "calendar:read"
            ]
          }
        ],
        "description": "Retrieve a paginated list of calendar events for the authenticated user within a specified time range",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Calendar"
        ],
        "summary": "Get calendar events",
        "parameters": [
          {
            "type": "string",
            "example": "\"2023-01-01T00:00:00Z\"",
            "description": "Start time in RFC3339 format (preferred)",
            "name": "start_date",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-01-31T23:59:59Z\"",
            "description": "End time in RFC3339 format (preferred)",
            "name": "end_date",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-01-01T00:00:00Z\"",
            "description": "Deprecated: Use start_date instead",
            "name": "start",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-01-31T23:59:59Z\"",
            "description": "Deprecated: Use end_date instead",
            "name": "end",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Number of results per page (default 25, max 100)",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Pagination offset (default 0)",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Sort direction: asc or desc (default: asc)",
            "name": "direction",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-calendar_PartnerCalendarEventResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/calendar.GetCalendarEventsError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/calendar/events/{calendar_event_id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "calendar:read"
            ]
          }
        ],
        "description": "Retrieve details of a specific calendar event for the authenticated user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Calendar"
        ],
        "summary": "Get calendar event by ID",
        "parameters": [
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174006\"",
            "description": "Calendar Event ID",
            "name": "calendar_event_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/calendar.PartnerCalendarEventResponse"
            }
          },
          "400": {
            "description": "Invalid calendar event ID format",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User does not have access to this calendar event",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Calendar event not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/calendar/events/{calendar_event_id}/meeting": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "calendar:write"
            ]
          }
        ],
        "description": "Creates a new meeting by copying details from a calendar event",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Calendar"
        ],
        "summary": "Create meeting from calendar event",
        "parameters": [
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174006\"",
            "description": "Calendar Event ID",
            "name": "calendar_event_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Meeting already exists for this calendar event",
            "schema": {
              "$ref": "#/definitions/calendar.PartnerCreateMeetingFromCalendarEventResponse"
            }
          },
          "201": {
            "description": "Meeting created successfully",
            "schema": {
              "$ref": "#/definitions/calendar.PartnerCreateMeetingFromCalendarEventResponse"
            }
          },
          "400": {
            "description": "Invalid calendar event ID",
            "schema": {
              "$ref": "#/definitions/calendar.CreateMeetingFromCalendarEventError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Calendar event not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meeting-templates": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves meeting templates accessible to the authenticated partner user based on ownership hierarchy",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Templates"
        ],
        "summary": "List meeting templates",
        "parameters": [
          {
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "default": 25,
            "description": "Maximum number of items per page",
            "name": "limit",
            "in": "query"
          },
          {
            "minimum": 0,
            "type": "integer",
            "default": 0,
            "description": "Number of items to skip",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_PartnerMeetingTemplateResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meeting-templates/{id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves a meeting template by ID with its full contents",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Templates"
        ],
        "summary": "Get meeting template",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting template ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/meeting_template.PartnerMeetingTemplateDetailResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "Access denied",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meeting-templates/{id}/apply": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Applies a meeting template's content to an existing meeting. This is an additive operation.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Templates"
        ],
        "summary": "Apply template to meeting",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID to apply",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Meeting to apply template to",
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting_template.ApplyTemplateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/meeting_template.ApplyTemplateResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "Access denied",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting or template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meeting-templates/{id}/next-steps": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves the AI workflow configurations associated with a meeting template",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Templates"
        ],
        "summary": "List template next steps",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting template ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_TemplateNextStepResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Template not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves meetings accessible to the authenticated partner user",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Get meetings",
        "parameters": [
          {
            "type": "integer",
            "default": 25,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-01-01T00:00:00Z\"",
            "description": "Start date filter (ISO 8601)",
            "name": "start_date",
            "in": "query"
          },
          {
            "type": "string",
            "example": "\"2023-12-31T23:59:59Z\"",
            "description": "End date filter (ISO 8601)",
            "name": "end_date",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-shared_PartnerMeetingResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/meeting.GetMeetingsError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Creates a new meeting on behalf of the authenticated partner user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Create meeting",
        "parameters": [
          {
            "description": "Meeting data",
            "name": "meeting",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting.PartnerCreateMeetingRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/shared.PartnerMeetingResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/meeting.CreateMeetingError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves a specific meeting by ID if accessible to the authenticated partner user. When the autopilot_smart_redirect feature flag is enabled and the meeting has been copied to the user's workspace, the response will contain only the redirect_to_meeting_id field pointing to the workspace copy. Clients should follow this redirect to access the correct meeting. The Partner SDK handles this automatically.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Get meeting by ID",
        "parameters": [
          {
            "type": "string",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Meeting details or smart redirect hint (redirect_to_meeting_id field only when redirecting)",
            "schema": {
              "$ref": "#/definitions/shared.PartnerMeetingResponse"
            }
          },
          "400": {
            "description": "Invalid meeting ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Updates an existing meeting if accessible to the authenticated partner user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Update meeting",
        "parameters": [
          {
            "type": "string",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Meeting update data",
            "name": "meeting",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting.PartnerUpdateMeetingRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.PartnerMeetingResponse"
            }
          },
          "400": {
            "description": "Invalid request body",
            "schema": {
              "$ref": "#/definitions/meeting.UpdateMeetingError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/action-buttons": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves action buttons available for a meeting through its applied templates and next steps.\nAction buttons are de-duplicated across all next steps associated with the meeting.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Get action buttons for a meeting",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-shared_ActionButtonResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/action-buttons/{button_id}/trigger": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Fires an action button manually. This triggers a webhook to the partner's registered endpoint.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Trigger action button",
        "parameters": [
          {
            "type": "string",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Action Button ID",
            "name": "button_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Optional next step and result context",
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/shared.TriggerActionButtonRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Action button triggered successfully",
            "schema": {
              "$ref": "#/definitions/shared.TriggerActionButtonResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting or action button not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/agenda-items": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves all agenda items for a specific meeting. Filters out items restricted to leads if the user is not an editor.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Agenda Items"
        ],
        "summary": "Get agenda items for a meeting",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerAgendaItemResponse"
            }
          },
          "400": {
            "description": "Invalid meeting ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "description": "Creates a new agenda item for a meeting. User must be a participant of the meeting.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Agenda Items"
        ],
        "summary": "Create agenda item",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Agenda item details",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting.CreateAgendaItemRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Agenda item created successfully",
            "schema": {
              "$ref": "#/definitions/meeting.PartnerAgendaItemResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User is not a participant of the meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/agenda-items/{item_id}": {
      "put": {
        "description": "Updates an existing agenda item. User must be a participant of the meeting.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Agenda Items"
        ],
        "summary": "Update agenda item",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Agenda Item ID",
            "name": "item_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Updated agenda item details",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting.UpdateAgendaItemRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Agenda item updated successfully",
            "schema": {
              "$ref": "#/definitions/meeting.PartnerAgendaItemResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User is not a participant of the meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Agenda item not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "description": "Deletes an agenda item. User must be a participant of the meeting.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Agenda Items"
        ],
        "summary": "Delete agenda item",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Agenda Item ID",
            "name": "item_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Agenda item deleted successfully"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User is not a participant of the meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Agenda item not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/calendar/link": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "calendar:write"
            ]
          }
        ],
        "description": "Link an existing calendar event to a specific meeting",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Calendar"
        ],
        "summary": "Link calendar event to meeting",
        "parameters": [
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174000\"",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Link calendar event request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/calendar.PartnerLinkCalendarEventRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Meeting linked to calendar event successfully",
            "schema": {
              "$ref": "#/definitions/calendar.LinkCalendarEventResponse"
            }
          },
          "400": {
            "description": "Invalid meeting ID format or request body",
            "schema": {
              "$ref": "#/definitions/calendar.LinkCalendarEventError400"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting or calendar event not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Calendar event already linked to another meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/calendar/unlink": {
      "delete": {
        "security": [
          {
            "OAuth2Application": [
              "calendar:write"
            ]
          }
        ],
        "description": "Remove the link between a calendar event and a specific meeting",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Calendar"
        ],
        "summary": "Unlink calendar event from meeting",
        "parameters": [
          {
            "type": "string",
            "example": "\"123e4567-e89b-12d3-a456-426614174000\"",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Meeting unlinked from calendar event successfully",
            "schema": {
              "$ref": "#/definitions/calendar.LinkCalendarEventResponse"
            }
          },
          "400": {
            "description": "Invalid meeting ID format",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/context": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "context:read"
            ]
          }
        ],
        "description": "Lists partner-scoped meeting contexts for a meeting with pagination.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Context"
        ],
        "summary": "List meeting contexts",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "default": 25,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/context.MeetingContextListResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "context:write"
            ]
          }
        ],
        "description": "Uploads a partner-scoped meeting context for a meeting using multipart/form-data.",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Context"
        ],
        "summary": "Upload meeting context",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "file",
            "description": "Context file",
            "name": "file",
            "in": "formData",
            "required": true
          },
          {
            "type": "string",
            "description": "Context title",
            "name": "title",
            "in": "formData"
          },
          {
            "type": "string",
            "description": "Logical context type",
            "name": "context_type",
            "in": "formData"
          },
          {
            "type": "string",
            "description": "Source format (json,csv,tsv,xml,html,yaml,md,txt)",
            "name": "source_format",
            "in": "formData",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/context.MeetingContextResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/context/{context_id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "context:read"
            ]
          }
        ],
        "description": "Retrieves a specific partner-scoped meeting context by context ID.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Context"
        ],
        "summary": "Get meeting context",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Context ID",
            "name": "context_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/context.MeetingContextResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Context not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "OAuth2Application": [
              "context:write"
            ]
          }
        ],
        "description": "Deletes a specific partner-scoped meeting context by context ID.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Context"
        ],
        "summary": "Delete meeting context",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Context ID",
            "name": "context_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Context not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/context/{context_id}/content": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "context:read"
            ]
          }
        ],
        "description": "Streams the file bytes for a specific partner-scoped meeting context.",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "Context"
        ],
        "summary": "Download meeting context content",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Context ID",
            "name": "context_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Context file stream; Content-Disposition includes filename",
            "schema": {
              "type": "file"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Context not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/next-steps": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves next steps available for a meeting through its applied templates",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Get next steps for a meeting",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-shared_NextStepResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/next-steps/{next_step_id}/execute": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Executes a next step for a meeting. For AI-type next steps, this triggers AI generation. For redirect-type next steps, this returns the redirect URL.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Execute a next step",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Next Step ID",
            "name": "next_step_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Execution request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/shared.ExecuteNextStepRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/shared.ExecuteNextStepResponse"
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting or next step not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/participants": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves all participants for a specific meeting accessible to the authenticated partner user",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Participants"
        ],
        "summary": "Get meeting participants",
        "parameters": [
          {
            "type": "string",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerMeetingParticipantResponse"
            }
          },
          "400": {
            "description": "Invalid meeting ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Adds a participant to a specific meeting. User must be an editor of the meeting.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Participants"
        ],
        "summary": "Add meeting participant",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Participant details",
            "name": "participant",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/meeting.AddParticipantRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Participant added successfully",
            "schema": {
              "$ref": "#/definitions/meeting.PartnerMeetingParticipantResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User is not an editor of the meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Meeting not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Participant already exists",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/meetings/{id}/participants/{participant_id}": {
      "delete": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:write"
            ]
          }
        ],
        "description": "Removes a participant from a specific meeting. User must be an editor of the meeting.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Participants"
        ],
        "summary": "Remove meeting participant",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Meeting ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Participant ID",
            "name": "participant_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Participant removed successfully"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "User is not an editor of the meeting",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Participant not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/next-step-results/{result_id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "meetings:read"
            ]
          }
        ],
        "description": "Retrieves AI-generated content from a next step execution. Results expire after 7 days.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Meetings"
        ],
        "summary": "Get a next step result",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Result ID",
            "name": "result_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/next_step_result.NextStepResultResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Result not found or expired",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/profile": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "profile"
            ]
          }
        ],
        "description": "Retrieves the authenticated user's profile information including workspace details and role",
        "produces": [
          "application/json"
        ],
        "tags": [
          "User Profile"
        ],
        "summary": "Get user profile",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/profile.UserProfileResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/sessions": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "chat:read"
            ]
          }
        ],
        "description": "Retrieves a paginated list of chat sessions for the authenticated user",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Chat Sessions"
        ],
        "summary": "List chat sessions",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Filter by meeting ID",
            "name": "meeting_id",
            "in": "query"
          },
          {
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "description": "Maximum sessions to return (1-100, default: 25)",
            "name": "limit",
            "in": "query"
          },
          {
            "minimum": 0,
            "type": "integer",
            "description": "Number of sessions to skip (0-based, default: 0)",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Sessions retrieved successfully",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-session_PartnerChatSessionResponse"
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "chat:write"
            ]
          }
        ],
        "description": "Creates a new chat session for the authenticated user. Optionally accepts an initial message.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Chat Sessions"
        ],
        "summary": "Create a new chat session",
        "parameters": [
          {
            "type": "string",
            "description": "Client-provided idempotency key",
            "name": "Idempotency-Key",
            "in": "header"
          },
          {
            "description": "Session creation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/session.CreateSessionRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/session.CreateSessionResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "422": {
            "description": "Validation error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/sessions/{id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "chat:read"
            ]
          }
        ],
        "description": "Retrieves details of a specific chat session including turns based on query parameters",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Chat Sessions"
        ],
        "summary": "Get chat session details",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "example": "f7e6d5c4-b3a2-1098-7654-321fedcba098",
            "description": "Session ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "maximum": 200,
            "minimum": 1,
            "type": "integer",
            "description": "Maximum turns to return (1-200, default: 50)",
            "name": "turn_limit",
            "in": "query"
          },
          {
            "minimum": 0,
            "type": "integer",
            "description": "Pagination offset for turns",
            "name": "turn_offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Session retrieved successfully",
            "schema": {
              "$ref": "#/definitions/session.GetSessionResponse"
            }
          },
          "400": {
            "description": "Invalid session ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Session not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "OAuth2Application": [
              "chat:write"
            ]
          }
        ],
        "description": "Submits a new message to an existing chat session",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Chat Sessions"
        ],
        "summary": "Send a message to a session",
        "parameters": [
          {
            "type": "string",
            "description": "Session ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Client-provided idempotency key",
            "name": "Idempotency-Key",
            "in": "header"
          },
          {
            "description": "Message request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/session.SendMessageRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/session.SendMessageResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Session not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Session not active",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "422": {
            "description": "Validation error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/sessions/{id}/turns/{turn_id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "chat:read"
            ]
          }
        ],
        "description": "Retrieves details of a specific turn within a chat session by its ID",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Chat Sessions"
        ],
        "summary": "Get specific turn",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "example": "f7e6d5c4-b3a2-1098-7654-321fedcba098",
            "description": "Session ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "description": "Turn ID",
            "name": "turn_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Turn retrieved successfully",
            "schema": {
              "$ref": "#/definitions/session.GetTurnResponse"
            }
          },
          "400": {
            "description": "Invalid session ID or turn ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Session or turn not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/toolkits": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "toolkits:read"
            ]
          }
        ],
        "description": "Retrieves toolkits available for installation in the user's workspace",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkits"
        ],
        "summary": "List available toolkits",
        "parameters": [
          {
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "default": 25,
            "description": "Maximum number of items per page",
            "name": "limit",
            "in": "query"
          },
          {
            "minimum": 0,
            "type": "integer",
            "default": 0,
            "description": "Number of items to skip",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_user_toolkit_ToolkitResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/toolkits/{toolkitId}/install": {
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "toolkits:write"
            ]
          }
        ],
        "description": "Installs a toolkit to the authenticated user's workspace, creating all defined entities",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkits"
        ],
        "summary": "Install toolkit",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Toolkit ID",
            "name": "toolkitId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/toolkit.InstallationResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "409": {
            "description": "Toolkit already installed",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/workflow-runs": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "workflows:read"
            ]
          }
        ],
        "description": "Returns a paginated list of workflow runs in the caller's workspace. Optional filters may be supplied to narrow the result set.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Workflow Runs"
        ],
        "summary": "List workflow runs",
        "parameters": [
          {
            "type": "integer",
            "default": 25,
            "description": "Limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "default": 0,
            "description": "Offset",
            "name": "offset",
            "in": "query"
          },
          {
            "enum": [
              "pending",
              "active",
              "completed",
              "failed",
              "cancelled",
              "frozen"
            ],
            "type": "string",
            "description": "Filter by run status",
            "name": "status",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by workflow template ID",
            "name": "workflow_template_id",
            "in": "query"
          },
          {
            "enum": [
              "meeting",
              "canvas"
            ],
            "type": "string",
            "description": "Filter by originating object type",
            "name": "originating_type",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-workflow_run_PartnerWorkflowRunResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "OAuth2Application": [
              "workflows:write"
            ]
          }
        ],
        "description": "Creates and enqueues a new manual workflow run. Autopilot-triggered runs are reserved for internal use and cannot be created via this endpoint.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "Workflow Runs"
        ],
        "summary": "Trigger a workflow run",
        "parameters": [
          {
            "description": "Workflow run creation request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/workflow_run.PartnerCreateWorkflowRunRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/workflow_run.PartnerWorkflowRunResponse"
            }
          },
          "400": {
            "description": "Invalid request body, invalid trigger type, or validation error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "403": {
            "description": "Workflow templates feature is not available for this workspace's plan",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Workflow template not found in the caller's workspace",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/workflow-runs/{id}": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "workflows:read"
            ]
          }
        ],
        "description": "Returns a single workflow run. The run must belong to the authenticated user's current workspace; otherwise a 404 response is returned.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Workflow Runs"
        ],
        "summary": "Get a workflow run",
        "parameters": [
          {
            "type": "string",
            "description": "Workflow Run ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/workflow_run.PartnerWorkflowRunResponse"
            }
          },
          "400": {
            "description": "Invalid workflow run ID",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Workflow run not found",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/workspaces/{workspace_id}/toolkits": {
      "get": {
        "security": [
          {
            "OAuth2Application": [
              "toolkits:read"
            ]
          }
        ],
        "description": "Retrieves toolkits currently installed in a workspace with installation details",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkits"
        ],
        "summary": "List installed toolkits",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_shared.ListResponse-toolkit_ToolkitWithInstallationResponse"
            }
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    },
    "/v1/partner/user/workspaces/{workspace_id}/toolkits/{toolkit_id}": {
      "delete": {
        "security": [
          {
            "OAuth2Application": [
              "toolkits:write"
            ]
          }
        ],
        "description": "Removes a toolkit installation from the authenticated user's workspace",
        "produces": [
          "application/json"
        ],
        "tags": [
          "Toolkits"
        ],
        "summary": "Uninstall toolkit",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Toolkit ID",
            "name": "toolkit_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Toolkit uninstalled successfully"
          },
          "400": {
            "description": "Invalid request",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "401": {
            "description": "Authentication required",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "404": {
            "description": "Toolkit not found or not installed",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/errors.PartnerErrorResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "action_item.CreateActionItemError400": {
      "description": "Bad request error for creating an action item",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request",
            "invalid_due_date"
          ],
          "example": "invalid_request"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request body"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "action_item.CreateActionItemRequest": {
      "type": "object",
      "required": [
        "meeting_id",
        "title"
      ],
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1,
          "example": "Call or schedule meeting to discuss"
        },
        "due_date": {
          "description": "YYYY-MM-DD format",
          "type": "string",
          "example": "2023-01-08"
        },
        "meeting_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "partner_context": {
          "type": "object",
          "additionalProperties": {}
        },
        "status": {
          "type": "string",
          "enum": [
            "needs_review",
            "accepted",
            "in_progress",
            "blocked",
            "completed",
            "cancelled"
          ],
          "example": "needs_review"
        },
        "title": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1,
          "example": "Follow up with client"
        }
      }
    },
    "action_item.GetActionItemsError400": {
      "description": "Bad request error for listing action items",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_start_date",
            "invalid_end_date"
          ],
          "example": "invalid_start_date"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid start_date format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "action_item.PartnerActionItemResponse": {
      "type": "object",
      "properties": {
        "assigned_to_user_id": {
          "description": "ID of the user assigned to this action item",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        },
        "completed_at": {
          "description": "Timestamp when the action item was completed",
          "type": "string",
          "example": "2023-01-08T18:00:00-07:00"
        },
        "created_at": {
          "description": "Timestamp when the action item was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Detailed description of the action item",
          "type": "string",
          "example": "Follow up with client about proposal"
        },
        "due_date": {
          "description": "Due date in YYYY-MM-DD format",
          "type": "string",
          "example": "2023-01-08"
        },
        "has_partner_assignment": {
          "description": "Whether this action item was assigned via partner automation",
          "type": "boolean",
          "example": true
        },
        "id": {
          "description": "Unique identifier for the action item",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "is_completed": {
          "description": "Whether the action item has been completed",
          "type": "boolean",
          "example": false
        },
        "meeting_id": {
          "description": "ID of the meeting this action item belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "partner_context": {
          "description": "Partner-specific context data stored with the action item",
          "type": "object",
          "additionalProperties": {}
        },
        "status": {
          "description": "Current status (needs_review, accepted, in_progress, blocked, completed, cancelled)",
          "type": "string",
          "example": "accepted"
        },
        "title": {
          "description": "Title of the action item",
          "type": "string",
          "example": "Client follow-up call"
        },
        "updated_at": {
          "description": "Timestamp when the action item was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        }
      }
    },
    "action_item.UpdateActionItemError400": {
      "description": "Bad request error for updating an action item",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_action_item_id",
            "invalid_request",
            "invalid_due_date"
          ],
          "example": "invalid_action_item_id"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid action item ID format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "action_item.UpdateActionItemRequest": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1,
          "example": "Updated description"
        },
        "due_date": {
          "description": "YYYY-MM-DD format",
          "type": "string",
          "example": "2023-01-08"
        },
        "is_completed": {
          "type": "boolean",
          "example": true
        },
        "partner_context": {
          "type": "object",
          "additionalProperties": {}
        },
        "status": {
          "type": "string",
          "enum": [
            "needs_review",
            "accepted",
            "in_progress",
            "blocked",
            "completed",
            "cancelled"
          ],
          "example": "needs_review"
        },
        "title": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1,
          "example": "Follow up with client"
        }
      }
    },
    "app_management.SetWebhookFilterRequest": {
      "type": "object",
      "required": [
        "events",
        "type"
      ],
      "properties": {
        "events": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "type": {
          "type": "string",
          "enum": [
            "include",
            "exclude"
          ],
          "example": "include"
        }
      }
    },
    "app_management.UpdateAppError400": {
      "description": "Bad request error for updating partner app",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request",
            "invalid_request_body",
            "validation_error"
          ],
          "example": "invalid_request_body"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request body"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "app_management.UpdateAppRequest": {
      "type": "object",
      "properties": {
        "default_toolkit_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "example": "Updated integration description"
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated CRM Integration"
        },
        "slug": {
          "type": "string",
          "maxLength": 63,
          "minLength": 3,
          "example": "acme-crm"
        },
        "webhook_url": {
          "type": "string",
          "maxLength": 2000,
          "example": "https://api.example.com/webhook"
        }
      }
    },
    "app_management.UpdateAppStatusError400": {
      "description": "Bad request error for updating partner app status",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request_body",
            "invalid_status"
          ],
          "example": "invalid_status"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid status value"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "app_management.UpdateAppStatusRequest": {
      "type": "object",
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "active",
            "suspended",
            "inactive"
          ],
          "example": "suspended"
        }
      }
    },
    "app_management.UpdateWebhookFilterError400": {
      "description": "Bad request error for updating partner app webhook filters",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request_body",
            "validation_error"
          ],
          "example": "validation_error"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "invalid event types: invalid.event"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        },
        "valid_event_types": {
          "description": "Valid event types that can be used in the webhook filter request",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "meeting.created",
            "action_item.updated"
          ]
        }
      }
    },
    "app_management.UpdateWebhookStatusRequest": {
      "type": "object",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "example": true
        },
        "pending_disposition": {
          "type": "string",
          "enum": [
            "deliver",
            "abandon"
          ],
          "example": "abandon"
        }
      }
    },
    "automation.AutomationResponse": {
      "type": "object",
      "properties": {
        "actions": {
          "description": "Actions to execute when the automation is triggered",
          "type": "array",
          "items": {
            "$ref": "#/definitions/partner.AutomationAction"
          }
        },
        "created_at": {
          "description": "Timestamp when the automation was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Optional description of what the automation does",
          "type": "string",
          "example": "Sync action items to CRM"
        },
        "id": {
          "description": "Unique identifier for the automation",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "name": {
          "description": "Name of the automation",
          "type": "string",
          "example": "CRM Integration"
        },
        "partner_app_id": {
          "description": "ID of the partner app that owns this automation",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "status": {
          "description": "Current status (active or inactive)",
          "type": "string",
          "example": "active"
        },
        "trigger_type": {
          "description": "Event type that triggers this automation",
          "type": "string",
          "example": "action_item_created"
        },
        "updated_at": {
          "description": "Timestamp when the automation was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        }
      }
    },
    "automation.CreateAutomationError400": {
      "description": "Bad request error for creating an automation",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request_body",
            "validation_error"
          ],
          "example": "invalid_request_body"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request body"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "automation.CreateAutomationRequest": {
      "type": "object",
      "required": [
        "actions",
        "name",
        "trigger_type"
      ],
      "properties": {
        "actions": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/definitions/partner.AutomationAction"
          }
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "example": "Sync action items to CRM"
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "CRM Integration"
        },
        "trigger_type": {
          "type": "string",
          "enum": [
            "action_item_created",
            "action_item_updated",
            "action_item_completed",
            "meeting_ended",
            "meeting_summary_ready"
          ]
        }
      }
    },
    "automation.UpdateAutomationError400": {
      "description": "Bad request error for updating an automation",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_automation_id",
            "invalid_request_body",
            "validation_error"
          ],
          "example": "invalid_automation_id"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid automation ID format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "automation.UpdateAutomationRequest": {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/definitions/partner.AutomationAction"
          }
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "example": "Updated description"
        },
        "is_active": {
          "type": "boolean"
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated CRM Integration"
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "inactive"
          ],
          "example": "active"
        },
        "trigger_type": {
          "type": "string",
          "enum": [
            "action_item_created",
            "action_item_updated",
            "action_item_completed",
            "meeting_ended",
            "meeting_summary_ready"
          ]
        }
      }
    },
    "calendar.CreateMeetingFromCalendarEventError400": {
      "description": "Bad request error for creating a meeting from a calendar event",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_calendar_event_id",
            "invalid_request"
          ],
          "example": "invalid_calendar_event_id"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid calendar event ID format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "calendar.GetCalendarEventsError400": {
      "description": "Bad request error for listing calendar events",
      "type": "object",
      "properties": {
        "code": {
          "description": "Error code identifying the specific type of error",
          "type": "string",
          "enum": [
            "invalid_query_parameters",
            "missing_start_date",
            "missing_end_date",
            "invalid_start_date",
            "invalid_end_date"
          ],
          "example": "invalid_start_date"
        },
        "error": {
          "description": "Human-readable error message",
          "type": "string",
          "example": "Invalid start_date format"
        },
        "request_id": {
          "description": "Request identifier for tracing",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "calendar.LinkCalendarEventError400": {
      "description": "Bad request error for linking a calendar event to a meeting",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_meeting_id",
            "invalid_request_body",
            "calendar_event_already_linked",
            "meeting_already_linked"
          ],
          "example": "invalid_meeting_id"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid meeting ID format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "calendar.LinkCalendarEventResponse": {
      "type": "object",
      "properties": {
        "message": {
          "description": "Human-readable message describing the result",
          "type": "string",
          "example": "Meeting linked to calendar event successfully"
        },
        "success": {
          "description": "Whether the operation was successful",
          "type": "boolean",
          "example": true
        }
      }
    },
    "calendar.PartnerCalendarEventAttendee": {
      "type": "object",
      "properties": {
        "email": {
          "description": "Email address of the attendee",
          "type": "string",
          "example": "john.doe@example.com"
        },
        "name": {
          "description": "Display name of the attendee",
          "type": "string",
          "example": "John Doe"
        },
        "status": {
          "description": "RSVP status (accepted, declined, tentative, needs_action)",
          "type": "string",
          "example": "accepted"
        },
        "type": {
          "description": "Attendee type (required, optional, resource)",
          "type": "string",
          "example": "required"
        }
      }
    },
    "calendar.PartnerCalendarEventResponse": {
      "type": "object",
      "properties": {
        "attendees": {
          "description": "List of attendees for the calendar event",
          "type": "array",
          "items": {
            "$ref": "#/definitions/calendar.PartnerCalendarEventAttendee"
          }
        },
        "description": {
          "description": "Description or body of the calendar event",
          "type": "string",
          "example": "Discuss project updates"
        },
        "end_time": {
          "description": "End time of the event in RFC3339 format",
          "type": "string",
          "example": "2023-01-01T11:00:00-07:00"
        },
        "id": {
          "description": "Unique identifier for the calendar event",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174006"
        },
        "linked_meetings": {
          "description": "IDs of all linked Contio meetings, sorted by creation date (oldest first)",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "[\"123e4567-e89b-12d3-a456-426614174000\"]"
          ]
        },
        "location": {
          "description": "Location of the event (physical or virtual)",
          "type": "string",
          "example": "Conference Room A"
        },
        "meeting_id": {
          "description": "Deprecated: Use linked_meetings instead. ID of the first (oldest) linked Contio meeting.",
          "type": "string",
          "x-deprecated": true,
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "organizer": {
          "description": "Organizer of the calendar event",
          "allOf": [
            {
              "$ref": "#/definitions/calendar.PartnerCalendarEventAttendee"
            }
          ]
        },
        "start_time": {
          "description": "Start time of the event in RFC3339 format",
          "type": "string",
          "example": "2023-01-01T10:00:00-07:00"
        },
        "title": {
          "description": "Title of the calendar event",
          "type": "string",
          "example": "Weekly Team Sync"
        }
      }
    },
    "calendar.PartnerCreateMeetingFromCalendarEventResponse": {
      "type": "object",
      "properties": {
        "created": {
          "description": "Whether a new meeting was created (false if existing meeting was returned)",
          "type": "boolean",
          "example": true
        },
        "meeting": {
          "description": "The created or existing meeting",
          "allOf": [
            {
              "$ref": "#/definitions/shared.PartnerMeetingResponse"
            }
          ]
        },
        "message": {
          "description": "Human-readable message describing the result",
          "type": "string",
          "example": "Meeting created successfully from calendar event"
        }
      }
    },
    "calendar.PartnerLinkCalendarEventRequest": {
      "type": "object",
      "required": [
        "calendar_event_id"
      ],
      "properties": {
        "calendar_event_id": {
          "type": "string",
          "maxLength": 255,
          "example": "123e4567-e89b-12d3-a456-426614174006"
        }
      }
    },
    "connection.UserConnectionResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the connection was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "feature_activated_at": {
          "description": "When the partner feature was activated for this user",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "id": {
          "description": "Unique identifier for the user connection",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        },
        "last_used_at": {
          "description": "When the user last used the partner integration",
          "type": "string",
          "example": "2023-01-15T10:30:00Z"
        },
        "oauth_expires_at": {
          "description": "Expiration time of the OAuth token",
          "type": "string",
          "example": "2023-12-31T23:59:59Z"
        },
        "oauth_scopes": {
          "description": "OAuth scopes granted by the user",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "['openid'",
            " 'profile'",
            " 'meetings:read']"
          ]
        },
        "status": {
          "description": "Current status of the connection (active, inactive, revoked)",
          "type": "string",
          "example": "active"
        },
        "updated_at": {
          "description": "Timestamp when the connection was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "user_email": {
          "description": "Email address of the connected user",
          "type": "string",
          "example": "john.doe@example.com"
        },
        "user_id": {
          "description": "ID of the connected user",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        },
        "user_name": {
          "description": "Display name of the connected user",
          "type": "string",
          "example": "John Doe"
        }
      }
    },
    "context.MeetingContextListResponse": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/context.MeetingContextResponse"
          }
        },
        "limit": {
          "type": "integer"
        },
        "offset": {
          "type": "integer"
        },
        "total": {
          "type": "integer"
        }
      }
    },
    "context.MeetingContextResponse": {
      "type": "object",
      "properties": {
        "context_type": {
          "type": "string"
        },
        "created_at": {
          "type": "string"
        },
        "created_by_user_id": {
          "type": "string"
        },
        "deleted_at": {
          "type": "string"
        },
        "file_status": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "meeting_id": {
          "type": "string"
        },
        "model_id": {
          "type": "string"
        },
        "partner_app_id": {
          "type": "string"
        },
        "platform_name": {
          "type": "string"
        },
        "source_format": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "updated_at": {
          "type": "string"
        },
        "workspace_id": {
          "type": "string"
        }
      }
    },
    "credential.CredentialRollbackRequest": {
      "type": "object",
      "required": [
        "rollback_token"
      ],
      "properties": {
        "reason": {
          "type": "string",
          "example": "Detected issues"
        },
        "rollback_token": {
          "type": "string",
          "example": "rollback_token_xyz..."
        }
      }
    },
    "credential.CredentialRotationRequest": {
      "type": "object",
      "required": [
        "confirmation_token"
      ],
      "properties": {
        "confirmation_token": {
          "type": "string",
          "example": "confirm-rotation-12345"
        },
        "grace_period_hours": {
          "type": "integer",
          "example": 48
        },
        "reason": {
          "type": "string",
          "example": "Scheduled rotation"
        }
      }
    },
    "credential.CredentialRotationResponse": {
      "type": "object",
      "properties": {
        "credential_type": {
          "description": "Type of credential that was rotated (api_key or client_secret)",
          "type": "string",
          "example": "api_key"
        },
        "grace_period_ends_at": {
          "description": "When the grace period ends and old credential stops working",
          "type": "string",
          "example": "2024-01-15T10:30:00Z"
        },
        "new_credential": {
          "description": "The newly generated credential value (only shown once)",
          "type": "string",
          "example": "pk_live_abc123..."
        },
        "rollback_expires_at": {
          "description": "When the rollback token expires",
          "type": "string",
          "example": "2024-01-14T10:30:00Z"
        },
        "rollback_token": {
          "description": "Token to use if you need to rollback to the previous credential",
          "type": "string",
          "example": "rollback_token_xyz..."
        }
      }
    },
    "credential.CredentialStatusResponse": {
      "type": "object",
      "properties": {
        "age_days": {
          "description": "Age of the credential in days",
          "type": "integer",
          "example": 5
        },
        "created_at": {
          "description": "When the credential was created",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "credential_type": {
          "description": "Type of credential (api_key or client_secret)",
          "type": "string",
          "example": "api_key"
        },
        "grace_period_ends_at": {
          "description": "When the grace period ends (if in pending_rotation status)",
          "type": "string",
          "example": "2024-01-12T10:30:00Z"
        },
        "last_rotated_at": {
          "description": "When the credential was last rotated",
          "type": "string",
          "example": "2024-01-10T10:30:00Z"
        },
        "last_used_at": {
          "description": "When the credential was last used for authentication",
          "type": "string",
          "example": "2024-01-20T10:30:00Z"
        },
        "recommended_action": {
          "description": "Recommended action (ok, rotate_soon, rotate_now)",
          "type": "string",
          "example": "ok"
        },
        "status": {
          "description": "Current status (active, pending_rotation, expired)",
          "type": "string",
          "example": "active"
        }
      }
    },
    "credential.RotateAPIKeyError400": {
      "description": "Bad request error for rotating API key",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "bad_request",
            "rate_limit_exceeded"
          ],
          "example": "bad_request"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "credential.RotateClientSecretError400": {
      "description": "Bad request error for rotating client secret",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "bad_request",
            "rate_limit_exceeded"
          ],
          "example": "bad_request"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "credential.RotateWebhookSecretError400": {
      "description": "Bad request error for rotating webhook secret",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "bad_request"
          ],
          "example": "bad_request"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "errors.ErrorResponse": {
      "description": "Standard error response format used across all API endpoints. All error responses follow this consistent structure for predictable error handling.",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type, useful for programmatic error handling",
          "type": "string",
          "enum": [
            "not_found",
            "note_not_found",
            "bad_request",
            "validation_error",
            "unauthorized",
            "forbidden",
            "conflict",
            "resource_already_exists",
            "too_many_requests",
            "internal_server_error",
            "toolkit_slug_collision",
            "manifest_validation_failed"
          ],
          "example": "not_found"
        },
        "message": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "The requested resource could not be found"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "errors.PartnerConflictErrorResponse": {
      "description": "Error response for workspace conflict (409). Includes the user's current workspace_id.",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type, useful for programmatic error handling",
          "type": "string",
          "example": "workspace_conflict"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "User already belongs to a different workspace"
        },
        "message": {
          "description": "Deprecated: Use 'error' field instead. Will be removed in v2.0",
          "type": "string",
          "example": "User already belongs to a different workspace"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        },
        "workspace_id": {
          "description": "The workspace ID the user currently belongs to",
          "type": "string",
          "example": "550e8400-e29b-41d4-a716-446655440000"
        }
      }
    },
    "errors.PartnerErrorResponse": {
      "description": "Standard error response format used across all partner API endpoints. This format is used by both partner admin and partner user APIs for consistency. DEPRECATION NOTICE (v2.0): The 'message' field will be removed in the next major release. Partners should migrate to using the 'error' field instead.",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type, useful for programmatic error handling",
          "type": "string",
          "example": "invalid_request"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request"
        },
        "message": {
          "description": "Deprecated: Use 'error' field instead. Will be removed in v2.0",
          "type": "string",
          "example": "Invalid request"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "idp.CreateIdPConfigError400": {
      "description": "Bad request error for creating IdP configuration",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request_body",
            "invalid_idp_credentials",
            "invalid_idp",
            "domain_is_generic",
            "domain_already_claimed",
            "strict_mode_requires_domains",
            "discovery_fetch_failed",
            "idp_config_exists"
          ],
          "example": "invalid_request_body"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request body"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "idp.CreateIdPConfigRequest": {
      "type": "object",
      "required": [
        "discovery_url",
        "idp_client_id",
        "idp_client_secret",
        "mode",
        "name"
      ],
      "properties": {
        "allowed_email_domains": {
          "description": "Email domains allowed for SSO (required for strict mode). Users with other domains will be rejected.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "company.com",
            "subsidiary.com"
          ]
        },
        "claim_mappings": {
          "description": "Maps Contio user fields to IdP claim names. Defaults to {\"email\": \"email\", \"name\": \"name\"}. Only change if your IdP uses non-standard claim names.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "discovery_url": {
          "description": "OIDC discovery endpoint URL from your Identity Provider (must end with /.well-known/openid-configuration)",
          "type": "string",
          "example": "https://company.okta.com/.well-known/openid-configuration"
        },
        "idp_client_id": {
          "description": "OAuth Client ID from your Identity Provider's OIDC application. This is NOT your Contio Partner client_id.",
          "type": "string",
          "minLength": 1,
          "example": "0oa1234567890abcdef"
        },
        "idp_client_secret": {
          "description": "OAuth Client Secret from your Identity Provider's OIDC application. This is NOT your Contio Partner client_secret. Stored encrypted at rest.",
          "type": "string",
          "minLength": 1,
          "example": "IdP-secret-from-okta-or-azure"
        },
        "mode": {
          "description": "Domain validation mode: \"strict\" requires allowed_email_domains, \"partner_managed\" trusts your IdP's user base",
          "type": "string",
          "enum": [
            "strict",
            "partner_managed"
          ],
          "example": "strict"
        },
        "name": {
          "description": "Display name for this IdP configuration",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Okta SSO"
        },
        "scopes": {
          "description": "OIDC scopes to request during authentication. Defaults to [\"openid\", \"email\", \"profile\"]",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "openid",
            "email",
            "profile"
          ]
        }
      }
    },
    "idp.IdPConfigResponse": {
      "type": "object",
      "properties": {
        "allowed_email_domains": {
          "description": "Email domains allowed for SSO",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "company.com",
            "subsidiary.com"
          ]
        },
        "authorization_endpoint": {
          "description": "Discovered OIDC authorization endpoint",
          "type": "string",
          "example": "https://company.okta.com/authorize"
        },
        "claim_mappings": {
          "description": "Maps Contio user fields to IdP claim names",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "created_at": {
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "discovery_last_fetched_at": {
          "description": "When the OIDC discovery document was last fetched",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "discovery_url": {
          "description": "OIDC discovery endpoint URL",
          "type": "string",
          "example": "https://company.okta.com/.well-known/openid-configuration"
        },
        "id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "idp_client_id": {
          "description": "OAuth Client ID from your Identity Provider (secret is never returned)",
          "type": "string",
          "example": "0oa1234567890abcdef"
        },
        "is_active": {
          "description": "Whether this IdP configuration is active",
          "type": "boolean",
          "example": true
        },
        "issuer": {
          "description": "Discovered OIDC issuer",
          "type": "string",
          "example": "https://company.okta.com"
        },
        "jwks_uri": {
          "description": "Discovered OIDC JWKS URI",
          "type": "string",
          "example": "https://company.okta.com/jwks"
        },
        "mode": {
          "description": "Domain validation mode",
          "type": "string",
          "example": "strict"
        },
        "name": {
          "description": "Display name for this IdP configuration",
          "type": "string",
          "example": "Okta SSO"
        },
        "partner_app_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "scopes": {
          "description": "OIDC scopes requested during authentication",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "openid",
            "email",
            "profile"
          ]
        },
        "token_endpoint": {
          "description": "Discovered OIDC token endpoint",
          "type": "string",
          "example": "https://company.okta.com/token"
        },
        "type": {
          "description": "IdP type (always \"oidc\")",
          "type": "string",
          "example": "oidc"
        },
        "updated_at": {
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "userinfo_endpoint": {
          "description": "Discovered OIDC userinfo endpoint",
          "type": "string",
          "example": "https://company.okta.com/userinfo"
        }
      }
    },
    "idp.UpdateIdPConfigError400": {
      "description": "Bad request error for updating IdP configuration",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request_body",
            "invalid_idp_credentials",
            "invalid_idp",
            "domain_is_generic",
            "domain_already_claimed",
            "strict_mode_requires_domains",
            "discovery_fetch_failed"
          ],
          "example": "invalid_request_body"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid request body"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "idp.UpdateIdPConfigRequest": {
      "type": "object",
      "properties": {
        "allowed_email_domains": {
          "description": "Email domains allowed for SSO (required for strict mode)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "claim_mappings": {
          "description": "Maps Contio user fields to IdP claim names",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "discovery_url": {
          "description": "OIDC discovery endpoint URL from your Identity Provider",
          "type": "string",
          "example": "https://company.okta.com/.well-known/openid-configuration"
        },
        "idp_client_id": {
          "description": "OAuth Client ID from your Identity Provider's OIDC application. This is NOT your Contio Partner client_id.",
          "type": "string",
          "minLength": 1,
          "example": "0oa1234567890abcdef"
        },
        "idp_client_secret": {
          "description": "OAuth Client Secret from your Identity Provider's OIDC application. This is NOT your Contio Partner client_secret. Stored encrypted at rest.",
          "type": "string",
          "minLength": 1,
          "example": "new-IdP-secret"
        },
        "is_active": {
          "description": "Enable or disable this IdP configuration",
          "type": "boolean",
          "example": true
        },
        "mode": {
          "description": "Domain validation mode: \"strict\" or \"partner_managed\"",
          "type": "string",
          "enum": [
            "strict",
            "partner_managed"
          ],
          "example": "partner_managed"
        },
        "name": {
          "description": "Display name for this IdP configuration",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated Okta SSO"
        },
        "scopes": {
          "description": "OIDC scopes to request during authentication",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "meeting.AddParticipantRequest": {
      "type": "object",
      "required": [
        "email",
        "name",
        "role"
      ],
      "properties": {
        "email": {
          "type": "string",
          "example": "john.doe@example.com"
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "John Doe"
        },
        "role": {
          "type": "string",
          "enum": [
            "EDITOR",
            "VIEWER"
          ],
          "example": "EDITOR"
        }
      }
    },
    "meeting.CreateAgendaItemRequest": {
      "type": "object",
      "required": [
        "item_type",
        "title"
      ],
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 5000,
          "example": "Review and discuss Q1 objectives"
        },
        "item_type": {
          "type": "string",
          "enum": [
            "DISCUSSION",
            "DECISION",
            "ACTION_ITEM",
            "INFORMATION"
          ],
          "example": "DISCUSSION"
        },
        "presenters": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "123e4567-e89b-12d3-a456-426614174003"
          ]
        },
        "restricted_to_leads": {
          "type": "boolean",
          "example": false
        },
        "talking_points": {
          "type": "string",
          "maxLength": 10000,
          "example": "My private notes for this item"
        },
        "time_allocation_minutes": {
          "type": "number",
          "maximum": 1440,
          "minimum": 0,
          "example": 15
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Q1 Planning Discussion"
        }
      }
    },
    "meeting.CreateMeetingError400": {
      "description": "Bad request error for creating a meeting",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_request",
            "invalid_start_time",
            "invalid_end_time",
            "invalid_time_range",
            "invalid_start_date"
          ],
          "example": "invalid_start_time"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid start time format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "meeting.GetMeetingsError400": {
      "description": "Bad request error for listing meetings",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_start_date",
            "invalid_end_date"
          ],
          "example": "invalid_start_date"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid start_date format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "meeting.PartnerAgendaItemResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the agenda item was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Detailed description of the agenda item",
          "type": "string",
          "example": "Review and discuss Q1 objectives"
        },
        "id": {
          "description": "Unique identifier for the agenda item",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174005"
        },
        "item_type": {
          "description": "Type of agenda item (DISCUSSION, DECISION, ACTION_ITEM, INFORMATION)",
          "type": "string",
          "example": "DISCUSSION"
        },
        "meeting_id": {
          "description": "ID of the meeting this agenda item belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "presenters": {
          "description": "User IDs of the presenters for this agenda item",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "123e4567-e89b-12d3-a456-426614174003"
          ]
        },
        "restricted_to_leads": {
          "description": "Whether this item is restricted to meeting leads only",
          "type": "boolean",
          "example": false
        },
        "sequence": {
          "description": "Order sequence of the agenda item",
          "type": "string",
          "example": "1"
        },
        "status": {
          "description": "Current status (pending, in_progress, completed)",
          "type": "string",
          "example": "pending"
        },
        "talking_points": {
          "description": "Private talking points for the authenticated user on this agenda item. Only returned if the user has talking points.",
          "type": "string",
          "example": "Key points to discuss: budget allocation, timeline"
        },
        "time_allocation_minutes": {
          "description": "Allocated time for this agenda item in minutes",
          "type": "number",
          "example": 15
        },
        "title": {
          "description": "Title of the agenda item",
          "type": "string",
          "example": "Q1 Planning Discussion"
        },
        "updated_at": {
          "description": "Timestamp when the agenda item was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        }
      }
    },
    "meeting.PartnerCreateMeetingRequest": {
      "type": "object",
      "required": [
        "title"
      ],
      "properties": {
        "detail_level": {
          "type": "string",
          "enum": [
            "BULLET_POINTS",
            "STANDARD",
            "VERBATIM"
          ],
          "example": "STANDARD"
        },
        "end_time": {
          "type": "string",
          "example": "2023-01-01T11:00:00Z"
        },
        "is_instant": {
          "type": "boolean",
          "example": false
        },
        "start_time": {
          "type": "string",
          "example": "2023-01-01T10:00:00Z"
        },
        "template_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174004"
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Weekly Team Sync"
        }
      }
    },
    "meeting.PartnerMeetingParticipantResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the participant was added",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "email": {
          "description": "Participant's email address",
          "type": "string",
          "example": "john.doe@example.com"
        },
        "id": {
          "description": "Unique identifier for the participant record",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174004"
        },
        "is_attended": {
          "description": "Whether the participant attended the meeting",
          "type": "boolean",
          "example": true
        },
        "meeting_id": {
          "description": "ID of the meeting this participant belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Participant's display name",
          "type": "string",
          "example": "John Doe"
        },
        "role": {
          "description": "Participant's role in the meeting (EDITOR or VIEWER)",
          "type": "string",
          "example": "EDITOR"
        },
        "updated_at": {
          "description": "Timestamp when the participant record was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "user_id": {
          "description": "ID of the user if they have a Contio account",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        }
      }
    },
    "meeting.PartnerUpdateMeetingRequest": {
      "type": "object",
      "properties": {
        "detail_level": {
          "type": "string",
          "enum": [
            "BULLET_POINTS",
            "STANDARD",
            "VERBATIM"
          ],
          "example": "STANDARD"
        },
        "end_time": {
          "type": "string",
          "example": "2023-01-01T11:00:00Z"
        },
        "start_time": {
          "type": "string",
          "example": "2023-01-01T10:00:00Z"
        },
        "template_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174004"
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated Team Sync"
        }
      }
    },
    "meeting.UpdateAgendaItemRequest": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 5000,
          "example": "Updated description"
        },
        "item_type": {
          "type": "string",
          "enum": [
            "DISCUSSION",
            "DECISION",
            "ACTION_ITEM",
            "INFORMATION"
          ],
          "example": "DISCUSSION"
        },
        "presenters": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "123e4567-e89b-12d3-a456-426614174003"
          ]
        },
        "restricted_to_leads": {
          "type": "boolean",
          "example": true
        },
        "status": {
          "type": "string",
          "enum": [
            "pending",
            "in_progress",
            "completed"
          ],
          "example": "in_progress"
        },
        "talking_points": {
          "type": "string",
          "maxLength": 10000,
          "example": "Updated private notes"
        },
        "time_allocation_minutes": {
          "type": "number",
          "maximum": 1440,
          "minimum": 0,
          "example": 20
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated Discussion"
        }
      }
    },
    "meeting.UpdateMeetingError400": {
      "description": "Bad request error for updating a meeting",
      "type": "object",
      "properties": {
        "code": {
          "description": "Unique identifier for the error type",
          "type": "string",
          "enum": [
            "invalid_meeting_id",
            "invalid_request",
            "invalid_start_time",
            "invalid_end_time",
            "invalid_time_range"
          ],
          "example": "invalid_meeting_id"
        },
        "error": {
          "description": "User-friendly description of what went wrong",
          "type": "string",
          "example": "Invalid meeting ID format"
        },
        "request_id": {
          "description": "Request identifier to correlate errors with logs",
          "type": "string",
          "example": "abc123xyz"
        }
      }
    },
    "meeting_template.AppliedItemsCountsResponse": {
      "type": "object",
      "properties": {
        "agenda_items": {
          "description": "Number of agenda items applied",
          "type": "integer",
          "example": 5
        },
        "documents": {
          "description": "Number of documents applied",
          "type": "integer",
          "example": 2
        },
        "participants": {
          "description": "Number of participants applied",
          "type": "integer",
          "example": 3
        }
      }
    },
    "meeting_template.ApplyTemplateRequest": {
      "type": "object",
      "required": [
        "meeting_id"
      ],
      "properties": {
        "meeting_id": {
          "description": "ID of the meeting to apply the template to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "meeting_template.ApplyTemplateResponse": {
      "type": "object",
      "properties": {
        "application_id": {
          "description": "Unique identifier for the application record",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "applied_items": {
          "description": "Counts of items applied from the template",
          "allOf": [
            {
              "$ref": "#/definitions/meeting_template.AppliedItemsCountsResponse"
            }
          ]
        },
        "success": {
          "description": "Whether the operation was successful",
          "type": "boolean",
          "example": true
        }
      }
    },
    "meeting_template.PartnerMeetingTemplateDetailResponse": {
      "type": "object",
      "properties": {
        "agenda_item_count": {
          "description": "Number of agenda items in the template",
          "type": "integer",
          "example": 5
        },
        "can_edit": {
          "description": "Whether the current user can edit this template",
          "type": "boolean",
          "example": true
        },
        "created_at": {
          "description": "Timestamp when the template was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Description of the template",
          "type": "string",
          "example": "Standard agenda for weekly team meetings"
        },
        "document_count": {
          "description": "Number of documents in the template",
          "type": "integer",
          "example": 2
        },
        "id": {
          "description": "Unique identifier for the meeting template",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "description": "Whether the template is active",
          "type": "boolean",
          "example": true
        },
        "name": {
          "description": "Name of the template",
          "type": "string",
          "example": "Weekly Team Sync Template"
        },
        "ownership_type": {
          "description": "Ownership level of the template (SYSTEM, VERTICAL, WORKSPACE, USER)",
          "type": "string",
          "enum": [
            "SYSTEM",
            "VERTICAL",
            "WORKSPACE",
            "USER"
          ],
          "example": "WORKSPACE"
        },
        "participant_count": {
          "description": "Number of participants in the template",
          "type": "integer",
          "example": 3
        },
        "updated_at": {
          "description": "Timestamp when the template was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        }
      }
    },
    "meeting_template.PartnerMeetingTemplateResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the template was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Description of the template",
          "type": "string",
          "example": "Standard agenda for weekly team meetings"
        },
        "id": {
          "description": "Unique identifier for the meeting template",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "description": "Whether the template is active",
          "type": "boolean",
          "example": true
        },
        "name": {
          "description": "Name of the template",
          "type": "string",
          "example": "Weekly Team Sync Template"
        },
        "ownership_type": {
          "description": "Ownership level of the template (SYSTEM, VERTICAL, WORKSPACE, USER)",
          "type": "string",
          "enum": [
            "SYSTEM",
            "VERTICAL",
            "WORKSPACE",
            "USER"
          ],
          "example": "WORKSPACE"
        },
        "updated_at": {
          "description": "Timestamp when the template was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        }
      }
    },
    "meeting_template.TemplateNextStepResponse": {
      "type": "object",
      "properties": {
        "autopilot": {
          "description": "Whether autopilot is enabled for this next step on the template",
          "type": "boolean",
          "example": true
        },
        "color": {
          "description": "Color of the next step",
          "type": "string",
          "example": "#4F46E5"
        },
        "description": {
          "description": "Description of the next step",
          "type": "string",
          "example": "AI-powered summary generation"
        },
        "icon_name": {
          "description": "Icon name for the next step",
          "type": "string",
          "example": "document-text"
        },
        "id": {
          "description": "Unique identifier for the next step",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Name of the next step",
          "type": "string",
          "example": "Generate Meeting Summary"
        },
        "sort_order": {
          "description": "Sort order of the next step",
          "type": "integer",
          "example": 1
        }
      }
    },
    "next_step_result.NextStepResultResponse": {
      "type": "object",
      "properties": {
        "content_format": {
          "description": "The format of the generated content",
          "type": "string",
          "example": "markdown"
        },
        "created_at": {
          "description": "When the result was created",
          "type": "string",
          "example": "2026-03-25T10:00:00Z"
        },
        "execution_log_id": {
          "description": "The execution log ID that produced this result",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "expires_at": {
          "description": "When the result expires",
          "type": "string",
          "example": "2026-04-01T10:00:00Z"
        },
        "generated_text": {
          "description": "The AI-generated text content",
          "type": "string",
          "example": "# Meeting Summary\n\nKey discussion points..."
        },
        "id": {
          "description": "Unique identifier for the result",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "oauth.HealthResponse": {
      "type": "object",
      "properties": {
        "checks": {
          "type": "object",
          "additionalProperties": true
        },
        "service": {
          "type": "string",
          "example": "partner-oauth"
        },
        "status": {
          "type": "string",
          "example": "healthy"
        },
        "timestamp": {
          "type": "string",
          "example": "2024-01-14T10:00:00Z"
        }
      }
    },
    "oauth.OAuthConsentCheckRequest": {
      "type": "object",
      "required": [
        "client_id",
        "email"
      ],
      "properties": {
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "code_challenge": {
          "type": "string",
          "example": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
        },
        "code_challenge_method": {
          "type": "string",
          "example": "S256"
        },
        "email": {
          "type": "string",
          "example": "user@example.com"
        },
        "redirect_uri": {
          "type": "string",
          "example": "https://partner.example.com/callback"
        },
        "response_type": {
          "type": "string",
          "example": "code"
        },
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "openid",
            "profile",
            "email"
          ]
        },
        "state": {
          "type": "string",
          "example": "abc123state"
        }
      }
    },
    "oauth.OAuthConsentCheckResponse": {
      "type": "object",
      "properties": {
        "has_consent": {
          "type": "boolean",
          "example": true
        },
        "redirect_url": {
          "type": "string",
          "example": "https://partner.example.com/callback?code=abc123"
        },
        "requires_consent": {
          "type": "boolean",
          "example": false
        },
        "session_valid": {
          "type": "boolean",
          "example": true
        }
      }
    },
    "oauth.OAuthConsentRequest": {
      "type": "object",
      "required": [
        "client_id",
        "consent",
        "email",
        "redirect_uri",
        "response_type"
      ],
      "properties": {
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "code_challenge": {
          "type": "string",
          "example": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
        },
        "code_challenge_method": {
          "type": "string",
          "example": "S256"
        },
        "consent": {
          "type": "boolean",
          "example": true
        },
        "email": {
          "type": "string",
          "example": "user@example.com"
        },
        "redirect_uri": {
          "type": "string",
          "example": "https://partner.example.com/callback"
        },
        "response_type": {
          "type": "string",
          "example": "code"
        },
        "scope": {
          "type": "string",
          "example": "openid profile email"
        },
        "state": {
          "type": "string",
          "example": "abc123state"
        }
      }
    },
    "oauth.OAuthConsentResponse": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "example": "auth_code_abc123"
        },
        "redirect_url": {
          "type": "string",
          "example": "https://partner.example.com/callback?code=auth_code_abc123&state=abc123state"
        },
        "state": {
          "type": "string",
          "example": "abc123state"
        }
      }
    },
    "oauth.PartnerAuthInitiateRequest": {
      "type": "object",
      "required": [
        "client_id",
        "email"
      ],
      "properties": {
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "email": {
          "type": "string",
          "example": "user@example.com"
        },
        "is_admin": {
          "type": "boolean",
          "example": false
        },
        "name": {
          "type": "string",
          "example": "John Doe"
        },
        "workspace_id": {
          "type": "string",
          "example": "550e8400-e29b-41d4-a716-446655440000"
        }
      }
    },
    "oauth.PartnerAuthInitiateResponse": {
      "type": "object",
      "properties": {
        "challenge_name": {
          "type": "string",
          "example": "CUSTOM_CHALLENGE"
        },
        "challenge_params": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "session": {
          "type": "string",
          "example": "AYABeExample..."
        },
        "user_provisioned": {
          "description": "Indicates if user was newly created",
          "type": "boolean",
          "example": false
        }
      }
    },
    "oauth.PartnerAuthResponse": {
      "type": "object",
      "properties": {
        "access_token": {
          "type": "string",
          "example": "eyJraWQiOiJrZXkxIiwiYWxnIjoiUlMyNTYifQ..."
        },
        "expires_in": {
          "type": "integer",
          "example": 3600
        },
        "id_token": {
          "type": "string",
          "example": "eyJraWQiOiJrZXkxIiwiYWxnIjoiUlMyNTYifQ..."
        },
        "message": {
          "type": "string",
          "example": "Authentication successful"
        },
        "redirect": {
          "type": "string",
          "example": "https://app.example.com/dashboard"
        },
        "refresh_token": {
          "type": "string",
          "example": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIn0..."
        },
        "success": {
          "type": "boolean",
          "example": true
        }
      }
    },
    "oauth.PartnerAuthVerifyRequest": {
      "type": "object",
      "required": [
        "client_id",
        "code",
        "email",
        "session"
      ],
      "properties": {
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "code": {
          "type": "string",
          "example": "123456"
        },
        "email": {
          "type": "string",
          "example": "user@example.com"
        },
        "session": {
          "type": "string",
          "example": "AYABeExample..."
        }
      }
    },
    "oauth.PartnerInfoResponse": {
      "type": "object",
      "properties": {
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "co_brand_name": {
          "type": "string",
          "example": "Powered by Contio"
        },
        "company_name": {
          "type": "string",
          "example": "Acme Corporation"
        },
        "name": {
          "type": "string",
          "example": "Acme CRM"
        }
      }
    },
    "oauth.ScopesResponse": {
      "type": "object",
      "properties": {
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "partner.AutomationAction": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "config": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "example": {
            "url": "https://api.example.com/webhook"
          }
        },
        "type": {
          "type": "string",
          "example": "webhook"
        }
      }
    },
    "profile.UserProfileResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the user account was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "display_name": {
          "description": "User's display name",
          "type": "string",
          "example": "John Doe"
        },
        "email": {
          "description": "User's email address",
          "type": "string",
          "example": "john.doe@example.com"
        },
        "id": {
          "description": "Unique identifier for the user",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        },
        "workspace_id": {
          "description": "ID of the workspace the user belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        },
        "workspace_name": {
          "description": "Name of the workspace the user belongs to",
          "type": "string",
          "example": "Acme Corp"
        },
        "workspace_role": {
          "description": "User's role in the workspace (e.g., WORKSPACE_OWNER, WORKSPACE_ADMIN, WORKSPACE_MEMBER)",
          "type": "string",
          "example": "WORKSPACE_MEMBER"
        }
      }
    },
    "rome_api_controllers_external_partner_admin_shared.ListResponse-automation_AutomationResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/automation.AutomationResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_admin_shared.ListResponse-connection_UserConnectionResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/connection.UserConnectionResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateNextStepResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/template.TemplateNextStepResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/template.TemplateResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_admin_shared.ListResponse-workflow_PartnerWorkflowTemplateSummary": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/workflow.PartnerWorkflowTemplateSummary"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse": {
      "type": "object",
      "properties": {
        "auto_install_on_new_workspaces": {
          "type": "boolean",
          "example": true
        },
        "auto_propagate": {
          "type": "boolean",
          "example": true
        },
        "created_at": {
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "type": "string",
          "example": "Complete sales workflow toolkit"
        },
        "id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "type": "boolean",
          "example": true
        },
        "manifest": {
          "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
        },
        "name": {
          "type": "string",
          "example": "Sales Pipeline Toolkit"
        },
        "ownership_type": {
          "type": "string",
          "example": "PARTNER"
        },
        "partner_app_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "slug": {
          "type": "string",
          "example": "sales-pipeline"
        },
        "updated_at": {
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "version": {
          "type": "string",
          "example": "1.0.0"
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.DiscoveryDocument": {
      "type": "object",
      "properties": {
        "authorization_endpoint": {
          "type": "string",
          "example": "https://auth.contio.io/oauth2/authorize"
        },
        "claims_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "id_token_signing_alg_values_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "introspection_endpoint": {
          "type": "string",
          "example": "https://auth.contio.io/oauth2/introspect"
        },
        "issuer": {
          "type": "string",
          "example": "https://auth.contio.io"
        },
        "jwks_uri": {
          "type": "string",
          "example": "https://auth.contio.io/.well-known/jwks.json"
        },
        "response_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "revocation_endpoint": {
          "type": "string",
          "example": "https://auth.contio.io/oauth2/revoke"
        },
        "scopes_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "subject_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "token_endpoint": {
          "type": "string",
          "example": "https://auth.contio.io/oauth2/token"
        },
        "token_endpoint_auth_methods_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "userinfo_endpoint": {
          "type": "string",
          "example": "https://auth.contio.io/oauth2/userInfo"
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.JWK": {
      "type": "object",
      "properties": {
        "alg": {
          "type": "string",
          "example": "RS256"
        },
        "crv": {
          "description": "For ECDSA keys",
          "type": "string",
          "example": "P-256"
        },
        "d": {
          "description": "For RSA and ECDSA private keys (optional)",
          "type": "string"
        },
        "e": {
          "type": "string",
          "example": "AQAB"
        },
        "kid": {
          "type": "string",
          "example": "key-id-1"
        },
        "kty": {
          "type": "string",
          "example": "RSA"
        },
        "n": {
          "type": "string",
          "example": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw"
        },
        "use": {
          "type": "string",
          "example": "sig"
        },
        "x": {
          "type": "string"
        },
        "y": {
          "type": "string"
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.JWKSResponse": {
      "type": "object",
      "properties": {
        "keys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/rome_api_controllers_external_partner_oauth.JWK"
          }
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.TokenIntrospection": {
      "type": "object",
      "properties": {
        "active": {
          "type": "boolean",
          "example": true
        },
        "aud": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "client_id": {
          "type": "string",
          "example": "partner_abc123"
        },
        "exp": {
          "type": "integer",
          "example": 1704110400
        },
        "ext": {
          "type": "object",
          "additionalProperties": {}
        },
        "iat": {
          "type": "integer",
          "example": 1704106800
        },
        "iss": {
          "type": "string",
          "example": "https://auth.contio.io"
        },
        "nbf": {
          "type": "integer",
          "example": 1704106800
        },
        "scope": {
          "type": "string",
          "example": "openid profile email"
        },
        "sub": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "token_type": {
          "type": "string",
          "example": "Bearer"
        },
        "username": {
          "type": "string",
          "example": "user@example.com"
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.TokenResponse": {
      "type": "object",
      "properties": {
        "access_token": {
          "type": "string",
          "example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
        },
        "expires_in": {
          "type": "integer",
          "example": 3600
        },
        "id_token": {
          "type": "string",
          "example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
        },
        "refresh_token": {
          "type": "string",
          "example": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIn0..."
        },
        "scope": {
          "type": "string",
          "example": "openid profile email"
        },
        "token_type": {
          "type": "string",
          "example": "Bearer"
        }
      }
    },
    "rome_api_controllers_external_partner_oauth.UserInfo": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "example": "user@example.com"
        },
        "email_verified": {
          "type": "boolean",
          "example": true
        },
        "family_name": {
          "type": "string",
          "example": "Doe"
        },
        "given_name": {
          "type": "string",
          "example": "John"
        },
        "locale": {
          "type": "string",
          "example": "en-US"
        },
        "name": {
          "type": "string",
          "example": "John Doe"
        },
        "phone_number": {
          "type": "string",
          "example": "+1234567890"
        },
        "phone_number_verified": {
          "type": "boolean",
          "example": false
        },
        "picture": {
          "type": "string",
          "example": "https://example.com/avatar.jpg"
        },
        "sub": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-action_item_PartnerActionItemResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/action_item.PartnerActionItemResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-calendar_PartnerCalendarEventResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/calendar.PartnerCalendarEventResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerAgendaItemResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/meeting.PartnerAgendaItemResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerMeetingParticipantResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/meeting.PartnerMeetingParticipantResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_PartnerMeetingTemplateResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/meeting_template.PartnerMeetingTemplateResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_TemplateNextStepResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/meeting_template.TemplateNextStepResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_admin_toolkit_ToolkitResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_user_toolkit_ToolkitResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/rome_api_controllers_external_partner_user_toolkit.ToolkitResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-session_PartnerChatSessionResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/session.PartnerChatSessionResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-shared_ActionButtonResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/shared.ActionButtonResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-shared_NextStepResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/shared.NextStepResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-shared_PartnerMeetingResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/shared.PartnerMeetingResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-toolkit_ToolkitWithInstallationResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ToolkitWithInstallationResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_shared.ListResponse-workflow_run_PartnerWorkflowRunResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Array of items for the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/workflow_run.PartnerWorkflowRunResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of items across all pages",
          "type": "integer",
          "example": 100
        }
      }
    },
    "rome_api_controllers_external_partner_user_toolkit.ToolkitResponse": {
      "type": "object",
      "properties": {
        "action_buttons_count": {
          "description": "Number of action buttons in the toolkit",
          "type": "integer",
          "example": 2
        },
        "created_at": {
          "description": "Timestamp when the toolkit was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "description": {
          "description": "Description of the toolkit",
          "type": "string",
          "example": "A comprehensive toolkit for sales meetings"
        },
        "id": {
          "description": "Unique identifier for the toolkit",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "description": "Whether the toolkit is active",
          "type": "boolean",
          "example": true
        },
        "name": {
          "description": "Name of the toolkit",
          "type": "string",
          "example": "Sales Meeting Toolkit"
        },
        "next_steps_count": {
          "description": "Number of next steps in the toolkit",
          "type": "integer",
          "example": 5
        },
        "ownership_type": {
          "description": "Ownership type of the toolkit",
          "type": "string",
          "enum": [
            "SYSTEM",
            "PARTNER"
          ],
          "example": "PARTNER"
        },
        "slug": {
          "description": "URL-friendly slug for the toolkit",
          "type": "string",
          "example": "sales-meeting-toolkit"
        },
        "templates_count": {
          "description": "Number of templates in the toolkit",
          "type": "integer",
          "example": 3
        },
        "updated_at": {
          "description": "Timestamp when the toolkit was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "version": {
          "description": "Version of the toolkit",
          "type": "string",
          "example": "1.0.0"
        }
      }
    },
    "session.CreateSessionRequest": {
      "type": "object",
      "required": [
        "message"
      ],
      "properties": {
        "context_document_ids": {
          "description": "Optional context document IDs to prime the agent with specific documents",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "d4e5f6a7-b8c9-0123-4567-890abcdef012"
          ]
        },
        "meeting_id": {
          "description": "Optional ID of the meeting to associate this session with (user must be a participant)",
          "type": "string",
          "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
        },
        "message": {
          "description": "First user message to start the conversation (1-10,000 characters)",
          "type": "string",
          "maxLength": 10000,
          "minLength": 1,
          "example": "Summarize the key decisions from this meeting"
        },
        "metadata": {
          "description": "Partner-supplied metadata for tracking (max 10 keys, 256 char keys, 1024 char values)",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "session.CreateSessionResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the session was created",
          "type": "string",
          "example": "2026-03-16T14:30:00Z"
        },
        "id": {
          "description": "Unique identifier for the session",
          "type": "string",
          "example": "f7e6d5c4-b3a2-1098-7654-321fedcba098"
        },
        "initial_turn": {
          "description": "Initial turn if message was provided",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerTurnResponse"
            }
          ]
        },
        "meeting_id": {
          "description": "ID of the associated meeting",
          "type": "string",
          "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
        },
        "metadata": {
          "description": "Partner-supplied metadata",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "status": {
          "description": "Current session status: active, closed, or expired",
          "type": "string",
          "enum": [
            "active",
            "closed",
            "expired"
          ],
          "example": "active"
        }
      }
    },
    "session.GetSessionResponse": {
      "type": "object",
      "properties": {
        "session": {
          "description": "Session details",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerChatSessionResponse"
            }
          ]
        },
        "turn_pagination": {
          "description": "Pagination info for turns",
          "allOf": [
            {
              "$ref": "#/definitions/session.TurnPaginationResponse"
            }
          ]
        },
        "turns": {
          "description": "Turns in this session (based on turn_limit parameter)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/session.PartnerTurnResponse"
          }
        }
      }
    },
    "session.GetTurnResponse": {
      "type": "object",
      "properties": {
        "turn": {
          "description": "The requested turn details",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerTurnResponse"
            }
          ]
        }
      }
    },
    "session.PartnerAgentMetadataResponse": {
      "type": "object",
      "properties": {
        "referenced_documents": {
          "description": "Context document IDs the agent referenced",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "token_usage": {
          "description": "Token usage statistics",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerTokenUsageResponse"
            }
          ]
        },
        "tool_calls": {
          "description": "Tools the agent invoked during this turn",
          "type": "array",
          "items": {
            "$ref": "#/definitions/session.PartnerToolCallResponse"
          }
        }
      }
    },
    "session.PartnerChatSessionResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the session was created",
          "type": "string",
          "example": "2026-03-16T14:30:00Z"
        },
        "id": {
          "description": "Unique identifier for the session",
          "type": "string",
          "example": "f7e6d5c4-b3a2-1098-7654-321fedcba098"
        },
        "meeting_id": {
          "description": "ID of the associated meeting (if any)",
          "type": "string",
          "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
        },
        "metadata": {
          "description": "Partner-supplied metadata",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "status": {
          "description": "Current session status: active, closed, or expired",
          "type": "string",
          "enum": [
            "active",
            "closed",
            "expired"
          ],
          "example": "active"
        },
        "title": {
          "description": "Session title (if any)",
          "type": "string",
          "example": "Quarterly Product Review Planning"
        },
        "turn_count": {
          "description": "Total number of turns in this session (user + agent messages)",
          "type": "integer",
          "example": 4
        },
        "updated_at": {
          "description": "Timestamp when the session was last updated",
          "type": "string",
          "example": "2026-03-16T14:35:12Z"
        }
      }
    },
    "session.PartnerTokenUsageResponse": {
      "type": "object",
      "properties": {
        "completion_tokens": {
          "description": "Number of output tokens",
          "type": "integer",
          "example": 200
        },
        "prompt_tokens": {
          "description": "Number of input tokens",
          "type": "integer",
          "example": 150
        },
        "total_tokens": {
          "description": "Total tokens used",
          "type": "integer",
          "example": 350
        }
      }
    },
    "session.PartnerToolCallResponse": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of the tool",
          "type": "string",
          "example": "search_meeting_notes"
        },
        "status": {
          "description": "Execution status",
          "type": "string",
          "enum": [
            "success",
            "failure"
          ],
          "example": "success"
        }
      }
    },
    "session.PartnerTurnErrorResponse": {
      "type": "object",
      "properties": {
        "code": {
          "description": "Error code",
          "type": "string",
          "example": "agent_error"
        },
        "message": {
          "description": "Human-readable error message",
          "type": "string",
          "example": "Agent processing failed"
        }
      }
    },
    "session.PartnerTurnResponse": {
      "type": "object",
      "properties": {
        "agent_metadata": {
          "description": "Agent execution metadata (present only for role=agent turns)",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerAgentMetadataResponse"
            }
          ]
        },
        "completed_at": {
          "description": "Timestamp when the turn finished processing (null if not completed)",
          "type": "string",
          "example": "2026-03-16T14:30:15Z"
        },
        "content": {
          "description": "Message text content",
          "type": "string",
          "example": "Summarize the key decisions from this meeting"
        },
        "created_at": {
          "description": "Timestamp when the turn was created/enqueued",
          "type": "string",
          "example": "2026-03-16T14:30:00Z"
        },
        "error": {
          "description": "Error details when status=failed",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerTurnErrorResponse"
            }
          ]
        },
        "id": {
          "description": "Unique identifier for the turn (message ID)",
          "type": "string",
          "example": "turn-uuid-1234"
        },
        "role": {
          "description": "Role of the message author: user or agent",
          "type": "string",
          "enum": [
            "user",
            "agent"
          ],
          "example": "user"
        },
        "sequence_number": {
          "description": "Sequence number in the conversation",
          "type": "integer",
          "example": 1
        },
        "session_id": {
          "description": "ID of the session this turn belongs to",
          "type": "string",
          "example": "f7e6d5c4-b3a2-1098-7654-321fedcba098"
        },
        "status": {
          "description": "Turn processing status: queued, processing, completed, or failed",
          "type": "string",
          "enum": [
            "queued",
            "processing",
            "completed",
            "failed"
          ],
          "example": "completed"
        }
      }
    },
    "session.SendMessageRequest": {
      "type": "object",
      "required": [
        "message"
      ],
      "properties": {
        "meeting_id": {
          "description": "Optional ID of the meeting to associate this session with (user must be a participant)",
          "type": "string",
          "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
        },
        "message": {
          "description": "User message to add to the conversation (1-10,000 characters)",
          "type": "string",
          "maxLength": 10000,
          "minLength": 1,
          "example": "Can you create action items from those decisions?"
        }
      }
    },
    "session.SendMessageResponse": {
      "type": "object",
      "properties": {
        "turn": {
          "description": "The created user turn",
          "allOf": [
            {
              "$ref": "#/definitions/session.PartnerTurnResponse"
            }
          ]
        }
      }
    },
    "session.TurnPaginationResponse": {
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more turns",
          "type": "boolean",
          "example": false
        },
        "limit": {
          "description": "Limit used",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Current offset",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total turns in the session",
          "type": "integer",
          "example": 12
        }
      }
    },
    "shared.ActionButtonResponse": {
      "type": "object",
      "properties": {
        "icon_name": {
          "description": "Icon name from the vocabulary",
          "type": "string",
          "example": "share"
        },
        "id": {
          "description": "Unique identifier for the action button",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_default": {
          "description": "Whether this is the default action button",
          "type": "boolean",
          "example": false
        },
        "name": {
          "description": "Name of the action button",
          "type": "string",
          "example": "Send Email"
        }
      }
    },
    "shared.ExecuteNextStepRequest": {
      "type": "object",
      "properties": {
        "action_button_id": {
          "description": "Action button ID if triggered via a specific action button",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "shared.ExecuteNextStepResponse": {
      "type": "object",
      "properties": {
        "content_format": {
          "description": "Content format of the generated text",
          "type": "string",
          "example": "markdown"
        },
        "execution_log_id": {
          "description": "Unique identifier for the execution log entry",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "generated_text": {
          "description": "Generated text content (only included for sync execution of AI-type)",
          "type": "string",
          "example": "# Meeting Summary\n\nKey points discussed..."
        },
        "redirect_url": {
          "description": "Redirect URL for redirect-type next steps",
          "type": "string",
          "example": "https://partner.example.com/invoice?meeting_id=abc"
        },
        "result_id": {
          "description": "Result ID for AI-type next steps (use to retrieve generated content)",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "status": {
          "description": "Execution status",
          "type": "string",
          "example": "completed"
        }
      }
    },
    "shared.NextStepResponse": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "description": "Action buttons associated with this next step",
          "type": "array",
          "items": {
            "$ref": "#/definitions/shared.ActionButtonResponse"
          }
        },
        "color": {
          "description": "Color for the next step",
          "type": "string",
          "example": "#FF5733"
        },
        "description": {
          "description": "Description of the next step",
          "type": "string",
          "example": "Generates an invoice from meeting action items"
        },
        "icon_name": {
          "description": "Icon name for the next step",
          "type": "string",
          "example": "receipt"
        },
        "id": {
          "description": "Unique identifier for the next step",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Name of the next step",
          "type": "string",
          "example": "Generate Invoice"
        },
        "redirect_url": {
          "description": "Redirect URL for redirect type next steps",
          "type": "string",
          "example": "https://partner.example.com/invoice"
        },
        "sort_order": {
          "description": "Display order for sorting",
          "type": "integer",
          "example": 1
        },
        "type": {
          "description": "Type of next step: \"ai\" or \"redirect\"",
          "type": "string",
          "example": "ai"
        }
      }
    },
    "shared.PartnerAppResponse": {
      "type": "object",
      "properties": {
        "client_id": {
          "description": "OAuth client ID for this partner app",
          "type": "string",
          "example": "partner_1234567890_abcdef123456"
        },
        "company_name": {
          "description": "Name of the company that owns this partner app",
          "type": "string",
          "example": "Acme Corp"
        },
        "created_at": {
          "description": "Timestamp when the partner app was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "default_toolkit_id": {
          "description": "Default toolkit ID to auto-install when a workspace is provisioned via this partner app",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "description": {
          "description": "Optional description of the partner app",
          "type": "string",
          "example": "Integrates with our CRM system"
        },
        "id": {
          "description": "Unique identifier for the partner app",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Display name of the partner app",
          "type": "string",
          "example": "CRM Integration"
        },
        "primary_contact_email": {
          "description": "Primary contact email for this partner app",
          "type": "string",
          "example": "contact@example.com"
        },
        "slug": {
          "description": "URL-friendly slug for the partner app",
          "type": "string",
          "example": "acme-crm"
        },
        "status": {
          "description": "Current status (active, inactive, suspended)",
          "type": "string",
          "example": "active"
        },
        "updated_at": {
          "description": "Timestamp when the partner app was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "webhook_enabled": {
          "description": "Whether webhook delivery is enabled for this partner app",
          "type": "boolean",
          "example": true
        },
        "webhook_filter": {
          "description": "Optional webhook event filter configuration for this partner app",
          "allOf": [
            {
              "$ref": "#/definitions/shared.WebhookFilterResponse"
            }
          ]
        },
        "webhook_url": {
          "description": "Webhook URL for receiving event notifications",
          "type": "string",
          "example": "https://api.example.com/webhook"
        }
      }
    },
    "shared.PartnerMeetingResponse": {
      "type": "object",
      "properties": {
        "calendar_event_id": {
          "description": "ID of the linked calendar event, if any",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174006"
        },
        "created_at": {
          "description": "Timestamp when the meeting was created",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "created_by_user_id": {
          "description": "ID of the user who created the meeting",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        },
        "end_time": {
          "description": "Scheduled end time in RFC3339 format",
          "type": "string",
          "example": "2023-01-01T11:00:00-07:00"
        },
        "id": {
          "description": "Unique identifier for the meeting",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "redirect_to_meeting_id": {
          "description": "ID of the meeting to redirect to if this meeting was merged",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174007"
        },
        "start_time": {
          "description": "Scheduled start time in RFC3339 format",
          "type": "string",
          "example": "2023-01-01T10:00:00-07:00"
        },
        "status": {
          "description": "Current status of the meeting",
          "type": "string",
          "enum": [
            "draft",
            "scheduled",
            "in_progress",
            "ended",
            "completed"
          ],
          "example": "completed"
        },
        "summary_notes": {
          "description": "AI-generated summary notes from the meeting",
          "type": "string",
          "example": "Post-Meeting Summarization ..."
        },
        "title": {
          "description": "Title of the meeting",
          "type": "string",
          "example": "Weekly Team Sync"
        },
        "updated_at": {
          "description": "Timestamp when the meeting was last updated",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "workspace_id": {
          "description": "ID of the workspace this meeting belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        }
      }
    },
    "shared.TriggerActionButtonRequest": {
      "type": "object",
      "properties": {
        "addressing_values": {
          "description": "AddressingValues are submitted form values for integration-mechanism action buttons\n(e.g. {\"object_type\":\"Account\",\"record_id\":\"0014X...\"} for Salesforce). Persisted\nverbatim on the action_button_invocation row.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "next_step_id": {
          "description": "Next step ID if triggered in the context of a next step",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "result_id": {
          "description": "Result ID if triggered in the context of a next step result",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "shared.TriggerActionButtonResponse": {
      "type": "object",
      "properties": {
        "invocation_id": {
          "description": "InvocationID is the persisted action_button_invocation row ID created at trigger time.",
          "type": "string",
          "example": "019ddf5f-2e7c-7e0e-8f9e-12d3a4567ab0"
        },
        "message": {
          "description": "Success message",
          "type": "string",
          "example": "Action button triggered successfully"
        }
      }
    },
    "shared.WebhookFilterResponse": {
      "type": "object",
      "properties": {
        "events": {
          "description": "Event types included in the filter configuration",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "meeting.created",
            "action_item.updated"
          ]
        },
        "type": {
          "description": "Filter mode controlling how events are matched",
          "type": "string",
          "example": "include"
        }
      }
    },
    "sso.ErrorResponse": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "example": "sso_authentication_failed"
        },
        "message": {
          "type": "string",
          "example": "Authentication failed"
        }
      }
    },
    "sso.InitiateResponse": {
      "type": "object",
      "properties": {
        "authorization_url": {
          "type": "string",
          "example": "https://idp.example.com/authorize?client_id=abc123&..."
        },
        "session_id": {
          "type": "string",
          "example": "sess_abc123def456"
        }
      }
    },
    "sso.PartnerSSOInfoResponse": {
      "type": "object",
      "properties": {
        "co_brand_logo_url": {
          "type": "string",
          "example": "https://cdn.example.com/logos/acme.png"
        },
        "co_brand_name": {
          "type": "string",
          "example": "Powered by Contio"
        },
        "has_idp_config": {
          "type": "boolean",
          "example": true
        },
        "is_active": {
          "type": "boolean",
          "example": true
        },
        "name": {
          "type": "string",
          "example": "Acme CRM"
        },
        "slug": {
          "type": "string",
          "example": "acme-crm"
        }
      }
    },
    "sso.SessionStatusResponse": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "example": "Session expired"
        },
        "status": {
          "type": "string",
          "example": "pending"
        },
        "target": {
          "type": "string",
          "example": "web"
        },
        "user_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "template.AddToTemplateRequest": {
      "type": "object",
      "required": [
        "next_step_id"
      ],
      "properties": {
        "autopilot": {
          "type": "boolean",
          "example": false
        },
        "next_step_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "sort_order": {
          "type": "integer",
          "example": 1
        }
      }
    },
    "template.CreateTemplateRequest": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "backing_meeting_id": {
          "description": "Optional ID of an existing meeting to use as the source for the template's content.\nThe meeting's agenda items, participants, and talking points will be copied to the new template.\nThe partner must have access to the workspace containing the meeting.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        },
        "description": {
          "description": "Optional description of the template",
          "type": "string",
          "maxLength": 1000,
          "example": "Invoice template for new clients"
        },
        "name": {
          "description": "Name of the template",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Invoice Template"
        }
      }
    },
    "template.TemplateNextStepResponse": {
      "type": "object",
      "properties": {
        "autopilot": {
          "description": "Whether autopilot is enabled for this next step on the template",
          "type": "boolean",
          "example": true
        },
        "id": {
          "description": "Unique identifier for the next step",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Name of the next step",
          "type": "string",
          "example": "Generate Invoice"
        },
        "sort_order": {
          "description": "Sort order of the next step",
          "type": "integer",
          "example": 1
        }
      }
    },
    "template.TemplateResponse": {
      "type": "object",
      "properties": {
        "backing_meeting_id": {
          "description": "BackingMeetingID is the ID of the meeting this template was created from, if any",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        },
        "created_at": {
          "description": "Timestamp when the template was created",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "description": {
          "type": "string",
          "example": "Invoice template for new clients"
        },
        "id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "name": {
          "type": "string",
          "example": "Invoice Template"
        },
        "updated_at": {
          "description": "Timestamp when the template was last updated",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        }
      }
    },
    "template.UpdateTemplateNextStepRequest": {
      "type": "object",
      "properties": {
        "autopilot": {
          "type": "boolean",
          "example": true
        }
      }
    },
    "template.UpdateTemplateRequest": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Optional description of the template",
          "type": "string",
          "maxLength": 1000,
          "example": "Updated invoice template for new clients"
        },
        "name": {
          "description": "Name of the template",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated Invoice Template"
        }
      }
    },
    "toolkit.ConflictInfoResponse": {
      "type": "object",
      "properties": {
        "conflict_type": {
          "type": "string",
          "example": "name_collision"
        },
        "entity_name": {
          "type": "string",
          "example": "Generate Invoice"
        },
        "entity_type": {
          "type": "string",
          "example": "next_step"
        },
        "existing_entity_id": {
          "type": "string",
          "example": "abc-123"
        },
        "message": {
          "description": "separated due to formatting for long example",
          "type": "string",
          "example": "A next step with this name already exists for this partner app"
        },
        "resolution": {
          "type": "string",
          "example": "informational"
        }
      }
    },
    "toolkit.CreateToolkitRequest": {
      "type": "object",
      "required": [
        "manifest",
        "name",
        "slug",
        "version"
      ],
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 1000,
          "example": "Complete sales workflow toolkit"
        },
        "dry_run": {
          "description": "DryRun validates the manifest without creating the toolkit",
          "type": "boolean"
        },
        "manifest": {
          "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Sales Pipeline Toolkit"
        },
        "slug": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "example": "sales-pipeline"
        },
        "version": {
          "type": "string",
          "example": "1.0.0"
        }
      }
    },
    "toolkit.CreateToolkitResponse": {
      "type": "object",
      "properties": {
        "conflicts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ConflictInfoResponse"
          }
        },
        "summary": {
          "$ref": "#/definitions/toolkit.ManifestSummaryResponse"
        },
        "toolkit": {
          "$ref": "#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse"
        },
        "validation": {
          "$ref": "#/definitions/toolkit.ValidationResultResponse"
        }
      }
    },
    "toolkit.CreateVersionRequest": {
      "type": "object",
      "required": [
        "manifest",
        "version_label"
      ],
      "properties": {
        "changelog": {
          "description": "Changelog describes the changes in this version",
          "type": "string",
          "maxLength": 5000,
          "example": "Added new action button for CRM sync"
        },
        "dry_run": {
          "description": "DryRun validates the manifest without creating the version",
          "type": "boolean"
        },
        "manifest": {
          "description": "Manifest is the toolkit manifest for this version",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
            }
          ]
        },
        "version_label": {
          "description": "VersionLabel is a human-readable label for this version (e.g., \"2.0.0\")",
          "type": "string",
          "maxLength": 50,
          "minLength": 1,
          "example": "2.0.0"
        }
      }
    },
    "toolkit.CreateVersionResponse": {
      "type": "object",
      "properties": {
        "conflicts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ConflictInfoResponse"
          }
        },
        "summary": {
          "$ref": "#/definitions/toolkit.ManifestSummaryResponse"
        },
        "validation": {
          "$ref": "#/definitions/toolkit.ValidationResultResponse"
        },
        "version": {
          "$ref": "#/definitions/toolkit.VersionResponse"
        }
      }
    },
    "toolkit.EntityMapResponse": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "description": "Action button RefID → database UUID mappings",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "next_steps": {
          "description": "Next step RefID → database UUID mappings",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "shortcuts": {
          "description": "Shortcut RefID → database UUID mappings",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "templates": {
          "description": "Template RefID → database UUID mappings",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "toolkit.ExportEntitiesRequest": {
      "type": "object",
      "properties": {
        "action_button_ids": {
          "description": "ActionButtonIDs lists standalone action button IDs to include",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "description": {
          "description": "Description is an optional description for the exported manifest metadata",
          "type": "string",
          "maxLength": 1000
        },
        "name": {
          "description": "Name is an optional name for the exported manifest metadata",
          "type": "string",
          "maxLength": 255
        },
        "next_step_ids": {
          "description": "NextStepIDs lists next step IDs to include (auto-discovers action buttons)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "shortcut_ids": {
          "description": "ShortcutIDs lists shortcut IDs to include",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "template_ids": {
          "description": "TemplateIDs lists meeting template IDs to include (auto-discovers next steps and action buttons)",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "toolkit.ExportMetadataResponse": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      }
    },
    "toolkit.ExportResponse": {
      "type": "object",
      "properties": {
        "manifest": {
          "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
        },
        "metadata": {
          "$ref": "#/definitions/toolkit.ExportMetadataResponse"
        },
        "summary": {
          "$ref": "#/definitions/toolkit.ExportSummaryResponse"
        },
        "warnings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ExportWarningResponse"
          }
        }
      }
    },
    "toolkit.ExportSummaryResponse": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "type": "integer"
        },
        "next_steps": {
          "type": "integer"
        },
        "shortcuts": {
          "type": "integer"
        },
        "templates": {
          "type": "integer"
        }
      }
    },
    "toolkit.ExportWarningResponse": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "entity_name": {
          "type": "string"
        },
        "entity_type": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "toolkit.InstallationResponse": {
      "type": "object",
      "properties": {
        "entities": {
          "description": "Mapping of manifest $id values to database UUIDs for entities created during installation",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.EntityMapResponse"
            }
          ]
        },
        "id": {
          "description": "Unique identifier for the installation",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "installed_at": {
          "description": "Timestamp when the toolkit was installed",
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "installed_by": {
          "description": "ID of the user who installed the toolkit",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "toolkit_id": {
          "description": "ID of the installed toolkit",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "workspace_id": {
          "description": "ID of the workspace where the toolkit is installed",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      }
    },
    "toolkit.ListInstallationsResponse": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Installations on the current page",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ToolkitInstallationItemResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "summary": {
          "description": "Aggregate counts across all partner workspaces (active, opted_out, never_installed)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ToolkitInstallationSummaryResponse"
            }
          ]
        },
        "total_connected_workspaces": {
          "description": "Total number of workspaces connected to the partner app",
          "type": "integer",
          "example": 162
        }
      }
    },
    "toolkit.ManifestActionButton": {
      "type": "object",
      "properties": {
        "id": {
          "description": "ID references an existing action button (mutually exclusive with Spec)",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "spec": {
          "description": "Spec defines a new action button to create on installation (mutually exclusive with ID)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestActionButtonSpec"
            }
          ]
        }
      }
    },
    "toolkit.ManifestActionButtonSpec": {
      "type": "object",
      "required": [
        "content_format",
        "delivery_mechanism",
        "name"
      ],
      "properties": {
        "$id": {
          "description": "RefID is the manifest-internal identifier for this entity (used by $ref in other entries)",
          "type": "string",
          "maxLength": 100,
          "example": "my-action-button"
        },
        "content_format": {
          "description": "Content format: rich_text, markdown, plain_text, html",
          "type": "string",
          "enum": [
            "rich_text",
            "markdown",
            "plain_text",
            "html"
          ],
          "example": "plain_text"
        },
        "delivery_mechanism": {
          "description": "Delivery mechanism: clipboard, email, os_email_client, file_download, integration, webhook, redirect",
          "type": "string",
          "enum": [
            "clipboard",
            "email",
            "os_email_client",
            "file_download",
            "integration",
            "webhook",
            "redirect"
          ],
          "example": "webhook"
        },
        "file_format": {
          "description": "File format for file delivery",
          "type": "string",
          "maxLength": 50,
          "example": "pdf"
        },
        "icon_name": {
          "description": "Icon name from the vocabulary",
          "type": "string",
          "maxLength": 100,
          "example": "share"
        },
        "integration_type": {
          "description": "Integration type",
          "type": "string",
          "maxLength": 100,
          "example": "salesforce"
        },
        "is_default_for_next_step": {
          "description": "Whether this is the default action for a next step",
          "type": "boolean",
          "example": false
        },
        "name": {
          "description": "Name of the action button",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Send to CRM"
        },
        "redirect_url": {
          "description": "Redirect URL for redirect delivery",
          "type": "string",
          "maxLength": 2000,
          "example": "https://app.example.com/action"
        },
        "requires_connected_integration": {
          "description": "Whether this action requires a connected integration",
          "type": "boolean",
          "example": false
        },
        "sort_order": {
          "description": "Sort order for display",
          "type": "integer",
          "example": 1
        },
        "webhook_url": {
          "description": "Webhook URL for webhook delivery",
          "type": "string",
          "maxLength": 2000,
          "example": "https://api.example.com/webhook"
        }
      }
    },
    "toolkit.ManifestAgendaItemSpec": {
      "type": "object",
      "required": [
        "item_type",
        "title"
      ],
      "properties": {
        "content": {
          "description": "Content is the rich text body content (markdown) for DISCUSSION-type items",
          "type": "string"
        },
        "description": {
          "description": "Description is an optional short description/subtitle",
          "type": "string",
          "maxLength": 1000,
          "example": "Review current quarter pipeline status"
        },
        "item_type": {
          "description": "ItemType is the agenda item type (DISCUSSION, ACTION_ITEM_RECAP, BREAK, ADJOURN, etc.)",
          "type": "string",
          "example": "DISCUSSION"
        },
        "restricted_to_leads": {
          "description": "RestrictedToLeads indicates whether only meeting leads can see this item",
          "type": "boolean",
          "example": false
        },
        "sequence": {
          "description": "Sequence controls the display order",
          "type": "string",
          "example": "1"
        },
        "time_allocation_minutes": {
          "description": "TimeAllocationMinutes is the suggested time allocation in minutes",
          "type": "number",
          "example": 15
        },
        "title": {
          "description": "Title is the agenda item's title",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Pipeline Review"
        }
      }
    },
    "toolkit.ManifestNextStep": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "description": "ActionButtons defines the action buttons to attach to this next step with junction fields",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.NextStepActionButtonRelation"
          }
        },
        "default_action_button": {
          "description": "DefaultActionButton specifies the default action button for this next step (by $ref or $id)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestRef"
            }
          ]
        },
        "id": {
          "description": "ID references an existing next step (mutually exclusive with Spec)",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "spec": {
          "description": "Spec defines a new next step to create on installation (mutually exclusive with ID)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestNextStepSpec"
            }
          ]
        }
      }
    },
    "toolkit.ManifestNextStepSpec": {
      "type": "object",
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "$id": {
          "description": "RefID is the manifest-internal identifier for this entity (used by $ref in other entries)",
          "type": "string",
          "maxLength": 100,
          "example": "my-next-step"
        },
        "ai_prompt": {
          "description": "AI prompt for AI-type next steps",
          "type": "string",
          "example": "Generate an invoice..."
        },
        "color": {
          "description": "Color for display",
          "type": "string",
          "maxLength": 50,
          "example": "#FF5733"
        },
        "description": {
          "description": "Description of the next step",
          "type": "string",
          "maxLength": 1000,
          "example": "Generates an invoice from meeting notes"
        },
        "icon_name": {
          "description": "Icon name for display",
          "type": "string",
          "maxLength": 100,
          "example": "receipt"
        },
        "name": {
          "description": "Name of the next step",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Generate Invoice"
        },
        "redirect_url": {
          "description": "Redirect URL for redirect-type next steps",
          "type": "string",
          "maxLength": 2000,
          "example": "https://partner.example.com/invoice"
        },
        "sort_order": {
          "description": "Sort order for display",
          "type": "integer",
          "example": 1
        },
        "type": {
          "description": "Type of next step: \"ai\" or \"redirect\"",
          "type": "string",
          "enum": [
            "ai",
            "redirect"
          ],
          "example": "ai"
        }
      }
    },
    "toolkit.ManifestParticipantSpec": {
      "type": "object",
      "required": [
        "email",
        "name",
        "role"
      ],
      "properties": {
        "email": {
          "description": "Email is the participant's email address",
          "type": "string",
          "example": "sarah@acme.com"
        },
        "name": {
          "description": "Name is the participant's display name",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Sarah Chen"
        },
        "role": {
          "description": "Role is the participant's meeting role (EDITOR or VIEWER)",
          "type": "string",
          "enum": [
            "EDITOR",
            "VIEWER"
          ],
          "example": "EDITOR"
        }
      }
    },
    "toolkit.ManifestRef": {
      "type": "object",
      "properties": {
        "$id": {
          "description": "ID references an existing entity by its database ID",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "$ref": {
          "description": "Ref references an entity defined in the same manifest via its $id value",
          "type": "string",
          "example": "my-next-step"
        }
      }
    },
    "toolkit.ManifestShortcut": {
      "type": "object",
      "properties": {
        "id": {
          "description": "ID references an existing shortcut (mutually exclusive with Spec)",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "spec": {
          "description": "Spec defines a new shortcut to create on installation (mutually exclusive with ID)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestShortcutSpec"
            }
          ]
        }
      }
    },
    "toolkit.ManifestShortcutSpec": {
      "type": "object",
      "required": [
        "name",
        "prompt"
      ],
      "properties": {
        "$id": {
          "description": "RefID is the manifest-internal identifier for this entity (used by $ref in other entries)",
          "type": "string",
          "maxLength": 100,
          "example": "my-shortcut"
        },
        "color": {
          "description": "Color for display",
          "type": "string",
          "maxLength": 50,
          "example": "#4F46E5"
        },
        "description": {
          "description": "Description of the shortcut",
          "type": "string",
          "maxLength": 1000,
          "example": "Generates a concise meeting summary"
        },
        "icon_name": {
          "description": "IconName specifies which FontAwesome icon to display (e.g., \"faLightbulb\", \"faBolt\")",
          "type": "string",
          "maxLength": 100,
          "example": "faLightbulb"
        },
        "name": {
          "description": "Name of the shortcut",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Summarize Meeting"
        },
        "prompt": {
          "description": "AI prompt template",
          "type": "string",
          "example": "Summarize the key points discussed in this meeting."
        },
        "surfaces": {
          "description": "Surfaces defines which UI surfaces this shortcut should appear on",
          "type": "array",
          "maxItems": 5,
          "items": {
            "$ref": "#/definitions/toolkit.ManifestShortcutSurfaceInput"
          }
        }
      }
    },
    "toolkit.ManifestShortcutSurfaceInput": {
      "type": "object",
      "required": [
        "position",
        "surface"
      ],
      "properties": {
        "position": {
          "description": "Position on the surface (1-10)",
          "type": "integer",
          "maximum": 10,
          "minimum": 1,
          "example": 1
        },
        "surface": {
          "description": "Surface name (HOME, MEETING_PREPARE, MEETING_RUN, MEETING_REVIEW, CANVAS)",
          "type": "string",
          "example": "HOME"
        }
      }
    },
    "toolkit.ManifestSummaryResponse": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "type": "integer"
        },
        "next_steps": {
          "type": "integer"
        },
        "shortcuts": {
          "type": "integer"
        },
        "templates": {
          "type": "integer"
        }
      }
    },
    "toolkit.ManifestTemplate": {
      "type": "object",
      "properties": {
        "id": {
          "description": "ID references an existing template (mutually exclusive with Spec)",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "next_steps": {
          "description": "NextSteps defines the next steps to attach to this template with junction fields",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.TemplateNextStepRelation"
          }
        },
        "spec": {
          "description": "Spec defines a new template to create on installation (mutually exclusive with ID)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestTemplateSpec"
            }
          ]
        }
      }
    },
    "toolkit.ManifestTemplateSpec": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "$id": {
          "description": "RefID is the manifest-internal identifier for this entity (used by $ref in other entries)",
          "type": "string",
          "maxLength": 100,
          "example": "my-template"
        },
        "agenda_items": {
          "description": "AgendaItems defines the template's agenda items",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestAgendaItemSpec"
          }
        },
        "backing_meeting_id": {
          "description": "BackingMeetingID references an existing meeting to use as the content source for this template.\nMutually exclusive with inline content fields.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "description": {
          "description": "Description of the template",
          "type": "string",
          "maxLength": 1000,
          "example": "Template for sales meetings"
        },
        "detail_level": {
          "description": "DetailLevel controls the granularity of meeting notes",
          "type": "string",
          "enum": [
            "BULLET_POINTS",
            "STANDARD",
            "VERBATIM"
          ],
          "example": "STANDARD"
        },
        "meeting_duration_seconds": {
          "description": "MeetingDurationSeconds is the default meeting duration in seconds",
          "type": "integer",
          "example": 3600
        },
        "name": {
          "description": "Name of the template",
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Sales Meeting Template"
        },
        "participants": {
          "description": "Participants defines the template's default participants",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestParticipantSpec"
          }
        },
        "start_time_offset_seconds": {
          "description": "StartTimeOffsetSeconds is the default start time as seconds from UTC midnight (-1 means untimed)",
          "type": "integer",
          "example": 36000
        },
        "title": {
          "description": "--- Inline meeting content (portable) ---\nTitle is the meeting title for the template",
          "type": "string",
          "maxLength": 255,
          "example": "Weekly Sales Standup"
        }
      }
    },
    "toolkit.ManifestValidationErrorResponse": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "example": "MISSING_REQUIRED"
        },
        "message": {
          "type": "string",
          "example": "name is required"
        },
        "path": {
          "type": "string",
          "example": "next_steps[0]"
        }
      }
    },
    "toolkit.NextStepActionButtonRelation": {
      "type": "object",
      "required": [
        "action_button"
      ],
      "properties": {
        "action_button": {
          "description": "ActionButton is the reference to the action button entity ($ref or $id)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestRef"
            }
          ]
        },
        "sort_order": {
          "description": "SortOrder is the display order of the action button within the next step",
          "type": "integer",
          "example": 1
        }
      }
    },
    "toolkit.TemplateNextStepRelation": {
      "type": "object",
      "required": [
        "next_step"
      ],
      "properties": {
        "autopilot": {
          "description": "Autopilot indicates if the next step should auto-execute when the meeting is finalized",
          "type": "boolean",
          "example": false
        },
        "next_step": {
          "description": "NextStep is the reference to the next step entity ($ref or $id)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ManifestRef"
            }
          ]
        },
        "sort_order": {
          "description": "SortOrder is the display order of the next step within the template",
          "type": "integer",
          "example": 1
        }
      }
    },
    "toolkit.ToolkitInstallationItemResponse": {
      "type": "object",
      "properties": {
        "installed_at": {
          "description": "Timestamp when the installation was created (active installations only)",
          "type": "string",
          "example": "2026-04-15T10:30:00Z"
        },
        "status": {
          "description": "Installation status: \"active\" or \"opted_out\"",
          "enum": [
            "active",
            "opted_out"
          ],
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ToolkitInstallationStatus"
            }
          ],
          "example": "active"
        },
        "uninstalled_at": {
          "description": "Timestamp when the workspace opted out (opted_out installations only)",
          "type": "string",
          "example": "2026-05-01T14:00:00Z"
        },
        "version_label": {
          "description": "Human-readable version label of the installed toolkit version (active installations only)",
          "type": "string",
          "example": "1.2.0"
        },
        "workspace_id": {
          "description": "ID of the workspace where the toolkit is (or was) installed",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "workspace_name": {
          "description": "Display name of the workspace",
          "type": "string",
          "example": "Acme Corp"
        }
      }
    },
    "toolkit.ToolkitInstallationStatus": {
      "type": "string",
      "enum": [
        "active",
        "opted_out"
      ],
      "x-enum-varnames": [
        "ToolkitInstallationStatusActive",
        "ToolkitInstallationStatusOptedOut"
      ]
    },
    "toolkit.ToolkitInstallationSummaryResponse": {
      "type": "object",
      "properties": {
        "active": {
          "description": "Number of workspaces with the toolkit currently installed",
          "type": "integer",
          "example": 142
        },
        "never_installed": {
          "description": "Number of partner workspaces that have never installed the toolkit",
          "type": "integer",
          "example": 12
        },
        "opted_out": {
          "description": "Number of workspaces that have opted out of the toolkit",
          "type": "integer",
          "example": 8
        }
      }
    },
    "toolkit.ToolkitManifestRequest": {
      "type": "object",
      "properties": {
        "action_buttons": {
          "description": "Action buttons included in the toolkit\nNote: No omitempty - empty slices should serialize as [] for API consistency",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestActionButton"
          }
        },
        "next_steps": {
          "description": "Next steps included in the toolkit\nNote: No omitempty - empty slices should serialize as [] for API consistency",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestNextStep"
          }
        },
        "shortcuts": {
          "description": "Shortcuts included in the toolkit\nNote: No omitempty - empty slices should serialize as [] for API consistency",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestShortcut"
          }
        },
        "templates": {
          "description": "Templates included in the toolkit\nNote: No omitempty - empty slices should serialize as [] for API consistency",
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestTemplate"
          }
        },
        "toolkit_prompt": {
          "description": "Default AI persona/behavioral instructions for the toolkit",
          "type": "string"
        }
      }
    },
    "toolkit.ToolkitWithInstallationResponse": {
      "type": "object",
      "properties": {
        "installation": {
          "description": "Installation details (nil if not installed)",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.InstallationResponse"
            }
          ]
        },
        "toolkit": {
          "description": "Toolkit details",
          "allOf": [
            {
              "$ref": "#/definitions/rome_api_controllers_external_partner_user_toolkit.ToolkitResponse"
            }
          ]
        }
      }
    },
    "toolkit.UpdateToolkitRequest": {
      "type": "object",
      "properties": {
        "auto_install_on_new_workspaces": {
          "description": "AutoInstallOnNewWorkspaces, when set, controls whether the toolkit is automatically\ninstalled on newly provisioned partner workspaces. Pointer semantics preserve\ntrue PATCH behavior — only provided fields are updated.",
          "type": "boolean",
          "example": true
        },
        "auto_propagate": {
          "description": "AutoPropagate, when set, controls whether newly published toolkit versions are\nautomatically propagated to existing installations. Pointer semantics preserve\ntrue PATCH behavior — only provided fields are updated.",
          "type": "boolean",
          "example": true
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "example": "Updated description"
        },
        "is_active": {
          "type": "boolean"
        },
        "manifest": {
          "description": "Deprecated: Manifest is no longer accepted via this endpoint. Use the toolkit versioning\nAPI instead: POST /v1/partner/admin/toolkits/{toolkitId}/versions to create a draft,\nthen POST /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish to publish it.\nProviding this field will return HTTP 409 Conflict.",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
            }
          ]
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "example": "Updated Toolkit Name"
        },
        "version": {
          "description": "Deprecated: Version is no longer accepted via this endpoint. Use the toolkit versioning\nAPI instead: POST /v1/partner/admin/toolkits/{toolkitId}/versions to create a draft,\nthen POST /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish to publish it.\nProviding this field will return HTTP 409 Conflict.",
          "type": "string",
          "example": "1.1.0"
        }
      }
    },
    "toolkit.UpdateVersionRequest": {
      "type": "object",
      "properties": {
        "changelog": {
          "description": "Changelog describes the changes in this version",
          "type": "string",
          "maxLength": 5000,
          "example": "Bug fixes and improvements"
        },
        "manifest": {
          "description": "Manifest is the toolkit manifest for this version",
          "allOf": [
            {
              "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
            }
          ]
        },
        "version_label": {
          "description": "VersionLabel is a human-readable label for this version",
          "type": "string",
          "maxLength": 50,
          "minLength": 1,
          "example": "2.0.1"
        }
      }
    },
    "toolkit.ValidationResultResponse": {
      "type": "object",
      "properties": {
        "errors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestValidationErrorResponse"
          }
        },
        "valid": {
          "type": "boolean"
        },
        "warnings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/toolkit.ManifestValidationErrorResponse"
          }
        }
      }
    },
    "toolkit.VersionResponse": {
      "type": "object",
      "properties": {
        "changelog": {
          "type": "string",
          "example": "Added new features"
        },
        "created_at": {
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "created_by": {
          "type": "string",
          "example": "user-123"
        },
        "deprecated_at": {
          "type": "string",
          "example": "2023-06-01T00:00:00Z"
        },
        "id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "manifest": {
          "$ref": "#/definitions/toolkit.ToolkitManifestRequest"
        },
        "published_at": {
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "status": {
          "type": "string",
          "example": "DRAFT"
        },
        "toolkit_id": {
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "updated_at": {
          "type": "string",
          "example": "2023-01-01T00:00:00Z"
        },
        "version_label": {
          "type": "string",
          "example": "2.0.0"
        },
        "version_number": {
          "type": "integer",
          "example": 2
        }
      }
    },
    "webhook.WebhookDeliveriesResponse": {
      "type": "object",
      "properties": {
        "deliveries": {
          "description": "Array of webhook delivery records",
          "type": "array",
          "items": {
            "$ref": "#/definitions/webhook.WebhookDeliveryResponse"
          }
        },
        "limit": {
          "description": "Maximum number of items per page",
          "type": "integer",
          "example": 50
        },
        "offset": {
          "description": "Number of items skipped from the beginning",
          "type": "integer",
          "example": 0
        },
        "total": {
          "description": "Total number of deliveries matching the filter",
          "type": "integer",
          "example": 25
        }
      }
    },
    "webhook.WebhookDeliveryResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "Timestamp when the delivery was created",
          "type": "string",
          "example": "2024-01-14T10:00:00Z"
        },
        "delivered_at": {
          "description": "When the webhook was successfully delivered",
          "type": "string",
          "example": "2024-01-14T10:30:00Z"
        },
        "delivery_status": {
          "description": "Current delivery status (pending, delivered, failed, abandoned)",
          "type": "string",
          "example": "delivered"
        },
        "error_message": {
          "description": "Error message if delivery failed",
          "type": "string",
          "example": ""
        },
        "event_id": {
          "description": "ID of the event that triggered this delivery",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174006"
        },
        "event_type": {
          "description": "Type of event that triggered this webhook",
          "type": "string",
          "example": "action_item_created"
        },
        "http_status_code": {
          "description": "HTTP status code returned by the webhook endpoint",
          "type": "integer",
          "example": 200
        },
        "id": {
          "description": "Unique identifier for the webhook delivery",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174005"
        },
        "next_retry_at": {
          "description": "When the next retry attempt will be made (if applicable)",
          "type": "string",
          "example": "2024-01-15T10:30:00Z"
        },
        "partner_app_id": {
          "description": "ID of the partner app this delivery belongs to",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "retry_count": {
          "description": "Number of retry attempts made",
          "type": "integer",
          "example": 0
        }
      }
    },
    "workflow.PartnerWorkflowTemplateResponse": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "CreatedAt is the timestamp at which the template was created.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "description": {
          "description": "Description is an optional human-readable description.",
          "type": "string",
          "example": "Runs after the meeting ends"
        },
        "id": {
          "description": "ID is the workflow template's unique identifier.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "description": "IsActive indicates whether the template is active and eligible to be run.",
          "type": "boolean",
          "example": true
        },
        "name": {
          "description": "Name is the human-readable template name.",
          "type": "string",
          "example": "Post-meeting Follow-up"
        },
        "spec": {
          "description": "Spec is the workflow DAG specification as a JSON object.",
          "type": "object"
        },
        "updated_at": {
          "description": "UpdatedAt is the timestamp at which the template was last updated.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "workspace_id": {
          "description": "WorkspaceID is the workspace that owns the template row.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        }
      }
    },
    "workflow.PartnerWorkflowTemplateSummary": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "CreatedAt is the timestamp at which the template was created.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "description": {
          "description": "Description is an optional human-readable description.",
          "type": "string",
          "example": "Runs after the meeting ends"
        },
        "id": {
          "description": "ID is the workflow template's unique identifier.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "is_active": {
          "description": "IsActive indicates whether the template is active and eligible to be run.",
          "type": "boolean",
          "example": true
        },
        "name": {
          "description": "Name is the human-readable template name.",
          "type": "string",
          "example": "Post-meeting Follow-up"
        },
        "updated_at": {
          "description": "UpdatedAt is the timestamp at which the template was last updated.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "workspace_id": {
          "description": "WorkspaceID is the workspace that owns the template row.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        }
      }
    },
    "workflow_run.PartnerCreateWorkflowRunRequest": {
      "type": "object",
      "required": [
        "originating_id",
        "originating_type",
        "workflow_template_id"
      ],
      "properties": {
        "originating_id": {
          "description": "OriginatingID is the ID of the originating object (required).",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        },
        "originating_type": {
          "description": "OriginatingType is the kind of object that triggered the run. Accepted values: \"meeting\", \"canvas\".",
          "type": "string",
          "enum": [
            "meeting",
            "canvas"
          ],
          "example": "meeting"
        },
        "workflow_template_id": {
          "description": "WorkflowTemplateID is the ID of the workflow template to run (required).",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        }
      }
    },
    "workflow_run.PartnerWorkflowRunResponse": {
      "type": "object",
      "properties": {
        "completed_at": {
          "description": "CompletedAt is the timestamp at which the run finished.",
          "type": "string",
          "example": "2024-01-01T00:05:00Z"
        },
        "context_json": {
          "description": "ContextJSON is the assembled context snapshot for the run as a JSON object.",
          "type": "object"
        },
        "created_at": {
          "description": "CreatedAt is the timestamp at which the run was created.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "current_step_ids": {
          "description": "CurrentStepIDs is the list of step IDs currently eligible to run.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "step-1"
          ]
        },
        "id": {
          "description": "ID is the workflow run's unique identifier.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        },
        "name": {
          "description": "Name is the optional display name of the run.",
          "type": "string",
          "example": "Post-meeting follow-up"
        },
        "originating_id": {
          "description": "OriginatingID is the ID of the originating object.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174003"
        },
        "originating_type": {
          "description": "OriginatingType is the kind of object that triggered the run.",
          "type": "string",
          "enum": [
            "meeting",
            "canvas"
          ],
          "example": "meeting"
        },
        "owner_user_id": {
          "description": "OwnerUserID is the user whose context owns the run.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174005"
        },
        "started_at": {
          "description": "StartedAt is the timestamp at which run execution began.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "status": {
          "description": "Status is the current run status.",
          "type": "string",
          "enum": [
            "pending",
            "active",
            "completed",
            "failed",
            "cancelled",
            "frozen"
          ],
          "example": "pending"
        },
        "trigger_type": {
          "description": "TriggerType indicates how the run was triggered.",
          "type": "string",
          "enum": [
            "manual",
            "autopilot"
          ],
          "example": "manual"
        },
        "triggered_by": {
          "description": "TriggeredBy is the ID of the user who triggered a manual run, if applicable.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174004"
        },
        "updated_at": {
          "description": "UpdatedAt is the timestamp at which the run was last updated.",
          "type": "string",
          "example": "2024-01-01T00:00:00Z"
        },
        "workflow_template_id": {
          "description": "WorkflowTemplateID is the template that produced this run.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174001"
        },
        "workspace_id": {
          "description": "WorkspaceID is the workspace that owns the run.",
          "type": "string",
          "example": "123e4567-e89b-12d3-a456-426614174002"
        }
      }
    }
  },
  "securityDefinitions": {
    "OAuth2Application": {
      "type": "oauth2",
      "flow": "application",
      "tokenUrl": "https://auth.contio.ai/oauth2/token",
      "scopes": {
        "read": "Grants read access",
        "write": "Grants write access"
      }
    },
    "PartnerAPIKeyAuth": {
      "description": "Partner API Key",
      "type": "apiKey",
      "name": "X-API-Key",
      "in": "header"
    },
    "PartnerClientIdAuth": {
      "description": "Partner Client ID",
      "type": "apiKey",
      "name": "X-Client-ID",
      "in": "header"
    }
  },
  "externalDocs": {
    "description": "Partner API Documentation",
    "url": "https://docs.contio.ai/partner-api/"
  },
  "x-tagGroups": [
    {
      "name": "Partner Authentication",
      "tags": [
        "OAuth 2.0",
        "Single Sign-On"
      ]
    },
    {
      "name": "Partner Admin API",
      "tags": [
        "App Management",
        "Automation Management",
        "Connection Management",
        "Credential Management",
        "IdP Management",
        "Template Management",
        "Toolkit Management",
        "Webhook Management"
      ]
    },
    {
      "name": "Partner User API",
      "tags": [
        "Action Items",
        "Agenda Items",
        "Calendar",
        "Chat Sessions",
        "Context",
        "Meetings",
        "Participants",
        "Templates",
        "Toolkits",
        "User Profile"
      ]
    }
  ],
  "tags": [
    {
      "name": "OAuth 2.0",
      "description": "Obtain and refresh access tokens for user-scoped API calls using the OAuth 2.0 authorization code flow. Partners redirect users to the Contio authorization endpoint, receive an authorization code, and exchange it for a short-lived access token and a long-lived refresh token.\n\n**Required credentials:** `client_id` + `client_secret` (issued during partner onboarding)."
    },
    {
      "name": "Single Sign-On",
      "description": "Configure OIDC-based Single Sign-On so your users can authenticate with Contio using your corporate identity provider (e.g. Okta, Azure AD, Google Workspace). Once an IdP configuration is active, Contio redirects SSO logins through your provider and maps the returned claims to Contio user accounts.\n\n**Required scope:** Admin API key (`X-API-Key` header)."
    },
    {
      "name": "App Management",
      "description": "Create, update, and inspect your partner application registration. The partner app record stores your webhook URL, OAuth redirect URIs, event filter settings, and branding configuration."
    },
    {
      "name": "Automation Management",
      "description": "Define and manage meeting automation. Automation workflows let you trigger custom logic — such as CRM updates or task creation — based on meeting lifecycle events like transcription completion or action-item extraction."
    },
    {
      "name": "Connection Management",
      "description": "List and manage the OAuth connections that link individual Contio users to your partner application. A connection is created the first time a user completes the OAuth authorization flow and is revoked when the user disconnects."
    },
    {
      "name": "Credential Management",
      "description": "Rotate and manage the API keys associated with your partner application. Use these endpoints to issue new keys and revoke compromised ones without interrupting active OAuth connections."
    },
    {
      "name": "IdP Management",
      "description": "Register and configure an OIDC identity provider for Single Sign-On. Contio performs OIDC discovery automatically once you supply the issuer URL, client credentials, and the email domains that should be routed through this IdP."
    },
    {
      "name": "Template Management",
      "description": "Create, update, and manage meeting templates. Templates are pre-configured meeting structures that can be applied to meetings to add content. Templates can include agenda items, participants, next steps, and action buttons. Use these endpoints to create, update, and manage templates and their associated next steps and action buttons.\n\n**Required scope:** Admin API key (`X-API-Key` header)."
    },
    {
      "name": "Toolkit Management",
      "description": "Create, update, and manage toolkits for your partner application. Toolkits are bundles of pre-configured entities (templates, action buttons, next steps) that can be installed into user workspaces as a cohesive feature set.\n\n**Required scope:** Admin API key (`X-API-Key` header)."
    },
    {
      "name": "Webhook Management",
      "description": "Configure the webhook endpoint that Contio uses to deliver real-time event notifications. You can also filter which event types are delivered and inspect recent delivery attempts.\n\nSee the [Webhook Events reference](/partner-api/api-reference/webhooks/) for the full list of supported event types and payload schemas."
    },
    {
      "name": "Action Items",
      "description": "Retrieve, create, and update action items that have been extracted from meetings. Action items include the task description, owner, due date, and current status."
    },
    {
      "name": "Agenda Items",
      "description": "Read and write agenda items associated with a meeting. Agenda items can be set before a meeting starts and are available to all participants."
    },
    {
      "name": "Calendar",
      "description": "Access calendar events linked to Contio meetings. These endpoints let you list upcoming events, retrieve event details, and associate calendar events with Contio meeting records."
    },
    {
      "name": "Chat Sessions",
      "description": "Create and manage asynchronous, turn-based chat sessions with the Contio AI agent on behalf of your users. Sessions are scoped to a specific meeting; the agent uses the meeting transcript and any supplied context documents to answer queries.\n\n**Required scopes:** `chat:read` (GET) · `chat:write` (POST / PUT)."
    },
    {
      "name": "Context",
      "description": "Upload and manage context documents that are made available to the Contio AI agent during chat sessions. Documents can be plain text, markdown, or structured data and are scoped to a specific meeting."
    },
    {
      "name": "Meetings",
      "description": "Retrieve meeting details, transcripts, and summaries. These endpoints also let you programmatically create meetings from calendar events and update meeting metadata."
    },
    {
      "name": "Participants",
      "description": "List and manage the participants associated with a meeting, including their roles, contact information, and speaking-time statistics."
    },
    {
      "name": "Templates",
      "description": "Retrieve meeting templates and their associated next steps and action buttons. You can also apply one or more templates to a meeting, which adds the template's content to the meeting."
    },
    {
      "name": "User Profile",
      "description": "Retrieve the authenticated user's Contio profile, including display name, email address, and feature-activation status for the partner integration."
    },
    {
      "name": "Toolkits",
      "description": "Browse and install toolkits in user workspaces. Toolkits provide pre-configured feature sets that partners have published for their users. Installing a toolkit creates all associated entities (templates, action buttons, next steps) in the target workspace.\n\n**Required scopes:** `toolkits:read` (GET) · `toolkits:write` (POST / DELETE)."
    }
  ]
}
