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

# Send Chat Message (/api-reference/fansly/chat-messages/send-chat-message)

Send a new message to a chat (messaging group). Provide `text`, one or more media IDs in `mediaFiles`, or both. Media must first be uploaded via the Upload Media endpoint (use the returned `fansly_media_` ID).

Attached media can be gated with any combination of the `requirePurchase`, `requireSubscription`, and `requireFollow` options (they stack — e.g. a media can require both a subscription and a purchase). The gating applies to all attached media: a single file, or the whole bundle when several are attached. When none of the gating options are sent, media keeps the default visibility.

Any attached media can be given a free preview — a separate media shown unlocked while the paid media is locked — via `previews`, a map of `mediaFiles` handle to preview handle.

## OpenAPI

````yaml https://app.onlyfansapi.com/scribe-fansly-docs/openapi.yaml post /api/fansly/{fanslyAccount}/chats/{chat_id}/messages
openapi: 3.0.3
info:
  title: Fansly API Documentation
  description: ""
  version: 1.0.0
servers:
  - url: https://app.onlyfansapi.com
security:
  - default: []
tags:
  - name: Account
    description: Endpoints for your linked Fansly accounts
  - name: Chat Messages
    description: Endpoints for Fansly chats (messaging groups)
  - name: Chats
    description: Endpoints for Fansly chats (messaging groups)
  - name: Connect Fansly Account
    description: ""
  - name: Earnings
    description: Endpoints for Fansly Earnings — wallets, balances, transactions,
      payouts, and statements.
  - name: Followers
    description: Endpoints for Fansly followers.
  - name: Following
    description: Endpoints for the accounts a Fansly Account is following.
  - name: Lists
    description: Endpoints for Fansly subscriber/fan lists (e.g. "VIP", "Spenders").
  - name: Mass Messaging
    description: Endpoints for Fansly mass messages (broadcasts) — send one message
      to many recipients at once, and manage scheduled broadcasts.
  - name: Media
    description: Upload media for use in Fansly posts and messages
  - name: Posts
    description: Endpoints for Fansly wall posts.
  - name: Profile Statistics
    description: Endpoints for Fansly Profile Statistics (viewer engagement insights).
  - name: Subscribers
    description: Endpoints for Fansly subscribers and subscription tiers.
  - name: Subscription Discounts
    description: Endpoints for Fansly subscription discounts (shown as "Gift Links"
      in the Fansly Dashboard).
  - name: Top Supporters
    description: Endpoints for the Fansly "Top Supporters" view — see who spends the
      most and what they spend on.
  - name: Tracking Links
    description: Endpoints for Fansly tracking links — per-source attribution links
      (e.g. "Twitter bio", "FYP", "Search").
  - name: Users
    description: APIs for fetching Fansly users
  - name: Walls
    description: Endpoints for Fansly walls — the tabbed feeds on a creator profile
      that posts are published to.
paths:
  /api/fansly/{fanslyAccount}/chats/{chat_id}/messages:
    parameters:
      - in: path
        name: fanslyAccount
        description: The Fansly Account ID
        example: fansly_acct_XXXXXXXXXXXXXXX
        required: true
        schema:
          type: string
      - in: path
        name: chat_id
        description: The Fansly chat (group) ID.
        example: "200000000000000001"
        required: true
        schema:
          type: string
    post:
      summary: Send Chat Message
      operationId: sendChatMessage
      description: >-
        Send a new message to a chat (messaging group). Provide `text`, one or
        more media IDs in `mediaFiles`, or both. Media must first be uploaded
        via the Upload Media endpoint (use the returned `fansly_media_` ID).


        Attached media can be gated with any combination of the
        `requirePurchase`, `requireSubscription`, and `requireFollow` options
        (they stack — e.g. a media can require both a subscription and a
        purchase). The gating applies to all attached media: a single file, or
        the whole bundle when several are attached. When none of the gating
        options are sent, media keeps the default visibility.


        Any attached media can be given a free preview — a separate media shown
        unlocked while the paid media is locked — via `previews`, a map of
        `mediaFiles` handle to preview handle.
      parameters: []
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    type: 1
                    attachments: []
                    content: Hey there!
                    groupId: "200000000000000001"
                    senderId: "100000000000000001"
                    inReplyTo: ""
                    interactions:
                      - groupId: "200000000000000001"
                        userId: "300000000000000001"
                        readAt: 0
                        deliveredAt: 0
                    id: "400000000000000010"
                    createdAt: 1700000000.123
                  _meta:
                    _credits:
                      used: 1
                      balance: 10055811
                      note: Always
                    _cache:
                      is_cached: false
                      note: Cache disabled for this endpoint
                    _rate_limits:
                      limit_minute: 5000
                      limit_day: null
                      remaining_minute: 4999
                      remaining_day: null
                      notice: We have decided to remove our daily rate limits. Please remove any
                        references to these in your integrations.
                properties:
                  data:
                    type: object
                    properties:
                      type:
                        type: integer
                        example: 1
                      attachments:
                        type: array
                        example: []
                      content:
                        type: string
                        example: Hey there!
                      groupId:
                        type: string
                        example: "200000000000000001"
                      senderId:
                        type: string
                        example: "100000000000000001"
                      inReplyTo:
                        type: string
                        example: ""
                      interactions:
                        type: array
                        example:
                          - groupId: "200000000000000001"
                            userId: "300000000000000001"
                            readAt: 0
                            deliveredAt: 0
                        items:
                          type: object
                          properties:
                            groupId:
                              type: string
                              example: "200000000000000001"
                            userId:
                              type: string
                              example: "300000000000000001"
                            readAt:
                              type: integer
                              example: 0
                            deliveredAt:
                              type: integer
                              example: 0
                      id:
                        type: string
                        example: "400000000000000010"
                      createdAt:
                        type: number
                        example: 1700000000.123
                  _meta:
                    type: object
                    properties:
                      _credits:
                        type: object
                        properties:
                          used:
                            type: integer
                            example: 1
                          balance:
                            type: integer
                            example: 10055811
                          note:
                            type: string
                            example: Always
                      _cache:
                        type: object
                        properties:
                          is_cached:
                            type: boolean
                            example: false
                          note:
                            type: string
                            example: Cache disabled for this endpoint
                      _rate_limits:
                        type: object
                        properties:
                          limit_minute:
                            type: integer
                            example: 5000
                          limit_day:
                            type: string
                            example: null
                            nullable: true
                          remaining_minute:
                            type: integer
                            example: 4999
                          remaining_day:
                            type: string
                            example: null
                            nullable: true
                          notice:
                            type: string
                            example: We have decided to remove our daily rate limits. Please remove any
                              references to these in your integrations.
      tags:
        - Chat Messages
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                text:
                  type: string
                  description: The message text content. Required unless `mediaFiles` is provided.
                  example: Hey there!
                mediaFiles:
                  type: array
                  description: Media to attach, as `fansly_media_` upload IDs returned by the
                    Upload Media endpoint. A single item is sent as one
                    attachment; multiple are grouped into a bundle.
                  example:
                    - fansly_media_01JR1234
                  items:
                    type: string
                replyToMessageId:
                  type: string
                  description: Mark this message as a reply to another message in the chat (either
                    yours or the recipient's).
                  example: "300000000000000001"
                requirePurchase:
                  type: boolean
                  description: Require the fan to purchase (unlock) the attached media. Requires
                    `price`. Combinable with `requireSubscription` /
                    `requireFollow`.
                  example: false
                price:
                  type: integer
                  description: Unlock price for `requirePurchase`, in Fansly's smallest unit —
                    1000 = $1.00 (e.g. 10000 = $10.00). Required when
                    `requirePurchase` is true.
                  example: 10000
                requireSubscription:
                  type: boolean
                  description: Require the fan to be subscribed to view the attached media.
                    Combinable with `requirePurchase` / `requireFollow`.
                  example: false
                subscriptionTierId:
                  type: string
                  description: Restrict `requireSubscription` to a single subscription tier. Tier
                    IDs come from the List Subscription Tiers endpoint. Omit for
                    any tier.
                  example: "843584256474116096"
                requireFollow:
                  type: boolean
                  description: Require the fan to follow the account to view the attached media.
                    Combinable with `requirePurchase` / `requireSubscription`.
                  example: false
                previews:
                  type: object
                  description: Free previews for attached media, as a map of a `mediaFiles` handle
                    to a `fansly_media_` preview upload. Each preview is shown
                    unlocked while its (gated) media is locked. Only include
                    media that should have a preview.
                  example:
                    fansly_media_01JR1234: fansly_media_01JR5678
                  properties: {}
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: Get your API Key from OnlyFansAPI Console -
        https://app.onlyfansapi.com/api-keys
````