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

# Remove several athletes from the agent's client list

> Backs the Remove Clients modal, where athletes are selected with checkboxes and confirmed together (ENG-1465).
     *
     * All-or-nothing: every selected athlete is verified before anything is removed, so a selection containing an athlete the agent does not represent removes nobody and returns ATHLETE_NOT_LINKED listing the rejected ids. That keeps the modal able to say exactly what happened.
     *
     * Each athlete is then removed through the same path as DELETE /agent/athletes/{athleteId}, so notifications, payout-bypass recalculation and the Segment event stay per athlete. Historical payout records are untouched: an agent keeps their pay history for deals they managed.
     *
     * Two ways to say what to remove. List the ids in `athlete_ids`, or send `is_all_selected` for Select All and let the server resolve them. Select All means every row the current filter matches, not the current page, so send the same `filter` the roster list was showing — without it, Select All means the whole roster. Rows the agent then unchecked go in `excluded_athlete_id`. The convention matches the partner bulk-hire and content-folder endpoints.



## OpenAPI

````yaml /storage/api-docs/api-docs.json delete /agent/athletes
openapi: 3.0.0
info:
  title: MOGL Core API
  description: >-
    MOGL Platform Core API — powering athlete NIL deals, brand partnerships,
    agent management, payments, messaging, and more.
     *
     * ## Authentication
     * - **JWT Bearer Token**: Most endpoints require a Bearer token obtained via `/api/login`.
     * - **Server-to-Server API Key**: Internal/lambda/cron endpoints use an `X-API-KEY` header.
     *
     * ## Rate Limiting
     * - Registration & login endpoints: 4–15 requests per minute
     * - Public/influencer endpoints: 200 requests per minute
     * - Authenticated endpoints: standard Laravel throttle
  version: 1.0.0
servers:
  - url: http://localhost/mogl/mogl-backend/api
    description: Local
  - url: https://dev-api.mogl.online/api
    description: Dev
  - url: https://staging-api.mogl.online/api
    description: Staging
  - url: https://api.mogl.online/api
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Authentication
    description: Login, registration, password reset
  - name: User Registration - Common
    description: Common user registration & email check
  - name: User Registration - Athlete
    description: Athlete registration & onboarding steps
  - name: User Registration - Partner
    description: Partner/Brand registration & onboarding steps
  - name: User Registration - Agent
    description: Agent registration & onboarding steps
  - name: User Registration - Fan
    description: Fan registration & onboarding steps
  - name: User Profile
    description: User profile management, settings, social media
  - name: Athlete
    description: 'Athlete-specific endpoints: search, details, availability'
  - name: Athlete - Availability Confirmation
    description: Post-hiring availability confirmation workflow
  - name: Athlete - NIL Feed
    description: Athlete NIL feed and partner search
  - name: Athlete - AI Assistant
    description: >-
      AI-powered job assistant for athletes — chat, conversation history, read
      state, and clarification drafts
  - name: Athlete - AI Waitlist
    description: AI Athlete Assistant waitlist status, social proof, and joining
  - name: Partner
    description: Partner/Brand-specific endpoints
  - name: Partner - External Job
    description: External job link & applicant management
  - name: Partner - Deliverable Report
    description: Deliverable detail reports for brands
  - name: Partner - Screening Questions
    description: Screening question reports
  - name: Partner - Contract Management
    description: Brand contract management with athletes
  - name: Partner - Content Library
    description: Brand content library for deliverable assets
  - name: Agent
    description: Agent profile, athlete management, contracts
  - name: Agent - Athletes
    description: Agent-athlete relationship management
  - name: Agent - Stripe
    description: Agent payment methods & billing via Stripe
  - name: Agent - Pay
    description: 'Agent-wide payout feed: money MOGL sends the agent through Stripe Express'
  - name: Agent - Contracts
    description: Agent athlete contract management
  - name: Agent - Availability Confirmation
    description: Agent managing athlete job availability
  - name: Agent - Roster Import
    description: >-
      CSV client list import through CSVBox (ENG-1619 / ENG-1702): session,
      CSVBox webhook, progress, row results, retry
  - name: Agent - Roster Pages
    description: >-
      ENG-1685: My Roster Link, public roster directory, public roster page, and
      roster SEO URL resolution. A roster is the agent's current linked
      athletes; nothing is stored separately.
  - name: Jobs
    description: Job/deal CRUD, search, invitations, hiring, deliverables
  - name: Deals
    description: Deal listing, my deals, bulk operations
  - name: Deal Folder
    description: >-
      Deal folder file workflow — uploads, replacements, approvals, revisions,
      comments. Accessible by athlete, partner/brand, agent, and iOS clients
      (per-action authorisation enforced server-side).
  - name: Deal Folder iOS API
    description: >-
      iOS-only direct-to-S3 multipart upload endpoints for deal folder files
      (initiate/complete for new uploads and replacements). Web clients should
      use the standard `Deal Folder` upload/replace endpoints instead.
  - name: Chat
    description: Messaging, chat contacts, notifications
  - name: Notifications
    description: Notification preferences, in-app notifications
  - name: Payments
    description: Stripe payments, payment history, cards, bulk pay
  - name: Subscription
    description: Brand subscription plans & management
  - name: Public Pages
    description: Public content endpoints (no auth required)
  - name: Public - Influencer/SEO
    description: Public influencer discovery, sitemaps, directories
  - name: Services
    description: Athlete service marketplace
  - name: iOS Device
    description: iOS device tokens, live activities
  - name: Onboarding Tutorial
    description: Onboarding tutorial progress
  - name: MOGL Rosters
    description: Roster management & display
  - name: Internal / Cron
    description: Server-to-server and cron job endpoints
  - name: Internal / AI Assistant Tools
    description: >-
      Server-to-server Athlete Assistant tool gateway used by mogl-ai-service.
      Eight Laravel tools share POST /internal/ai-assistant/tools/{tool}.
      search_kb is Python-local and is not in this path enum.
  - name: Internal / QA Scenario Lab
    description: >-
      Feature-flagged DEV/STAGING-only endpoints called by the authorized Back
      Office QA Scenario Lab.
  - name: Affiliate
    description: Athlete affiliate links & tracking
  - name: Internal
    description: Internal
  - name: Public - Social Linking
    description: Public - Social Linking
paths:
  /agent/athletes:
    delete:
      tags:
        - Agent - Athletes
      summary: Remove several athletes from the agent's client list
      description: >-
        Backs the Remove Clients modal, where athletes are selected with
        checkboxes and confirmed together (ENG-1465).
             *
             * All-or-nothing: every selected athlete is verified before anything is removed, so a selection containing an athlete the agent does not represent removes nobody and returns ATHLETE_NOT_LINKED listing the rejected ids. That keeps the modal able to say exactly what happened.
             *
             * Each athlete is then removed through the same path as DELETE /agent/athletes/{athleteId}, so notifications, payout-bypass recalculation and the Segment event stay per athlete. Historical payout records are untouched: an agent keeps their pay history for deals they managed.
             *
             * Two ways to say what to remove. List the ids in `athlete_ids`, or send `is_all_selected` for Select All and let the server resolve them. Select All means every row the current filter matches, not the current page, so send the same `filter` the roster list was showing — without it, Select All means the whole roster. Rows the agent then unchecked go in `excluded_athlete_id`. The convention matches the partner bulk-hire and content-folder endpoints.
      operationId: agentRemoveAthletes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                athlete_ids:
                  description: >-
                    Athlete user ids. Required unless is_all_selected is set.
                    All must be on the authenticated agent's roster.
                  type: array
                  items:
                    type: integer
                  minItems: 1
                  example:
                    - 28550
                    - 28551
                is_all_selected:
                  description: >-
                    Select All. The server resolves the ids from the filtered
                    roster, so the client does not have to page through it
                    first. The boolean, the strings true and 1, and the number 1
                    are all accepted.
                  type: boolean
                  example: true
                filter:
                  description: >-
                    Only read with is_all_selected, and then it defines what
                    `all` means. Same shapes GET /agent/athletes documents.
                  type: object
                excluded_athlete_id:
                  description: >-
                    Only read with is_all_selected. Rows the agent unchecked
                    after selecting all.
                  type: array
                  items:
                    type: integer
                  example:
                    - 28552
              type: object
      responses:
        '200':
          description: Representations ended
          content:
            application/json:
              schema:
                properties:
                  message:
                    type: string
                    example: Clients removed.
                  data:
                    properties:
                      athlete_ids:
                        description: The athletes that were removed.
                        type: array
                        items:
                          type: integer
                        example:
                          - 28550
                          - 28551
                    type: object
                type: object
        '400':
          description: >-
            The agent is not approved, the selection contains an athlete they do
            not represent, or Select All resolved to nobody because the filter
            matched nothing or every row was unchecked. Nothing was removed. The
            last case carries no error_code.
          content:
            application/json:
              schema:
                properties:
                  message:
                    type: string
                    example: You can only manage athletes you represent.
                  error_code:
                    type: string
                    enum:
                      - AGENT_NOT_APPROVED
                      - ATHLETE_NOT_LINKED
                    example: ATHLETE_NOT_LINKED
                    nullable: true
                  errors:
                    properties:
                      athlete_ids:
                        description: The ids that were rejected.
                        type: array
                        items:
                          type: integer
                        example:
                          - 28551
                    type: object
                type: object
        '422':
          description: athlete_ids missing or empty, and is_all_selected was not sent.
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      description: >-
        JWT Bearer token authentication. Use the /api/login endpoint to obtain a
        token.
      scheme: bearer
      bearerFormat: JWT

````

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