API Reference
Reference for all OnlyFans proxy endpoints. Each entry shows the HTTP method, path, query parameters, credit cost, and a real response example.
Base URL
All proxy endpoints are relative to
https://api.onlyfans-api.ai/api. Every request must include the X-API-Key header. Credits are deducted on every successful (2xx) response.Response Envelope
Every successful proxy response is wrapped in a consistent envelope. The raw OnlyFans data is in data; billing metadata is in _meta.
Response shape
{
"data": { /* raw OnlyFans response */ },
"_meta": {
"_credits": {
"used": 1,
"balance": 4999
},
"_rate_limits": {
"limit_minute": 60,
"remaining_minute": 58
}
}
}| Field | Description |
|---|---|
data | Raw OnlyFans response — same structure as if you called OF directly |
_meta._credits.used | Credits deducted for this request |
_meta._credits.balance | Remaining credit balance after this request |
_meta._rate_limits.limit_minute | Your plan's request limit per minute |
_meta._rate_limits.remaining_minute | Requests remaining in the current 60-second window |
Error responses are not wrapped
Only 2xx responses include the
_meta envelope. Error responses (4xx, 5xx) return {"error": "...", "code": "..."} directly.User
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/users/me" \
-H "X-API-Key: sk_live_your_key_here"Response
{
"data": {
"id": 523990756,
"name": "molly",
"username": "mollyy2006",
"email": "creator@onlyfans.com",
"about": "<p>Profile bio text...</p>",
"avatar": "https://public.onlyfans.com/files/.../avatar.jpg",
"header": "https://public.onlyfans.com/files/.../header_image.jpg",
"isPerformer": true,
"isVerified": true,
"subscribersCount": 108,
"postsCount": 75,
"photosCount": 88,
"videosCount": 2,
"subscribePrice": 20,
"performerTop": 3.3,
"joinDate": "2025-09-16T00:00:00+00:00"
},
"_meta": {
"_credits": { "used": 1, "balance": 4999 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 58 }
}
}Chats
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/chats?limit=20&offset=0" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of chats to returnDefault: 10 |
offset | integer | Pagination offsetDefault: 0 |
Response
{
"data": {
"hasMore": true,
"list": [
{
"withUser": { "id": 553393565, "_view": "m" },
"lastMessage": {
"id": 9130375619415,
"text": "<p>I caught a few mins but had to go to sleep :(</p>",
"createdAt": "2026-04-03T15:58:51+00:00",
"isFree": true,
"mediaCount": 0
},
"unreadMessagesCount": 1,
"canSendMessage": true,
"isMutedNotifications": false
}
],
"nextOffset": 1
},
"_meta": {
"_credits": { "used": 1, "balance": 4998 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 57 }
}
}curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/chats/FAN_USER_ID/messages?limit=20" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of messages to returnDefault: 10 |
id | integer | Fetch messages before this message ID (cursor) |
Response
{
"data": {
"hasMore": true,
"list": [
{
"id": 9130375619415,
"text": "<p>I caught a few mins but had to go to sleep :(</p>",
"createdAt": "2026-04-03T15:58:51+00:00",
"fromUser": { "id": 553393565, "_view": "s" },
"isFree": true,
"isTip": false,
"media": [],
"mediaCount": 0,
"price": 0,
"isNew": true,
"isOpened": false
}
]
},
"_meta": {
"_credits": { "used": 1, "balance": 4997 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 56 }
}
}curl -X POST "https://api.onlyfans-api.ai/api/models/MODEL_UUID/chats/FAN_USER_ID/messages" \
-H "X-API-Key: sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"text": "Hey, thanks for subscribing!", "mediaFiles": [], "price": 0}'| Parameter | Type | Description |
|---|---|---|
text | string | Message text (HTML supported). Required if mediaFiles not provided. |
mediaFiles | array | Array of media IDs or objects {id, thumbId}. Required if text not provided. |
price | integer | Price in cents for paid message. 0 = free. When price > 0, mediaFiles must be objects {id, thumbId}.Default: 0 |
Response
{
"data": {
"id": 9130375619420,
"text": "<p>Hey, thanks for subscribing!</p>",
"createdAt": "2026-04-04T10:00:00+00:00",
"fromUser": { "id": 523990756, "_view": "s" },
"isFree": true,
"isTip": false,
"media": [],
"mediaCount": 0,
"price": 0
},
"_meta": {
"_credits": { "used": 2, "balance": 4995 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 55 }
}
}curl -X POST "https://api.onlyfans-api.ai/api/models/MODEL_UUID/chats/CHAT_ID/mark-as-unread" \
-H "X-API-Key: sk_live_your_key_here"curl -X DELETE "https://api.onlyfans-api.ai/api/models/MODEL_UUID/messages/MESSAGE_ID" \
-H "X-API-Key: sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"user_id": 553393565}'| Parameter | Type | Description |
|---|---|---|
user_idrequired | integer | The OnlyFans fan ID in the conversation |
Stats
Analytics endpoints. All stats endpoints require startDate and endDate query parameters in YYYY-MM-DD format.
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/stats/overview?startDate=2026-03-01&endDate=2026-03-31" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/stats/reach?startDate=2026-03-01&endDate=2026-03-31" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/stats/reach/by-country?startDate=2026-03-01&endDate=2026-03-31&limit=3" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
limit | integer | Number of countries to returnDefault: 3 |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/stats/fans?startDate=2026-03-01&endDate=2026-03-31&offset=0" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
offset | integer | Pagination offsetDefault: 0 |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/stats/fans/top?startDate=2026-03-01&endDate=2026-03-31&offset=0" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
offset | integer | Pagination offsetDefault: 0 |
Vault
Access the model's OnlyFans vault — organized media collections and individual media files.
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/vault/lists?limit=10&offset=0&view=main" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of lists to returnDefault: 10 |
offset | integer | Pagination offsetDefault: 0 |
view | string | View typeDefault: main |
Response
{
"data": {
"all": {
"audiosCount": 9,
"gifsCount": 0,
"photosCount": 711,
"videosCount": 207,
"medias": [
{ "type": "photo", "url": "https://cdn2.onlyfans.com/files/.../300x300_xxx.jpg?..." }
]
},
"canCreateVaultLists": true,
"hasMore": true,
"order": "asc",
"sort": "custom",
"list": [
{
"id": 25744825,
"name": "MM to schedule",
"type": "custom",
"canDelete": true,
"canUpdate": true,
"hasMedia": true,
"audiosCount": 0,
"gifsCount": 0,
"photosCount": 56,
"videosCount": 0,
"medias": [
{ "type": "photo", "url": "https://cdn2.onlyfans.com/files/.../300x300_xxx.jpg?..." }
]
}
]
},
"_meta": {
"_credits": { "used": 1, "balance": 95 },
"_rate_limits": { "limit_minute": 10, "remaining_minute": 9 }
}
}curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/vault/media?limit=10&offset=0&field=recent&sort=desc&list=all" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of items to returnDefault: 10 |
offset | integer | Pagination offsetDefault: 0 |
field | string | Sort field: recent or topDefault: recent |
sort | string | Sort direction: desc or ascDefault: desc |
list | string | Vault list ID or 'all'Default: all |
Response
{
"data": {
"hasMore": true,
"list": [
{
"id": 4395928356,
"type": "photo",
"createdAt": "2026-04-11T05:53:01+00:00",
"isReady": true,
"canView": true,
"hasError": false,
"hasPosts": false,
"hasCustomPreview": false,
"convertedToVideo": false,
"duration": 0,
"counters": { "likesCount": 0, "tipsSumm": 0 },
"files": {
"full": { "url": "https://cdn2.onlyfans.com/.../3024x4032_xxx.jpg?...", "width": 3024, "height": 4032, "size": 0, "sources": [] },
"preview": { "url": "https://cdn2.onlyfans.com/.../960x1280_xxx.jpg?...", "width": 960, "height": 1280, "size": 0 },
"squarePreview": { "url": "https://cdn2.onlyfans.com/.../960x960_xxx.jpg?...", "width": 960, "height": 960, "size": 0 },
"thumb": { "url": "https://cdn2.onlyfans.com/.../300x300_xxx.jpg?...", "width": 300, "height": 300, "size": 0 }
},
"listStates": [
{ "id": 25740545, "name": "Posts", "type": "posts", "canAddMedia": false, "hasMedia": false },
{ "id": 25740546, "name": "Messages", "type": "messages", "canAddMedia": false, "hasMedia": true },
{ "id": 25744825, "name": "MM to schedule", "type": "custom", "canAddMedia": true, "hasMedia": false }
]
}
]
},
"_meta": {
"_credits": { "used": 1, "balance": 93 },
"_rate_limits": { "limit_minute": 10, "remaining_minute": 8 }
}
}Media
Download CDN-hosted media through the gateway proxy.
curl -X POST "https://api.onlyfans-api.ai/api/models/MODEL_UUID/media/download" \
-H "X-API-Key: sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://cdn2.onlyfans.com/files/.../filename.jpg"}'| Parameter | Type | Description |
|---|---|---|
urlrequired | string | Full CDN URL of the media to download |
Streaming response
This endpoint streams binary content directly. Set Accept to the expected media type and handle the response as a binary stream — not JSON.
Fans
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/fans/info?user_id=553393565" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
user_idrequired | integer | The OnlyFans user ID of the fan |
Response
{
"data": {
"id": 553393565,
"name": "Marvin",
"displayName": "✨Marvin//30",
"username": "u553393565",
"isPerformer": false,
"isActive": true,
"lastSeen": "2026-04-03T17:17:28+00:00",
"subscribedOn": true,
"subscribedOnData": {
"price": 20,
"expiredAt": "2026-04-28T05:59:14+00:00",
"messagesSumm": 297.2,
"totalSumm": 315.6
},
"listsStates": [
{ "id": "fans", "name": "Fans", "hasUser": true },
{ "id": "muted", "name": "Muted", "hasUser": false }
]
},
"_meta": {
"_credits": { "used": 1, "balance": 4994 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 54 }
}
}Payouts
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/balances" \
-H "X-API-Key: sk_live_your_key_here"Response
{
"data": {
"currency": "USD",
"payoutAvailable": 1532.03,
"payoutPending": 1134.45,
"maxPayoutSumm": 1532.03,
"minPayoutSumm": 100,
"withdrawalPeriod": "manual",
"withdrawalPeriodOptions": [
{ "code": "manual", "name": "Manual payouts" },
{ "code": "weekly", "name": "Weekly payouts" },
{ "code": "monthly", "name": "Monthly payouts" }
]
},
"_meta": {
"_credits": { "used": 1, "balance": 4993 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 53 }
}
}curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/requests?limit=10&offset=0" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of requests to returnDefault: 10 |
offset | integer | Pagination offsetDefault: 0 |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/requests/referral?limit=10&offset=0" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of requests to returnDefault: 10 |
offset | integer | Pagination offsetDefault: 0 |
curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/transactions?limit=10" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of transactions to returnDefault: 10 |
marker | integer | Cursor for the next page (from previous nextMarker) |
Response
{
"data": {
"hasMore": true,
"list": [
{
"id": "335a47e7c139e5ed3e079b960f7ebb2a",
"amount": 200,
"fee": 40,
"net": 160,
"currency": "USD",
"status": "loading",
"createdAt": "2026-04-03T10:56:26+00:00",
"payoutPendingDays": 7,
"user": { "id": 333276012, "displayName": "Fan Name", "username": "u333276012" }
}
],
"marker": 1775236642,
"nextMarker": 1775212716
},
"_meta": {
"_credits": { "used": 1, "balance": 4990 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 51 }
}
}curl "https://api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/stats?startDate=2026-03-01&endDate=2026-03-31" \
-H "X-API-Key: sk_live_your_key_here"| Parameter | Type | Description |
|---|---|---|
startDaterequired | string | Start date in YYYY-MM-DD format |
endDaterequired | string | End date in YYYY-MM-DD format |
Response
{
"data": {
"list": {
"months": {
"1775088000": {
"chat_messages": [{ "gross": 37, "net": 29.6, "time": 1775001600 }],
"subscribes": [{ "gross": 15, "net": 12, "time": 1775001600 }],
"tips": [{ "gross": 10, "net": 8, "time": 1775001600 }],
"total_gross": 62,
"total_net": 49.6
}
},
"total": {
"all": { "total_gross": 62, "total_net": 49.6 },
"chat_messages": { "total_gross": 37, "total_net": 29.6 },
"subscribes": { "total_gross": 15, "total_net": 12 },
"tips": { "total_gross": 10, "total_net": 8 }
}
}
},
"_meta": {
"_credits": { "used": 2, "balance": 4991 },
"_rate_limits": { "limit_minute": 60, "remaining_minute": 52 }
}
}