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://dev-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
    }
  }
}
FieldDescription
dataRaw OnlyFans response — same structure as if you called OF directly
_meta._credits.usedCredits deducted for this request
_meta._credits.balanceRemaining credit balance after this request
_meta._rate_limits.limit_minuteYour plan's request limit per minute
_meta._rate_limits.remaining_minuteRequests 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://dev-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://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/chats?limit=20&offset=0" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
limit
integerNumber of chats to returnDefault: 10
offset
integerPagination 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://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/chats/FAN_USER_ID/messages?limit=20" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
limit
integerNumber of messages to returnDefault: 10
id
integerFetch 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://dev-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}'
ParameterTypeDescription
text
stringMessage text (HTML supported). Required if mediaFiles not provided.
mediaFiles
arrayArray of media IDs or objects {id, thumbId}. Required if text not provided.
price
integerPrice 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://dev-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://dev-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}'
ParameterTypeDescription
user_idrequired
integerThe 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://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd date in YYYY-MM-DD format
curl "https://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd date in YYYY-MM-DD format
curl "https://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd date in YYYY-MM-DD format
limit
integerNumber of countries to returnDefault: 3
curl "https://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd date in YYYY-MM-DD format
offset
integerPagination offsetDefault: 0
curl "https://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd date in YYYY-MM-DD format
offset
integerPagination offsetDefault: 0

Vault

Access the model's OnlyFans vault — organized media collections and individual media files.

curl "https://dev-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"
ParameterTypeDescription
limit
integerNumber of lists to returnDefault: 10
offset
integerPagination offsetDefault: 0
view
stringView 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://dev-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"
ParameterTypeDescription
limit
integerNumber of items to returnDefault: 10
offset
integerPagination offsetDefault: 0
field
stringSort field: recent or topDefault: recent
sort
stringSort direction: desc or ascDefault: desc
list
stringVault 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://dev-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"}'
ParameterTypeDescription
urlrequired
stringFull 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://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/fans/info?user_id=553393565" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
user_idrequired
integerThe 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://dev-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://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/requests?limit=10&offset=0" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
limit
integerNumber of requests to returnDefault: 10
offset
integerPagination offsetDefault: 0
curl "https://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/requests/referral?limit=10&offset=0" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
limit
integerNumber of requests to returnDefault: 10
offset
integerPagination offsetDefault: 0
curl "https://dev-api.onlyfans-api.ai/api/models/MODEL_UUID/payouts/transactions?limit=10" \
  -H "X-API-Key: sk_live_your_key_here"
ParameterTypeDescription
limit
integerNumber of transactions to returnDefault: 10
marker
integerCursor 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://dev-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"
ParameterTypeDescription
startDaterequired
stringStart date in YYYY-MM-DD format
endDaterequired
stringEnd 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 }
  }
}