> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runaether.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Set whether every project uses a plugin

> True enables the plugin on every current project of the organization that does not enable it, with its default credential policy, and on every project created later. False deletes every project's enablement, and no project enables it (enableProjectPlugin refuses with plugin_switched_off) until it is set true again. Setting the value the plugin has writes nothing. False is refused with plugin_server_required while a server of the plugin is required.



## OpenAPI

````yaml api-reference/openapi.json PUT /plugins/{pluginID}/enabled-by-default
openapi: 3.1.0
info:
  title: Aether API
  version: 0.1.0
servers:
  - url: https://api.runaether.dev
security:
  - bearerAuth: []
paths:
  /plugins/{pluginID}/enabled-by-default:
    put:
      tags:
        - plugins
      summary: Set whether every project uses a plugin
      description: >-
        True enables the plugin on every current project of the organization
        that does not enable it, with its default credential policy, and on
        every project created later. False deletes every project's enablement,
        and no project enables it (enableProjectPlugin refuses with
        plugin_switched_off) until it is set true again. Setting the value the
        plugin has writes nothing. False is refused with plugin_server_required
        while a server of the plugin is required.
      operationId: setPluginEnabledByDefault
      parameters:
        - in: path
          name: pluginID
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetPluginEnabledByDefaultRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/PluginsErrorResponse'
                  - $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
                  - $ref: '#/components/schemas/ControlForbiddenErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Not Found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginErrorResponse'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Internal Server Error
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginsErrorResponse'
          description: Service Unavailable
components:
  schemas:
    SetPluginEnabledByDefaultRequest:
      additionalProperties: false
      properties:
        enabled_by_default:
          description: >-
            True: the plugin is enabled on every current project that does not
            enable it, with its default credential policy, and on every project
            created later. False: every project's enablement is deleted, and no
            project enables it until it is true again; refused with
            plugin_server_required while a server of the plugin is required.
          type: boolean
      required:
        - enabled_by_default
      type: object
    PluginResponse:
      additionalProperties: false
      properties:
        plugin:
          $ref: '#/components/schemas/Plugin'
      required:
        - plugin
      type: object
    PluginsErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - account_deleting
            - aether_inference_unavailable
            - aether_inference_unserved
            - agent_connector_not_found
            - agent_default_project_archived
            - bad_gateway
            - bad_request
            - conflict
            - connection_agent_only
            - connection_harness_mismatch
            - connection_not_held
            - control_forbidden
            - default_skill_required
            - forbidden
            - gateway_timeout
            - gone
            - integration_auth_unexpected
            - integration_not_in_directory
            - integration_shape_changed
            - internal_error
            - mcp_connection_github_not_connected
            - mcp_connection_oauth_not_accepted
            - mcp_connection_org_not_offered
            - mcp_connection_secret_invalid
            - mcp_connection_server_changed
            - mcp_connection_static_secret_not_accepted
            - mcp_credential_policy_not_applicable
            - mcp_credential_policy_org_unavailable
            - mcp_credential_policy_required
            - mcp_oauth_app_auth_method_unsupported
            - mcp_oauth_app_invalid
            - mcp_oauth_app_issuer_invalid
            - mcp_oauth_app_required
            - mcp_oauth_not_advertised
            - mcp_oauth_pkce_unsupported
            - mcp_oauth_registration_failed
            - mcp_repo_config_invalid
            - mcp_server_address_refused
            - mcp_server_aether_managed
            - mcp_server_api_key_not_applicable
            - mcp_server_args_invalid
            - mcp_server_auth_discovery_failed
            - mcp_server_auth_unsupported
            - mcp_server_directory_managed
            - mcp_server_directory_moved
            - mcp_server_display_name_invalid
            - mcp_server_env_invalid
            - mcp_server_headers_invalid
            - mcp_server_key_invalid
            - mcp_server_key_reserved
            - mcp_server_key_taken
            - mcp_server_kind_change_refused
            - mcp_server_not_from_directory
            - mcp_server_not_mcp
            - mcp_server_package_invalid
            - mcp_server_plugin_bundled
            - mcp_server_plugin_off
            - mcp_server_response_too_large
            - mcp_server_return_to_invalid
            - mcp_server_runtime_invalid
            - mcp_server_switched_off
            - mcp_server_unreachable
            - mcp_server_url_invalid
            - mcp_server_version_unpinned
            - method_not_allowed
            - not_acceptable
            - not_found
            - not_implemented
            - org_role_insufficient
            - org_suspended
            - payment_required
            - plugin_moved
            - plugin_name_taken
            - plugin_request_invalid
            - plugin_server_key_reserved
            - plugin_server_key_taken
            - plugin_server_probe_failed
            - plugin_server_required
            - plugin_skill_invalid
            - plugin_source_address_refused
            - plugin_source_empty
            - plugin_source_invalid
            - plugin_source_not_found
            - plugin_source_not_public
            - plugin_source_too_large
            - plugin_source_unreachable
            - plugin_source_unsupported
            - plugin_switched_off
            - plugin_undeliverable
            - precondition_failed
            - rate_limited
            - request_canceled
            - request_timeout
            - request_too_large
            - service_unavailable
            - skill_slug_reserved
            - unauthenticated
            - unsupported_media_type
            - validation_failed
          minLength: 1
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
        - code
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
            - account_deleting
            - agent_host_route_not_allowed
            - credential_kind_not_admitted
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    ControlForbiddenErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - control_forbidden
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    PluginErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - plugin_request_invalid
            - plugin_source_address_refused
            - plugin_source_not_public
            - plugin_source_unreachable
            - plugin_source_not_found
            - plugin_source_unsupported
            - plugin_source_too_large
            - plugin_source_invalid
            - plugin_source_empty
            - plugin_skill_invalid
            - plugin_undeliverable
            - plugin_server_probe_failed
            - plugin_server_key_taken
            - plugin_server_key_reserved
            - plugin_name_taken
            - plugin_moved
            - plugin_server_required
            - plugin_switched_off
            - mcp_credential_policy_required
            - mcp_credential_policy_not_applicable
            - mcp_credential_policy_org_unavailable
            - integration_not_in_directory
            - integration_shape_changed
            - integration_auth_unexpected
          type: string
        conflicts:
          items:
            $ref: '#/components/schemas/PluginKeyHolder'
          type: array
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
        - conflicts
      type: object
    Plugin:
      additionalProperties: false
      properties:
        commit:
          type: string
        created_at:
          format: date-time
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        delivery:
          $ref: '#/components/schemas/PluginDelivery'
        directory:
          $ref: '#/components/schemas/PluginDirectoryOrigin'
        enabled_by_default:
          type: boolean
        id:
          format: uuid
          type: string
        manifests:
          $ref: '#/components/schemas/PluginManifests'
        marketplace:
          $ref: '#/components/schemas/PluginMarketplaceOrigin'
        name:
          type: string
        needs_credential:
          type: boolean
        path:
          description: The directory holding the plugin; empty for the repository's root.
          type: string
        ref:
          description: >-
            The branch or tag the source follows; null for the default branch or
            a marketplace entry pinned to a commit.
          type:
            - string
            - 'null'
        repository_url:
          type: string
        servers:
          items:
            discriminator:
              mapping:
                remote: '#/components/schemas/PluginRemoteServer'
                stdio_unavailable: '#/components/schemas/PluginStdioServer'
              propertyName: kind
            oneOf:
              - $ref: '#/components/schemas/PluginRemoteServer'
              - $ref: '#/components/schemas/PluginStdioServer'
          type: array
        skills:
          description: >-
            The plugin's skills, ordered by their SKILL.md's path; null until
            Aether reads the skills of a plugin installed before it recorded
            them.
          items:
            $ref: '#/components/schemas/PluginSkill'
          type:
            - array
            - 'null'
        support:
          $ref: '#/components/schemas/PluginSupport'
        updated_at:
          format: date-time
          type: string
      required:
        - id
        - name
        - repository_url
        - path
        - ref
        - commit
        - manifests
        - support
        - needs_credential
        - default_credential_policy
        - enabled_by_default
        - skills
        - servers
        - created_at
        - updated_at
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    PluginKeyHolder:
      additionalProperties: false
      properties:
        key:
          type: string
        plugin:
          type:
            - string
            - 'null'
        source:
          enum:
            - manual
            - aether
            - plugin
            - directory
          type: string
      required:
        - key
        - source
        - plugin
      type: object
    PluginDelivery:
      additionalProperties: false
      properties:
        claude_code:
          description: >-
            deliverable, or why Claude Code cannot load the plugin:
            claude_code_manifest_skills, its .claude-plugin/plugin.json names
            its skills other than as ./ paths inside it.
          enum:
            - deliverable
            - claude_code_manifest_skills
          type: string
        codex:
          description: >-
            deliverable, or why Codex cannot load the plugin: codex_plugin_name,
            its name ends in '.'; codex_no_manifest, it has none of the
            manifests Codex reads; codex_agent_plugins_servers, Codex reads it
            as an Agent Plugins plugin, whose mcp.json cannot carry the
            credential Aether's MCP gateway requires, and it has remote MCP
            servers.
          enum:
            - deliverable
            - codex_plugin_name
            - codex_no_manifest
            - codex_agent_plugins_servers
          type: string
      required:
        - claude_code
        - codex
      type: object
    PluginDirectoryOrigin:
      additionalProperties: false
      properties:
        display_name:
          type: string
        homepage:
          type: string
      required:
        - display_name
        - homepage
      type: object
    PluginManifests:
      additionalProperties: false
      properties:
        agent_plugins:
          description: The Agent Plugins plugin.json at the plugin's root.
          type: boolean
        claude:
          description: .claude-plugin/plugin.json
          type: boolean
        codex:
          description: .codex-plugin/plugin.json
          type: boolean
        synthesized:
          description: >-
            The plugin's directory holds no manifest, so Aether synthesizes one:
            the plugin is the directory's skills, every directory holding a
            SKILL.md, named after the directory.
          type: boolean
      required:
        - claude
        - codex
        - agent_plugins
        - synthesized
      type: object
    PluginMarketplaceOrigin:
      additionalProperties: false
      properties:
        name:
          type: string
        plugin:
          type: string
        url:
          type: string
      required:
        - name
        - url
        - plugin
      type: object
    PluginRemoteServer:
      additionalProperties: false
      properties:
        auth:
          enum:
            - none
            - static_secret
            - oauth
          type: string
        key:
          type: string
        kind:
          enum:
            - remote
          type: string
        mcp_server_id:
          format: uuid
          type: string
        url:
          type: string
      required:
        - kind
        - mcp_server_id
        - key
        - url
        - auth
      type: object
    PluginStdioServer:
      additionalProperties: false
      properties:
        args:
          items:
            type: string
          type: array
        command:
          type: string
        key:
          type: string
        kind:
          enum:
            - stdio_unavailable
          type: string
      required:
        - kind
        - key
        - command
        - args
      type: object
    PluginSkill:
      additionalProperties: false
      properties:
        agents:
          description: The agents that load the skill.
          items:
            enum:
              - claude_code
              - codex
            type: string
          maxItems: 2
          minItems: 1
          type: array
        description:
          description: The description the SKILL.md's frontmatter declares.
          type: string
        name:
          description: The name the SKILL.md's frontmatter declares.
          type: string
      required:
        - name
        - description
        - agents
      type: object
    PluginSupport:
      additionalProperties: false
      properties:
        claude_code:
          items:
            enum:
              - skills
              - commands
              - agents
              - hooks
              - mcp_servers
            type: string
          type: array
        codex:
          items:
            enum:
              - skills
              - commands
              - agents
              - hooks
              - mcp_servers
            type: string
          type: array
      required:
        - claude_code
        - codex
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.