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

# Search integrations by name

> Finds integrations across Aether's own MCP servers, Aether's integration directory and the organization's plugin marketplaces (the official Claude Code and Codex ones), one result per integration: one of Aether's servers the organization's catalog holds, installed already; an integration of the directory, installed by its key; or a plugin a marketplace lists, installed by the marketplace's URL and its name. The MCP registry is searched apart (searchIntegrationRegistry). Every word of q must be in an integration's name, an alias, its description or its category, or in a marketplace plugin's name or category: a plugin's description is its vendor's copy, which names other products. Aether's servers and the directory's integrations come first, then the marketplaces' plugins, each group those matching by name or alias before the others. Aether's servers and a directory entry hide every marketplace plugin of their names, the one an entry prefers included. An integration's source says what it contains and its default_credential_policy whose connection it takes; a marketplace's listing does not say what a plugin bundles, which Aether reads from its files when it installs it. installed names the card of what the organization installed: one of Aether's servers; an integration's plugin or, installed as its server alone, that server; the organization's plugin of a marketplace plugin's name. It is absent for what is not installed. sources reports every source with its status: a marketplace Aether could not read is unavailable, with why, and contributes no results; it is never reported as listing none. A marketplace's listing is read again once it is ten minutes old, and a marketplace that could not be read is tried again a minute later.



## OpenAPI

````yaml api-reference/openapi.v1.json GET /integration-search
openapi: 3.1.0
info:
  title: Aether Public API
  version: 0.1.0
  description: >-
    The versioned, public Aether REST API. Authenticate with an `aether_`
    platform API key or a session token.
servers:
  - url: https://api.runaether.dev/v1
security:
  - bearerAuth: []
paths:
  /integration-search:
    get:
      tags:
        - plugins
      summary: Search integrations by name
      description: >-
        Finds integrations across Aether's own MCP servers, Aether's integration
        directory and the organization's plugin marketplaces (the official
        Claude Code and Codex ones), one result per integration: one of Aether's
        servers the organization's catalog holds, installed already; an
        integration of the directory, installed by its key; or a plugin a
        marketplace lists, installed by the marketplace's URL and its name. The
        MCP registry is searched apart (searchIntegrationRegistry). Every word
        of q must be in an integration's name, an alias, its description or its
        category, or in a marketplace plugin's name or category: a plugin's
        description is its vendor's copy, which names other products. Aether's
        servers and the directory's integrations come first, then the
        marketplaces' plugins, each group those matching by name or alias before
        the others. Aether's servers and a directory entry hide every
        marketplace plugin of their names, the one an entry prefers included. An
        integration's source says what it contains and its
        default_credential_policy whose connection it takes; a marketplace's
        listing does not say what a plugin bundles, which Aether reads from its
        files when it installs it. installed names the card of what the
        organization installed: one of Aether's servers; an integration's plugin
        or, installed as its server alone, that server; the organization's
        plugin of a marketplace plugin's name. It is absent for what is not
        installed. sources reports every source with its status: a marketplace
        Aether could not read is unavailable, with why, and contributes no
        results; it is never reported as listing none. A marketplace's listing
        is read again once it is ten minutes old, and a marketplace that could
        not be read is tried again a minute later.
      operationId: searchIntegrations
      parameters:
        - description: >-
            What to find: each of its words matched, ignoring case, against each
            integration's name and aliases, then its description and category; a
            marketplace plugin's against its name, then its category.
          explode: false
          in: query
          name: q
          required: true
          schema:
            description: >-
              What to find: each of its words matched, ignoring case, against
              each integration's name and aliases, then its description and
              category; a marketplace plugin's against its name, then its
              category.
            maxLength: 100
            minLength: 1
            pattern: \S
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationSearchResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
          description: Forbidden
        '422':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ErrorResponse'
                  - $ref: '#/components/schemas/PluginErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal Server Error
components:
  schemas:
    IntegrationSearchResponse:
      additionalProperties: false
      properties:
        results:
          description: >-
            One per integration whose name, aliases, description or category
            hold every word of the query (a marketplace plugin by its name and
            category alone: its description is its vendor's copy): Aether's
            servers and a directory entry hide every marketplace plugin of their
            names, the one an entry prefers included, and of the plugins
            marketplaces list under one name the first that matches is the
            result. Aether's servers and the directory's integrations come
            first, then the marketplaces' plugins, each group those whose name
            or aliases hold every word before the others; within each, Aether's
            servers, then the directory's, then each marketplace's in turn.
          items:
            $ref: '#/components/schemas/IntegrationSearchResult'
          type: array
        sources:
          description: >-
            The integration directory, then each of the organization's
            marketplaces, each with its status.
          items:
            $ref: '#/components/schemas/IntegrationSearchSource'
          type: array
      required:
        - sources
        - results
      type: object
    ErrorResponse:
      additionalProperties: false
      properties:
        code:
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
            - account_deleting
          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
            - 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
    IntegrationSearchResult:
      discriminator:
        mapping:
          aether: '#/components/schemas/IntegrationSearchAetherResult'
          integration: '#/components/schemas/IntegrationSearchIntegrationResult'
          plugin: '#/components/schemas/IntegrationSearchPluginResult'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchAetherResult'
        - $ref: '#/components/schemas/IntegrationSearchIntegrationResult'
        - $ref: '#/components/schemas/IntegrationSearchPluginResult'
    IntegrationSearchSource:
      discriminator:
        mapping:
          directory: '#/components/schemas/IntegrationSearchDirectorySource'
          marketplace: '#/components/schemas/IntegrationSearchMarketplaceSource'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchDirectorySource'
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceSource'
    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
    IntegrationSearchAetherResult:
      additionalProperties: false
      properties:
        installed:
          $ref: '#/components/schemas/IntegrationSearchInstalled'
        kind:
          enum:
            - aether
          type: string
        server:
          $ref: '#/components/schemas/IntegrationSearchAetherIntegration'
      required:
        - kind
        - server
        - installed
      type: object
    IntegrationSearchIntegrationResult:
      additionalProperties: false
      properties:
        installed:
          $ref: '#/components/schemas/IntegrationSearchInstalled'
        integration:
          $ref: '#/components/schemas/DirectoryIntegration'
        kind:
          enum:
            - integration
          type: string
      required:
        - kind
        - integration
      type: object
    IntegrationSearchPluginResult:
      additionalProperties: false
      properties:
        installed:
          $ref: '#/components/schemas/IntegrationSearchInstalled'
        kind:
          enum:
            - plugin
          type: string
        marketplace:
          $ref: '#/components/schemas/PluginMarketplace'
        not_loaded_by:
          description: >-
            The agents whose tasks would run without it, where its listing
            already tells; Aether reads the rest of each agent's rules from its
            files at install.
          items:
            $ref: '#/components/schemas/IntegrationSearchRefusal'
          type: array
        plugin:
          $ref: '#/components/schemas/MarketplacePlugin'
      required:
        - kind
        - marketplace
        - plugin
        - not_loaded_by
      type: object
    IntegrationSearchDirectorySource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - directory
          type: string
        status:
          $ref: '#/components/schemas/IntegrationSearchDirectoryStatus'
      required:
        - kind
        - status
      type: object
    IntegrationSearchMarketplaceSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - marketplace
          type: string
        marketplace:
          $ref: '#/components/schemas/PluginMarketplace'
        status:
          $ref: '#/components/schemas/IntegrationSearchMarketplaceStatus'
      required:
        - kind
        - marketplace
        - status
      type: object
    IntegrationSearchInstalled:
      additionalProperties: false
      properties:
        id:
          description: The plugin's id, or the MCP server's.
          format: uuid
          type: string
        kind:
          enum:
            - plugin
            - mcp_server
          type: string
      required:
        - kind
        - id
      type: object
    IntegrationSearchAetherIntegration:
      additionalProperties: false
      properties:
        aliases:
          description: Other words it is searched by, lowercase.
          items:
            type: string
          type: array
        category:
          description: The directory's category the gallery shows it under.
          enum:
            - source_control
            - issue_tracking
            - documents
            - design
            - chat
            - crm
            - database
            - hosting
            - ci
            - observability
            - analytics
            - payments
            - email
            - knowledge
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        description:
          type: string
        display_name:
          type: string
        key:
          description: The server's key in the catalog.
          type: string
        url:
          type: string
      required:
        - key
        - display_name
        - description
        - category
        - aliases
        - url
        - default_credential_policy
      type: object
    DirectoryIntegration:
      additionalProperties: false
      properties:
        aliases:
          description: Other words the integration is searched by, lowercase.
          items:
            type: string
          type: array
        category:
          enum:
            - source_control
            - issue_tracking
            - documents
            - design
            - chat
            - crm
            - database
            - hosting
            - ci
            - observability
            - analytics
            - payments
            - email
            - knowledge
          type: string
        default_credential_policy:
          enum:
            - creator
            - org
          type:
            - string
            - 'null'
        description:
          type: string
        display_name:
          type: string
        homepage:
          type: string
        installs_as:
          description: >-
            server: the integration is its MCP server alone, added to the
            catalog. plugin: a plugin bundling its MCP servers and its skills.
          enum:
            - server
            - plugin
          type: string
        key:
          description: >-
            The integration's name in the directory, and the key of its MCP
            server; installed as a plugin, the plugin's name.
          type: string
        skill_count:
          description: >-
            How many skills installing it bundles, as its source held them when
            Aether last checked the directory; 0 for one installed as its MCP
            server alone.
          format: int64
          minimum: 0
          type: integer
        source:
          discriminator:
            mapping:
              definition: '#/components/schemas/DirectoryDefinitionSource'
              marketplace: '#/components/schemas/DirectoryMarketplaceSource'
            propertyName: kind
          oneOf:
            - $ref: '#/components/schemas/DirectoryMarketplaceSource'
            - $ref: '#/components/schemas/DirectoryDefinitionSource'
      required:
        - key
        - display_name
        - description
        - homepage
        - category
        - aliases
        - default_credential_policy
        - installs_as
        - skill_count
        - source
      type: object
    PluginMarketplace:
      additionalProperties: false
      properties:
        display_name:
          type: string
        name:
          type: string
        url:
          type: string
      required:
        - name
        - display_name
        - url
      type: object
    IntegrationSearchRefusal:
      additionalProperties: false
      properties:
        agent:
          enum:
            - claude_code
            - codex
          type: string
        reason:
          description: 'codex_plugin_name: its name ends in ''.'', which Codex does not load.'
          enum:
            - codex_plugin_name
          type: string
      required:
        - agent
        - reason
      type: object
    MarketplacePlugin:
      additionalProperties: false
      properties:
        category:
          type: string
        description:
          type: string
        name:
          type: string
        unsupported_reason:
          type:
            - string
            - 'null'
      required:
        - name
        - description
        - category
        - unsupported_reason
      type: object
    IntegrationSearchDirectoryStatus:
      additionalProperties: false
      properties:
        state:
          enum:
            - available
          type: string
      required:
        - state
      type: object
    IntegrationSearchMarketplaceStatus:
      discriminator:
        mapping:
          available: '#/components/schemas/IntegrationSearchMarketplaceRead'
          unavailable: '#/components/schemas/IntegrationSearchMarketplaceUnavailable'
        propertyName: state
      oneOf:
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceRead'
        - $ref: '#/components/schemas/IntegrationSearchMarketplaceUnavailable'
    DirectoryDefinitionSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - definition
          type: string
        servers:
          items:
            $ref: '#/components/schemas/DirectoryDefinitionServer'
          minItems: 1
          type: array
        skills:
          $ref: '#/components/schemas/DirectorySkillsSource'
      required:
        - kind
        - servers
      type: object
    DirectoryMarketplaceSource:
      additionalProperties: false
      properties:
        kind:
          enum:
            - marketplace
          type: string
        marketplace_url:
          type: string
        plugin:
          description: >-
            The name the marketplace lists the plugin under: the integration's
            key.
          type: string
      required:
        - kind
        - marketplace_url
        - plugin
      type: object
    IntegrationSearchMarketplaceRead:
      additionalProperties: false
      properties:
        commit:
          description: >-
            The commit of the marketplace's default branch the listing was read
            at.
          type: string
        read_at:
          description: >-
            When Aether read the listing; searches use it until it is ten
            minutes old, then read the marketplace again.
          format: date-time
          type: string
        state:
          enum:
            - available
          type: string
      required:
        - state
        - commit
        - read_at
      type: object
    IntegrationSearchMarketplaceUnavailable:
      additionalProperties: false
      properties:
        checked_at:
          description: >-
            When Aether last tried to read it; searches report it unavailable
            for a minute after, then try again.
          format: date-time
          type: string
        detail:
          description: What went wrong, safe to show an admin.
          type: string
        failure:
          description: >-
            Why it could not be read, as installing from it would be refused
            (plugin_source_<failure>).
          enum:
            - address_refused
            - not_public
            - unreachable
            - not_found
            - unsupported
            - too_large
            - invalid
          type: string
        state:
          enum:
            - unavailable
          type: string
      required:
        - state
        - failure
        - detail
        - checked_at
      type: object
    DirectoryDefinitionServer:
      additionalProperties: false
      properties:
        key:
          type: string
        url:
          type: string
      required:
        - key
        - url
      type: object
    DirectorySkillsSource:
      additionalProperties: false
      properties:
        path:
          description: The directory holding the skills; empty for the repository's root.
          type: string
        ref:
          description: The branch or tag followed; null for the default branch.
          type:
            - string
            - 'null'
        repository_url:
          type: string
      required:
        - repository_url
        - path
        - ref
      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.