curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/media \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/media"
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}/media', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
"status": "ready",
"createdAt": "2024-01-15T00:00:00.000Z",
"caption": "Check out my latest video!",
"description": "Behind the scenes of my photoshoot",
"name": "photoshoot-video.mp4",
"mediaType": "video",
"recommendedPrice": 500,
"tags": {
"description": "Behind-the-scenes shot at sunset on a beach.",
"tags": [
"beach",
"sunset",
"outdoors"
],
"nsfwCategory": [],
"sexActs": [],
"bodyParts": [],
"people": [
"solo woman"
],
"sexObjects": [],
"setting": [
"beach",
"sunset"
],
"position": [],
"skinColor": [],
"bodyType": [],
"hairColor": [
"blonde"
],
"otherTags": [],
"importantTags": [
"beach"
],
"isNsfw": false,
"mediaType": "video"
},
"variants": [
{
"uuid": "e5f6a7b8-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.mp4",
"width": 1920,
"height": 1080,
"lengthMs": 45000
},
{
"uuid": "f6a7b8c9-0d1e-2f3a-4b5c-6d7e8f9a0b1c",
"variantType": "thumbnail",
"displayPosition": 1,
"url": "https://media.fanvue.com/thumb/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 320,
"height": 180,
"lengthMs": null
},
{
"uuid": "a7b8c9d0-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"variantType": "blurred",
"displayPosition": 2,
"url": "https://media.fanvue.com/blur/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.mp4",
"width": 1920,
"height": 1080,
"lengthMs": 45000
}
]
},
{
"uuid": "b8c9d0e1-2f3a-4b5c-6d7e-8f9a0b1c2d3e",
"status": "processing"
}
],
"nextCursor": "k0FQ1m9yZXN0aWdpb3VzLW9wYXF1ZS1jdXJzb3I"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get creator's media list (cursor-paginated)
Returns a cursor-paginated list of media items for the specified creator, most recent first.
For media with status other than FINALISED, only uuid and status are returned. For FINALISED media, all details including variants are included.
v1-experimental Breaking Change: Switched from offset-based pagination (page/size) to keyset cursor pagination, and dropped pagination.total — a count is the expensive query keyset pagination avoids. Page with the opaque nextCursor.
curl --request GET \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/media \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/media"
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}/media', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
"status": "ready",
"createdAt": "2024-01-15T00:00:00.000Z",
"caption": "Check out my latest video!",
"description": "Behind the scenes of my photoshoot",
"name": "photoshoot-video.mp4",
"mediaType": "video",
"recommendedPrice": 500,
"tags": {
"description": "Behind-the-scenes shot at sunset on a beach.",
"tags": [
"beach",
"sunset",
"outdoors"
],
"nsfwCategory": [],
"sexActs": [],
"bodyParts": [],
"people": [
"solo woman"
],
"sexObjects": [],
"setting": [
"beach",
"sunset"
],
"position": [],
"skinColor": [],
"bodyType": [],
"hairColor": [
"blonde"
],
"otherTags": [],
"importantTags": [
"beach"
],
"isNsfw": false,
"mediaType": "video"
},
"variants": [
{
"uuid": "e5f6a7b8-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.mp4",
"width": 1920,
"height": 1080,
"lengthMs": 45000
},
{
"uuid": "f6a7b8c9-0d1e-2f3a-4b5c-6d7e8f9a0b1c",
"variantType": "thumbnail",
"displayPosition": 1,
"url": "https://media.fanvue.com/thumb/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 320,
"height": 180,
"lengthMs": null
},
{
"uuid": "a7b8c9d0-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"variantType": "blurred",
"displayPosition": 2,
"url": "https://media.fanvue.com/blur/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.mp4",
"width": 1920,
"height": 1080,
"lengthMs": 45000
}
]
},
{
"uuid": "b8c9d0e1-2f3a-4b5c-6d7e-8f9a0b1c2d3e",
"status": "processing"
}
],
"nextCursor": "k0FQ1m9yZXN0aWdpb3VzLW9wYXF1ZS1jdXJzb3I"
}{
"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:media— Access media files, images, videos, and other content assets.
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
Number of items to return (1-50, default: 15)
1 <= x <= 50image, video, audio, document subscribers, followers, ppv, mass_messages Case-insensitive substring match on the media name.
Filter to media created on or after this ISO 8601 datetime (with optional timezone offset, e.g. 2024-10-20T00:00:00Z).
Filter to media created before this ISO 8601 datetime (non-inclusive, with optional timezone offset).
UUID of the user to check media purchases against. When provided, each media item will include a purchasedByFan boolean indicating if that user has purchased it.
Comma-separated list of media status values
The status of media
created, processing, ready, error Comma-separated list of media variant types
The type of media variant
blurred, main, thumbnail, thumbnail_gallery Was this page helpful?