basePath: /
definitions:
  action_item.CreateActionItemError400:
    description: Bad request error for creating an action item
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request
        - invalid_due_date
        example: invalid_request
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request body
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  action_item.CreateActionItemRequest:
    properties:
      description:
        example: Call or schedule meeting to discuss
        maxLength: 1000
        minLength: 1
        type: string
      due_date:
        description: YYYY-MM-DD format
        example: "2023-01-08"
        type: string
      meeting_id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      partner_context:
        additionalProperties: {}
        type: object
      status:
        enum:
        - needs_review
        - accepted
        - in_progress
        - blocked
        - completed
        - cancelled
        example: needs_review
        type: string
      title:
        example: Follow up with client
        maxLength: 1000
        minLength: 1
        type: string
    required:
    - meeting_id
    - title
    type: object
  action_item.GetActionItemsError400:
    description: Bad request error for listing action items
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_start_date
        - invalid_end_date
        example: invalid_start_date
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid start_date format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  action_item.PartnerActionItemResponse:
    properties:
      assigned_to_user_id:
        description: ID of the user assigned to this action item
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
      completed_at:
        description: Timestamp when the action item was completed
        example: "2023-01-08T18:00:00-07:00"
        type: string
      created_at:
        description: Timestamp when the action item was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Detailed description of the action item
        example: Follow up with client about proposal
        type: string
      due_date:
        description: Due date in YYYY-MM-DD format
        example: "2023-01-08"
        type: string
      has_partner_assignment:
        description: Whether this action item was assigned via partner automation
        example: true
        type: boolean
      id:
        description: Unique identifier for the action item
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      is_completed:
        description: Whether the action item has been completed
        example: false
        type: boolean
      meeting_id:
        description: ID of the meeting this action item belongs to
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      partner_context:
        additionalProperties: {}
        description: Partner-specific context data stored with the action item
        type: object
      status:
        description: Current status (needs_review, accepted, in_progress, blocked,
          completed, cancelled)
        example: accepted
        type: string
      title:
        description: Title of the action item
        example: Client follow-up call
        type: string
      updated_at:
        description: Timestamp when the action item was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
    type: object
  action_item.UpdateActionItemError400:
    description: Bad request error for updating an action item
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_action_item_id
        - invalid_request
        - invalid_due_date
        example: invalid_action_item_id
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid action item ID format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  action_item.UpdateActionItemRequest:
    properties:
      description:
        example: Updated description
        maxLength: 1000
        minLength: 1
        type: string
      due_date:
        description: YYYY-MM-DD format
        example: "2023-01-08"
        type: string
      is_completed:
        example: true
        type: boolean
      partner_context:
        additionalProperties: {}
        type: object
      status:
        enum:
        - needs_review
        - accepted
        - in_progress
        - blocked
        - completed
        - cancelled
        example: needs_review
        type: string
      title:
        example: Follow up with client
        maxLength: 1000
        minLength: 1
        type: string
    type: object
  app_management.SetWebhookFilterRequest:
    properties:
      events:
        items:
          type: string
        minItems: 1
        type: array
      type:
        enum:
        - include
        - exclude
        example: include
        type: string
    required:
    - events
    - type
    type: object
  app_management.UpdateAppError400:
    description: Bad request error for updating partner app
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request
        - invalid_request_body
        - validation_error
        example: invalid_request_body
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request body
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  app_management.UpdateAppRequest:
    properties:
      default_toolkit_id:
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      description:
        example: Updated integration description
        maxLength: 1000
        type: string
      name:
        example: Updated CRM Integration
        maxLength: 255
        minLength: 1
        type: string
      slug:
        example: acme-crm
        maxLength: 63
        minLength: 3
        type: string
      webhook_url:
        example: https://api.example.com/webhook
        maxLength: 2000
        type: string
    type: object
  app_management.UpdateAppStatusError400:
    description: Bad request error for updating partner app status
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request_body
        - invalid_status
        example: invalid_status
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid status value
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  app_management.UpdateAppStatusRequest:
    properties:
      status:
        enum:
        - active
        - suspended
        - inactive
        example: suspended
        type: string
    required:
    - status
    type: object
  app_management.UpdateWebhookFilterError400:
    description: Bad request error for updating partner app webhook filters
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request_body
        - validation_error
        example: validation_error
        type: string
      error:
        description: User-friendly description of what went wrong
        example: 'invalid event types: invalid.event'
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
      valid_event_types:
        description: Valid event types that can be used in the webhook filter request
        example:
        - meeting.created
        - action_item.updated
        items:
          type: string
        type: array
    type: object
  app_management.UpdateWebhookStatusRequest:
    properties:
      enabled:
        example: true
        type: boolean
      pending_disposition:
        enum:
        - deliver
        - abandon
        example: abandon
        type: string
    required:
    - enabled
    type: object
  automation.AutomationResponse:
    properties:
      actions:
        description: Actions to execute when the automation is triggered
        items:
          $ref: '#/definitions/partner.AutomationAction'
        type: array
      created_at:
        description: Timestamp when the automation was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Optional description of what the automation does
        example: Sync action items to CRM
        type: string
      id:
        description: Unique identifier for the automation
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      name:
        description: Name of the automation
        example: CRM Integration
        type: string
      partner_app_id:
        description: ID of the partner app that owns this automation
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      status:
        description: Current status (active or inactive)
        example: active
        type: string
      trigger_type:
        description: Event type that triggers this automation
        example: action_item_created
        type: string
      updated_at:
        description: Timestamp when the automation was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
    type: object
  automation.CreateAutomationError400:
    description: Bad request error for creating an automation
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request_body
        - validation_error
        example: invalid_request_body
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request body
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  automation.CreateAutomationRequest:
    properties:
      actions:
        items:
          $ref: '#/definitions/partner.AutomationAction'
        minItems: 1
        type: array
      description:
        example: Sync action items to CRM
        maxLength: 1000
        type: string
      name:
        example: CRM Integration
        maxLength: 255
        minLength: 1
        type: string
      trigger_type:
        enum:
        - action_item_created
        - action_item_updated
        - action_item_completed
        - meeting_ended
        - meeting_summary_ready
        type: string
    required:
    - actions
    - name
    - trigger_type
    type: object
  automation.UpdateAutomationError400:
    description: Bad request error for updating an automation
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_automation_id
        - invalid_request_body
        - validation_error
        example: invalid_automation_id
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid automation ID format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  automation.UpdateAutomationRequest:
    properties:
      actions:
        items:
          $ref: '#/definitions/partner.AutomationAction'
        minItems: 1
        type: array
      description:
        example: Updated description
        maxLength: 1000
        type: string
      is_active:
        type: boolean
      name:
        example: Updated CRM Integration
        maxLength: 255
        minLength: 1
        type: string
      status:
        enum:
        - active
        - inactive
        example: active
        type: string
      trigger_type:
        enum:
        - action_item_created
        - action_item_updated
        - action_item_completed
        - meeting_ended
        - meeting_summary_ready
        type: string
    type: object
  calendar.CreateMeetingFromCalendarEventError400:
    description: Bad request error for creating a meeting from a calendar event
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_calendar_event_id
        - invalid_request
        example: invalid_calendar_event_id
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid calendar event ID format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  calendar.GetCalendarEventsError400:
    description: Bad request error for listing calendar events
    properties:
      code:
        description: Error code identifying the specific type of error
        enum:
        - invalid_query_parameters
        - missing_start_date
        - missing_end_date
        - invalid_start_date
        - invalid_end_date
        example: invalid_start_date
        type: string
      error:
        description: Human-readable error message
        example: Invalid start_date format
        type: string
      request_id:
        description: Request identifier for tracing
        example: abc123xyz
        type: string
    type: object
  calendar.LinkCalendarEventError400:
    description: Bad request error for linking a calendar event to a meeting
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_meeting_id
        - invalid_request_body
        - calendar_event_already_linked
        - meeting_already_linked
        example: invalid_meeting_id
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid meeting ID format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  calendar.LinkCalendarEventResponse:
    properties:
      message:
        description: Human-readable message describing the result
        example: Meeting linked to calendar event successfully
        type: string
      success:
        description: Whether the operation was successful
        example: true
        type: boolean
    type: object
  calendar.PartnerCalendarEventAttendee:
    properties:
      email:
        description: Email address of the attendee
        example: john.doe@example.com
        type: string
      name:
        description: Display name of the attendee
        example: John Doe
        type: string
      status:
        description: RSVP status (accepted, declined, tentative, needs_action)
        example: accepted
        type: string
      type:
        description: Attendee type (required, optional, resource)
        example: required
        type: string
    type: object
  calendar.PartnerCalendarEventResponse:
    properties:
      attendees:
        description: List of attendees for the calendar event
        items:
          $ref: '#/definitions/calendar.PartnerCalendarEventAttendee'
        type: array
      description:
        description: Description or body of the calendar event
        example: Discuss project updates
        type: string
      end_time:
        description: End time of the event in RFC3339 format
        example: "2023-01-01T11:00:00-07:00"
        type: string
      id:
        description: Unique identifier for the calendar event
        example: 123e4567-e89b-12d3-a456-426614174006
        type: string
      linked_meetings:
        description: IDs of all linked Contio meetings, sorted by creation date (oldest
          first)
        example:
        - '["123e4567-e89b-12d3-a456-426614174000"]'
        items:
          type: string
        type: array
      location:
        description: Location of the event (physical or virtual)
        example: Conference Room A
        type: string
      meeting_id:
        description: 'Deprecated: Use linked_meetings instead. ID of the first (oldest)
          linked Contio meeting.'
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
        x-deprecated: true
      organizer:
        allOf:
        - $ref: '#/definitions/calendar.PartnerCalendarEventAttendee'
        description: Organizer of the calendar event
      start_time:
        description: Start time of the event in RFC3339 format
        example: "2023-01-01T10:00:00-07:00"
        type: string
      title:
        description: Title of the calendar event
        example: Weekly Team Sync
        type: string
    type: object
  calendar.PartnerCreateMeetingFromCalendarEventResponse:
    properties:
      created:
        description: Whether a new meeting was created (false if existing meeting
          was returned)
        example: true
        type: boolean
      meeting:
        allOf:
        - $ref: '#/definitions/shared.PartnerMeetingResponse'
        description: The created or existing meeting
      message:
        description: Human-readable message describing the result
        example: Meeting created successfully from calendar event
        type: string
    type: object
  calendar.PartnerLinkCalendarEventRequest:
    properties:
      calendar_event_id:
        example: 123e4567-e89b-12d3-a456-426614174006
        maxLength: 255
        type: string
    required:
    - calendar_event_id
    type: object
  connection.UserConnectionResponse:
    properties:
      created_at:
        description: Timestamp when the connection was created
        example: "2023-01-01T00:00:00Z"
        type: string
      feature_activated_at:
        description: When the partner feature was activated for this user
        example: "2023-01-01T00:00:00Z"
        type: string
      id:
        description: Unique identifier for the user connection
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
      last_used_at:
        description: When the user last used the partner integration
        example: "2023-01-15T10:30:00Z"
        type: string
      oauth_expires_at:
        description: Expiration time of the OAuth token
        example: "2023-12-31T23:59:59Z"
        type: string
      oauth_scopes:
        description: OAuth scopes granted by the user
        example:
        - '[''openid'''
        - ' ''profile'''
        - ' ''meetings:read'']'
        items:
          type: string
        type: array
      status:
        description: Current status of the connection (active, inactive, revoked)
        example: active
        type: string
      updated_at:
        description: Timestamp when the connection was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
      user_email:
        description: Email address of the connected user
        example: john.doe@example.com
        type: string
      user_id:
        description: ID of the connected user
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
      user_name:
        description: Display name of the connected user
        example: John Doe
        type: string
    type: object
  context.MeetingContextListResponse:
    properties:
      items:
        items:
          $ref: '#/definitions/context.MeetingContextResponse'
        type: array
      limit:
        type: integer
      offset:
        type: integer
      total:
        type: integer
    type: object
  context.MeetingContextResponse:
    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
    type: object
  credential.CredentialRollbackRequest:
    properties:
      reason:
        example: Detected issues
        type: string
      rollback_token:
        example: rollback_token_xyz...
        type: string
    required:
    - rollback_token
    type: object
  credential.CredentialRotationRequest:
    properties:
      confirmation_token:
        example: confirm-rotation-12345
        type: string
      grace_period_hours:
        example: 48
        type: integer
      reason:
        example: Scheduled rotation
        type: string
    required:
    - confirmation_token
    type: object
  credential.CredentialRotationResponse:
    properties:
      credential_type:
        description: Type of credential that was rotated (api_key or client_secret)
        example: api_key
        type: string
      grace_period_ends_at:
        description: When the grace period ends and old credential stops working
        example: "2024-01-15T10:30:00Z"
        type: string
      new_credential:
        description: The newly generated credential value (only shown once)
        example: pk_live_abc123...
        type: string
      rollback_expires_at:
        description: When the rollback token expires
        example: "2024-01-14T10:30:00Z"
        type: string
      rollback_token:
        description: Token to use if you need to rollback to the previous credential
        example: rollback_token_xyz...
        type: string
    type: object
  credential.CredentialStatusResponse:
    properties:
      age_days:
        description: Age of the credential in days
        example: 5
        type: integer
      created_at:
        description: When the credential was created
        example: "2024-01-01T00:00:00Z"
        type: string
      credential_type:
        description: Type of credential (api_key or client_secret)
        example: api_key
        type: string
      grace_period_ends_at:
        description: When the grace period ends (if in pending_rotation status)
        example: "2024-01-12T10:30:00Z"
        type: string
      last_rotated_at:
        description: When the credential was last rotated
        example: "2024-01-10T10:30:00Z"
        type: string
      last_used_at:
        description: When the credential was last used for authentication
        example: "2024-01-20T10:30:00Z"
        type: string
      recommended_action:
        description: Recommended action (ok, rotate_soon, rotate_now)
        example: ok
        type: string
      status:
        description: Current status (active, pending_rotation, expired)
        example: active
        type: string
    type: object
  credential.RotateAPIKeyError400:
    description: Bad request error for rotating API key
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - bad_request
        - rate_limit_exceeded
        example: bad_request
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  credential.RotateClientSecretError400:
    description: Bad request error for rotating client secret
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - bad_request
        - rate_limit_exceeded
        example: bad_request
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  credential.RotateWebhookSecretError400:
    description: Bad request error for rotating webhook secret
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - bad_request
        example: bad_request
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  errors.ErrorResponse:
    description: Standard error response format used across all API endpoints. All
      error responses follow this consistent structure for predictable error handling.
    properties:
      code:
        description: Unique identifier for the error type, useful for programmatic
          error handling
        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
        type: string
      message:
        description: User-friendly description of what went wrong
        example: The requested resource could not be found
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  errors.PartnerConflictErrorResponse:
    description: Error response for workspace conflict (409). Includes the user's
      current workspace_id.
    properties:
      code:
        description: Unique identifier for the error type, useful for programmatic
          error handling
        example: workspace_conflict
        type: string
      error:
        description: User-friendly description of what went wrong
        example: User already belongs to a different workspace
        type: string
      message:
        description: 'Deprecated: Use ''error'' field instead. Will be removed in
          v2.0'
        example: User already belongs to a different workspace
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
      workspace_id:
        description: The workspace ID the user currently belongs to
        example: 550e8400-e29b-41d4-a716-446655440000
        type: string
    type: object
  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.'
    properties:
      code:
        description: Unique identifier for the error type, useful for programmatic
          error handling
        example: invalid_request
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request
        type: string
      message:
        description: 'Deprecated: Use ''error'' field instead. Will be removed in
          v2.0'
        example: Invalid request
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  idp.CreateIdPConfigError400:
    description: Bad request error for creating IdP configuration
    properties:
      code:
        description: Unique identifier for the error type
        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
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request body
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  idp.CreateIdPConfigRequest:
    properties:
      allowed_email_domains:
        description: Email domains allowed for SSO (required for strict mode). Users
          with other domains will be rejected.
        example:
        - company.com
        - subsidiary.com
        items:
          type: string
        type: array
      claim_mappings:
        additionalProperties:
          type: string
        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
      discovery_url:
        description: OIDC discovery endpoint URL from your Identity Provider (must
          end with /.well-known/openid-configuration)
        example: https://company.okta.com/.well-known/openid-configuration
        type: string
      idp_client_id:
        description: OAuth Client ID from your Identity Provider's OIDC application.
          This is NOT your Contio Partner client_id.
        example: 0oa1234567890abcdef
        minLength: 1
        type: string
      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.
        example: IdP-secret-from-okta-or-azure
        minLength: 1
        type: string
      mode:
        description: 'Domain validation mode: "strict" requires allowed_email_domains,
          "partner_managed" trusts your IdP''s user base'
        enum:
        - strict
        - partner_managed
        example: strict
        type: string
      name:
        description: Display name for this IdP configuration
        example: Okta SSO
        maxLength: 255
        minLength: 1
        type: string
      scopes:
        description: OIDC scopes to request during authentication. Defaults to ["openid",
          "email", "profile"]
        example:
        - openid
        - email
        - profile
        items:
          type: string
        type: array
    required:
    - discovery_url
    - idp_client_id
    - idp_client_secret
    - mode
    - name
    type: object
  idp.IdPConfigResponse:
    properties:
      allowed_email_domains:
        description: Email domains allowed for SSO
        example:
        - company.com
        - subsidiary.com
        items:
          type: string
        type: array
      authorization_endpoint:
        description: Discovered OIDC authorization endpoint
        example: https://company.okta.com/authorize
        type: string
      claim_mappings:
        additionalProperties:
          type: string
        description: Maps Contio user fields to IdP claim names
        type: object
      created_at:
        example: "2024-01-01T00:00:00Z"
        type: string
      discovery_last_fetched_at:
        description: When the OIDC discovery document was last fetched
        example: "2024-01-01T00:00:00Z"
        type: string
      discovery_url:
        description: OIDC discovery endpoint URL
        example: https://company.okta.com/.well-known/openid-configuration
        type: string
      id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      idp_client_id:
        description: OAuth Client ID from your Identity Provider (secret is never
          returned)
        example: 0oa1234567890abcdef
        type: string
      is_active:
        description: Whether this IdP configuration is active
        example: true
        type: boolean
      issuer:
        description: Discovered OIDC issuer
        example: https://company.okta.com
        type: string
      jwks_uri:
        description: Discovered OIDC JWKS URI
        example: https://company.okta.com/jwks
        type: string
      mode:
        description: Domain validation mode
        example: strict
        type: string
      name:
        description: Display name for this IdP configuration
        example: Okta SSO
        type: string
      partner_app_id:
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      scopes:
        description: OIDC scopes requested during authentication
        example:
        - openid
        - email
        - profile
        items:
          type: string
        type: array
      token_endpoint:
        description: Discovered OIDC token endpoint
        example: https://company.okta.com/token
        type: string
      type:
        description: IdP type (always "oidc")
        example: oidc
        type: string
      updated_at:
        example: "2024-01-01T00:00:00Z"
        type: string
      userinfo_endpoint:
        description: Discovered OIDC userinfo endpoint
        example: https://company.okta.com/userinfo
        type: string
    type: object
  idp.UpdateIdPConfigError400:
    description: Bad request error for updating IdP configuration
    properties:
      code:
        description: Unique identifier for the error type
        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
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid request body
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  idp.UpdateIdPConfigRequest:
    properties:
      allowed_email_domains:
        description: Email domains allowed for SSO (required for strict mode)
        items:
          type: string
        type: array
      claim_mappings:
        additionalProperties:
          type: string
        description: Maps Contio user fields to IdP claim names
        type: object
      discovery_url:
        description: OIDC discovery endpoint URL from your Identity Provider
        example: https://company.okta.com/.well-known/openid-configuration
        type: string
      idp_client_id:
        description: OAuth Client ID from your Identity Provider's OIDC application.
          This is NOT your Contio Partner client_id.
        example: 0oa1234567890abcdef
        minLength: 1
        type: string
      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.
        example: new-IdP-secret
        minLength: 1
        type: string
      is_active:
        description: Enable or disable this IdP configuration
        example: true
        type: boolean
      mode:
        description: 'Domain validation mode: "strict" or "partner_managed"'
        enum:
        - strict
        - partner_managed
        example: partner_managed
        type: string
      name:
        description: Display name for this IdP configuration
        example: Updated Okta SSO
        maxLength: 255
        minLength: 1
        type: string
      scopes:
        description: OIDC scopes to request during authentication
        items:
          type: string
        type: array
    type: object
  meeting.AddParticipantRequest:
    properties:
      email:
        example: john.doe@example.com
        type: string
      name:
        example: John Doe
        maxLength: 255
        minLength: 1
        type: string
      role:
        enum:
        - EDITOR
        - VIEWER
        example: EDITOR
        type: string
    required:
    - email
    - name
    - role
    type: object
  meeting.CreateAgendaItemRequest:
    properties:
      description:
        example: Review and discuss Q1 objectives
        maxLength: 5000
        type: string
      item_type:
        enum:
        - DISCUSSION
        - DECISION
        - ACTION_ITEM
        - INFORMATION
        example: DISCUSSION
        type: string
      presenters:
        example:
        - 123e4567-e89b-12d3-a456-426614174003
        items:
          type: string
        type: array
      restricted_to_leads:
        example: false
        type: boolean
      talking_points:
        example: My private notes for this item
        maxLength: 10000
        type: string
      time_allocation_minutes:
        example: 15
        maximum: 1440
        minimum: 0
        type: number
      title:
        example: Q1 Planning Discussion
        maxLength: 255
        minLength: 1
        type: string
    required:
    - item_type
    - title
    type: object
  meeting.CreateMeetingError400:
    description: Bad request error for creating a meeting
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_request
        - invalid_start_time
        - invalid_end_time
        - invalid_time_range
        - invalid_start_date
        example: invalid_start_time
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid start time format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  meeting.GetMeetingsError400:
    description: Bad request error for listing meetings
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_start_date
        - invalid_end_date
        example: invalid_start_date
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid start_date format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  meeting.PartnerAgendaItemResponse:
    properties:
      created_at:
        description: Timestamp when the agenda item was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Detailed description of the agenda item
        example: Review and discuss Q1 objectives
        type: string
      id:
        description: Unique identifier for the agenda item
        example: 123e4567-e89b-12d3-a456-426614174005
        type: string
      item_type:
        description: Type of agenda item (DISCUSSION, DECISION, ACTION_ITEM, INFORMATION)
        example: DISCUSSION
        type: string
      meeting_id:
        description: ID of the meeting this agenda item belongs to
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      presenters:
        description: User IDs of the presenters for this agenda item
        example:
        - 123e4567-e89b-12d3-a456-426614174003
        items:
          type: string
        type: array
      restricted_to_leads:
        description: Whether this item is restricted to meeting leads only
        example: false
        type: boolean
      sequence:
        description: Order sequence of the agenda item
        example: "1"
        type: string
      status:
        description: Current status (pending, in_progress, completed)
        example: pending
        type: string
      talking_points:
        description: Private talking points for the authenticated user on this agenda
          item. Only returned if the user has talking points.
        example: 'Key points to discuss: budget allocation, timeline'
        type: string
      time_allocation_minutes:
        description: Allocated time for this agenda item in minutes
        example: 15
        type: number
      title:
        description: Title of the agenda item
        example: Q1 Planning Discussion
        type: string
      updated_at:
        description: Timestamp when the agenda item was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
    type: object
  meeting.PartnerCreateMeetingRequest:
    properties:
      detail_level:
        enum:
        - BULLET_POINTS
        - STANDARD
        - VERBATIM
        example: STANDARD
        type: string
      end_time:
        example: "2023-01-01T11:00:00Z"
        type: string
      is_instant:
        example: false
        type: boolean
      start_time:
        example: "2023-01-01T10:00:00Z"
        type: string
      template_id:
        example: 123e4567-e89b-12d3-a456-426614174004
        type: string
      title:
        example: Weekly Team Sync
        maxLength: 255
        minLength: 1
        type: string
    required:
    - title
    type: object
  meeting.PartnerMeetingParticipantResponse:
    properties:
      created_at:
        description: Timestamp when the participant was added
        example: "2023-01-01T00:00:00Z"
        type: string
      email:
        description: Participant's email address
        example: john.doe@example.com
        type: string
      id:
        description: Unique identifier for the participant record
        example: 123e4567-e89b-12d3-a456-426614174004
        type: string
      is_attended:
        description: Whether the participant attended the meeting
        example: true
        type: boolean
      meeting_id:
        description: ID of the meeting this participant belongs to
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Participant's display name
        example: John Doe
        type: string
      role:
        description: Participant's role in the meeting (EDITOR or VIEWER)
        example: EDITOR
        type: string
      updated_at:
        description: Timestamp when the participant record was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
      user_id:
        description: ID of the user if they have a Contio account
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
    type: object
  meeting.PartnerUpdateMeetingRequest:
    properties:
      detail_level:
        enum:
        - BULLET_POINTS
        - STANDARD
        - VERBATIM
        example: STANDARD
        type: string
      end_time:
        example: "2023-01-01T11:00:00Z"
        type: string
      start_time:
        example: "2023-01-01T10:00:00Z"
        type: string
      template_id:
        example: 123e4567-e89b-12d3-a456-426614174004
        type: string
      title:
        example: Updated Team Sync
        maxLength: 255
        minLength: 1
        type: string
    type: object
  meeting.UpdateAgendaItemRequest:
    properties:
      description:
        example: Updated description
        maxLength: 5000
        type: string
      item_type:
        enum:
        - DISCUSSION
        - DECISION
        - ACTION_ITEM
        - INFORMATION
        example: DISCUSSION
        type: string
      presenters:
        example:
        - 123e4567-e89b-12d3-a456-426614174003
        items:
          type: string
        type: array
      restricted_to_leads:
        example: true
        type: boolean
      status:
        enum:
        - pending
        - in_progress
        - completed
        example: in_progress
        type: string
      talking_points:
        example: Updated private notes
        maxLength: 10000
        type: string
      time_allocation_minutes:
        example: 20
        maximum: 1440
        minimum: 0
        type: number
      title:
        example: Updated Discussion
        maxLength: 255
        minLength: 1
        type: string
    type: object
  meeting.UpdateMeetingError400:
    description: Bad request error for updating a meeting
    properties:
      code:
        description: Unique identifier for the error type
        enum:
        - invalid_meeting_id
        - invalid_request
        - invalid_start_time
        - invalid_end_time
        - invalid_time_range
        example: invalid_meeting_id
        type: string
      error:
        description: User-friendly description of what went wrong
        example: Invalid meeting ID format
        type: string
      request_id:
        description: Request identifier to correlate errors with logs
        example: abc123xyz
        type: string
    type: object
  meeting_template.AppliedItemsCountsResponse:
    properties:
      agenda_items:
        description: Number of agenda items applied
        example: 5
        type: integer
      documents:
        description: Number of documents applied
        example: 2
        type: integer
      participants:
        description: Number of participants applied
        example: 3
        type: integer
    type: object
  meeting_template.ApplyTemplateRequest:
    properties:
      meeting_id:
        description: ID of the meeting to apply the template to
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    required:
    - meeting_id
    type: object
  meeting_template.ApplyTemplateResponse:
    properties:
      application_id:
        description: Unique identifier for the application record
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      applied_items:
        allOf:
        - $ref: '#/definitions/meeting_template.AppliedItemsCountsResponse'
        description: Counts of items applied from the template
      success:
        description: Whether the operation was successful
        example: true
        type: boolean
    type: object
  meeting_template.PartnerMeetingTemplateDetailResponse:
    properties:
      agenda_item_count:
        description: Number of agenda items in the template
        example: 5
        type: integer
      can_edit:
        description: Whether the current user can edit this template
        example: true
        type: boolean
      created_at:
        description: Timestamp when the template was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Description of the template
        example: Standard agenda for weekly team meetings
        type: string
      document_count:
        description: Number of documents in the template
        example: 2
        type: integer
      id:
        description: Unique identifier for the meeting template
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        description: Whether the template is active
        example: true
        type: boolean
      name:
        description: Name of the template
        example: Weekly Team Sync Template
        type: string
      ownership_type:
        description: Ownership level of the template (SYSTEM, VERTICAL, WORKSPACE,
          USER)
        enum:
        - SYSTEM
        - VERTICAL
        - WORKSPACE
        - USER
        example: WORKSPACE
        type: string
      participant_count:
        description: Number of participants in the template
        example: 3
        type: integer
      updated_at:
        description: Timestamp when the template was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
    type: object
  meeting_template.PartnerMeetingTemplateResponse:
    properties:
      created_at:
        description: Timestamp when the template was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Description of the template
        example: Standard agenda for weekly team meetings
        type: string
      id:
        description: Unique identifier for the meeting template
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        description: Whether the template is active
        example: true
        type: boolean
      name:
        description: Name of the template
        example: Weekly Team Sync Template
        type: string
      ownership_type:
        description: Ownership level of the template (SYSTEM, VERTICAL, WORKSPACE,
          USER)
        enum:
        - SYSTEM
        - VERTICAL
        - WORKSPACE
        - USER
        example: WORKSPACE
        type: string
      updated_at:
        description: Timestamp when the template was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
    type: object
  meeting_template.TemplateNextStepResponse:
    properties:
      autopilot:
        description: Whether autopilot is enabled for this next step on the template
        example: true
        type: boolean
      color:
        description: Color of the next step
        example: '#4F46E5'
        type: string
      description:
        description: Description of the next step
        example: AI-powered summary generation
        type: string
      icon_name:
        description: Icon name for the next step
        example: document-text
        type: string
      id:
        description: Unique identifier for the next step
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Name of the next step
        example: Generate Meeting Summary
        type: string
      sort_order:
        description: Sort order of the next step
        example: 1
        type: integer
    type: object
  next_step_result.NextStepResultResponse:
    properties:
      content_format:
        description: The format of the generated content
        example: markdown
        type: string
      created_at:
        description: When the result was created
        example: "2026-03-25T10:00:00Z"
        type: string
      execution_log_id:
        description: The execution log ID that produced this result
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      expires_at:
        description: When the result expires
        example: "2026-04-01T10:00:00Z"
        type: string
      generated_text:
        description: The AI-generated text content
        example: |-
          # Meeting Summary

          Key discussion points...
        type: string
      id:
        description: Unique identifier for the result
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  oauth.HealthResponse:
    properties:
      checks:
        additionalProperties: true
        type: object
      service:
        example: partner-oauth
        type: string
      status:
        example: healthy
        type: string
      timestamp:
        example: "2024-01-14T10:00:00Z"
        type: string
    type: object
  oauth.OAuthConsentCheckRequest:
    properties:
      client_id:
        example: partner_abc123
        type: string
      code_challenge:
        example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
        type: string
      code_challenge_method:
        example: S256
        type: string
      email:
        example: user@example.com
        type: string
      redirect_uri:
        example: https://partner.example.com/callback
        type: string
      response_type:
        example: code
        type: string
      scopes:
        example:
        - openid
        - profile
        - email
        items:
          type: string
        type: array
      state:
        example: abc123state
        type: string
    required:
    - client_id
    - email
    type: object
  oauth.OAuthConsentCheckResponse:
    properties:
      has_consent:
        example: true
        type: boolean
      redirect_url:
        example: https://partner.example.com/callback?code=abc123
        type: string
      requires_consent:
        example: false
        type: boolean
      session_valid:
        example: true
        type: boolean
    type: object
  oauth.OAuthConsentRequest:
    properties:
      client_id:
        example: partner_abc123
        type: string
      code_challenge:
        example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
        type: string
      code_challenge_method:
        example: S256
        type: string
      consent:
        example: true
        type: boolean
      email:
        example: user@example.com
        type: string
      redirect_uri:
        example: https://partner.example.com/callback
        type: string
      response_type:
        example: code
        type: string
      scope:
        example: openid profile email
        type: string
      state:
        example: abc123state
        type: string
    required:
    - client_id
    - consent
    - email
    - redirect_uri
    - response_type
    type: object
  oauth.OAuthConsentResponse:
    properties:
      code:
        example: auth_code_abc123
        type: string
      redirect_url:
        example: https://partner.example.com/callback?code=auth_code_abc123&state=abc123state
        type: string
      state:
        example: abc123state
        type: string
    type: object
  oauth.PartnerAuthInitiateRequest:
    properties:
      client_id:
        example: partner_abc123
        type: string
      email:
        example: user@example.com
        type: string
      is_admin:
        example: false
        type: boolean
      name:
        example: John Doe
        type: string
      workspace_id:
        example: 550e8400-e29b-41d4-a716-446655440000
        type: string
    required:
    - client_id
    - email
    type: object
  oauth.PartnerAuthInitiateResponse:
    properties:
      challenge_name:
        example: CUSTOM_CHALLENGE
        type: string
      challenge_params:
        additionalProperties:
          type: string
        type: object
      session:
        example: AYABeExample...
        type: string
      user_provisioned:
        description: Indicates if user was newly created
        example: false
        type: boolean
    type: object
  oauth.PartnerAuthResponse:
    properties:
      access_token:
        example: eyJraWQiOiJrZXkxIiwiYWxnIjoiUlMyNTYifQ...
        type: string
      expires_in:
        example: 3600
        type: integer
      id_token:
        example: eyJraWQiOiJrZXkxIiwiYWxnIjoiUlMyNTYifQ...
        type: string
      message:
        example: Authentication successful
        type: string
      redirect:
        example: https://app.example.com/dashboard
        type: string
      refresh_token:
        example: eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIn0...
        type: string
      success:
        example: true
        type: boolean
    type: object
  oauth.PartnerAuthVerifyRequest:
    properties:
      client_id:
        example: partner_abc123
        type: string
      code:
        example: "123456"
        type: string
      email:
        example: user@example.com
        type: string
      session:
        example: AYABeExample...
        type: string
    required:
    - client_id
    - code
    - email
    - session
    type: object
  oauth.PartnerInfoResponse:
    properties:
      client_id:
        example: partner_abc123
        type: string
      co_brand_name:
        example: Powered by Contio
        type: string
      company_name:
        example: Acme Corporation
        type: string
      name:
        example: Acme CRM
        type: string
    type: object
  oauth.ScopesResponse:
    properties:
      scopes:
        items:
          type: string
        type: array
    type: object
  partner.AutomationAction:
    properties:
      config:
        additionalProperties:
          type: string
        example:
          url: https://api.example.com/webhook
        type: object
      type:
        example: webhook
        type: string
    required:
    - type
    type: object
  profile.UserProfileResponse:
    properties:
      created_at:
        description: Timestamp when the user account was created
        example: "2023-01-01T00:00:00Z"
        type: string
      display_name:
        description: User's display name
        example: John Doe
        type: string
      email:
        description: User's email address
        example: john.doe@example.com
        type: string
      id:
        description: Unique identifier for the user
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
      workspace_id:
        description: ID of the workspace the user belongs to
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
      workspace_name:
        description: Name of the workspace the user belongs to
        example: Acme Corp
        type: string
      workspace_role:
        description: User's role in the workspace (e.g., WORKSPACE_OWNER, WORKSPACE_ADMIN,
          WORKSPACE_MEMBER)
        example: WORKSPACE_MEMBER
        type: string
    type: object
  rome_api_controllers_external_partner_admin_shared.ListResponse-automation_AutomationResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/automation.AutomationResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_admin_shared.ListResponse-connection_UserConnectionResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/connection.UserConnectionResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateNextStepResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/template.TemplateNextStepResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_admin_shared.ListResponse-template_TemplateResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/template.TemplateResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_admin_shared.ListResponse-workflow_PartnerWorkflowTemplateSummary:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/workflow.PartnerWorkflowTemplateSummary'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse:
    properties:
      auto_install_on_new_workspaces:
        example: true
        type: boolean
      auto_propagate:
        example: true
        type: boolean
      created_at:
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        example: Complete sales workflow toolkit
        type: string
      id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        example: true
        type: boolean
      manifest:
        $ref: '#/definitions/toolkit.ToolkitManifestRequest'
      name:
        example: Sales Pipeline Toolkit
        type: string
      ownership_type:
        example: PARTNER
        type: string
      partner_app_id:
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      slug:
        example: sales-pipeline
        type: string
      updated_at:
        example: "2023-01-01T00:00:00Z"
        type: string
      version:
        example: 1.0.0
        type: string
    type: object
  rome_api_controllers_external_partner_oauth.DiscoveryDocument:
    properties:
      authorization_endpoint:
        example: https://auth.contio.io/oauth2/authorize
        type: string
      claims_supported:
        items:
          type: string
        type: array
      id_token_signing_alg_values_supported:
        items:
          type: string
        type: array
      introspection_endpoint:
        example: https://auth.contio.io/oauth2/introspect
        type: string
      issuer:
        example: https://auth.contio.io
        type: string
      jwks_uri:
        example: https://auth.contio.io/.well-known/jwks.json
        type: string
      response_types_supported:
        items:
          type: string
        type: array
      revocation_endpoint:
        example: https://auth.contio.io/oauth2/revoke
        type: string
      scopes_supported:
        items:
          type: string
        type: array
      subject_types_supported:
        items:
          type: string
        type: array
      token_endpoint:
        example: https://auth.contio.io/oauth2/token
        type: string
      token_endpoint_auth_methods_supported:
        items:
          type: string
        type: array
      userinfo_endpoint:
        example: https://auth.contio.io/oauth2/userInfo
        type: string
    type: object
  rome_api_controllers_external_partner_oauth.JWK:
    properties:
      alg:
        example: RS256
        type: string
      crv:
        description: For ECDSA keys
        example: P-256
        type: string
      d:
        description: For RSA and ECDSA private keys (optional)
        type: string
      e:
        example: AQAB
        type: string
      kid:
        example: key-id-1
        type: string
      kty:
        example: RSA
        type: string
      "n":
        example: 0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw
        type: string
      use:
        example: sig
        type: string
      x:
        type: string
      "y":
        type: string
    type: object
  rome_api_controllers_external_partner_oauth.JWKSResponse:
    properties:
      keys:
        items:
          $ref: '#/definitions/rome_api_controllers_external_partner_oauth.JWK'
        type: array
    type: object
  rome_api_controllers_external_partner_oauth.TokenIntrospection:
    properties:
      active:
        example: true
        type: boolean
      aud:
        items:
          type: string
        type: array
      client_id:
        example: partner_abc123
        type: string
      exp:
        example: 1704110400
        type: integer
      ext:
        additionalProperties: {}
        type: object
      iat:
        example: 1704106800
        type: integer
      iss:
        example: https://auth.contio.io
        type: string
      nbf:
        example: 1704106800
        type: integer
      scope:
        example: openid profile email
        type: string
      sub:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      token_type:
        example: Bearer
        type: string
      username:
        example: user@example.com
        type: string
    type: object
  rome_api_controllers_external_partner_oauth.TokenResponse:
    properties:
      access_token:
        example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
        type: string
      expires_in:
        example: 3600
        type: integer
      id_token:
        example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
        type: string
      refresh_token:
        example: eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIn0...
        type: string
      scope:
        example: openid profile email
        type: string
      token_type:
        example: Bearer
        type: string
    type: object
  rome_api_controllers_external_partner_oauth.UserInfo:
    properties:
      email:
        example: user@example.com
        type: string
      email_verified:
        example: true
        type: boolean
      family_name:
        example: Doe
        type: string
      given_name:
        example: John
        type: string
      locale:
        example: en-US
        type: string
      name:
        example: John Doe
        type: string
      phone_number:
        example: "+1234567890"
        type: string
      phone_number_verified:
        example: false
        type: boolean
      picture:
        example: https://example.com/avatar.jpg
        type: string
      sub:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-action_item_PartnerActionItemResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/action_item.PartnerActionItemResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-calendar_PartnerCalendarEventResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/calendar.PartnerCalendarEventResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerAgendaItemResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/meeting.PartnerAgendaItemResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-meeting_PartnerMeetingParticipantResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/meeting.PartnerMeetingParticipantResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_PartnerMeetingTemplateResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/meeting_template.PartnerMeetingTemplateResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-meeting_template_TemplateNextStepResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/meeting_template.TemplateNextStepResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  ? rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_admin_toolkit_ToolkitResponse
  : properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  ? rome_api_controllers_external_partner_user_shared.ListResponse-rome_api_controllers_external_partner_user_toolkit_ToolkitResponse
  : properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/rome_api_controllers_external_partner_user_toolkit.ToolkitResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-session_PartnerChatSessionResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/session.PartnerChatSessionResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-shared_ActionButtonResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/shared.ActionButtonResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-shared_NextStepResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/shared.NextStepResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-shared_PartnerMeetingResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/shared.PartnerMeetingResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-toolkit_ToolkitWithInstallationResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/toolkit.ToolkitWithInstallationResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_shared.ListResponse-workflow_run_PartnerWorkflowRunResponse:
    properties:
      items:
        description: Array of items for the current page
        items:
          $ref: '#/definitions/workflow_run.PartnerWorkflowRunResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of items across all pages
        example: 100
        type: integer
    type: object
  rome_api_controllers_external_partner_user_toolkit.ToolkitResponse:
    properties:
      action_buttons_count:
        description: Number of action buttons in the toolkit
        example: 2
        type: integer
      created_at:
        description: Timestamp when the toolkit was created
        example: "2023-01-01T00:00:00Z"
        type: string
      description:
        description: Description of the toolkit
        example: A comprehensive toolkit for sales meetings
        type: string
      id:
        description: Unique identifier for the toolkit
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        description: Whether the toolkit is active
        example: true
        type: boolean
      name:
        description: Name of the toolkit
        example: Sales Meeting Toolkit
        type: string
      next_steps_count:
        description: Number of next steps in the toolkit
        example: 5
        type: integer
      ownership_type:
        description: Ownership type of the toolkit
        enum:
        - SYSTEM
        - PARTNER
        example: PARTNER
        type: string
      slug:
        description: URL-friendly slug for the toolkit
        example: sales-meeting-toolkit
        type: string
      templates_count:
        description: Number of templates in the toolkit
        example: 3
        type: integer
      updated_at:
        description: Timestamp when the toolkit was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
      version:
        description: Version of the toolkit
        example: 1.0.0
        type: string
    type: object
  session.CreateSessionRequest:
    properties:
      context_document_ids:
        description: Optional context document IDs to prime the agent with specific
          documents
        example:
        - d4e5f6a7-b8c9-0123-4567-890abcdef012
        items:
          type: string
        type: array
      meeting_id:
        description: Optional ID of the meeting to associate this session with (user
          must be a participant)
        example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type: string
      message:
        description: First user message to start the conversation (1-10,000 characters)
        example: Summarize the key decisions from this meeting
        maxLength: 10000
        minLength: 1
        type: string
      metadata:
        additionalProperties:
          type: string
        description: Partner-supplied metadata for tracking (max 10 keys, 256 char
          keys, 1024 char values)
        type: object
    required:
    - message
    type: object
  session.CreateSessionResponse:
    properties:
      created_at:
        description: Timestamp when the session was created
        example: "2026-03-16T14:30:00Z"
        type: string
      id:
        description: Unique identifier for the session
        example: f7e6d5c4-b3a2-1098-7654-321fedcba098
        type: string
      initial_turn:
        allOf:
        - $ref: '#/definitions/session.PartnerTurnResponse'
        description: Initial turn if message was provided
      meeting_id:
        description: ID of the associated meeting
        example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type: string
      metadata:
        additionalProperties:
          type: string
        description: Partner-supplied metadata
        type: object
      status:
        description: 'Current session status: active, closed, or expired'
        enum:
        - active
        - closed
        - expired
        example: active
        type: string
    type: object
  session.GetSessionResponse:
    properties:
      session:
        allOf:
        - $ref: '#/definitions/session.PartnerChatSessionResponse'
        description: Session details
      turn_pagination:
        allOf:
        - $ref: '#/definitions/session.TurnPaginationResponse'
        description: Pagination info for turns
      turns:
        description: Turns in this session (based on turn_limit parameter)
        items:
          $ref: '#/definitions/session.PartnerTurnResponse'
        type: array
    type: object
  session.GetTurnResponse:
    properties:
      turn:
        allOf:
        - $ref: '#/definitions/session.PartnerTurnResponse'
        description: The requested turn details
    type: object
  session.PartnerAgentMetadataResponse:
    properties:
      referenced_documents:
        description: Context document IDs the agent referenced
        items:
          type: string
        type: array
      token_usage:
        allOf:
        - $ref: '#/definitions/session.PartnerTokenUsageResponse'
        description: Token usage statistics
      tool_calls:
        description: Tools the agent invoked during this turn
        items:
          $ref: '#/definitions/session.PartnerToolCallResponse'
        type: array
    type: object
  session.PartnerChatSessionResponse:
    properties:
      created_at:
        description: Timestamp when the session was created
        example: "2026-03-16T14:30:00Z"
        type: string
      id:
        description: Unique identifier for the session
        example: f7e6d5c4-b3a2-1098-7654-321fedcba098
        type: string
      meeting_id:
        description: ID of the associated meeting (if any)
        example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type: string
      metadata:
        additionalProperties:
          type: string
        description: Partner-supplied metadata
        type: object
      status:
        description: 'Current session status: active, closed, or expired'
        enum:
        - active
        - closed
        - expired
        example: active
        type: string
      title:
        description: Session title (if any)
        example: Quarterly Product Review Planning
        type: string
      turn_count:
        description: Total number of turns in this session (user + agent messages)
        example: 4
        type: integer
      updated_at:
        description: Timestamp when the session was last updated
        example: "2026-03-16T14:35:12Z"
        type: string
    type: object
  session.PartnerTokenUsageResponse:
    properties:
      completion_tokens:
        description: Number of output tokens
        example: 200
        type: integer
      prompt_tokens:
        description: Number of input tokens
        example: 150
        type: integer
      total_tokens:
        description: Total tokens used
        example: 350
        type: integer
    type: object
  session.PartnerToolCallResponse:
    properties:
      name:
        description: Name of the tool
        example: search_meeting_notes
        type: string
      status:
        description: Execution status
        enum:
        - success
        - failure
        example: success
        type: string
    type: object
  session.PartnerTurnErrorResponse:
    properties:
      code:
        description: Error code
        example: agent_error
        type: string
      message:
        description: Human-readable error message
        example: Agent processing failed
        type: string
    type: object
  session.PartnerTurnResponse:
    properties:
      agent_metadata:
        allOf:
        - $ref: '#/definitions/session.PartnerAgentMetadataResponse'
        description: Agent execution metadata (present only for role=agent turns)
      completed_at:
        description: Timestamp when the turn finished processing (null if not completed)
        example: "2026-03-16T14:30:15Z"
        type: string
      content:
        description: Message text content
        example: Summarize the key decisions from this meeting
        type: string
      created_at:
        description: Timestamp when the turn was created/enqueued
        example: "2026-03-16T14:30:00Z"
        type: string
      error:
        allOf:
        - $ref: '#/definitions/session.PartnerTurnErrorResponse'
        description: Error details when status=failed
      id:
        description: Unique identifier for the turn (message ID)
        example: turn-uuid-1234
        type: string
      role:
        description: 'Role of the message author: user or agent'
        enum:
        - user
        - agent
        example: user
        type: string
      sequence_number:
        description: Sequence number in the conversation
        example: 1
        type: integer
      session_id:
        description: ID of the session this turn belongs to
        example: f7e6d5c4-b3a2-1098-7654-321fedcba098
        type: string
      status:
        description: 'Turn processing status: queued, processing, completed, or failed'
        enum:
        - queued
        - processing
        - completed
        - failed
        example: completed
        type: string
    type: object
  session.SendMessageRequest:
    properties:
      meeting_id:
        description: Optional ID of the meeting to associate this session with (user
          must be a participant)
        example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type: string
      message:
        description: User message to add to the conversation (1-10,000 characters)
        example: Can you create action items from those decisions?
        maxLength: 10000
        minLength: 1
        type: string
    required:
    - message
    type: object
  session.SendMessageResponse:
    properties:
      turn:
        allOf:
        - $ref: '#/definitions/session.PartnerTurnResponse'
        description: The created user turn
    type: object
  session.TurnPaginationResponse:
    properties:
      has_more:
        description: Whether there are more turns
        example: false
        type: boolean
      limit:
        description: Limit used
        example: 50
        type: integer
      offset:
        description: Current offset
        example: 0
        type: integer
      total:
        description: Total turns in the session
        example: 12
        type: integer
    type: object
  shared.ActionButtonResponse:
    properties:
      icon_name:
        description: Icon name from the vocabulary
        example: share
        type: string
      id:
        description: Unique identifier for the action button
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_default:
        description: Whether this is the default action button
        example: false
        type: boolean
      name:
        description: Name of the action button
        example: Send Email
        type: string
    type: object
  shared.ExecuteNextStepRequest:
    properties:
      action_button_id:
        description: Action button ID if triggered via a specific action button
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  shared.ExecuteNextStepResponse:
    properties:
      content_format:
        description: Content format of the generated text
        example: markdown
        type: string
      execution_log_id:
        description: Unique identifier for the execution log entry
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      generated_text:
        description: Generated text content (only included for sync execution of AI-type)
        example: |-
          # Meeting Summary

          Key points discussed...
        type: string
      redirect_url:
        description: Redirect URL for redirect-type next steps
        example: https://partner.example.com/invoice?meeting_id=abc
        type: string
      result_id:
        description: Result ID for AI-type next steps (use to retrieve generated content)
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      status:
        description: Execution status
        example: completed
        type: string
    type: object
  shared.NextStepResponse:
    properties:
      action_buttons:
        description: Action buttons associated with this next step
        items:
          $ref: '#/definitions/shared.ActionButtonResponse'
        type: array
      color:
        description: Color for the next step
        example: '#FF5733'
        type: string
      description:
        description: Description of the next step
        example: Generates an invoice from meeting action items
        type: string
      icon_name:
        description: Icon name for the next step
        example: receipt
        type: string
      id:
        description: Unique identifier for the next step
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Name of the next step
        example: Generate Invoice
        type: string
      redirect_url:
        description: Redirect URL for redirect type next steps
        example: https://partner.example.com/invoice
        type: string
      sort_order:
        description: Display order for sorting
        example: 1
        type: integer
      type:
        description: 'Type of next step: "ai" or "redirect"'
        example: ai
        type: string
    type: object
  shared.PartnerAppResponse:
    properties:
      client_id:
        description: OAuth client ID for this partner app
        example: partner_1234567890_abcdef123456
        type: string
      company_name:
        description: Name of the company that owns this partner app
        example: Acme Corp
        type: string
      created_at:
        description: Timestamp when the partner app was created
        example: "2023-01-01T00:00:00Z"
        type: string
      default_toolkit_id:
        description: Default toolkit ID to auto-install when a workspace is provisioned
          via this partner app
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      description:
        description: Optional description of the partner app
        example: Integrates with our CRM system
        type: string
      id:
        description: Unique identifier for the partner app
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Display name of the partner app
        example: CRM Integration
        type: string
      primary_contact_email:
        description: Primary contact email for this partner app
        example: contact@example.com
        type: string
      slug:
        description: URL-friendly slug for the partner app
        example: acme-crm
        type: string
      status:
        description: Current status (active, inactive, suspended)
        example: active
        type: string
      updated_at:
        description: Timestamp when the partner app was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
      webhook_enabled:
        description: Whether webhook delivery is enabled for this partner app
        example: true
        type: boolean
      webhook_filter:
        allOf:
        - $ref: '#/definitions/shared.WebhookFilterResponse'
        description: Optional webhook event filter configuration for this partner
          app
      webhook_url:
        description: Webhook URL for receiving event notifications
        example: https://api.example.com/webhook
        type: string
    type: object
  shared.PartnerMeetingResponse:
    properties:
      calendar_event_id:
        description: ID of the linked calendar event, if any
        example: 123e4567-e89b-12d3-a456-426614174006
        type: string
      created_at:
        description: Timestamp when the meeting was created
        example: "2023-01-01T00:00:00Z"
        type: string
      created_by_user_id:
        description: ID of the user who created the meeting
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
      end_time:
        description: Scheduled end time in RFC3339 format
        example: "2023-01-01T11:00:00-07:00"
        type: string
      id:
        description: Unique identifier for the meeting
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      redirect_to_meeting_id:
        description: ID of the meeting to redirect to if this meeting was merged
        example: 123e4567-e89b-12d3-a456-426614174007
        type: string
      start_time:
        description: Scheduled start time in RFC3339 format
        example: "2023-01-01T10:00:00-07:00"
        type: string
      status:
        description: Current status of the meeting
        enum:
        - draft
        - scheduled
        - in_progress
        - ended
        - completed
        example: completed
        type: string
      summary_notes:
        description: AI-generated summary notes from the meeting
        example: Post-Meeting Summarization ...
        type: string
      title:
        description: Title of the meeting
        example: Weekly Team Sync
        type: string
      updated_at:
        description: Timestamp when the meeting was last updated
        example: "2023-01-01T00:00:00Z"
        type: string
      workspace_id:
        description: ID of the workspace this meeting belongs to
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
    type: object
  shared.TriggerActionButtonRequest:
    properties:
      addressing_values:
        additionalProperties:
          type: string
        description: |-
          AddressingValues are submitted form values for integration-mechanism action buttons
          (e.g. {"object_type":"Account","record_id":"0014X..."} for Salesforce). Persisted
          verbatim on the action_button_invocation row.
        type: object
      next_step_id:
        description: Next step ID if triggered in the context of a next step
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      result_id:
        description: Result ID if triggered in the context of a next step result
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  shared.TriggerActionButtonResponse:
    properties:
      invocation_id:
        description: InvocationID is the persisted action_button_invocation row ID
          created at trigger time.
        example: 019ddf5f-2e7c-7e0e-8f9e-12d3a4567ab0
        type: string
      message:
        description: Success message
        example: Action button triggered successfully
        type: string
    type: object
  shared.WebhookFilterResponse:
    properties:
      events:
        description: Event types included in the filter configuration
        example:
        - meeting.created
        - action_item.updated
        items:
          type: string
        type: array
      type:
        description: Filter mode controlling how events are matched
        example: include
        type: string
    type: object
  sso.ErrorResponse:
    properties:
      code:
        example: sso_authentication_failed
        type: string
      message:
        example: Authentication failed
        type: string
    type: object
  sso.InitiateResponse:
    properties:
      authorization_url:
        example: https://idp.example.com/authorize?client_id=abc123&...
        type: string
      session_id:
        example: sess_abc123def456
        type: string
    type: object
  sso.PartnerSSOInfoResponse:
    properties:
      co_brand_logo_url:
        example: https://cdn.example.com/logos/acme.png
        type: string
      co_brand_name:
        example: Powered by Contio
        type: string
      has_idp_config:
        example: true
        type: boolean
      is_active:
        example: true
        type: boolean
      name:
        example: Acme CRM
        type: string
      slug:
        example: acme-crm
        type: string
    type: object
  sso.SessionStatusResponse:
    properties:
      error:
        example: Session expired
        type: string
      status:
        example: pending
        type: string
      target:
        example: web
        type: string
      user_id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  template.AddToTemplateRequest:
    properties:
      autopilot:
        example: false
        type: boolean
      next_step_id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      sort_order:
        example: 1
        type: integer
    required:
    - next_step_id
    type: object
  template.CreateTemplateRequest:
    properties:
      backing_meeting_id:
        description: |-
          Optional ID of an existing meeting to use as the source for the template's content.
          The meeting's agenda items, participants, and talking points will be copied to the new template.
          The partner must have access to the workspace containing the meeting.
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
      description:
        description: Optional description of the template
        example: Invoice template for new clients
        maxLength: 1000
        type: string
      name:
        description: Name of the template
        example: Invoice Template
        maxLength: 255
        minLength: 1
        type: string
    required:
    - name
    type: object
  template.TemplateNextStepResponse:
    properties:
      autopilot:
        description: Whether autopilot is enabled for this next step on the template
        example: true
        type: boolean
      id:
        description: Unique identifier for the next step
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Name of the next step
        example: Generate Invoice
        type: string
      sort_order:
        description: Sort order of the next step
        example: 1
        type: integer
    type: object
  template.TemplateResponse:
    properties:
      backing_meeting_id:
        description: BackingMeetingID is the ID of the meeting this template was created
          from, if any
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
      created_at:
        description: Timestamp when the template was created
        example: "2024-01-01T00:00:00Z"
        type: string
      description:
        example: Invoice template for new clients
        type: string
      id:
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      name:
        example: Invoice Template
        type: string
      updated_at:
        description: Timestamp when the template was last updated
        example: "2024-01-01T00:00:00Z"
        type: string
    type: object
  template.UpdateTemplateNextStepRequest:
    properties:
      autopilot:
        example: true
        type: boolean
    type: object
  template.UpdateTemplateRequest:
    properties:
      description:
        description: Optional description of the template
        example: Updated invoice template for new clients
        maxLength: 1000
        type: string
      name:
        description: Name of the template
        example: Updated Invoice Template
        maxLength: 255
        minLength: 1
        type: string
    type: object
  toolkit.ConflictInfoResponse:
    properties:
      conflict_type:
        example: name_collision
        type: string
      entity_name:
        example: Generate Invoice
        type: string
      entity_type:
        example: next_step
        type: string
      existing_entity_id:
        example: abc-123
        type: string
      message:
        description: separated due to formatting for long example
        example: A next step with this name already exists for this partner app
        type: string
      resolution:
        example: informational
        type: string
    type: object
  toolkit.CreateToolkitRequest:
    properties:
      description:
        example: Complete sales workflow toolkit
        maxLength: 1000
        type: string
      dry_run:
        description: DryRun validates the manifest without creating the toolkit
        type: boolean
      manifest:
        $ref: '#/definitions/toolkit.ToolkitManifestRequest'
      name:
        example: Sales Pipeline Toolkit
        maxLength: 255
        minLength: 1
        type: string
      slug:
        example: sales-pipeline
        maxLength: 100
        minLength: 1
        type: string
      version:
        example: 1.0.0
        type: string
    required:
    - manifest
    - name
    - slug
    - version
    type: object
  toolkit.CreateToolkitResponse:
    properties:
      conflicts:
        items:
          $ref: '#/definitions/toolkit.ConflictInfoResponse'
        type: array
      summary:
        $ref: '#/definitions/toolkit.ManifestSummaryResponse'
      toolkit:
        $ref: '#/definitions/rome_api_controllers_external_partner_admin_toolkit.ToolkitResponse'
      validation:
        $ref: '#/definitions/toolkit.ValidationResultResponse'
    type: object
  toolkit.CreateVersionRequest:
    properties:
      changelog:
        description: Changelog describes the changes in this version
        example: Added new action button for CRM sync
        maxLength: 5000
        type: string
      dry_run:
        description: DryRun validates the manifest without creating the version
        type: boolean
      manifest:
        allOf:
        - $ref: '#/definitions/toolkit.ToolkitManifestRequest'
        description: Manifest is the toolkit manifest for this version
      version_label:
        description: VersionLabel is a human-readable label for this version (e.g.,
          "2.0.0")
        example: 2.0.0
        maxLength: 50
        minLength: 1
        type: string
    required:
    - manifest
    - version_label
    type: object
  toolkit.CreateVersionResponse:
    properties:
      conflicts:
        items:
          $ref: '#/definitions/toolkit.ConflictInfoResponse'
        type: array
      summary:
        $ref: '#/definitions/toolkit.ManifestSummaryResponse'
      validation:
        $ref: '#/definitions/toolkit.ValidationResultResponse'
      version:
        $ref: '#/definitions/toolkit.VersionResponse'
    type: object
  toolkit.EntityMapResponse:
    properties:
      action_buttons:
        additionalProperties:
          type: string
        description: Action button RefID → database UUID mappings
        type: object
      next_steps:
        additionalProperties:
          type: string
        description: Next step RefID → database UUID mappings
        type: object
      shortcuts:
        additionalProperties:
          type: string
        description: Shortcut RefID → database UUID mappings
        type: object
      templates:
        additionalProperties:
          type: string
        description: Template RefID → database UUID mappings
        type: object
    type: object
  toolkit.ExportEntitiesRequest:
    properties:
      action_button_ids:
        description: ActionButtonIDs lists standalone action button IDs to include
        items:
          type: string
        type: array
      description:
        description: Description is an optional description for the exported manifest
          metadata
        maxLength: 1000
        type: string
      name:
        description: Name is an optional name for the exported manifest metadata
        maxLength: 255
        type: string
      next_step_ids:
        description: NextStepIDs lists next step IDs to include (auto-discovers action
          buttons)
        items:
          type: string
        type: array
      shortcut_ids:
        description: ShortcutIDs lists shortcut IDs to include
        items:
          type: string
        type: array
      template_ids:
        description: TemplateIDs lists meeting template IDs to include (auto-discovers
          next steps and action buttons)
        items:
          type: string
        type: array
    type: object
  toolkit.ExportMetadataResponse:
    properties:
      description:
        type: string
      name:
        type: string
      slug:
        type: string
      version:
        type: string
    type: object
  toolkit.ExportResponse:
    properties:
      manifest:
        $ref: '#/definitions/toolkit.ToolkitManifestRequest'
      metadata:
        $ref: '#/definitions/toolkit.ExportMetadataResponse'
      summary:
        $ref: '#/definitions/toolkit.ExportSummaryResponse'
      warnings:
        items:
          $ref: '#/definitions/toolkit.ExportWarningResponse'
        type: array
    type: object
  toolkit.ExportSummaryResponse:
    properties:
      action_buttons:
        type: integer
      next_steps:
        type: integer
      shortcuts:
        type: integer
      templates:
        type: integer
    type: object
  toolkit.ExportWarningResponse:
    properties:
      code:
        type: string
      entity_name:
        type: string
      entity_type:
        type: string
      message:
        type: string
    type: object
  toolkit.InstallationResponse:
    properties:
      entities:
        allOf:
        - $ref: '#/definitions/toolkit.EntityMapResponse'
        description: Mapping of manifest $id values to database UUIDs for entities
          created during installation
      id:
        description: Unique identifier for the installation
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      installed_at:
        description: Timestamp when the toolkit was installed
        example: "2023-01-01T00:00:00Z"
        type: string
      installed_by:
        description: ID of the user who installed the toolkit
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      toolkit_id:
        description: ID of the installed toolkit
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      workspace_id:
        description: ID of the workspace where the toolkit is installed
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
    type: object
  toolkit.ListInstallationsResponse:
    properties:
      items:
        description: Installations on the current page
        items:
          $ref: '#/definitions/toolkit.ToolkitInstallationItemResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      summary:
        allOf:
        - $ref: '#/definitions/toolkit.ToolkitInstallationSummaryResponse'
        description: Aggregate counts across all partner workspaces (active, opted_out,
          never_installed)
      total_connected_workspaces:
        description: Total number of workspaces connected to the partner app
        example: 162
        type: integer
    type: object
  toolkit.ManifestActionButton:
    properties:
      id:
        description: ID references an existing action button (mutually exclusive with
          Spec)
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      spec:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestActionButtonSpec'
        description: Spec defines a new action button to create on installation (mutually
          exclusive with ID)
    type: object
  toolkit.ManifestActionButtonSpec:
    properties:
      $id:
        description: RefID is the manifest-internal identifier for this entity (used
          by $ref in other entries)
        example: my-action-button
        maxLength: 100
        type: string
      content_format:
        description: 'Content format: rich_text, markdown, plain_text, html'
        enum:
        - rich_text
        - markdown
        - plain_text
        - html
        example: plain_text
        type: string
      delivery_mechanism:
        description: 'Delivery mechanism: clipboard, email, os_email_client, file_download,
          integration, webhook, redirect'
        enum:
        - clipboard
        - email
        - os_email_client
        - file_download
        - integration
        - webhook
        - redirect
        example: webhook
        type: string
      file_format:
        description: File format for file delivery
        example: pdf
        maxLength: 50
        type: string
      icon_name:
        description: Icon name from the vocabulary
        example: share
        maxLength: 100
        type: string
      integration_type:
        description: Integration type
        example: salesforce
        maxLength: 100
        type: string
      is_default_for_next_step:
        description: Whether this is the default action for a next step
        example: false
        type: boolean
      name:
        description: Name of the action button
        example: Send to CRM
        maxLength: 255
        minLength: 1
        type: string
      redirect_url:
        description: Redirect URL for redirect delivery
        example: https://app.example.com/action
        maxLength: 2000
        type: string
      requires_connected_integration:
        description: Whether this action requires a connected integration
        example: false
        type: boolean
      sort_order:
        description: Sort order for display
        example: 1
        type: integer
      webhook_url:
        description: Webhook URL for webhook delivery
        example: https://api.example.com/webhook
        maxLength: 2000
        type: string
    required:
    - content_format
    - delivery_mechanism
    - name
    type: object
  toolkit.ManifestAgendaItemSpec:
    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
        example: Review current quarter pipeline status
        maxLength: 1000
        type: string
      item_type:
        description: ItemType is the agenda item type (DISCUSSION, ACTION_ITEM_RECAP,
          BREAK, ADJOURN, etc.)
        example: DISCUSSION
        type: string
      restricted_to_leads:
        description: RestrictedToLeads indicates whether only meeting leads can see
          this item
        example: false
        type: boolean
      sequence:
        description: Sequence controls the display order
        example: "1"
        type: string
      time_allocation_minutes:
        description: TimeAllocationMinutes is the suggested time allocation in minutes
        example: 15
        type: number
      title:
        description: Title is the agenda item's title
        example: Pipeline Review
        maxLength: 255
        minLength: 1
        type: string
    required:
    - item_type
    - title
    type: object
  toolkit.ManifestNextStep:
    properties:
      action_buttons:
        description: ActionButtons defines the action buttons to attach to this next
          step with junction fields
        items:
          $ref: '#/definitions/toolkit.NextStepActionButtonRelation'
        type: array
      default_action_button:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestRef'
        description: DefaultActionButton specifies the default action button for this
          next step (by $ref or $id)
      id:
        description: ID references an existing next step (mutually exclusive with
          Spec)
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      spec:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestNextStepSpec'
        description: Spec defines a new next step to create on installation (mutually
          exclusive with ID)
    type: object
  toolkit.ManifestNextStepSpec:
    properties:
      $id:
        description: RefID is the manifest-internal identifier for this entity (used
          by $ref in other entries)
        example: my-next-step
        maxLength: 100
        type: string
      ai_prompt:
        description: AI prompt for AI-type next steps
        example: Generate an invoice...
        type: string
      color:
        description: Color for display
        example: '#FF5733'
        maxLength: 50
        type: string
      description:
        description: Description of the next step
        example: Generates an invoice from meeting notes
        maxLength: 1000
        type: string
      icon_name:
        description: Icon name for display
        example: receipt
        maxLength: 100
        type: string
      name:
        description: Name of the next step
        example: Generate Invoice
        maxLength: 255
        minLength: 1
        type: string
      redirect_url:
        description: Redirect URL for redirect-type next steps
        example: https://partner.example.com/invoice
        maxLength: 2000
        type: string
      sort_order:
        description: Sort order for display
        example: 1
        type: integer
      type:
        description: 'Type of next step: "ai" or "redirect"'
        enum:
        - ai
        - redirect
        example: ai
        type: string
    required:
    - name
    - type
    type: object
  toolkit.ManifestParticipantSpec:
    properties:
      email:
        description: Email is the participant's email address
        example: sarah@acme.com
        type: string
      name:
        description: Name is the participant's display name
        example: Sarah Chen
        maxLength: 255
        minLength: 1
        type: string
      role:
        description: Role is the participant's meeting role (EDITOR or VIEWER)
        enum:
        - EDITOR
        - VIEWER
        example: EDITOR
        type: string
    required:
    - email
    - name
    - role
    type: object
  toolkit.ManifestRef:
    properties:
      $id:
        description: ID references an existing entity by its database ID
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      $ref:
        description: Ref references an entity defined in the same manifest via its
          $id value
        example: my-next-step
        type: string
    type: object
  toolkit.ManifestShortcut:
    properties:
      id:
        description: ID references an existing shortcut (mutually exclusive with Spec)
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      spec:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestShortcutSpec'
        description: Spec defines a new shortcut to create on installation (mutually
          exclusive with ID)
    type: object
  toolkit.ManifestShortcutSpec:
    properties:
      $id:
        description: RefID is the manifest-internal identifier for this entity (used
          by $ref in other entries)
        example: my-shortcut
        maxLength: 100
        type: string
      color:
        description: Color for display
        example: '#4F46E5'
        maxLength: 50
        type: string
      description:
        description: Description of the shortcut
        example: Generates a concise meeting summary
        maxLength: 1000
        type: string
      icon_name:
        description: IconName specifies which FontAwesome icon to display (e.g., "faLightbulb",
          "faBolt")
        example: faLightbulb
        maxLength: 100
        type: string
      name:
        description: Name of the shortcut
        example: Summarize Meeting
        maxLength: 255
        minLength: 1
        type: string
      prompt:
        description: AI prompt template
        example: Summarize the key points discussed in this meeting.
        type: string
      surfaces:
        description: Surfaces defines which UI surfaces this shortcut should appear
          on
        items:
          $ref: '#/definitions/toolkit.ManifestShortcutSurfaceInput'
        maxItems: 5
        type: array
    required:
    - name
    - prompt
    type: object
  toolkit.ManifestShortcutSurfaceInput:
    properties:
      position:
        description: Position on the surface (1-10)
        example: 1
        maximum: 10
        minimum: 1
        type: integer
      surface:
        description: Surface name (HOME, MEETING_PREPARE, MEETING_RUN, MEETING_REVIEW,
          CANVAS)
        example: HOME
        type: string
    required:
    - position
    - surface
    type: object
  toolkit.ManifestSummaryResponse:
    properties:
      action_buttons:
        type: integer
      next_steps:
        type: integer
      shortcuts:
        type: integer
      templates:
        type: integer
    type: object
  toolkit.ManifestTemplate:
    properties:
      id:
        description: ID references an existing template (mutually exclusive with Spec)
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      next_steps:
        description: NextSteps defines the next steps to attach to this template with
          junction fields
        items:
          $ref: '#/definitions/toolkit.TemplateNextStepRelation'
        type: array
      spec:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestTemplateSpec'
        description: Spec defines a new template to create on installation (mutually
          exclusive with ID)
    type: object
  toolkit.ManifestTemplateSpec:
    properties:
      $id:
        description: RefID is the manifest-internal identifier for this entity (used
          by $ref in other entries)
        example: my-template
        maxLength: 100
        type: string
      agenda_items:
        description: AgendaItems defines the template's agenda items
        items:
          $ref: '#/definitions/toolkit.ManifestAgendaItemSpec'
        type: array
      backing_meeting_id:
        description: |-
          BackingMeetingID references an existing meeting to use as the content source for this template.
          Mutually exclusive with inline content fields.
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      description:
        description: Description of the template
        example: Template for sales meetings
        maxLength: 1000
        type: string
      detail_level:
        description: DetailLevel controls the granularity of meeting notes
        enum:
        - BULLET_POINTS
        - STANDARD
        - VERBATIM
        example: STANDARD
        type: string
      meeting_duration_seconds:
        description: MeetingDurationSeconds is the default meeting duration in seconds
        example: 3600
        type: integer
      name:
        description: Name of the template
        example: Sales Meeting Template
        maxLength: 255
        minLength: 1
        type: string
      participants:
        description: Participants defines the template's default participants
        items:
          $ref: '#/definitions/toolkit.ManifestParticipantSpec'
        type: array
      start_time_offset_seconds:
        description: StartTimeOffsetSeconds is the default start time as seconds from
          UTC midnight (-1 means untimed)
        example: 36000
        type: integer
      title:
        description: |-
          --- Inline meeting content (portable) ---
          Title is the meeting title for the template
        example: Weekly Sales Standup
        maxLength: 255
        type: string
    required:
    - name
    type: object
  toolkit.ManifestValidationErrorResponse:
    properties:
      code:
        example: MISSING_REQUIRED
        type: string
      message:
        example: name is required
        type: string
      path:
        example: next_steps[0]
        type: string
    type: object
  toolkit.NextStepActionButtonRelation:
    properties:
      action_button:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestRef'
        description: ActionButton is the reference to the action button entity ($ref
          or $id)
      sort_order:
        description: SortOrder is the display order of the action button within the
          next step
        example: 1
        type: integer
    required:
    - action_button
    type: object
  toolkit.TemplateNextStepRelation:
    properties:
      autopilot:
        description: Autopilot indicates if the next step should auto-execute when
          the meeting is finalized
        example: false
        type: boolean
      next_step:
        allOf:
        - $ref: '#/definitions/toolkit.ManifestRef'
        description: NextStep is the reference to the next step entity ($ref or $id)
      sort_order:
        description: SortOrder is the display order of the next step within the template
        example: 1
        type: integer
    required:
    - next_step
    type: object
  toolkit.ToolkitInstallationItemResponse:
    properties:
      installed_at:
        description: Timestamp when the installation was created (active installations
          only)
        example: "2026-04-15T10:30:00Z"
        type: string
      status:
        allOf:
        - $ref: '#/definitions/toolkit.ToolkitInstallationStatus'
        description: 'Installation status: "active" or "opted_out"'
        enum:
        - active
        - opted_out
        example: active
      uninstalled_at:
        description: Timestamp when the workspace opted out (opted_out installations
          only)
        example: "2026-05-01T14:00:00Z"
        type: string
      version_label:
        description: Human-readable version label of the installed toolkit version
          (active installations only)
        example: 1.2.0
        type: string
      workspace_id:
        description: ID of the workspace where the toolkit is (or was) installed
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      workspace_name:
        description: Display name of the workspace
        example: Acme Corp
        type: string
    type: object
  toolkit.ToolkitInstallationStatus:
    enum:
    - active
    - opted_out
    type: string
    x-enum-varnames:
    - ToolkitInstallationStatusActive
    - ToolkitInstallationStatusOptedOut
  toolkit.ToolkitInstallationSummaryResponse:
    properties:
      active:
        description: Number of workspaces with the toolkit currently installed
        example: 142
        type: integer
      never_installed:
        description: Number of partner workspaces that have never installed the toolkit
        example: 12
        type: integer
      opted_out:
        description: Number of workspaces that have opted out of the toolkit
        example: 8
        type: integer
    type: object
  toolkit.ToolkitManifestRequest:
    properties:
      action_buttons:
        description: |-
          Action buttons included in the toolkit
          Note: No omitempty - empty slices should serialize as [] for API consistency
        items:
          $ref: '#/definitions/toolkit.ManifestActionButton'
        type: array
      next_steps:
        description: |-
          Next steps included in the toolkit
          Note: No omitempty - empty slices should serialize as [] for API consistency
        items:
          $ref: '#/definitions/toolkit.ManifestNextStep'
        type: array
      shortcuts:
        description: |-
          Shortcuts included in the toolkit
          Note: No omitempty - empty slices should serialize as [] for API consistency
        items:
          $ref: '#/definitions/toolkit.ManifestShortcut'
        type: array
      templates:
        description: |-
          Templates included in the toolkit
          Note: No omitempty - empty slices should serialize as [] for API consistency
        items:
          $ref: '#/definitions/toolkit.ManifestTemplate'
        type: array
      toolkit_prompt:
        description: Default AI persona/behavioral instructions for the toolkit
        type: string
    type: object
  toolkit.ToolkitWithInstallationResponse:
    properties:
      installation:
        allOf:
        - $ref: '#/definitions/toolkit.InstallationResponse'
        description: Installation details (nil if not installed)
      toolkit:
        allOf:
        - $ref: '#/definitions/rome_api_controllers_external_partner_user_toolkit.ToolkitResponse'
        description: Toolkit details
    type: object
  toolkit.UpdateToolkitRequest:
    properties:
      auto_install_on_new_workspaces:
        description: |-
          AutoInstallOnNewWorkspaces, when set, controls whether the toolkit is automatically
          installed on newly provisioned partner workspaces. Pointer semantics preserve
          true PATCH behavior — only provided fields are updated.
        example: true
        type: boolean
      auto_propagate:
        description: |-
          AutoPropagate, when set, controls whether newly published toolkit versions are
          automatically propagated to existing installations. Pointer semantics preserve
          true PATCH behavior — only provided fields are updated.
        example: true
        type: boolean
      description:
        example: Updated description
        maxLength: 1000
        type: string
      is_active:
        type: boolean
      manifest:
        allOf:
        - $ref: '#/definitions/toolkit.ToolkitManifestRequest'
        description: |-
          Deprecated: Manifest is no longer accepted via this endpoint. Use the toolkit versioning
          API instead: POST /v1/partner/admin/toolkits/{toolkitId}/versions to create a draft,
          then POST /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish to publish it.
          Providing this field will return HTTP 409 Conflict.
      name:
        example: Updated Toolkit Name
        maxLength: 255
        minLength: 1
        type: string
      version:
        description: |-
          Deprecated: Version is no longer accepted via this endpoint. Use the toolkit versioning
          API instead: POST /v1/partner/admin/toolkits/{toolkitId}/versions to create a draft,
          then POST /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish to publish it.
          Providing this field will return HTTP 409 Conflict.
        example: 1.1.0
        type: string
    type: object
  toolkit.UpdateVersionRequest:
    properties:
      changelog:
        description: Changelog describes the changes in this version
        example: Bug fixes and improvements
        maxLength: 5000
        type: string
      manifest:
        allOf:
        - $ref: '#/definitions/toolkit.ToolkitManifestRequest'
        description: Manifest is the toolkit manifest for this version
      version_label:
        description: VersionLabel is a human-readable label for this version
        example: 2.0.1
        maxLength: 50
        minLength: 1
        type: string
    type: object
  toolkit.ValidationResultResponse:
    properties:
      errors:
        items:
          $ref: '#/definitions/toolkit.ManifestValidationErrorResponse'
        type: array
      valid:
        type: boolean
      warnings:
        items:
          $ref: '#/definitions/toolkit.ManifestValidationErrorResponse'
        type: array
    type: object
  toolkit.VersionResponse:
    properties:
      changelog:
        example: Added new features
        type: string
      created_at:
        example: "2023-01-01T00:00:00Z"
        type: string
      created_by:
        example: user-123
        type: string
      deprecated_at:
        example: "2023-06-01T00:00:00Z"
        type: string
      id:
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      manifest:
        $ref: '#/definitions/toolkit.ToolkitManifestRequest'
      published_at:
        example: "2023-01-01T00:00:00Z"
        type: string
      status:
        example: DRAFT
        type: string
      toolkit_id:
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      updated_at:
        example: "2023-01-01T00:00:00Z"
        type: string
      version_label:
        example: 2.0.0
        type: string
      version_number:
        example: 2
        type: integer
    type: object
  webhook.WebhookDeliveriesResponse:
    properties:
      deliveries:
        description: Array of webhook delivery records
        items:
          $ref: '#/definitions/webhook.WebhookDeliveryResponse'
        type: array
      limit:
        description: Maximum number of items per page
        example: 50
        type: integer
      offset:
        description: Number of items skipped from the beginning
        example: 0
        type: integer
      total:
        description: Total number of deliveries matching the filter
        example: 25
        type: integer
    type: object
  webhook.WebhookDeliveryResponse:
    properties:
      created_at:
        description: Timestamp when the delivery was created
        example: "2024-01-14T10:00:00Z"
        type: string
      delivered_at:
        description: When the webhook was successfully delivered
        example: "2024-01-14T10:30:00Z"
        type: string
      delivery_status:
        description: Current delivery status (pending, delivered, failed, abandoned)
        example: delivered
        type: string
      error_message:
        description: Error message if delivery failed
        example: ""
        type: string
      event_id:
        description: ID of the event that triggered this delivery
        example: 123e4567-e89b-12d3-a456-426614174006
        type: string
      event_type:
        description: Type of event that triggered this webhook
        example: action_item_created
        type: string
      http_status_code:
        description: HTTP status code returned by the webhook endpoint
        example: 200
        type: integer
      id:
        description: Unique identifier for the webhook delivery
        example: 123e4567-e89b-12d3-a456-426614174005
        type: string
      next_retry_at:
        description: When the next retry attempt will be made (if applicable)
        example: "2024-01-15T10:30:00Z"
        type: string
      partner_app_id:
        description: ID of the partner app this delivery belongs to
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      retry_count:
        description: Number of retry attempts made
        example: 0
        type: integer
    type: object
  workflow.PartnerWorkflowTemplateResponse:
    properties:
      created_at:
        description: CreatedAt is the timestamp at which the template was created.
        example: "2024-01-01T00:00:00Z"
        type: string
      description:
        description: Description is an optional human-readable description.
        example: Runs after the meeting ends
        type: string
      id:
        description: ID is the workflow template's unique identifier.
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        description: IsActive indicates whether the template is active and eligible
          to be run.
        example: true
        type: boolean
      name:
        description: Name is the human-readable template name.
        example: Post-meeting Follow-up
        type: string
      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.
        example: "2024-01-01T00:00:00Z"
        type: string
      workspace_id:
        description: WorkspaceID is the workspace that owns the template row.
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
    type: object
  workflow.PartnerWorkflowTemplateSummary:
    properties:
      created_at:
        description: CreatedAt is the timestamp at which the template was created.
        example: "2024-01-01T00:00:00Z"
        type: string
      description:
        description: Description is an optional human-readable description.
        example: Runs after the meeting ends
        type: string
      id:
        description: ID is the workflow template's unique identifier.
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      is_active:
        description: IsActive indicates whether the template is active and eligible
          to be run.
        example: true
        type: boolean
      name:
        description: Name is the human-readable template name.
        example: Post-meeting Follow-up
        type: string
      updated_at:
        description: UpdatedAt is the timestamp at which the template was last updated.
        example: "2024-01-01T00:00:00Z"
        type: string
      workspace_id:
        description: WorkspaceID is the workspace that owns the template row.
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
    type: object
  workflow_run.PartnerCreateWorkflowRunRequest:
    properties:
      originating_id:
        description: OriginatingID is the ID of the originating object (required).
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
      originating_type:
        description: 'OriginatingType is the kind of object that triggered the run.
          Accepted values: "meeting", "canvas".'
        enum:
        - meeting
        - canvas
        example: meeting
        type: string
      workflow_template_id:
        description: WorkflowTemplateID is the ID of the workflow template to run
          (required).
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
    required:
    - originating_id
    - originating_type
    - workflow_template_id
    type: object
  workflow_run.PartnerWorkflowRunResponse:
    properties:
      completed_at:
        description: CompletedAt is the timestamp at which the run finished.
        example: "2024-01-01T00:05:00Z"
        type: string
      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.
        example: "2024-01-01T00:00:00Z"
        type: string
      current_step_ids:
        description: CurrentStepIDs is the list of step IDs currently eligible to
          run.
        example:
        - step-1
        items:
          type: string
        type: array
      id:
        description: ID is the workflow run's unique identifier.
        example: 123e4567-e89b-12d3-a456-426614174000
        type: string
      name:
        description: Name is the optional display name of the run.
        example: Post-meeting follow-up
        type: string
      originating_id:
        description: OriginatingID is the ID of the originating object.
        example: 123e4567-e89b-12d3-a456-426614174003
        type: string
      originating_type:
        description: OriginatingType is the kind of object that triggered the run.
        enum:
        - meeting
        - canvas
        example: meeting
        type: string
      owner_user_id:
        description: OwnerUserID is the user whose context owns the run.
        example: 123e4567-e89b-12d3-a456-426614174005
        type: string
      started_at:
        description: StartedAt is the timestamp at which run execution began.
        example: "2024-01-01T00:00:00Z"
        type: string
      status:
        description: Status is the current run status.
        enum:
        - pending
        - active
        - completed
        - failed
        - cancelled
        - frozen
        example: pending
        type: string
      trigger_type:
        description: TriggerType indicates how the run was triggered.
        enum:
        - manual
        - autopilot
        example: manual
        type: string
      triggered_by:
        description: TriggeredBy is the ID of the user who triggered a manual run,
          if applicable.
        example: 123e4567-e89b-12d3-a456-426614174004
        type: string
      updated_at:
        description: UpdatedAt is the timestamp at which the run was last updated.
        example: "2024-01-01T00:00:00Z"
        type: string
      workflow_template_id:
        description: WorkflowTemplateID is the template that produced this run.
        example: 123e4567-e89b-12d3-a456-426614174001
        type: string
      workspace_id:
        description: WorkspaceID is the workspace that owns the run.
        example: 123e4567-e89b-12d3-a456-426614174002
        type: string
    type: object
externalDocs:
  description: Partner API Documentation
  url: https://docs.contio.ai/partner-api/
host: api.contio.ai
info:
  contact:
    email: partner-support@contio.ai
    name: Contio MeetingOS Partner Support
    url: https://contio.ai/contact
  description: Partner API for Contio MeetingOS - External partner integration endpoints
  license:
    name: MIT/Commercial
    url: https://docs.contio.ai/partner-api/license/
  termsOfService: https://contio.ai/tos
  title: Contio MeetingOS Partner API
  version: 1.7.1
paths:
  /.well-known/jwks.json:
    get:
      description: Returns the JSON Web Key Set for token verification
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/rome_api_controllers_external_partner_oauth.JWKSResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/errors.ErrorResponse'
      summary: JSON Web Key Set Endpoint
      tags:
      - OAuth 2.0
  /.well-known/openid_configuration:
    get:
      description: Returns the OpenID Connect discovery document
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/rome_api_controllers_external_partner_oauth.DiscoveryDocument'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/errors.ErrorResponse'
      summary: OpenID Connect Discovery Endpoint
      tags:
      - OAuth 2.0
  /auth/initiate:
    post:
      consumes:
      - application/json
      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.
      parameters:
      - description: Partner authentication initiation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/oauth.PartnerAuthInitiateRequest'
      produces:
      - application/json
      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'
      summary: Initiate Partner Passwordless Authentication
      tags:
      - OAuth 2.0
  /auth/verify:
    post:
      consumes:
      - application/json
      description: Verifies OTP code for partner OAuth flow with client-specific SECRET_HASH
      parameters:
      - description: Partner authentication verification request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/oauth.PartnerAuthVerifyRequest'
      produces:
      - application/json
      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'
      summary: Verify Partner Passwordless Authentication
      tags:
      - OAuth 2.0
  /oauth2/authorize:
    get:
      description: Handles OAuth 2.0 authorization requests for partner applications
      parameters:
      - description: OAuth response type (code)
        in: query
        name: response_type
        required: true
        type: string
      - description: OAuth client ID
        in: query
        name: client_id
        required: true
        type: string
      - description: OAuth redirect URI
        in: query
        name: redirect_uri
        required: true
        type: string
      - description: OAuth scopes
        in: query
        name: scope
        type: string
      - description: OAuth state parameter
        in: query
        name: state
        type: string
      - description: PKCE code challenge
        in: query
        name: code_challenge
        type: string
      - description: PKCE code challenge method
        in: query
        name: code_challenge_method
        type: string
      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'
      summary: OAuth 2.0 Authorization Endpoint
      tags:
      - OAuth 2.0
    post:
      consumes:
      - application/json
      description: Completes OAuth 2.0 authorization after user consent and returns
        Cognito authorization code
      parameters:
      - description: OAuth consent request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/oauth.OAuthConsentRequest'
      produces:
      - application/json
      responses:
        "200":
          description: Authorization completed successfully
          schema:
            $ref: '#/definitions/oauth.OAuthConsentResponse'
        "400":
          description: Bad request
          schema:
            additionalProperties: true
            type: object
        "500":
          description: Internal server error
          schema:
            additionalProperties: true
            type: object
      summary: Complete OAuth 2.0 Authorization
      tags:
      - OAuth 2.0
  /oauth2/check-consent:
    post:
      consumes:
      - application/json
      description: Checks if user has already consented to the requested scopes and
        can skip consent page
      parameters:
      - description: Consent check request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/oauth.OAuthConsentCheckRequest'
      produces:
      - application/json
      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'
      summary: Check Existing Consent
      tags:
      - OAuth 2.0
  /oauth2/health:
    get:
      description: Tests connectivity to Cognito and returns service status
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/oauth.HealthResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/errors.ErrorResponse'
      summary: Health Check for OAuth/Cognito Service
      tags:
      - OAuth 2.0
  /oauth2/introspect:
    post:
      consumes:
      - application/x-www-form-urlencoded
      description: Introspects access tokens to get token information
      parameters:
      - description: Access token to introspect
        in: formData
        name: token
        required: true
        type: string
      produces:
      - application/json
      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'
      summary: OAuth 2.0 Token Introspection Endpoint
      tags:
      - OAuth 2.0
  /oauth2/revoke:
    post:
      consumes:
      - application/x-www-form-urlencoded
      description: Revokes an access or refresh token. Per RFC 7009, returns success
        even for invalid tokens.
      parameters:
      - description: Token to revoke
        in: formData
        name: token
        required: true
        type: string
      - description: Hint about token type (access_token or refresh_token)
        in: formData
        name: token_type_hint
        type: string
      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'
      summary: OAuth 2.0 Token Revocation Endpoint
      tags:
      - OAuth 2.0
  /oauth2/scopes:
    get:
      description: Returns the list of all available OAuth scopes for partner applications
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/oauth.ScopesResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/errors.ErrorResponse'
      summary: Get Available OAuth Scopes
      tags:
      - OAuth 2.0
  /oauth2/token:
    post:
      consumes:
      - application/x-www-form-urlencoded
      description: Exchanges authorization code for access tokens
      parameters:
      - description: OAuth grant type (authorization_code)
        in: formData
        name: grant_type
        required: true
        type: string
      - description: Authorization code
        in: formData
        name: code
        required: true
        type: string
      - description: OAuth redirect URI
        in: formData
        name: redirect_uri
        required: true
        type: string
      - description: OAuth client ID
        in: formData
        name: client_id
        required: true
        type: string
      - description: OAuth client secret
        in: formData
        name: client_secret
        type: string
      - description: PKCE code verifier
        in: formData
        name: code_verifier
        type: string
      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'
      summary: OAuth 2.0 Token Endpoint
      tags:
      - OAuth 2.0
  /oauth2/userInfo:
    get:
      consumes:
      - application/json
      description: Returns user information for the provided access token
      parameters:
      - description: Bearer access token
        in: header
        name: Authorization
        required: true
        type: string
      produces:
      - application/json
      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'
      summary: Get user information
      tags:
      - OAuth 2.0
  /v1/partner/admin/app:
    get:
      description: Retrieves information about the authenticated partner app
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get partner app information
      tags:
      - App Management
    put:
      consumes:
      - application/json
      description: Updates partner app details like name, description, and webhook
        URL
      parameters:
      - description: Update app request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/app_management.UpdateAppRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update partner app
      tags:
      - App Management
  /v1/partner/admin/app/status:
    put:
      consumes:
      - application/json
      description: Updates the status of the authenticated partner app
      parameters:
      - description: Status update request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/app_management.UpdateAppStatusRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update partner app status
      tags:
      - App Management
  /v1/partner/admin/automation:
    get:
      description: Retrieves all automations for the authenticated partner app
      parameters:
      - default: 50
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get automations
      tags:
      - Automation Management
    post:
      consumes:
      - application/json
      description: Creates a new automation for action item matching
      parameters:
      - description: Automation data
        in: body
        name: automation
        required: true
        schema:
          $ref: '#/definitions/automation.CreateAutomationRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Create a new automation
      tags:
      - Automation Management
  /v1/partner/admin/automation/{automationId}:
    delete:
      description: Deletes an automation by ID
      parameters:
      - description: Automation ID
        in: path
        name: automationId
        required: true
        type: string
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Delete automation
      tags:
      - Automation Management
    get:
      description: Retrieves a specific automation by ID for the authenticated partner
        app
      parameters:
      - description: Automation ID
        in: path
        name: automationId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get automation by ID
      tags:
      - Automation Management
    put:
      consumes:
      - application/json
      description: Updates a specific automation for the authenticated partner app
      parameters:
      - description: Automation ID
        in: path
        name: automationId
        required: true
        type: string
      - description: Automation update data
        in: body
        name: automation
        required: true
        schema:
          $ref: '#/definitions/automation.UpdateAutomationRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update automation
      tags:
      - Automation Management
  /v1/partner/admin/connections:
    get:
      description: Retrieves user connections for the authenticated partner app with
        pagination and filtering
      parameters:
      - default: 50
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      - description: Filter by user ID
        example: '"123e4567-e89b-12d3-a456-426614174000"'
        in: query
        name: user_id
        type: string
      - description: Filter by connection status
        enum:
        - active
        - revoked
        - expired
        in: query
        name: status
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get user connections
      tags:
      - Connection Management
  /v1/partner/admin/connections/{connectionId}:
    delete:
      description: Revokes a user connection by ID if it belongs to the authenticated
        partner app
      parameters:
      - description: Connection ID
        in: path
        name: connectionId
        required: true
        type: string
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Revoke user connection
      tags:
      - Connection Management
    get:
      description: Retrieves a specific user connection by ID if it belongs to the
        authenticated partner app
      parameters:
      - description: Connection ID
        in: path
        name: connectionId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get user connection by ID
      tags:
      - Connection Management
  /v1/partner/admin/credentials:
    get:
      description: Returns the status, age, and health information for all partner
        credentials
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              $ref: '#/definitions/credential.CredentialStatusResponse'
            type: object
        "401":
          description: Authentication required
          schema:
            $ref: '#/definitions/errors.PartnerErrorResponse'
        "500":
          description: Internal server error
          schema:
            $ref: '#/definitions/errors.PartnerErrorResponse'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get credential status
      tags:
      - Credential Management
  /v1/partner/admin/credentials/api-key/rollback:
    post:
      consumes:
      - application/json
      description: Restores the API key to the prior value after rotation
      parameters:
      - description: Rollback request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/credential.CredentialRollbackRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Rollback API key
      tags:
      - Credential Management
  /v1/partner/admin/credentials/api-key/rotate:
    post:
      consumes:
      - application/json
      description: Rotates the API key with optional grace period
      parameters:
      - description: Rotation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/credential.CredentialRotationRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Rotate API key
      tags:
      - Credential Management
  /v1/partner/admin/credentials/client-secret/rollback:
    post:
      consumes:
      - application/json
      description: Restores the client secret to the prior value after rotation
      parameters:
      - description: Rollback request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/credential.CredentialRollbackRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Rollback Client secret
      tags:
      - Credential Management
  /v1/partner/admin/credentials/client-secret/rotate:
    post:
      consumes:
      - application/json
      description: Rotates the client secret with optional grace period
      parameters:
      - description: Rotation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/credential.CredentialRotationRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Rotate client secret
      tags:
      - Credential Management
  /v1/partner/admin/credentials/history:
    get:
      description: Returns the audit history for credential operations
      parameters:
      - default: 20
        description: Number of events to return
        in: query
        name: limit
        type: integer
      - default: 0
        description: Number of events to skip
        in: query
        name: offset
        type: integer
      - description: Filter by credential type
        in: query
        name: credential_type
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get audit history
      tags:
      - App Management
  /v1/partner/admin/credentials/webhook-secret/rotate:
    post:
      consumes:
      - application/json
      description: Rotates the webhook secret with optional grace period
      parameters:
      - description: Rotation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/credential.CredentialRotationRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Rotate webhook secret
      tags:
      - Credential Management
  /v1/partner/admin/idp:
    delete:
      description: Deletes the OIDC IdP configuration for the authenticated partner
        app
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Delete IdP configuration
      tags:
      - IdP Management
    get:
      description: Retrieves the OIDC IdP configuration for the authenticated partner
        app
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get IdP configuration
      tags:
      - IdP Management
    post:
      consumes:
      - application/json
      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.'
      parameters:
      - description: IdP configuration data
        in: body
        name: config
        required: true
        schema:
          $ref: '#/definitions/idp.CreateIdPConfigRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Create IdP configuration
      tags:
      - IdP Management
    put:
      consumes:
      - application/json
      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.'
      parameters:
      - description: IdP configuration update data
        in: body
        name: config
        required: true
        schema:
          $ref: '#/definitions/idp.UpdateIdPConfigRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update IdP configuration
      tags:
      - IdP Management
  /v1/partner/admin/templates:
    get:
      description: Retrieves a paginated list of templates for the authenticated partner
        app
      parameters:
      - default: 50
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: List templates
      tags:
      - Template Management
    post:
      consumes:
      - application/json
      description: Creates a new template for the authenticated partner app. Optionally,
        provide a backing_meeting_id to clone content from an existing meeting.
      parameters:
      - description: Template creation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/template.CreateTemplateRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Create a template
      tags:
      - Template Management
  /v1/partner/admin/templates/{templateId}:
    delete:
      description: Deletes a template for the authenticated partner app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Delete a template
      tags:
      - Template Management
    get:
      description: Retrieves a template for the authenticated partner app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get a template
      tags:
      - Template Management
    put:
      consumes:
      - application/json
      description: Updates a template for the authenticated partner app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      - description: Template update request
        in: body
        name: body
        required: true
        schema:
          $ref: '#/definitions/template.UpdateTemplateRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update a template
      tags:
      - Template Management
  /v1/partner/admin/templates/{templateId}/next-steps:
    get:
      description: Returns the next steps for a template for the authenticated partner
        app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get template next steps
      tags:
      - Template Management
    post:
      consumes:
      - application/json
      description: Adds a next step to a template for the authenticated partner app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      - description: Add to template request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/template.AddToTemplateRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Add next step to template
      tags:
      - Template Management
  /v1/partner/admin/templates/{templateId}/next-steps/{nextStepId}:
    delete:
      description: Removes a next step from a template for the authenticated partner
        app
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      - description: Next Step ID
        in: path
        name: nextStepId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Remove next step from template
      tags:
      - Template Management
    put:
      consumes:
      - application/json
      description: Updates the autopilot flag for a next step in a template
      parameters:
      - description: Template ID
        in: path
        name: templateId
        required: true
        type: string
      - description: Next Step ID
        in: path
        name: nextStepId
        required: true
        type: string
      - description: Update template next step request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/template.UpdateTemplateNextStepRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update template next step association
      tags:
      - Template Management
  /v1/partner/admin/toolkits:
    get:
      description: Retrieves all toolkits for the authenticated partner app
      parameters:
      - default: 50
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get toolkits
      tags:
      - Toolkit Management
    post:
      consumes:
      - application/json
      description: Creates a new toolkit for the authenticated partner app. Set dry_run=true
        to validate without creating.
      parameters:
      - description: Toolkit creation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/toolkit.CreateToolkitRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Create a toolkit
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}:
    delete:
      description: Deletes a toolkit for the authenticated partner app
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Delete a toolkit
      tags:
      - Toolkit Management
    get:
      description: Retrieves a toolkit by ID for the authenticated partner app
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get a toolkit
      tags:
      - Toolkit Management
    patch:
      consumes:
      - application/json
      description: |-
        Updates an existing toolkit's metadata (name, description, is_active) and propagation
        settings (auto_propagate, auto_install_on_new_workspaces) for the authenticated partner app.
        All fields are optional; only fields explicitly supplied in the request body are updated
        (true PATCH semantics). The 'manifest' and 'version' fields are deprecated and no longer
        accepted; use the toolkit versioning API instead.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Toolkit update request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/toolkit.UpdateToolkitRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update a toolkit
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/export:
    get:
      description: Resolves an existing toolkit's manifest into a portable format
        with $id/$ref identifiers.
      parameters:
      - description: Toolkit ID
        format: uuid
        in: path
        name: toolkitId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Export a toolkit as a portable manifest
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/installations:
    get:
      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.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Maximum number of items to return (default 50, max 100)
        in: query
        name: limit
        type: integer
      - description: Number of items to skip from the beginning (default 0)
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: List toolkit installations
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/versions:
    get:
      description: Lists all versions for a toolkit owned by the authenticated partner
        app
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/toolkit.VersionResponse'
            type: array
        "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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: List toolkit versions
      tags:
      - Toolkit Management
    post:
      consumes:
      - application/json
      description: Creates a new draft version for a toolkit owned by the authenticated
        partner app. Set dry_run=true to validate without creating.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version creation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/toolkit.CreateVersionRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Create a toolkit version
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}:
    delete:
      description: Permanently deletes a draft version. Only draft versions can be
        discarded.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version ID
        in: path
        name: versionId
        required: true
        type: string
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Discard a draft toolkit version
      tags:
      - Toolkit Management
    get:
      description: Retrieves a specific version for a toolkit owned by the authenticated
        partner app
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version ID
        in: path
        name: versionId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get a toolkit version
      tags:
      - Toolkit Management
    patch:
      consumes:
      - application/json
      description: Updates the manifest, label, or changelog of a draft version
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version ID
        in: path
        name: versionId
        required: true
        type: string
      - description: Version update request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/toolkit.UpdateVersionRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update a draft toolkit version
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/publish:
    post:
      description: Transitions a draft version to PUBLISHED status. Deprecates any
        previously published version.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version ID
        in: path
        name: versionId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Publish a toolkit version
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/{toolkitId}/versions/{versionId}/republish:
    post:
      description: Transitions a deprecated version back to PUBLISHED status. Deprecates
        any currently published version.
      parameters:
      - description: Toolkit ID
        in: path
        name: toolkitId
        required: true
        type: string
      - description: Version ID
        in: path
        name: versionId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Republish a toolkit version
      tags:
      - Toolkit Management
  /v1/partner/admin/toolkits/export:
    post:
      consumes:
      - application/json
      description: Builds a portable toolkit manifest from selected entity IDs. Dependencies
        are auto-discovered.
      parameters:
      - description: Export request with entity IDs
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/toolkit.ExportEntitiesRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Export entities as a portable manifest
      tags:
      - Toolkit Management
  /v1/partner/admin/webhook-deliveries:
    get:
      description: Retrieves webhook deliveries for the authenticated partner app
      parameters:
      - description: Filter by delivery status (pending, delivered, failed, abandoned)
        in: query
        name: status
        type: string
      - description: Filter by event type (e.g., meeting.created, automation.assignment.created)
        in: query
        name: event_type
        type: string
      - description: Maximum number of results to return (default 50, max 100)
        in: query
        name: limit
        type: integer
      - description: Number of results to skip (default 0)
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: List webhook deliveries
      tags:
      - Webhook Management
  /v1/partner/admin/webhook-deliveries/{deliveryId}:
    get:
      description: Retrieves a specific webhook delivery by ID
      parameters:
      - description: Webhook Delivery ID
        in: path
        name: deliveryId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get webhook delivery
      tags:
      - Webhook Management
  /v1/partner/admin/webhook-deliveries/{deliveryId}/retry:
    post:
      description: Retries a failed webhook delivery
      parameters:
      - description: Webhook Delivery ID
        in: path
        name: deliveryId
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Retry webhook delivery
      tags:
      - Webhook Management
  /v1/partner/admin/webhook-filter:
    delete:
      description: Removes webhook event filtering for the authenticated partner app
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Remove partner app webhook filter
      tags:
      - Webhook Management
    put:
      consumes:
      - application/json
      description: Configures include or exclude event filtering for webhook delivery
      parameters:
      - description: Webhook filter update request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/app_management.SetWebhookFilterRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update partner app webhook filter
      tags:
      - Webhook Management
  /v1/partner/admin/webhook-status:
    put:
      consumes:
      - application/json
      description: Enables or disables webhook delivery for the authenticated partner
        app
      parameters:
      - description: Webhook status update request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/app_management.UpdateWebhookStatusRequest'
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Update partner app webhook status
      tags:
      - Webhook Management
  /v1/partner/admin/workflow-templates:
    get:
      description: Retrieves a paginated list of workflow templates owned by the authenticated
        partner app across all workspaces.
      parameters:
      - default: 50
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: List workflow templates
      tags:
      - Workflow Management
  /v1/partner/admin/workflow-templates/{id}:
    get:
      description: Retrieves a single workflow template owned by the authenticated
        partner app, including the inlined DAG spec.
      parameters:
      - description: Workflow Template ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - PartnerAPIKeyAuth: []
      - PartnerClientIdAuth: []
      summary: Get a workflow template
      tags:
      - Workflow Management
  /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.
      parameters:
      - description: Partner Client ID
        in: path
        name: client_id
        required: true
        type: string
      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'
      summary: Get Public Partner Information by Client ID
      tags:
      - OAuth 2.0
  /v1/partner/sso/callback:
    get:
      consumes:
      - application/json
      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.
      parameters:
      - description: Authorization code from IdP
        in: query
        name: code
        type: string
      - description: State parameter for session validation
        in: query
        name: state
        required: true
        type: string
      - description: Error code if authentication failed
        in: query
        name: error
        type: string
      - description: Error description if authentication failed
        in: query
        name: error_description
        type: string
      produces:
      - application/json
      responses:
        "302":
          description: Redirect to application after successful authentication
          schema:
            type: string
        "400":
          description: Invalid request or authentication error
          schema:
            additionalProperties: true
            type: object
        "401":
          description: Authentication failed
          schema:
            additionalProperties: true
            type: object
        "500":
          description: Internal server error
          schema:
            additionalProperties: true
            type: object
      summary: Handle partner SSO callback
      tags:
      - Single Sign-On
  /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.
      parameters:
      - description: Partner slug
        in: path
        name: slug
        required: true
        type: string
      produces:
      - application/json
      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'
      summary: Get partner SSO information
      tags:
      - Single Sign-On
  /v1/partner/sso/initiate:
    get:
      consumes:
      - application/json
      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.
      parameters:
      - description: Partner app slug
        in: query
        name: slug
        required: true
        type: string
      - description: 'Target platform: web (default), desktop, backlog, or meeting:{id}'
        enum:
        - web
        - desktop
        - backlog
        in: query
        name: target
        type: string
      - description: Auto-redirect to authorization URL
        in: query
        name: auto
        type: boolean
      produces:
      - application/json
      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:
            additionalProperties: true
            type: object
        "404":
          description: Partner not found or IdP not configured
          schema:
            additionalProperties: true
            type: object
        "500":
          description: Internal server error
          schema:
            additionalProperties: true
            type: object
      summary: Initiate partner SSO flow
      tags:
      - Single Sign-On
  /v1/partner/sso/session/{session_id}:
    get:
      consumes:
      - application/json
      description: Returns the current status of a partner SSO session for polling.
        Used by clients to check if authentication has completed.
      parameters:
      - description: Session ID
        in: path
        name: session_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: Session status
          schema:
            $ref: '#/definitions/sso.SessionStatusResponse'
        "400":
          description: Invalid session ID
          schema:
            additionalProperties: true
            type: object
        "404":
          description: Session not found
          schema:
            additionalProperties: true
            type: object
      summary: Get partner SSO session status
      tags:
      - Single Sign-On
  /v1/partner/user/action-items:
    get:
      description: Retrieves action items accessible to the authenticated partner
        user
      parameters:
      - default: 25
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      - description: Filter by meeting ID
        example: '"123e4567-e89b-12d3-a456-426614174000"'
        in: query
        name: meeting_id
        type: string
      - description: Filter by completion status
        in: query
        name: is_completed
        type: boolean
      - description: Filter by partner assignment
        in: query
        name: has_partner_assignment
        type: boolean
      - description: Filter by start date (ISO 8601)
        example: '"2023-01-01T00:00:00Z"'
        in: query
        name: start_date
        type: string
      - description: Filter by end date (ISO 8601)
        example: '"2023-12-31T23:59:59Z"'
        in: query
        name: end_date
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - action-items:read
      summary: Get action items
      tags:
      - Action Items
    post:
      consumes:
      - application/json
      description: Creates a new action item on behalf of the authenticated user
      parameters:
      - description: Action item data
        in: body
        name: action_item
        required: true
        schema:
          $ref: '#/definitions/action_item.CreateActionItemRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - action-items:write
      summary: Create action item
      tags:
      - Action Items
  /v1/partner/user/action-items/{id}:
    delete:
      description: Deletes an action item if accessible to the authenticated user
      parameters:
      - description: Action Item ID
        in: path
        name: id
        required: true
        type: string
      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'
      security:
      - OAuth2Application:
        - action-items:write
      summary: Delete action item
      tags:
      - Action Items
    get:
      description: Retrieves a specific action item by ID if accessible to the authenticated
        partner user
      parameters:
      - description: Action Item ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - action-items:read
      summary: Get action item by ID
      tags:
      - Action Items
    put:
      consumes:
      - application/json
      description: Updates an existing action item if accessible to the authenticated
        user
      parameters:
      - description: Action Item ID
        in: path
        name: id
        required: true
        type: string
      - description: Action item update data
        in: body
        name: action_item
        required: true
        schema:
          $ref: '#/definitions/action_item.UpdateActionItemRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - action-items:write
      summary: Update action item
      tags:
      - Action Items
  /v1/partner/user/calendar/events:
    get:
      consumes:
      - application/json
      description: Retrieve a paginated list of calendar events for the authenticated
        user within a specified time range
      parameters:
      - description: Start time in RFC3339 format (preferred)
        example: '"2023-01-01T00:00:00Z"'
        in: query
        name: start_date
        type: string
      - description: End time in RFC3339 format (preferred)
        example: '"2023-01-31T23:59:59Z"'
        in: query
        name: end_date
        type: string
      - description: 'Deprecated: Use start_date instead'
        example: '"2023-01-01T00:00:00Z"'
        in: query
        name: start
        type: string
      - description: 'Deprecated: Use end_date instead'
        example: '"2023-01-31T23:59:59Z"'
        in: query
        name: end
        type: string
      - description: Number of results per page (default 25, max 100)
        in: query
        name: limit
        type: integer
      - description: Pagination offset (default 0)
        in: query
        name: offset
        type: integer
      - description: 'Sort direction: asc or desc (default: asc)'
        in: query
        name: direction
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - calendar:read
      summary: Get calendar events
      tags:
      - Calendar
  /v1/partner/user/calendar/events/{calendar_event_id}:
    get:
      consumes:
      - application/json
      description: Retrieve details of a specific calendar event for the authenticated
        user
      parameters:
      - description: Calendar Event ID
        example: '"123e4567-e89b-12d3-a456-426614174006"'
        in: path
        name: calendar_event_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - calendar:read
      summary: Get calendar event by ID
      tags:
      - Calendar
  /v1/partner/user/calendar/events/{calendar_event_id}/meeting:
    post:
      consumes:
      - application/json
      description: Creates a new meeting by copying details from a calendar event
      parameters:
      - description: Calendar Event ID
        example: '"123e4567-e89b-12d3-a456-426614174006"'
        in: path
        name: calendar_event_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - calendar:write
      summary: Create meeting from calendar event
      tags:
      - Calendar
  /v1/partner/user/meeting-templates:
    get:
      description: Retrieves meeting templates accessible to the authenticated partner
        user based on ownership hierarchy
      parameters:
      - default: 25
        description: Maximum number of items per page
        in: query
        maximum: 100
        minimum: 1
        name: limit
        type: integer
      - default: 0
        description: Number of items to skip
        in: query
        minimum: 0
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: List meeting templates
      tags:
      - Templates
  /v1/partner/user/meeting-templates/{id}:
    get:
      description: Retrieves a meeting template by ID with its full contents
      parameters:
      - description: Meeting template ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get meeting template
      tags:
      - Templates
  /v1/partner/user/meeting-templates/{id}/apply:
    post:
      consumes:
      - application/json
      description: Applies a meeting template's content to an existing meeting. This
        is an additive operation.
      parameters:
      - description: Template ID to apply
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Meeting to apply template to
        in: body
        name: body
        required: true
        schema:
          $ref: '#/definitions/meeting_template.ApplyTemplateRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Apply template to meeting
      tags:
      - Templates
  /v1/partner/user/meeting-templates/{id}/next-steps:
    get:
      description: Retrieves the AI workflow configurations associated with a meeting
        template
      parameters:
      - description: Meeting template ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: List template next steps
      tags:
      - Templates
  /v1/partner/user/meetings:
    get:
      description: Retrieves meetings accessible to the authenticated partner user
      parameters:
      - default: 25
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      - description: Start date filter (ISO 8601)
        example: '"2023-01-01T00:00:00Z"'
        in: query
        name: start_date
        type: string
      - description: End date filter (ISO 8601)
        example: '"2023-12-31T23:59:59Z"'
        in: query
        name: end_date
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get meetings
      tags:
      - Meetings
    post:
      consumes:
      - application/json
      description: Creates a new meeting on behalf of the authenticated partner user
      parameters:
      - description: Meeting data
        in: body
        name: meeting
        required: true
        schema:
          $ref: '#/definitions/meeting.PartnerCreateMeetingRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Create meeting
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}:
    get:
      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.
      parameters:
      - description: Meeting ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get meeting by ID
      tags:
      - Meetings
    patch:
      consumes:
      - application/json
      description: Updates an existing meeting if accessible to the authenticated
        partner user
      parameters:
      - description: Meeting ID
        in: path
        name: id
        required: true
        type: string
      - description: Meeting update data
        in: body
        name: meeting
        required: true
        schema:
          $ref: '#/definitions/meeting.PartnerUpdateMeetingRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Update meeting
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}/action-buttons:
    get:
      description: |-
        Retrieves action buttons available for a meeting through its applied templates and next steps.
        Action buttons are de-duplicated across all next steps associated with the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get action buttons for a meeting
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}/action-buttons/{button_id}/trigger:
    post:
      consumes:
      - application/json
      description: Fires an action button manually. This triggers a webhook to the
        partner's registered endpoint.
      parameters:
      - description: Meeting ID
        in: path
        name: id
        required: true
        type: string
      - description: Action Button ID
        in: path
        name: button_id
        required: true
        type: string
      - description: Optional next step and result context
        in: body
        name: request
        schema:
          $ref: '#/definitions/shared.TriggerActionButtonRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Trigger action button
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}/agenda-items:
    get:
      consumes:
      - application/json
      description: Retrieves all agenda items for a specific meeting. Filters out
        items restricted to leads if the user is not an editor.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get agenda items for a meeting
      tags:
      - Agenda Items
    post:
      consumes:
      - application/json
      description: Creates a new agenda item for a meeting. User must be a participant
        of the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Agenda item details
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/meeting.CreateAgendaItemRequest'
      produces:
      - application/json
      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'
      summary: Create agenda item
      tags:
      - Agenda Items
  /v1/partner/user/meetings/{id}/agenda-items/{item_id}:
    delete:
      consumes:
      - application/json
      description: Deletes an agenda item. User must be a participant of the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Agenda Item ID
        format: uuid
        in: path
        name: item_id
        required: true
        type: string
      produces:
      - application/json
      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'
      summary: Delete agenda item
      tags:
      - Agenda Items
    put:
      consumes:
      - application/json
      description: Updates an existing agenda item. User must be a participant of
        the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Agenda Item ID
        format: uuid
        in: path
        name: item_id
        required: true
        type: string
      - description: Updated agenda item details
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/meeting.UpdateAgendaItemRequest'
      produces:
      - application/json
      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'
      summary: Update agenda item
      tags:
      - Agenda Items
  /v1/partner/user/meetings/{id}/calendar/link:
    post:
      consumes:
      - application/json
      description: Link an existing calendar event to a specific meeting
      parameters:
      - description: Meeting ID
        example: '"123e4567-e89b-12d3-a456-426614174000"'
        in: path
        name: id
        required: true
        type: string
      - description: Link calendar event request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/calendar.PartnerLinkCalendarEventRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - calendar:write
      summary: Link calendar event to meeting
      tags:
      - Calendar
  /v1/partner/user/meetings/{id}/calendar/unlink:
    delete:
      consumes:
      - application/json
      description: Remove the link between a calendar event and a specific meeting
      parameters:
      - description: Meeting ID
        example: '"123e4567-e89b-12d3-a456-426614174000"'
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - calendar:write
      summary: Unlink calendar event from meeting
      tags:
      - Calendar
  /v1/partner/user/meetings/{id}/context:
    get:
      consumes:
      - application/json
      description: Lists partner-scoped meeting contexts for a meeting with pagination.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - default: 25
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - context:read
      summary: List meeting contexts
      tags:
      - Context
    post:
      consumes:
      - multipart/form-data
      description: Uploads a partner-scoped meeting context for a meeting using multipart/form-data.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Context file
        in: formData
        name: file
        required: true
        type: file
      - description: Context title
        in: formData
        name: title
        type: string
      - description: Logical context type
        in: formData
        name: context_type
        type: string
      - description: Source format (json,csv,tsv,xml,html,yaml,md,txt)
        in: formData
        name: source_format
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - context:write
      summary: Upload meeting context
      tags:
      - Context
  /v1/partner/user/meetings/{id}/context/{context_id}:
    delete:
      consumes:
      - application/json
      description: Deletes a specific partner-scoped meeting context by context ID.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Context ID
        format: uuid
        in: path
        name: context_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - context:write
      summary: Delete meeting context
      tags:
      - Context
    get:
      consumes:
      - application/json
      description: Retrieves a specific partner-scoped meeting context by context
        ID.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Context ID
        format: uuid
        in: path
        name: context_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - context:read
      summary: Get meeting context
      tags:
      - Context
  /v1/partner/user/meetings/{id}/context/{context_id}/content:
    get:
      description: Streams the file bytes for a specific partner-scoped meeting context.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Context ID
        format: uuid
        in: path
        name: context_id
        required: true
        type: string
      produces:
      - application/octet-stream
      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'
      security:
      - OAuth2Application:
        - context:read
      summary: Download meeting context content
      tags:
      - Context
  /v1/partner/user/meetings/{id}/next-steps:
    get:
      description: Retrieves next steps available for a meeting through its applied
        templates
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get next steps for a meeting
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}/next-steps/{next_step_id}/execute:
    post:
      consumes:
      - application/json
      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.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Next Step ID
        format: uuid
        in: path
        name: next_step_id
        required: true
        type: string
      - description: Execution request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/shared.ExecuteNextStepRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Execute a next step
      tags:
      - Meetings
  /v1/partner/user/meetings/{id}/participants:
    get:
      description: Retrieves all participants for a specific meeting accessible to
        the authenticated partner user
      parameters:
      - description: Meeting ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get meeting participants
      tags:
      - Participants
    post:
      consumes:
      - application/json
      description: Adds a participant to a specific meeting. User must be an editor
        of the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Participant details
        in: body
        name: participant
        required: true
        schema:
          $ref: '#/definitions/meeting.AddParticipantRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Add meeting participant
      tags:
      - Participants
  /v1/partner/user/meetings/{id}/participants/{participant_id}:
    delete:
      description: Removes a participant from a specific meeting. User must be an
        editor of the meeting.
      parameters:
      - description: Meeting ID
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Participant ID
        format: uuid
        in: path
        name: participant_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:write
      summary: Remove meeting participant
      tags:
      - Participants
  /v1/partner/user/next-step-results/{result_id}:
    get:
      description: Retrieves AI-generated content from a next step execution. Results
        expire after 7 days.
      parameters:
      - description: Result ID
        format: uuid
        in: path
        name: result_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - meetings:read
      summary: Get a next step result
      tags:
      - Meetings
  /v1/partner/user/profile:
    get:
      description: Retrieves the authenticated user's profile information including
        workspace details and role
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - profile
      summary: Get user profile
      tags:
      - User Profile
  /v1/partner/user/sessions:
    get:
      consumes:
      - application/json
      description: Retrieves a paginated list of chat sessions for the authenticated
        user
      parameters:
      - description: Filter by meeting ID
        format: uuid
        in: query
        name: meeting_id
        type: string
      - description: 'Maximum sessions to return (1-100, default: 25)'
        in: query
        maximum: 100
        minimum: 1
        name: limit
        type: integer
      - description: 'Number of sessions to skip (0-based, default: 0)'
        in: query
        minimum: 0
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - chat:read
      summary: List chat sessions
      tags:
      - Chat Sessions
    post:
      consumes:
      - application/json
      description: Creates a new chat session for the authenticated user. Optionally
        accepts an initial message.
      parameters:
      - description: Client-provided idempotency key
        in: header
        name: Idempotency-Key
        type: string
      - description: Session creation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/session.CreateSessionRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - chat:write
      summary: Create a new chat session
      tags:
      - Chat Sessions
  /v1/partner/user/sessions/{id}:
    get:
      consumes:
      - application/json
      description: Retrieves details of a specific chat session including turns based
        on query parameters
      parameters:
      - description: Session ID
        example: f7e6d5c4-b3a2-1098-7654-321fedcba098
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: 'Maximum turns to return (1-200, default: 50)'
        in: query
        maximum: 200
        minimum: 1
        name: turn_limit
        type: integer
      - description: Pagination offset for turns
        in: query
        minimum: 0
        name: turn_offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - chat:read
      summary: Get chat session details
      tags:
      - Chat Sessions
    put:
      consumes:
      - application/json
      description: Submits a new message to an existing chat session
      parameters:
      - description: Session ID
        in: path
        name: id
        required: true
        type: string
      - description: Client-provided idempotency key
        in: header
        name: Idempotency-Key
        type: string
      - description: Message request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/session.SendMessageRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - chat:write
      summary: Send a message to a session
      tags:
      - Chat Sessions
  /v1/partner/user/sessions/{id}/turns/{turn_id}:
    get:
      consumes:
      - application/json
      description: Retrieves details of a specific turn within a chat session by its
        ID
      parameters:
      - description: Session ID
        example: f7e6d5c4-b3a2-1098-7654-321fedcba098
        format: uuid
        in: path
        name: id
        required: true
        type: string
      - description: Turn ID
        example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        format: uuid
        in: path
        name: turn_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - chat:read
      summary: Get specific turn
      tags:
      - Chat Sessions
  /v1/partner/user/toolkits:
    get:
      description: Retrieves toolkits available for installation in the user's workspace
      parameters:
      - default: 25
        description: Maximum number of items per page
        in: query
        maximum: 100
        minimum: 1
        name: limit
        type: integer
      - default: 0
        description: Number of items to skip
        in: query
        minimum: 0
        name: offset
        type: integer
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - toolkits:read
      summary: List available toolkits
      tags:
      - Toolkits
  /v1/partner/user/toolkits/{toolkitId}/install:
    post:
      consumes:
      - application/json
      description: Installs a toolkit to the authenticated user's workspace, creating
        all defined entities
      parameters:
      - description: Toolkit ID
        format: uuid
        in: path
        name: toolkitId
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - toolkits:write
      summary: Install toolkit
      tags:
      - Toolkits
  /v1/partner/user/workflow-runs:
    get:
      description: Returns a paginated list of workflow runs in the caller's workspace.
        Optional filters may be supplied to narrow the result set.
      parameters:
      - default: 25
        description: Limit
        in: query
        name: limit
        type: integer
      - default: 0
        description: Offset
        in: query
        name: offset
        type: integer
      - description: Filter by run status
        enum:
        - pending
        - active
        - completed
        - failed
        - cancelled
        - frozen
        in: query
        name: status
        type: string
      - description: Filter by workflow template ID
        in: query
        name: workflow_template_id
        type: string
      - description: Filter by originating object type
        enum:
        - meeting
        - canvas
        in: query
        name: originating_type
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - workflows:read
      summary: List workflow runs
      tags:
      - Workflow Runs
    post:
      consumes:
      - application/json
      description: Creates and enqueues a new manual workflow run. Autopilot-triggered
        runs are reserved for internal use and cannot be created via this endpoint.
      parameters:
      - description: Workflow run creation request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/workflow_run.PartnerCreateWorkflowRunRequest'
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - workflows:write
      summary: Trigger a workflow run
      tags:
      - Workflow Runs
  /v1/partner/user/workflow-runs/{id}:
    get:
      description: Returns a single workflow run. The run must belong to the authenticated
        user's current workspace; otherwise a 404 response is returned.
      parameters:
      - description: Workflow Run ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - workflows:read
      summary: Get a workflow run
      tags:
      - Workflow Runs
  /v1/partner/user/workspaces/{workspace_id}/toolkits:
    get:
      description: Retrieves toolkits currently installed in a workspace with installation
        details
      parameters:
      - description: Workspace ID
        format: uuid
        in: path
        name: workspace_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - toolkits:read
      summary: List installed toolkits
      tags:
      - Toolkits
  /v1/partner/user/workspaces/{workspace_id}/toolkits/{toolkit_id}:
    delete:
      description: Removes a toolkit installation from the authenticated user's workspace
      parameters:
      - description: Workspace ID
        format: uuid
        in: path
        name: workspace_id
        required: true
        type: string
      - description: Toolkit ID
        format: uuid
        in: path
        name: toolkit_id
        required: true
        type: string
      produces:
      - application/json
      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'
      security:
      - OAuth2Application:
        - toolkits:write
      summary: Uninstall toolkit
      tags:
      - Toolkits
securityDefinitions:
  OAuth2Application:
    flow: application
    scopes:
      read: Grants read access
      write: Grants write access
    tokenUrl: https://auth.contio.ai/oauth2/token
    type: oauth2
  PartnerAPIKeyAuth:
    description: Partner API Key
    in: header
    name: X-API-Key
    type: apiKey
  PartnerClientIdAuth:
    description: Partner Client ID
    in: header
    name: X-Client-ID
    type: apiKey
swagger: "2.0"
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.

    **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.

    **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.

    **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.

    **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.

    See 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.

    **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.

    **Required scopes:** `toolkits:read` (GET) · `toolkits:write` (POST / DELETE).
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"
