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

# Set a member's end-user notifications permission

> Gives (`granted: true`) or takes away the permission to send one message to many of the MSP's end users through the end-user Teams app, as the switch on the member's Roles & Access page does. Only a member with the User role can be given it; an admin or owner sends through their role, and a Viewer or Chat only member cannot hold it (400). Workspace admins and tenant API keys may call it; a key acting on behalf of a non-admin gets 403. Returns the membership. 404 for an unknown member, 409 when their role changed to one that cannot hold the permission during the request. The change is recorded in the member's activity with who made it.



## OpenAPI

````yaml https://api.neoagent.io/public-api/openapi.json put /public-api/memberships/{user_id}/end-user-notifications-access
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/memberships/{user_id}/end-user-notifications-access:
    put:
      tags:
        - Memberships
      summary: Set a member's end-user notifications permission
      description: >-
        Gives (`granted: true`) or takes away the permission to send one message
        to many of the MSP's end users through the end-user Teams app, as the
        switch on the member's Roles & Access page does. Only a member with the
        User role can be given it; an admin or owner sends through their role,
        and a Viewer or Chat only member cannot hold it (400). Workspace admins
        and tenant API keys may call it; a key acting on behalf of a non-admin
        gets 403. Returns the membership. 404 for an unknown member, 409 when
        their role changed to one that cannot hold the permission during the
        request. The change is recorded in the member's activity with who made
        it.
      operationId: public_api.memberships_end_user_notifications_access_put
      parameters:
        - in: path
          name: user_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EndUserNotificationsAccessRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/MembershipInfo'
                  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:
    EndUserNotificationsAccessRequest:
      properties:
        granted:
          title: Granted
          type: boolean
      required:
        - granted
      title: EndUserNotificationsAccessRequest
      type: object
    MembershipInfo:
      properties:
        all_workflows_access:
          default: false
          title: All Workflows Access
          type: boolean
        email:
          title: Email
          type: string
        end_user_notifications_access:
          default: false
          title: End User Notifications Access
          type: boolean
        identity_tenant_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Identity Tenant Id
        last_active_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          default: null
          title: Last Active At
        role:
          $ref: '#/components/schemas/UserRole'
        status:
          title: Status
          type: string
        user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: User Id
        user_name:
          title: User Name
          type: string
      required:
        - identity_tenant_id
        - user_id
        - user_name
        - email
        - role
        - status
      title: MembershipInfo
      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
    UserRole:
      description: Define the possible roles for a user in the tenant.
      enum:
        - - OWNER
          - >-
            Full access to the tenant, plus workspace chat history and owner
            management
        - - ADMIN
          - Full access to the tenant
        - - USER
          - Can see/edit workflows shared with them and create new workflows
        - - VIEWER
          - Can see and run the workflows shared with them
        - - CHAT_ONLY
          - >-
            Can message the chat agents they are given, and cannot sign in to
            the dashboard
      title: UserRole
      type: array
    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.