curl --request GET \
--url https://api.fanvue.com/v1/vault/folders/{folderName}/media \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/vault/folders/{folderName}/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/vault/folders/{folderName}/media', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "ready",
"createdAt": "2025-01-15T10:30:00.000Z",
"caption": null,
"description": null,
"name": "photo1.jpg",
"mediaType": "image",
"recommendedPrice": null,
"variants": [
{
"uuid": "550e8400-e29b-41d4-a716-4466554400aa",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/550e8400-e29b-41d4-a716-446655440000.jpg",
"width": 1920,
"height": 1440,
"lengthMs": null
}
]
},
{
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"status": "processing"
}
],
"nextCursor": null,
"total": 2
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}List media in folder (cursor-paginated)
Returns a cursor-paginated list of media items in the specified folder.
Cursor-paginated: page with the opaque nextCursor from the previous response. Keyset pagination gives stable pages under concurrent activity, unlike the offset-paginated v0 endpoint: rows are not reshuffled between pages when media is added to or removed from the folder mid-walk. total is the count of media in the folder matching the applied filters, measured once when the walk starts.
Sorting by addedAt is the cheaper ordering — it is served directly by an index on the folder membership. createdAt orders by the media row instead, which is not index-served under a folder restriction and costs a sort proportional to the folder’s size.
The cursor carries the ordering and filters it was minted under: when cursor is supplied, sort, order, mediaType, name, startDate and endDate are ignored and the walk continues over the same media in the same order. Change any of them by starting a new walk without a cursor. variants is not carried, since it only selects which variants are returned for each item.
curl --request GET \
--url https://api.fanvue.com/v1/vault/folders/{folderName}/media \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/vault/folders/{folderName}/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/vault/folders/{folderName}/media', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "ready",
"createdAt": "2025-01-15T10:30:00.000Z",
"caption": null,
"description": null,
"name": "photo1.jpg",
"mediaType": "image",
"recommendedPrice": null,
"variants": [
{
"uuid": "550e8400-e29b-41d4-a716-4466554400aa",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/550e8400-e29b-41d4-a716-446655440000.jpg",
"width": 1920,
"height": 1440,
"lengthMs": null
}
]
},
{
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"status": "processing"
}
],
"nextCursor": null,
"total": 2
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}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
Folder name (URL-encoded in path)
1 - 255Query 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 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).
Comma-separated list of media variant types
The type of media variant
blurred, main, thumbnail, thumbnail_gallery Field to sort media by. Defaults to createdAt (media creation time).
createdAt, addedAt Sort direction. Defaults to desc.
asc, desc Response
Cursor-paginated list of media in folder
Was this page helpful?