
@onlyfansapi/auth opens a secure modal in your app

You get the account ID and profile data

Chats, fans, media, and revenue via API

Messages, subs, and payments in real time
// npm install @onlyfansapi/auth
import { startOnlyFansAuthentication } from '@onlyfansapi/auth';
// Step 1: Create a client session on your backend
const sessionResponse = await fetch(
'https://app.onlyfansapi.com/api/client-sessions',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
client_reference_id: 'user_123_in_your_db'
})
}
);
const { token } = await sessionResponse.json();
// Step 2: Open the auth modal in the browser
startOnlyFansAuthentication(token, {
onSuccess: (data) => {
// data.accountId = "acct_XXXX"
// data.username = "creator_username"
// data.onlyfansData = { id, username, email, avatar_url, name }
console.log('Connected:', data.accountId);
// Save to your database
await db.creators.create({
accountId: data.accountId,
username: data.username,
email: data.onlyfansData.email,
avatarUrl: data.onlyfansData.avatar_url,
});
},
onError: (error) => {
console.error('Auth failed:', error.message);
}
});`,
},
{
id: 'chat-inbox',
title: 'Build a Chat Inbox',
description:
'List all chats for a creator, fetch message history per chat, and send replies — everything needed for a CRM inbox view.',
code: `// List all chats for a creator
const chatsResponse = await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/chats',
{
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
}
}
);
const chats = await chatsResponse.json();
// Get messages for a specific chat
const messagesResponse = await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/chats/' + chatId + '/messages',
{
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
}
}
);
const messages = await messagesResponse.json();
// Send a reply from the CRM
await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/chats/' + chatId + '/messages',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: 'Thanks for your message! 💕'
})
}
);
// Send a PPV message with media
const mediaResponse = await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/media/upload',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
file_url: 'https://your-cdn.com/exclusive.mp4'
})
}
);
const media = await mediaResponse.json();
await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/chats/' + chatId + '/messages',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: 'Something special just for you 🔥',
price: 14.99,
mediaFiles: [media.data.id]
})
}
);`,
},
{
id: 'fan-crm-view',
title: 'Fan CRM View',
description:
'Build a complete fan profile view: spending data, subscription history, notes, custom tags, and user list membership.',
code: `// Get fan profile with full spending breakdown
const fanResponse = await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/users/' + fanUsername,
{
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
}
}
);
const fan = await fanResponse.json();
// fan.data.subscribedOnData = {
// totalSumm, messagesSumm, tipsSumm,
// postsSumm, streamsSumm, subscribesSumm
// }
// Get subscription history
const historyResponse = await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/fans/' + fan.data.id
+ '/subscriptions-history',
{
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
}
}
);
const history = await historyResponse.json();
// Set custom name (CRM display name)
await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/fans/' + fan.data.id + '/custom-name',
{
method: 'PUT',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
customName: 'VIP Whale - $' + fan.data.subscribedOnData.totalSumm
})
}
);
// Add fan notes
await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/fans/' + fan.data.id + '/notes',
{
method: 'PUT',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
note: 'High spender. Prefers exclusive content. '
+ 'Last tip: $50 on 2025-03-15.'
})
}
);
// Add to a user list for segmentation
await fetch(
'https://app.onlyfansapi.com/api/acct_XXXX/user-lists/vip_list_id/users',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIds: [fan.data.id]
})
}
);

