curl --request GET \
--url https://api.fanvue.com/v1/media/{uuid} \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/media/{uuid}"
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/media/{uuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
"status": "ready",
"createdAt": "2024-01-15T00:00:00.000Z",
"caption": "Sunset at the beach",
"description": null,
"name": "beach-sunset.jpg",
"mediaType": "image",
"recommendedPrice": null,
"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": "image"
},
"variants": [
{
"uuid": "c9d0e1f2-3a4b-5c6d-7e8f-9a0b1c2d3e4f",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 3840,
"height": 2160,
"lengthMs": null
},
{
"uuid": "d0e1f2a3-4b5c-6d7e-8f9a-0b1c2d3e4f5a",
"variantType": "thumbnail",
"displayPosition": 1,
"url": "https://media.fanvue.com/thumb/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 320,
"height": 180,
"lengthMs": null
},
{
"uuid": "e1f2a3b4-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"variantType": "thumbnail_gallery",
"displayPosition": 2,
"url": "https://media.fanvue.com/gallery/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 400,
"height": 300,
"lengthMs": null
},
{
"uuid": "f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c",
"variantType": "blurred",
"displayPosition": 3,
"url": "https://media.fanvue.com/blur/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 3840,
"height": 2160,
"lengthMs": null
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Get media by UUID
Returns a specific media item by its UUID for the authenticated user.
For media with status other than FINALISED, only uuid and status are returned,
plus an errorReason when the status is error.
For FINALISED media, all details including variants are included, plus a
tags field containing structured AI content tags when the owning
creator has AI content tagging enabled and the media has been processed
(null otherwise).
variants query parameter (e.g., ?variants=main,thumbnail,blurred)
to include them in the response. Without this parameter, the variants field
will be an empty array and no media URLs will be returned.curl --request GET \
--url https://api.fanvue.com/v1/media/{uuid} \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/media/{uuid}"
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/media/{uuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
"status": "ready",
"createdAt": "2024-01-15T00:00:00.000Z",
"caption": "Sunset at the beach",
"description": null,
"name": "beach-sunset.jpg",
"mediaType": "image",
"recommendedPrice": null,
"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": "image"
},
"variants": [
{
"uuid": "c9d0e1f2-3a4b-5c6d-7e8f-9a0b1c2d3e4f",
"variantType": "main",
"displayPosition": 0,
"url": "https://media.fanvue.com/main/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 3840,
"height": 2160,
"lengthMs": null
},
{
"uuid": "d0e1f2a3-4b5c-6d7e-8f9a-0b1c2d3e4f5a",
"variantType": "thumbnail",
"displayPosition": 1,
"url": "https://media.fanvue.com/thumb/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 320,
"height": 180,
"lengthMs": null
},
{
"uuid": "e1f2a3b4-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"variantType": "thumbnail_gallery",
"displayPosition": 2,
"url": "https://media.fanvue.com/gallery/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 400,
"height": 300,
"lengthMs": null
},
{
"uuid": "f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c",
"variantType": "blurred",
"displayPosition": 3,
"url": "https://media.fanvue.com/blur/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpg",
"width": 3840,
"height": 2160,
"lengthMs": null
}
]
}{
"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
Query Parameters
UUID of the user to check media purchase against. When provided, the media item will include a purchasedByFan boolean indicating if that user has purchased it.
Comma-separated list of media variant types
The type of media variant
blurred, main, thumbnail, thumbnail_gallery Response
Media item
- Option 1
- Option 2
created, processing, ready, error Why processing failed. Present only when status is error. unsupported_format means the uploaded bytes are not a readable file of the declared type: check that each part is PUT as the raw file bytes, not form-data, base64 or a redirect page. processing_failed covers every other failure.
unsupported_format, video_too_long, document_too_large, pdf_invalid, pdf_password_protected, pdf_page_limit_exceeded, processing_failed Was this page helpful?