---
title: "Get messages between a creator and a user"
method: GET
path: "/creators/{creatorUserUuid}/chats/{userUuid}/messages"
---

# Get messages between a creator and a user

`GET /creators/{creatorUserUuid}/chats/{userUuid}/messages`

## Request

- Base URL: `https://api.fanvue.com`
- URL: `https://api.fanvue.com/creators/{creatorUserUuid}/chats/{userUuid}/messages`
- Auth: OAuth 2
  - Authorization code: `https://auth.fanvue.com/oauth2/auth`
  - Token URL: `https://auth.fanvue.com/oauth2/token` scopes: `read:creator`, `read:chat`

Returns a paginated list of text messages between the specified creator and user. Messages are ordered by creation date (newest first).

The thread includes mass (broadcast) messages the creator sent that reached this user, interleaved with the 1:1 messages by publish date. `POST /creators/{creatorUserUuid}/chats/messages/batch` returns direct messages only, so the two endpoints return different messages for the same chat.

## Path parameters

- `creatorUserUuid` string, uuid, required
- `userUuid` string, uuid, required

## Query parameters

- `page` integer: Page number to retrieve (starts from 1)
- `size` integer: Number of items to return per page (1-50, default: 15)
- `markAsRead` 'true' | 'false': Whether to mark the chat as read after retrieving messages

## Headers

- `X-Fanvue-API-Version` string, required

## Response `200`

List of messages

- object
  - `data` object[], required: Array of messages in the conversation
    - `uuid` string, uuid, required
    - `text` string, nullable, required
    - `sentAt` string, date, nullable, required
    - `sender` object, required
      - `uuid` string, uuid, required
      - `handle` string, required
    - `recipient` object, required
      - `uuid` string, uuid
      - `handle` string
    - `hasMedia` boolean, nullable, required
    - `mediaType` 'image' | 'video' | 'audio' | 'document', nullable, required
    - `mediaUuids` string[], required: Ordered list of media UUIDs attached to this message (display order)
    - `mediaPreviewUuid` string, uuid, nullable, required: UUID of the media item shown for free as a preview of this pay-to-view message, or null when no free preview was configured. Mirrors the `mediaPreviewUuid` set when sending the message.
    - `gif` object, nullable, required: The third-party GIF attached to this message, or null for an ordinary message. A GIF message carries no media and no price, but `text` may be set — a GIF can be sent with a caption.
      - `id` string, required: The GIF provider's durable identifier for this GIF. Stable across renditions; use it to de-duplicate or re-resolve the GIF.
      - `format` 'GIF' | 'WEBP' | 'MP4' | 'WEBM', required: Encoding of the asset at `url`. Only `GIF` and `WEBP` are produced today, and both render in a plain <img> tag.
      - `title` string, nullable, required: Human-readable GIF title, suitable as alt text.
      - `url` string, nullable, required: Hotlink URL of the GIF, served from the provider's CDN — Fanvue does not host or proxy the asset. Null when the URL is temporarily withheld; the message is still a GIF message, so render a placeholder at `width`/`height` rather than treating it as empty.
      - `width` integer, required: Intrinsic width of the asset at `url`, in pixels
      - `height` integer, required: Intrinsic height of the asset at `url`, in pixels
    - `type` 'AUTOMATED_CANCELED' | 'AUTOMATED_NEW_FOLLOWER' | 'AUTOMATED_NEW_PURCHASE' | 'AUTOMATED_NEW_SUBSCRIBER' | 'AUTOMATED_RE_SUBSCRIBED' | 'AUTOMATED_RENEWED' | 'AUTOMATED_CHAT_MESSAGE_REPLY' | 'AUTOMATED_FIRST_MESSAGE_REPLY' | 'CHAT_TEXT_GENERATION' | 'CHAT_TEXT_REPLY' | 'CHAT_TEXT_REWRITE' | 'SINGLE_RECIPIENT' | 'TIP' | 'VOICE_CALL' | 'BROADCAST' | 'GHOST_PROMOTION', required
    - `pricing` object, nullable, required: Pricing information for pay-to-view messages
      - `USD` object, required
        - `price` number, required: Price in cents
    - `purchasedAt` string, date, nullable, required: Timestamp when this message was purchased, or null if not purchased
    - `tipSource` 'chat' | 'post' | 'media_link', nullable, required: For TIP messages, where the tip originated: 'chat' (direct in-chat tip), 'post' (tipped a feed post) or 'media_link' (tipped via a shared media link). Null for non-tip messages.
    - `sentByUserId` string, uuid, nullable, required: UUID of the team member who sent the message on behalf of the creator, or null if sent directly by the creator
    - `appUuid` string, uuid, nullable, required: UUID of the third-party app that created this message through the public API. Null when the message was sent from the Fanvue dashboard, and for every message sent before app attribution was recorded.
    - `isRead` boolean, required: Whether the message has been read by the recipient
  - `pagination` object, required: Pagination information
    - `page` number, required: Current page number
    - `size` number, required: Number of records returned in this response
    - `hasMore` boolean, required: Whether there are more items available on subsequent pages

## Other responses

- `400`: Bad Request - API version not supported OR validation failed OR invalid UUID
- `401`: Unauthorized Response
- `403`: Unauthorized Response
- `404`: No conversation found with the given user
- `410`: API version no longer supported (sunset)
- `429`: Too many requests - rate limit exceeded

## Changes

- **2026-08-30** `dce5621fe589`: 1 info
  - added the required property `data/items/appUuid` to the response with the `200` status

[Operation history](https://skmtc.dev/fanvue/apis/fanvue-api/changes/creators/:creatorUserUuid/chats/:userUuid/messages/get.md)

---

[API](https://skmtc.dev/fanvue/apis/fanvue-api.md) - [All operations](https://skmtc.dev/fanvue/apis/fanvue-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fanvue/apis/fanvue-api/revisions/966260af2770?raw)
