curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"text": "Hey there! How are you doing?",
"gif": null,
"sentAt": "2024-01-10T12:00:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": "f6a7b8c9-0123-4567-89ab-cdef01234567"
},
{
"uuid": "660e8400-e29b-41d4-a716-446655440001",
"text": "I'm doing great! Thanks for asking.",
"gif": null,
"sentAt": "2024-01-10T11:59:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": null
},
{
"uuid": "770e8400-e29b-41d4-a716-446655440002",
"text": null,
"gif": {
"id": "excited-happy-dance-xY7bQ",
"format": "WEBP",
"title": "excited happy dance",
"url": "https://cdn.klipy.com/excited-happy-dance-xY7bQ/md.webp",
"width": 480,
"height": 360
},
"sentAt": "2024-01-10T11:58:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": null
}
],
"dateFilter": {
"sentBefore": "2024-01-10T12:00:00.000Z",
"receivedBefore": "2024-01-10T11:59:00.000Z"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get messages between a creator and a user
Returns a date-based list of text messages between the specified creator and user, ordered by 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.
v1-experimental Breaking Change: Switched from offset-based pagination (page/size) to date-based pagination with separate filters for sent and received messages, matching GET /chats/{userUuid}/messages.
Pagination Flow:
- First request: No date filters needed, returns first 20 messages (or specified limit)
- Subsequent requests: Use the date filters from the previous response
- End of results: date filters will be
null
Partial Filters Supported: You can provide:
- Both
sentBeforeandreceivedBeforefor standard pagination - Only
sentBeforeto filter messages sent by the creator - Only
receivedBeforeto filter messages received from the user - Neither filter for the first request
Also breaking: markAsRead now defaults to false, so reading a conversation no longer mutates its read state. Pass markAsRead=true to keep the v0 behaviour.
curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/chats/{userUuid}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"text": "Hey there! How are you doing?",
"gif": null,
"sentAt": "2024-01-10T12:00:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": "f6a7b8c9-0123-4567-89ab-cdef01234567"
},
{
"uuid": "660e8400-e29b-41d4-a716-446655440001",
"text": "I'm doing great! Thanks for asking.",
"gif": null,
"sentAt": "2024-01-10T11:59:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": null
},
{
"uuid": "770e8400-e29b-41d4-a716-446655440002",
"text": null,
"gif": {
"id": "excited-happy-dance-xY7bQ",
"format": "WEBP",
"title": "excited happy dance",
"url": "https://cdn.klipy.com/excited-happy-dance-xY7bQ/md.webp",
"width": 480,
"height": 360
},
"sentAt": "2024-01-10T11:58:00.000Z",
"sender": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"handle": "johnny"
},
"recipient": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"handle": "sarah"
},
"type": "TEXT",
"status": "SENT",
"isRead": true,
"isSubscribed": true,
"isFollowing": false,
"followForFreeEnabled": false,
"repliedMessage": null,
"sentByUserId": null,
"appUuid": null
}
],
"dateFilter": {
"sentBefore": "2024-01-10T12:00:00.000Z",
"receivedBefore": "2024-01-10T11:59:00.000Z"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:creator— Access creator profiles, content, and creator-specific information.read:chat— Read chat conversations, messages, and chat-related data. This includes viewing chat lists and message history.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Query Parameters
Fetch messages sent before this date
Fetch messages received before this date
Number of messages to return (1-50, default: 20)
1 <= x <= 50Whether to mark the chat as read after retrieving messages
true, false Was this page helpful?