curl --request PUT \
--url https://api.fanvue.com/v1/chats/{userUuid}/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"notes": "<string>"
}
'import requests
url = "https://api.fanvue.com/v1/chats/{userUuid}/notes"
payload = { "notes": "<string>" }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({notes: '<string>'})
};
fetch('https://api.fanvue.com/v1/chats/{userUuid}/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"notes": "Prefers evening messages. Birthday on 12 March.",
"updatedAt": "2024-01-15T00:00:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Update fan notes
Replaces the authenticated user’s notes about a fan and returns the stored result.
These are the notes a creator keeps on a fan in the Fanvue chat sidebar and contact list. Only the manually written notes are exposed; automatically generated fan summaries are never returned. Notes do not require an existing conversation with the fan.
The body replaces the notes in full, so send the complete text rather than a delta. Pass null (or an empty string) to clear them. Returns 400 if userUuid is your own UUID and 404 if the user does not exist.
curl --request PUT \
--url https://api.fanvue.com/v1/chats/{userUuid}/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"notes": "<string>"
}
'import requests
url = "https://api.fanvue.com/v1/chats/{userUuid}/notes"
payload = { "notes": "<string>" }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({notes: '<string>'})
};
fetch('https://api.fanvue.com/v1/chats/{userUuid}/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"notes": "Prefers evening messages. Birthday on 12 March.",
"updatedAt": "2024-01-15T00:00:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}write:chat— Create new chats and send messages. This scope is required for any chat-related actions that modify data.
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"
Path Parameters
Body
The full replacement notes (max 5000 characters). Pass null or an empty string to clear them.
5000Response
The stored notes
The notes kept about this fan, or null when none have been written. Only the manually written notes are returned; automatically generated summaries are never included.
When the notes were last changed, or null when no notes are stored. The timestamp belongs to the fan's customisation record, so other changes to that record, including a nickname edit or internal updates, also move it.
Was this page helpful?