curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/posts \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/posts"
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}/posts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-16T14:20:00.000Z",
"text": "Behind the scenes from today's shoot",
"price": null,
"mediaPreviewUuid": null,
"audience": "subscribers",
"publishAt": null,
"publishedAt": "2025-01-16T14:20:00.000Z",
"expiresAt": null,
"mediaUuids": [
"550e8400-e29b-41d4-a716-446655440010"
],
"isPinned": true,
"likesCount": 42,
"commentsCount": 5,
"tips": {
"count": 3,
"totalGross": 1500,
"totalNet": 1275
},
"collections": []
}
],
"nextCursor": "k0FQ1m9yb3ZpZGVkQnlUaGVBUEk",
"total": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get posts for a creator (cursor-paginated)
Returns a cursor-paginated list of posts created by the specified creator, ordered by pinned status first, then by publication date (newest first). Keyset pagination is stable under concurrent writes and has constant per-page cost, unlike the offset-paginated v0 endpoint. Page with the opaque nextCursor.
curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/posts \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/posts"
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}/posts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-16T14:20:00.000Z",
"text": "Behind the scenes from today's shoot",
"price": null,
"mediaPreviewUuid": null,
"audience": "subscribers",
"publishAt": null,
"publishedAt": "2025-01-16T14:20:00.000Z",
"expiresAt": null,
"mediaUuids": [
"550e8400-e29b-41d4-a716-446655440010"
],
"isPinned": true,
"likesCount": 42,
"commentsCount": 5,
"tips": {
"count": 3,
"totalGross": 1500,
"totalNet": 1275
},
"collections": []
}
],
"nextCursor": "k0FQ1m9yb3ZpZGVkQnlUaGVBUEk",
"total": null
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}read:post— Read posts, including post details, comments, likes, and tips.read:creator— Access creator profiles, content, and creator-specific information.
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
Query Parameters
Opaque pagination cursor from a previous response's nextCursor. It carries the includeUnpublished flag and date range the first page was cut under, so later pages need nothing but the cursor. Resending those filters is allowed while they match it; a value that contradicts the cursor is rejected.
Number of items to return (1-50, default: 15)
1 <= x <= 50Whether to include unpublished posts (drafts and scheduled posts) in the results. Defaults to true.
true, false Only include posts created on or after this ISO 8601 datetime (e.g., 2024-10-20T00:00:00Z).
Only include posts created before this ISO 8601 datetime (non-inclusive).
Response
Cursor-paginated list of posts for this creator
Array of posts, pinned first then most recently published
Show child attributes
Show child attributes
Opaque cursor for the next page, or null when there are no more results
Total number of items, or null when a count is not computed for this list
Was this page helpful?