List Vault Lists
Changed onList your Vault lists (categories).
Every response carries an ETag computed over the data payload. Send it back as If-None-Match on your next call and you will get a 304 Not Modified with an empty body when nothing changed, so you can keep serving your cached copy instead of re-parsing the full list. Credits are debited either way — we still have to ask OnlyFans for the current state to know whether it changed.
The ETag covers data only, never _meta — your credits balance changes on every call, so including it would mean the ETag never matches. Because a 304 has no body, it also has no _meta: read the current credits and rate-limit counters from the X-OFAPI-Credits-Used, X-OFAPI-Credits-Balance, X-Rate-Limit-Limit-Minute and X-Rate-Limit-Remaining-Minute response headers, which are sent on 304 responses too. The _meta inside a body you cached earlier is stale by definition.
Request
- Base URLhttps://app.onlyfansapi.com
- URLhttps://app.onlyfansapi.com/api/{account}/media/vault/lists
- AuthHTTP bearer
Query parameters
Optionally, find a list by its name.
Number of media to return per page. Default: 24
The offset used for pagination. Default 0
Set to true to return only id, name, type, canUpdate and a rolled-up mediaCount per list, dropping the medias previews. Much smaller payload — ideal for rendering a folder picker. Default: false
Response
Example response
{
"data": {
"list": [
{
"id": 123,
"type": "stories",
"name": "Stories",
"hasMedia": false,
"canUpdate": false,
"canDelete": false,
"videosCount": 0,
"photosCount": 0,
"gifsCount": 0,
"audiosCount": 0,
"medias": []
},
{
"id": 123,
"type": "streams",
"name": "Streams",
"hasMedia": false,
"canUpdate": false,
"canDelete": false,
"videosCount": 0,
"photosCount": 0,
"gifsCount": 0,
"audiosCount": 0,
"medias": []
},
{
"id": 123,
"type": "media_stickers",
"name": "Uploads",
"hasMedia": false,
"canUpdate": false,
"canDelete": false,
"videosCount": 0,
"photosCount": 0,
"gifsCount": 0,
"audiosCount": 0,
"medias": []
},
{
"id": 123,
"type": "posts",
"name": "Posts",
"hasMedia": true,
"canUpdate": false,
"canDelete": false,
"videosCount": 0,
"photosCount": 5,
"gifsCount": 0,
"audiosCount": 0,
"medias": [
{
"type": "photo",
"url": "https://cdn2.onlyfans.com/files/..."
}
]
},
{
"id": 123,
"type": "custom",
"name": "custom category",
"hasMedia": false,
"canUpdate": true,
"canDelete": true,
"videosCount": 0,
"photosCount": 0,
"gifsCount": 0,
"audiosCount": 0,
"medias": []
},
{
"id": 123,
"type": "messages",
"name": "Messages",
"hasMedia": true,
"canUpdate": false,
"canDelete": false,
"videosCount": 1,
"photosCount": 4,
"gifsCount": 0,
"audiosCount": 2,
"medias": [
{
"type": "photo",
"url": "https://cdn2.onlyfans.com/files/..."
}
]
}
],
"all": {
"videosCount": 1,
"photosCount": 9,
"gifsCount": 0,
"audiosCount": 2,
"medias": [
{
"type": "photo",
"url": "https://cdn2.onlyfans.com/files/..."
}
]
},
"hasMore": false,
"canCreateVaultLists": true,
"order": "asc",
"sort": "default"
},
"_meta": {
"_credits": {
"used": 1,
"balance": 999999945,
"note": "Always"
},
"_cache": {
"is_cached": false,
"note": "Cache disabled for this endpoint"
},
"_rate_limits": {
"limit_minute": 1000,
"limit_day": 50000,
"remaining_minute": 998,
"remaining_day": 49968
}
}
}Changes
- breaking
added
subschema #1subschema #2to the response bodyoneOflist for the response status - breaking
the response's body type changed from
objectto no type for status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - info
added the new optional
queryrequest parameterlightweight - info
added the non-success response with the status
- breaking