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

# List a Teams channel's client tenants

> The client tenants a TEAMS channel's app is installed in or has an install link for, each with its company, the app version it holds compared with the last publish, and what stops Neo publishing there, if anything. 400 on a channel that is not TEAMS.



## OpenAPI

````yaml https://api.neoagent.io/public-api/openapi.json get /public-api/channels/{channel_id}/teams-installs
openapi: 3.1.0
info:
  description: >-
    Neo's public contract for the dashboard ChatAgent, partner integrations, and
    MSP automation. Every response is wrapped in a `{data, meta}` envelope;
    errors use `{error: {code, message, details?}, meta: {request_id}}`.
    Authenticate with a `Bearer neo_sk_<env>_<secret>` API key (service account)
    or a Microsoft Entra ID JWT (dashboard user). Signed-URL endpoints (end-user
    feedback links) take a `signature` query parameter instead.
  title: Neo Public API
  version: 1.0.0
servers:
  - url: https://api.neoagent.io
security: []
tags:
  - description: Service metadata — health, OpenAPI.
    name: Meta
  - description: Agents and workflows — read, version history, delete, stats.
    name: Agents
  - description: Agent/workflow execution history, sub-resources, retry/cancel.
    name: Executions
  - description: >-
      Every tool call the tenant's agents made in the last 30 days, within the
      caller's workflow access.
    name: Audit Log
  - description: PSA webhook events and their workflow-match results.
    name: Callbacks
  - description: Technician-in-the-loop approval requests.
    name: TIL requests
  - description: RMM script executions triggered by agents.
    name: RMM scripts
  - description: Dispatch-agent field-update decisions.
    name: Dispatch
  - description: The authenticated tenant.
    name: Tenant
  - description: Agent-builder schema catalogs (raw JSON payloads).
    name: Schemas
  - description: Escalate to the Neo team (HubSpot ticket).
    name: Escalation
  - description: Tenant settings.
    name: Settings
  - description: Tenant API-key management (dashboard JWT only).
    name: API keys
  - description: End-user feedback links (signed-URL auth).
    name: Feedback
  - description: End-client companies (CRUD + bulk-update).
    name: End companies
  - description: Channels — bind a CONVERSATIONAL agent to a transport (Teams or Slack).
    name: Channels
  - description: PSA/RMM/M365 integration status and connection management.
    name: Integrations
  - description: Technician roster (controls TIL routing and paging).
    name: Technicians
  - description: Future runs queued for TRIGGERED agents.
    name: Scheduled work
  - description: Subscription state and customer-facing credit usage (no provider $).
    name: Billing
  - description: Inbox messages and announcements.
    name: Inbox & Comms
  - description: Tenant-authored agent skills (CRUD) and the built-in skill catalog.
    name: Skills
paths:
  /public-api/channels/{channel_id}/teams-installs:
    get:
      tags:
        - Channels
      summary: List a Teams channel's client tenants
      description: >-
        The client tenants a TEAMS channel's app is installed in or has an
        install link for, each with its company, the app version it holds
        compared with the last publish, and what stops Neo publishing there, if
        anything. 400 on a channel that is not TEAMS.
      operationId: public_api.channels_teams_installs_get
      parameters:
        - in: path
          name: channel_id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: '#/components/schemas/PublicTeamsInstall'
                    type: array
                  meta:
                    $ref: '#/components/schemas/SuccessMeta'
                required:
                  - data
                  - meta
                type: object
          description: Success.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Bad request — malformed input.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Unauthenticated — missing or invalid credentials.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Forbidden — authenticated but not allowed.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Not found.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Conflict — the resource is in a state that blocks this operation.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Request validation failed.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Rate limited — see Retry-After.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Internal server error.
      security:
        - bearerAuth: []
components:
  schemas:
    PublicTeamsInstall:
      description: >-
        A client tenant a TEAMS channel's app is installed in, or has an install
        link for.
      properties:
        company_names:
          items:
            type: string
          title: Company Names
          type: array
        consented_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Consented At
        created_at:
          format: date-time
          title: Created At
          type: string
        end_client_tenant_id:
          title: End Client Tenant Id
          type: string
        install_id:
          title: Install Id
          type: string
        link_expires_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Link Expires At
        org_wide_install_confirmed_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Org Wide Install Confirmed At
        publish_issue:
          anyOf:
            - $ref: '#/components/schemas/InstallPublishIssue'
            - type: 'null'
        publish_issue_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Publish Issue At
        publish_issue_detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Publish Issue Detail
        published_manifest_version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Published Manifest Version
        version_state:
          anyOf:
            - enum:
                - UP_TO_DATE
                - OLDER_VERSION
                - UNKNOWN
              type: string
            - type: 'null'
          title: Version State
      required:
        - install_id
        - end_client_tenant_id
        - company_names
        - consented_at
        - org_wide_install_confirmed_at
        - link_expires_at
        - published_manifest_version
        - version_state
        - publish_issue
        - publish_issue_detail
        - publish_issue_at
        - created_at
      title: PublicTeamsInstall
      type: object
    SuccessMeta:
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        request_id:
          format: uuid
          type: string
        timings_ms:
          additionalProperties:
            type: number
          type: object
        warnings:
          description: >-
            Non-fatal warnings about the created/updated resource (e.g. an
            unhealthy PSA callback).
          items:
            type: string
          type: array
      required:
        - request_id
        - timings_ms
      type: object
    ErrorEnvelope:
      properties:
        error:
          properties:
            code:
              description: Stable machine-readable error code.
              type: string
            details:
              additionalProperties: true
              type: object
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          properties:
            request_id:
              format: uuid
              type:
                - string
                - 'null'
          type: object
      required:
        - error
        - meta
      type: object
    InstallPublishIssue:
      description: >-
        What stops Neo publishing a channel's Teams app into one tenant: its
        last publish there failed,

        or the daily sign-in check found the stored sign-in unusable.


        RETRYING — Microsoft throttled, failed, or still hid the app; the daily
        resend can finish it, and

        so can publishing again.

        NEEDS_INSTALL_LINK — the stored admin sign-in is gone, expired, or no
        longer grants publishing.

        NEEDS_TEAMS_ADMIN — Graph refused the catalog call (403): the admin
        lacks the Teams admin role, or

        the tenant blocks custom apps.

        NEEDS_AVAILABILITY — the app is in the tenant but hidden from the admin
        by its availability.

        FAILED — anything else; the detail says what Microsoft, or Neo,
        reported.
      enum:
        - RETRYING
        - NEEDS_INSTALL_LINK
        - NEEDS_TEAMS_ADMIN
        - NEEDS_AVAILABILITY
        - FAILED
      title: InstallPublishIssue
      type: string
    Pagination:
      properties:
        has_more:
          type: boolean
        next_cursor:
          type:
            - string
            - 'null'
      required:
        - next_cursor
        - has_more
      type: object
  securitySchemes:
    bearerAuth:
      description: >-
        `Authorization: Bearer <token>` where `<token>` is either a
        `neo_sk_<env>_<secret>` API key (service account) or a Microsoft Entra
        ID access token (dashboard user).
      scheme: bearer
      type: http

````

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