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

# Get represented athletes, sending the filters in a body

> The same roster as GET /agent/athletes, served by the same handler. It exists only so a client can send the column filters in a JSON body instead of spelling them out in a query string, which gets long once several columns are filtered at once.
     *
     * Nothing behaves differently: the parameter names, the filter shapes, the pagination and the response are identical, and a parameter may be sent in the body or the query string. Read the GET for what each one means.
     *
     * Sending `view: removal` switches it to the Confirm Client Removal list instead (ENG-1465). That exists because Select All cannot be listed from what the grid loaded: the agent may have selected rows across pages they never opened. It resolves the selection exactly the way DELETE /agent/athletes will, taking the same `filter` and `excluded_athlete_id`, so the modal can only ever name the athletes the removal would actually take off the roster.
     *
     * Rows ticked by hand do not need it. The client already has those rows and can send their ids straight to the delete.



## OpenAPI

````yaml /storage/api-docs/api-docs.json post /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:
    post:
      tags:
        - Agent - Athletes
      summary: Get represented athletes, sending the filters in a body
      description: >-
        The same roster as GET /agent/athletes, served by the same handler. It
        exists only so a client can send the column filters in a JSON body
        instead of spelling them out in a query string, which gets long once
        several columns are filtered at once.
             *
             * Nothing behaves differently: the parameter names, the filter shapes, the pagination and the response are identical, and a parameter may be sent in the body or the query string. Read the GET for what each one means.
             *
             * Sending `view: removal` switches it to the Confirm Client Removal list instead (ENG-1465). That exists because Select All cannot be listed from what the grid loaded: the agent may have selected rows across pages they never opened. It resolves the selection exactly the way DELETE /agent/athletes will, taking the same `filter` and `excluded_athlete_id`, so the modal can only ever name the athletes the removal would actually take off the roster.
             *
             * Rows ticked by hand do not need it. The client already has those rows and can send their ids straight to the delete.
      operationId: agentGetAthletesPost
      requestBody:
        required: false
        content:
          application/json:
            schema:
              properties:
                page:
                  type: integer
                  example: 1
                item:
                  type: integer
                  example: 10
                isMedia:
                  type: string
                  enum:
                    - 'Y'
                    - 'N'
                  example: 'Y'
                isAudience:
                  type: string
                  enum:
                    - 'Y'
                    - 'N'
                  example: 'Y'
                job_id:
                  type: integer
                  example: 2740
                  nullable: true
                sort_column:
                  description: 'Same as the GET. Ignored under `view: removal`.'
                  type: string
                  enum:
                    - client
                    - profile
                    - tax_documents
                    - in_progress_deals
                    - earnings
                    - instagram
                    - tiktok
                    - twitter
                  example: earnings
                sort_order:
                  type: string
                  enum:
                    - asc
                    - desc
                  example: desc
                filter:
                  description: >-
                    Keyed by column, same shapes the GET documents. Under `view:
                    removal` this is what Select All means, so send the filter
                    the grid is showing. Omitting it while a column is filtered
                    widens the selection to the entire roster and the modal will
                    name athletes the agent never saw.
                  type: object
                  example:
                    client:
                      - id: 28550
                    tax_documents:
                      - id: approved
                    instagram:
                      filterType: number
                      type: greaterThan
                      filter: 10000
                view:
                  description: >-
                    Omit for the roster. `removal` returns only athlete_id,
                    profile_photo, name and university, with no audience, social
                    or activity data, which is what makes paging the whole
                    selection cheap.
                  type: string
                  enum:
                    - removal
                  example: removal
                is_all_selected:
                  description: >-
                    Whether Select All was used. The boolean, the strings true
                    and 1, and the number 1 are all accepted, matching DELETE
                    /agent/athletes.
                  example: true
                excluded_athlete_id:
                  description: >-
                    Athletes the agent unticked after Select All. Read only when
                    is_all_selected is set, and taken out of meta.total as well
                    as data, so the page count shrinks as the agent unticks.
                  type: array
                  items:
                    type: integer
                  example:
                    - 28552
              type: object
      responses:
        '200':
          description: >-
            Roster page. Same body as GET /agent/athletes, or the four-field
            removal rows under `view: removal`, paged the same way in either
            case.
          content:
            application/json:
              schema:
                properties:
                  data:
                    description: >-
                      Shown for `view: removal`. Without it the rows are the
                      full roster shape.
                    type: array
                    items:
                      properties:
                        athlete_id:
                          description: >-
                            Send this back as athlete_ids to the delete. Not the
                            agent_athletes row id.
                          type: integer
                          example: 28550
                        profile_photo:
                          type: string
                          nullable: true
                        name:
                          type: string
                          example: Brandon Wimbaush
                        university:
                          type: string
                          example: University of Notre Dame
                          nullable: true
                      type: object
                  meta:
                    properties:
                      total:
                        description: >-
                          The size of the selection, so the modal can say how
                          many clients are being removed.
                        type: integer
                        example: 42
                    type: object
                  links:
                    properties:
                      next:
                        type: string
                        nullable: true
                    type: object
                type: object
      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.