# Frequently Asked Questions
URL: /faq
Quick answers to common OnlyFans API questions about authentication, security, rate limits, fan analytics, webhooks, and integration best practices.
***
title: Frequently Asked Questions
description: "Quick answers to common OnlyFans API questions about authentication, security, rate limits, fan analytics, webhooks, and integration best practices."
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
## API Capabilities & Features
Yes, our API fully supports reading and sending messages. Refer to our [List Chats](/api-reference/chats/list-chats) and [Send Message](/api-reference/chats/send-message) endpoints for more details.
Image generation is not natively supported at this time. However, we recommend third-party solutions like [fanscreator.ai](https://fanscreator.ai) for this functionality.
Direct vault uploads aren’t supported by OnlyFans. However, you have a few options:
* **Recommended:** Upload media exactly when and where it needs to be posted — for example, directly to a post, message, or scheduled post — instead of preloading it into the vault. This keeps your workflow simple and avoids unnecessary steps.
* If you still want to store media in the vault ahead of time, you can:
* Upload media using our [OnlyFans CDN upload](/api-reference/media/upload-media-to-the-only-fans-cdn) endpoint.
* [Create a post](/api-reference/posts/send-post) with the media, then delete it immediately - the media will remain in your vault
* Use our [Send Message](/api-reference/chats/send-message) endpoint to include the media in a message, then delete the message — again, the media will stay in your vault.
Yes! Many customers successfully use tools like [n8n](https://n8n.io) and [Supabase](https://supabase.com) for faster development and deployment.
You're likely missing the account prefix.
* ❌ Wrong: `/api/fans/active`
* ✅ Correct: `/api/acct_XXXXXXXX/fans/active`
## Security & Safety
Yes, absolutely. We have a 5-year track record with:
* Zero accounts banned
* Zero accounts red-flagged
* Enterprise-grade security measures
Your security is our priority:
* All passwords and cookies are hashed in our database
* We use OpenSSL with AES-256-CBC encryption
* All data is signed with MAC (Message Authentication Code)
We implement robust proxy protection:
* Each connected account gets a dedicated IP address
* Public endpoints use rotating residential proxies
* This prevents detection and ensures account safety
For more information, refer to our dedicated [proxies guide](introduction/essentials/proxies).
## API Stability & Performance
Our API infrastructure includes:
* Web Application Firewall (WAF)
* Proxy management
* Built-in rate limiting
* No stability issues reported to date
Check our real-time status at: [status.onlyfansapi.com](https://status.onlyfansapi.com)
Website updates have minimal impact:
* Downtime only occurs if OnlyFans itself is down
* We typically adapt to changes within minutes
* No extended service interruptions
## Rate Limiting & Best Practices
**Recommended approach:** Implement exponential backoff
1. When you receive a 429 error, wait 1 second
2. If it happens again, double the wait time (2s → 4s → 8s)
3. Continue up to a maximum wait time
4. Use queuing systems like AWS SQS, Laravel Queues, or Ruby Sidekiq
Email us at [hello@onlyfansapi.com](mailto:hello@onlyfansapi.com) for code examples.
Rate limits are documented in our [Rate Limits](/introduction/essentials/rate-limits) guide.
## API Keys Management
**Best practice:** One API key per service/integration
* Create separate keys for different features
* Assign dedicated keys to external developers
* This improves security and tracking
No, you can create as many API keys as you want, regardless of your subscription plan.
Yes, a single API key can access all available endpoints.
## Account Authentication & Management
**Through our [Console](https://app.onlyfansapi.com):**
1. Go to Dashboard -> Accounts
2. Find the relevant account
3. Click on the Account ID to copy it
**Through our API:**
1. Call our [List Accounts](/api-reference/account/list-accounts) endpoint
2. The response includes the account ID in the `id` field
OnlyFans API account IDs **always** start with `acct_`
Always use the format: `acct_XXXXXXXX`
* Include the `acct_` prefix
* Endpoint URL example: `https://app.onlyfansapi.com/api/acct_abc123/chats`
Yes! Use these endpoints for authentication:
* [Start Authentication](/api-reference/connect-onlyfans-account/start-authentication)
* [Poll Authentication Status](/api-reference/connect-onlyfans-account/poll-authenticationStatus)
* Optionally, [Submit 2FA](/api-reference/connect-onlyfans-account/submit2fa)
Use our [Get Current Account](/api-reference/account/get-current-account) endpoint to retrieve the authenticated account details.
No need to use our UI - integrate these endpoints directly with your platform.
## Fan Data & Analytics
This is normal behavior:
* Chat lists return immediately
* Fan details are scraped in the background (usually takes 2-3 seconds)
Either call our [Get User Details](/api-reference/users/get-user-details) endpoint, or retry the original endpoint after 10 seconds.
Use the lastSeen field from our [Get Profile Details](/api-reference/public-profiles/get-profile-details) or [Get User Details](/api-reference/users/get-user-details) endpoints. If the `lastSeen` value is recent, the fan is likely online.
```json
{
"lastSeen": "2025-05-01T15:01:07+00:00"
...
}
```
[-> Read more about caching](/introduction/essentials/response-structure#cache-control)
There's two options available:
* **Calculate manually:** Use `subscribedOnData.subscribeAt` on endpoints like [List Active Fans](/api-reference/fans/list-active-fans) or [Get User Details](/api-reference/users/get-user-details).
* **Human-readable format:** Use `subscribedOnData.duration` (e.g., "3 months")
Access comprehensive spending data through these fields:
| Field | Description |
| ---------------- | ------------------------------ |
| `totalSumm` | Combined total of all spending |
| `subscribesSumm` | Total spent on subscriptions |
| `tipsSumm` | Total spent on tips |
| `messagesSumm` | Total spent on paid messages |
| `postsSumm` | Total spent on paid posts |
| `streamsSumm` | Total spent on streams |
* [Get User Details](/api-reference/users/get-user-details)
* [List Active Fans](/api-reference/fans/list-active-fans)
Sadly, OnlyFans doesn't store language preferences. Workaround:
1. Fetch chat messages from the fan
2. Use a third-party language detection API
3. Store the detected language in your database
No direct endpoint exists, but you can:
1. Retrieve chat messages using the [List ChatMessage](/api-reference/chats/list-chat-message) endpoint
2. Check if `isOpened = true` AND `price > 0`, which indicates a purchased PPV
## Webhooks & Media Handling
* 📚 Documentation: [docs.onlyfansapi.com/webhooks](/webhooks)
* 🎥 Video Demo: [cap.so/s/p2wfkj072yt2x96](https://cap.so/s/p2wfkj072yt2x96)
When `"isReady": false`, the media is still processing.
**Solution:**
1. Get the chat ID from the webhook
2. Poll the [List ChatMessage](/api-reference/chats/list-chat-message) endpoint every 10-20 seconds
3. Wait for `"isReady": true`
4. The URL will then be available
**Alternatively:** Download and store vault content internally for reverse searching by media ID, once the media is ready.
Yes, you can use webhooks with no-code tools like Make, n8n or Zapier. Just set up a webhook listener in your tool and configure it to receive data from our API.
We have most webhook events available as Make and Zapier modules, which you can find in our [Make](/integrations/make/available-modules#instant-triggers) and [Zapier](/integrations/zapier/available-modules#instant-triggers) directories.
# Introduction
URL: /auth
The official, secure, and easy-to-use authentication library for OnlyFans API. Streamline your integration with enterprise-grade security and developer experience.
***
title: "Introduction"
description: "The official, secure, and easy-to-use authentication library for OnlyFans API. Streamline your integration with enterprise-grade security and developer experience."
icon: Hand
----------
import { Card, Cards } from "fumadocs-ui/components/card";
import {
ShieldCheckIcon,
ZapIcon,
CodeIcon,
MonitorSmartphoneIcon,
FeatherIcon,
HeartHandshakeIcon,
DownloadIcon, RocketIcon
} from "lucide-react";
import {SiTypescript} from "@icons-pack/react-simple-icons";
@onlyfansapi/auth - Official Authentication Library
The official authentication library for OnlyFans API provides a seamless, secure way to authenticate users with their OnlyFans accounts directly from your application.
## Features
} title="Secure & Responsive">
Built with enterprise-grade security and works seamlessly on both desktop and mobile devices.
} title="Lightning Fast">
1.5kB script loads in just 2ms on 4G internet, ensuring your users never wait for authentication.
} title="Developer Experience">
Developer-friendly with TypeScript support, comprehensive docs, and intuitive APIs.
## Why choose @onlyfansapi/auth?
}>
Built with industry-standard security practices to protect user credentials and authentication flows. Trusted by developers who prioritize security.
}>
Seamlessly works across all devices—desktop, mobile, and tablet. Your users get a consistent authentication experience regardless of their platform.
}>
Minimal footprint at just 1.5kB ensures lightning-fast load times. Authenticate users in under 2ms even on slower 4G connections.
}>
Full TypeScript definitions included for better developer experience, type safety, and autocomplete support in your IDE.
}>
Use with any framework or no framework at all. Works seamlessly with React, Vue, Svelte, Angular, and vanilla JavaScript with zero dependencies.
}>
Intuitive APIs designed for ease of use with comprehensive documentation, clear examples, and straightforward integration patterns.
## Getting started
Ready to integrate authentication into your application? Check out our installation guide and quickstart to get started in minutes.
}>
Learn how to install and set up @onlyfansapi/auth in your project.
}>
Get up and running with our auth package in just a few minutes.
# Installation
URL: /auth/installation
Install and set up @onlyfansapi/auth in your project
***
title: "Installation"
description: "Install and set up @onlyfansapi/auth in your project"
icon: Download
--------------
import { Tabs, Tab } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Card, Cards } from "fumadocs-ui/components/card";
import { TerminalIcon } from "lucide-react";
## Package Manager
Install `@onlyfansapi/auth` using your preferred package manager:
```bash
npm install @onlyfansapi/auth
```
```bash
pnpm add @onlyfansapi/auth
```
```bash
yarn add @onlyfansapi/auth
```
```bash
bun add @onlyfansapi/auth
```
## Prerequisites
Before you begin, make sure you have:
} href="https://app.onlyfansapi.com" title="An OnlyFans API account">
If you don't have one yet, registering takes just a few seconds.
» Create a free account
## Get Your API Key
Before creating a client session token, you'll need an API key to authenticate your requests to the OnlyFans API.
### Go to the OnlyFans API console → API Keys
Navigate to your [OnlyFans API console](https://app.onlyfansapi.com) and click on **API Keys** in the navigation menu.
### Create a new API key
Click the **"Create API Key"** button to generate a new API key.
Copy and save your API key securely - you'll need it to create client session tokens.
## Create Your Client Session Token
To use `@onlyfansapi/auth`, you'll need to create a client session token (starts with `ofapi_cs_`) through the [Create Client Session](/api-reference/client-sessions/create-client-session) API endpoint.
### Make a POST request to create a client session
Use your API key to authenticate the request:
```bash
curl -X POST "https://app.onlyfansapi.com/api/client-sessions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "My Application / Model: John Doe"
}'
```
**Optional fields:**
* `client_reference_id` - Your internal reference ID for the connected account
* `proxy_country` - Proxy country value (`"us" | "uk" | "de" | "fr" | "it"`)
### Get the client session token from the response
The response will include a `token` field that starts with `ofapi_cs_`:
```json
{
"data": {
"token": "ofapi_cs_OriR8Sdocp0f97eFOdbMMZtiz4Aw5FLX",
"display_name": "My Application / Model: John Doe"
}
}
```
This token is what you'll use with the `@onlyfansapi/auth` package.
### Use the client session token
Copy the client session token and use it in your application with `@onlyfansapi/auth`.
**Important:** Keep your client session token secure. While it's designed for client-side use, treat it with appropriate security measures.
## Next Steps
Once you've installed the package and created your client session token, you're ready to start implementing authentication in your application.
* [Quick Start Guide](/auth/quickstart) - Get up and running in minutes
* [Create Client Session API Reference](/api-reference/client-sessions/create-client-session) - Full API documentation
* [NPM Package](https://www.npmjs.com/package/@onlyfansapi/auth) - Full package documentation on npm
# Quick Start
URL: /auth/quickstart
Get started with @onlyfansapi/auth in minutes
***
title: "Quick Start"
description: "Get started with @onlyfansapi/auth in minutes"
icon: Rocket
------------
import { Tabs, Tab } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Callout } from "fumadocs-ui/components/callout";
## Overview
This guide will walk you through implementing `@onlyfansapi/auth` in your application. The authentication library provides a simple, secure way to authenticate users with their OnlyFans accounts.
## Before You Start
Make sure you've completed the [installation](/auth/installation) steps first. You'll need:
* The package installed in your project
* An API key to create client session tokens
* A client session token (starts with `ofapi_cs_`) to use with the library
## Basic Usage
The library exports a single function `startOnlyFansAuthentication` that handles the entire authentication flow. When called, it opens a secure iframe modal where users can authenticate with their OnlyFans account.
### Import
```typescript twoslash
import { startOnlyFansAuthentication } from '@onlyfansapi/auth';
```
### Function Signature
```typescript
const startOnlyFansAuthentication: (clientSessionToken: string, options: {
onSuccess: (data: AuthSuccessData) => void;
onError: (error: AuthFailureError) => void;
onContinue?: () => void;
}) => void
```
**Parameters:**
* `clientSecret` (string, required): Your client session token obtained from the [Create Client Session](/api-reference/client-sessions/create-client-session) API endpoint
* `options.onSuccess` (function, required): Callback invoked when authentication succeeds
* `options.onError` (function, required): Callback invoked when authentication fails
## Framework Examples
```tsx
import React, { useState } from 'react';
import { startOnlyFansAuthentication } from '@onlyfansapi/auth';
export default function AuthComponent() {
const [isLoading, setIsLoading] = useState(false);
const [authData, setAuthData] = useState(null);
const [error, setError] = useState(null);
const handleAuthentication = () => {
setIsLoading(true);
setError(null);
startOnlyFansAuthentication('ofapi_cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', {
onSuccess: (data) => {
console.log('Authentication successful:', data);
setAuthData(data);
setIsLoading(false);
// data.accountId - The authenticated account ID
// data.username - The authenticated username
// data.response - Full response from the API
},
onError: (error) => {
console.error('Authentication failed:', error);
setError(error);
setIsLoading(false);
// error.message - Error message
// error.code - Error code (if available)
// error.details - Additional error details (if available)
},
});
};
return (
{authData && (
Authentication Successful!
Account ID: {authData.accountId}
Username: {authData.username}
)}
{error && (
Authentication Failed
{error.message}
)}
);
}
```
```vue
Authentication Successful!
Account ID: {{ authData.accountId }}
Username: {{ authData.username }}
Authentication Failed
{{ error.message }}
```
```svelte
{#if authData}
Authentication Successful!
Account ID: {authData.accountId}
Username: {authData.username}
{/if}
{#if error}
Authentication Failed
{error.message}
{/if}
```
```typescript
import { Component } from '@angular/core';
import { startOnlyFansAuthentication } from '@onlyfansapi/auth';
@Component({
selector: 'app-auth',
template: `
```
## Response Data
The library provides TypeScript types for better type safety. Import them if needed:
```typescript
import type { AuthSuccessData, AuthError } from '@onlyfansapi/auth';
```
### Success Response
When authentication is successful, the `onSuccess` callback receives an `AuthSuccessData` object:
```typescript
interface AuthSuccessData {
accountId: string; // The authenticated OnlyFans account ID
username: string; // The authenticated OnlyFans username
response: object; // Full response object from the API containing additional metadata
}
```
**Example usage:**
```typescript
onSuccess: (data) => {
// Store the account ID for future API requests
localStorage.setItem('ofAccountId', data.accountId);
// Redirect to dashboard or update UI
console.log(`Authenticated as ${data.username}`);
}
```
### Error Response
When authentication fails, the `onError` callback receives an `AuthError` object:
```typescript
interface AuthError {
message: string; // Human-readable error message
code?: string; // Error code (if available) for programmatic handling
details?: object; // Additional error details (if available)
}
```
**Common error scenarios:**
* User cancels the authentication flow
* Network connectivity issues
* Invalid or expired client session token
* OnlyFans account access issues
**Example error handling:**
```typescript
onError: (error) => {
if (error.code === 'AUTH_CANCELLED') {
// User closed the authentication modal
console.log('Authentication cancelled by user');
} else {
// Handle other errors
console.error('Authentication failed:', error.message);
// Display error to user
}
}
```
## Security
The authentication library implements multiple security measures to protect user data:
* **Origin validation**: All communication with the authentication iframe is validated by origin
* **Domain whitelisting**: Only messages from the configured OnlyFansAPI.com domain are accepted
* **Secure token transmission**: Client session tokens are passed securely via URL parameters
* **HTTPS required**: The library requires HTTPS connections in production environments
## Best Practices
### Storing Client Session Tokens
Store your client session token securely:
```typescript
// ✅ Good: Use environment variables (if using a build tool)
const CLIENT_SECRET = process.env.NEXT_PUBLIC_OFAPI_CLIENT_SECRET;
// ✅ Good: Fetch from your backend API (most secure)
const clientSecret = await fetch('/api/client-secret').then(r => r.json());
// ❌ Bad: Hardcode in your source code
const CLIENT_SECRET = 'ofapi_cs_...';
```
### Error Handling
Always handle both success and error cases:
```typescript
startOnlyFansAuthentication("clientSecret", {
onSuccess: (data) => {
// Update your application state
// Persist authentication data if needed
// Redirect or update UI
},
onError: (error) => {
// Log errors for debugging
// Show user-friendly error messages
// Provide fallback options
},
});
```
### User Experience
* Show a loading state while authentication is in progress
* Disable the authentication button during the flow to prevent duplicate requests
* Provide clear feedback on success or failure
* Consider adding a "try again" option if authentication fails
## Troubleshooting
### Common Issues
**Authentication modal doesn't open:**
* Ensure your client session token is valid and properly formatted
* Check browser console for any error messages
* Verify that pop-ups aren't blocked by your browser
**"Invalid client secret" error:**
* Verify your client session token is correct (starts with `ofapi_cs_`)
* Check that the token hasn't expired
* Ensure you're using a token created via the [Create Client Session API](/api-reference/client-sessions/create-client-session)
**Network errors:**
* Check your internet connection
* Verify OnlyFansAPI.com is accessible from your network
* Some corporate firewalls may block the authentication iframe
## Next Steps
* Review the [Installation Guide](/auth/installation) if you haven't already
* Check out the [NPM package](https://www.npmjs.com/package/@onlyfansapi/auth) for the latest version and updates
* Visit [onlyfansapi.com/auth](https://onlyfansapi.com/auth) for more information
* Explore the [API Reference](/api-reference) to see what you can do with authenticated accounts
# Overview
URL: /api-reference
Deep dive into our API endpoints and data structures
***
title: "Overview"
icon: "Star"
description: "Deep dive into our API endpoints and data structures"
-------------------------------------------------------------------
import {
BanknoteArrowDownIcon,
BotMessageSquareIcon,
ChartSplineIcon,
GalleryVerticalEndIcon,
ImageDownIcon,
ImageIcon,
ImageUpIcon,
MessageSquareReplyIcon,
MessageSquareTextIcon,
MessagesSquareIcon,
RocketIcon,
ScrollTextIcon,
SendIcon,
SmilePlusIcon,
UserCheckIcon,
UserSearchIcon,
UsersIcon,
UserXIcon,
} from "lucide-react";
Not sure where to start?
Browse our frequently used API endpoints below to get a feel for what's possible
with OnlyFans API.
## Chats & Messages \[!toc]
} href="/api-reference/chats/list-chats" title="List Chats">
Retrieve the latest chats, including details like last message and fan details.
} href="/api-reference/chat-messages/list-chat-messages" title="List Chat Messages">
Retrieve messages from a specific chat.
} href="/api-reference/chat-messages/send-message" title="Send Message">
Send a new chat message to a fan, including support for media and PPVs.
} href="/api-reference/mass-messaging/send-mass-message" title="Send Mass Message">
Send or schedule a mass message to collections or individual fans, including support for media and PPVs.
## Payouts & Earnings \[!toc]
} href="/api-reference/payouts/get-earning-statistics" title="Earning Statistics">
Get a summary of model earnings over time, including totals and breakdowns.
} href="/api-reference/payouts/list-transactions-earnings" title="List Transactions (Earnings)">
Get a list of earning transactions, including details like amount, type, and fan info.
} href="/api-reference/payouts/request-manual-withdrawal" title="Request Manual Withdrawal">
Initiate a manual withdrawal, perfect for automating daily payouts.
## Fans & Subscribers \[!toc]
} href="/api-reference/fans/list-all-fans" title="List All Fans">
Retrieve a list of all fans, and filter by online, total spendings, duration, and more.
} href="/api-reference/fans/list-active-fans" title="List Active Fans">
Get a list of fans who have an active subscription.
} href="/api-reference/fans/list-expired-fans" title="List Expired Fans">
Get a list of fans whose subscriptions have expired.
} href="/api-reference/fans/list-latest-fans" title="List Latest Fans">
Get a list of fans within a specific date range.
## Media & Vault \[!toc]
} href="/api-reference/media-vault/list-vault-media" title="List Vault Media">
Retrieve a list of all fans, and filter by online, total spendings, duration, and more.
} href="/api-reference/media-vault-lists/list-vault-lists" title="List Vault Lists">
Get a list of fans who have an active subscription.
} href="/api-reference/media/upload-media-to-the-only-fans-cdn" title="Upload media to OnlyFans">
Upload an image, video or audio file to the OnlyFans CDN to include in a message or post.
} href="/api-reference/media/download-media-from-the-only-fans-cdn" title="Download media from OnlyFans">
Download an image, video or audio file from OnlyFans to our own CDN.
Haven't found what you're looking for?
} title="Explore our full API reference in the sidebar" href="/api-reference">
We have over 100 endpoints covering most OnlyFans functionality. Check out the sidebar to explore all available endpoints.
} title="Ask our AI chatbot">
Our AI chatbot can help you find the right endpoint for your use case. Click the "Ask AI" button in the bottom right to get started.
} title="Request a new functionality" href="mailto:hello@onlyfansapi.com">
Need something specific? Let us know! We're constantly adding new endpoints based on user feedback.
# Introduction
URL: /data-exports
Our no-code data exports offer full historic data of transactions, chat messages, media, and much more.
***
title: "Introduction"
description: "Our no-code data exports offer full historic data of transactions, chat messages, media, and much more."
icon: Hand
----------
import { Step, Steps } from 'fumadocs-ui/components/steps';
import {
ArrowLeftRightIcon,
BanknoteArrowDownIcon,
HeartIcon,
ImageIcon,
MessagesSquareIcon,
TagIcon,
UserSearchIcon
} from "lucide-react";
## Available data export types
} title="Transactions">
🟢 Available
} title="Banking & Payouts">
Coming soon
} title="Fans & Following">
Coming soon
} title="Tracking Links">
Coming soon
} title="Trial Links">
Coming soon
} title="Chat Messages">
Coming soon
} title="Media">
Coming soon
## Getting started
We are continuously working to improve and expand the available export types. If you run in to any issues, please contact us.
To get started with our no-code data exports, please visit the [Data Exports page](https://app.onlyfansapi.com/tools/data-export) on our Console.
### Starting an export
To get started, click on the "Create Export" button, which will take you to the export creation page. You're then prompted customize your export:
#### Data type
As the first step, select the type of data you want to export. Please refer to [the list above](#available-data-export-types) for available export types.
#### Export fields
Select the fields you want to include in your export. For a full list of available fields, please refer to [the available export fields list](#available-export-fields).
#### Accounts
Choose which accounts you want to include in your export. You can select all connected accounts, or select specific accounts.
#### Date range
Select the data range that you wish to be included in your export.
Transaction exports will always export up until the current date & time. You are only able to choose the start date.
#### View the export cost, and select the export file type
After providing the above details, the export cost will be calculated and shown to you. If all looks good, press on "Export Data" and choose either CSV or Excel (XSLX). This will start the export!
Your data export will now be processed by our servers in the background, and you will be able to download it once completed.
### Big data exports
Depending on the start & end date and account size, your export might take a long time to complete. We are working on improving this experience.\
As a workaround, you may start multiple smaller individual exports.
## Available export fields
| Transactions | Banking | Fans & Following | Tracking Links | Trial Links | Chat Messages | Media |
| ---------------- | ----------- | ---------------- | -------------- | ----------- | ------------- | ----------- |
| Account ID | Coming soon | Coming soon | Coming soon | Coming soon | Coming soon | Coming soon |
| Account Name | | | | | | |
| Account Username | | | | | | |
| Transaction ID | | | | | | |
| Transaction Type | | | | | | |
| Fan ID | | | | | | |
| Fan Username | | | | | | |
| Fan Name | | | | | | |
| Amount | | | | | | |
| VAT Amount | | | | | | |
| Tax Amount | | | | | | |
| Net Amount | | | | | | |
| Fee Amount | | | | | | |
| Currency | | | | | | |
| Description | | | | | | |
| Status | | | | | | |
| Created At | | | | | | |
## Pricing
The following pricing applies to our no-code data exports:
| Export type | Cost |
| ---------------- | ----------------------------- |
| Transactions | 1 credit per 100 transactions |
| Banking | Coming soon |
| Fans & Following | Coming soon |
| Tracking Links | Coming soon |
| Trial Links | Coming soon |
| Chat Messages | Coming soon |
| Media | Coming soon |
# Introduction
URL: /introduction
Welcome to the OnlyFansAPI.com documentation!
***
title: Introduction
description: "Welcome to the OnlyFansAPI.com documentation!"
icon: Hand
----------
import {
CodeXmlIcon,
KeyRoundIcon,
LockIcon,
WebhookIcon,
} from 'lucide-react';
## Why OnlyFansAPI.com?
OnlyFansAPI.com is a platform that allows you to interact with the OnlyFans API without the need to build
your proxy management system, reverse engineer the API, or deal with WebSockets.
Our engineers who have been working with the OnlyFans API for years have built **a huge set of simple REST API endpoints** that allows you to:
* Access all public information about OnlyFans Creator Profiles
* Search within a database of over 3.5m+ OnlyFans Creator Profiles
* Connect your own OnlyFans account and:
* Get a list of your chats and messages
* Send messages (i.e. if you're building AI Chatbot solution)
* Get a list of your fans, and automatically follow them back
* Literally anything else you can think of!
## Get started
Whether you're building a chatbot, OnlyFans Search Engine, OnlyFans CRM, or anything else, you can get started with OnlyFansAPI.com in minutes.
} href="/introduction/quickstart">
Learn how to make your first API request and get started with OnlyFans API
} href="https://app.onlyfansapi.com/api-keys">
Create your first API Key and start making requests
} href="/introduction/guides/connect-onlyfans-account">
Learn how to connect you OnlyFans accounts in under 2 minutes
} href="/webhooks">
Get webhook notifications for new messages, new subscribers, tips, ...
# Quickstart (2m)
URL: /introduction/quickstart
Start using the OnlyFans API in minutes
***
title: "Quickstart (2m)"
description: "Start using the OnlyFans API in minutes"
icon: Rocket
------------
import {
CodeIcon, CoinsIcon, GaugeIcon, ShieldHalfIcon, ShieldIcon, ShieldUserIcon,
} from "lucide-react";
## Getting Started with OnlyFans API
Follow these steps to start using the OnlyFans API for your project.
### 1. Create Your API Key
To get started with the OnlyFans API, you'll need an API key:
1. Sign up for an account at [OnlyFansAPI Console](https://app.onlyfansapi.com)
2. Navigate to the API Keys section
3. Create a new API key for your project
4. Save your API key securely - you'll need it for all API requests
### 2. Connect Your OnlyFans Account
You'll need to connect your OnlyFans account to use the API. We offer two methods:
#### Automated Login Flow (Recommended)
1. Go to [OnlyFansAPI Console -> Accounts](https://app.onlyfansapi.com/accounts)
2. Click "+ Connect Account"
3. Follow the setup process (supports 2FA and captcha)
#### Manual cURL Method
An alternative method using cURL request is available. See our [detailed guide](/introduction/guides/connect-onlyfans-account) for instructions.
### 3. Essential Concepts
Before you start making API calls, familiarize yourself with these important concepts:
} href="/introduction/essentials/response-structure">
Understand how our API responses are structured.
} href="/introduction/essentials/rate-limits">
Understand API rate limits and how to handle them properly.
} href="/introduction/essentials/credits">
Learn about our credit-based billing and how to manage your usage.
} href="/introduction/essentials/proxies">
Learn about proxy options for secure API access.
### 4. Next Steps
Once you're set up, you can:
* Explore our API endpoints in the [API Reference](/api-reference)
* Test API calls directly from our documentation
* Start building your application with our comprehensive guides
# Introduction
URL: /integrations
OnlyFans API offers various integrations with platforms like Make, Zapier, IFTTT & n8n. This documentation will help you understand how to make use of our supported integrations.
***
title: "Introduction"
description: "OnlyFans API offers various integrations with platforms like Make, Zapier, IFTTT & n8n. This documentation will help you understand how to make use of our supported integrations."
icon: Hand
----------
import {
SiMake,
SiMakeHex,
SiZapier,
SiZapierHex,
SiIfttt,
SiIftttHex,
SiN8n,
SiN8nHex
} from "@icons-pack/react-simple-icons";
Please choose an integration to get started:
} href="/integrations/n8n" title="n8n (recommended)">
Best for building complex, multi-step no-code automations. Perfect for users who want powerful automation capabilities with full control over their workflows.
} href="/integrations/make" title="Make">
Best for simple OnlyFans automations, all without writing code. Ideal for users who want simple visual workflow design.
} href="/integrations/zapier" title="Zapier">
Best for quickly setting up no-code automations based on triggers like new messages, PPV purchases, or new fan subscriptions. Great for those who want ease-of-use and a large library of app connections.
Or watch our tutorial video:
# Available webhook events
URL: /webhooks/available-events
A list of all available webhook events that you can subscribe to.
***
title: "Available webhook events"
description: "A list of all available webhook events that you can subscribe to."
icon: Webhook
-------------
Please reach out to us, we can add it!
## Accounts
### `accounts.connected`
A new OnlyFans account was connected.
Please note that `payload.client_reference_id` can be null - it's only
included if you provided us with `client_reference_id` while [Creating Client
Session](/api-reference/client-sessions/create-client-session)
```json title="Example payload"
{
"event": "accounts.connected",
"account_id": "acct_123",
"payload": {
"client_reference_id": "my_crm_model_12345", // Optional - Value you provided while creating Client Session - otherwise null
"state": "authenticated",
"progress": "started",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
### `accounts.reconnected`
An OnlyFans account was reconnected.
```json title="Example payload"
{
"event": "accounts.reconnected",
"account_id": "acct_123",
"payload": {
"state": "authenticated",
"progress": "started",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
### `accounts.session_expired`
OnlyFans account connection has expired, but we automatically re-connected it using our system - you don't need to do anything.
```json title="Example payload"
{
"event": "accounts.session_expired",
"account_id": "acct_123",
"payload": {
"state": "authenticated",
"progress": "started",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
### `accounts.authentication_failed`
OnlyFans account connection has expired, and we couldn't automatically re-connect it using our system. You need to reconnect with our [/authenticate](/api-reference/connect-onlyfans-account/start-authentication) endpoint or manually in our [dashboard](https://app.onlyfansapi.com).
```json title="Example payload"
{
"event": "accounts.authentication_failed",
"account_id": "acct_123",
"payload": {
"state": "authenticated",
"progress": "started",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
### `accounts.otp_code_required`
A two-factor authentication code is required to connect one of your OnlyFans accounts.
```json title="Example payload"
{
"event": "accounts.otp_code_required",
"account_id": "acct_123",
"payload": {
"state": "authenticated",
"progress": "started",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
### `accounts.face_otp_required`
Face verification is required to connect one of your OnlyFans accounts.
```json title="Example payload"
{
"event": "accounts.face_otp_required",
"account_id": "acct_123",
"payload": {
"state": "authenticated",
"progress": "started",
"face_otp_verification_url": "https://id.onlyfans.com/s?123",
"latestAuthAttempt": {
"started_at": "2025-05-13T20:26:56.000000Z",
"completed_at": null,
"success": false,
"error_message": null,
"needs_otp": false,
"needs_face_otp": false,
"otp_phone_ending": null
}
}
}
```
## Messages
### `messages.received`
New message received from a fan.
```json title="Example payload"
{
"event": "messages.received",
"account_id": "acct_123",
"payload": {
"responseType": "message",
"text": "
All types of webhook events are available on every plan - Basic, Pro and Enterprise.
How to Subscribe to webhooks
List of available webhook events
We offer native integrations for most no-code tools. Get started in minutes without writing a single line of code.
n8n integration
Make.com integration
Zapier integration
A webhook is an HTTP endpoint that receives events from OnlyFans API. They allow you to be notified about events such as:
* Receiving a message from a fan (`messages.received`)
* New fan subscriptions (`subscriptions.new`)
* Fan purchased a PPV message (`messages.ppv.unlocked`)
* And more! See a [complete list of available webhook events](/webhooks/available-events)
You can use our API for less frequent actions like retrieving specific chats, profiles, or earning details, while webhooks help you scale your integration and process large volumes of business-critical events in near real-time.
# Protecting your webhooks
URL: /webhooks/protecting-your-webhooks
It is recommended to validate incoming webhook requests to ensure that they originate from OnlyFans API, and not from a malicious actor. You can do this by verifying the `Signature` header in the request.
***
title: "Protecting your webhooks"
description: "It is recommended to validate incoming webhook requests to ensure that they originate from OnlyFans API, and not from a malicious actor. You can do this by verifying the `Signature` header in the request."
icon: ShieldCheck
-----------------
You can choose any signing secret, but it is recommended to use a long, random string.
## How the signature is calculated
We calculate the signature using the HMAC SHA256 algorithm. The payload (as json) is the string, and the signing secret is the key.
## Verifying the signature
Below you can find examples of how to verify the signature in different programming languages.
```php tab="PHP"
$computedSignature = hash_hmac('sha256', $requestContent, $signingSecret);
```
```python tab="Python"
import hmac
import hashlib
computed_signature = hmac.new(signing_secret.encode(), request_content.encode(), hashlib.sha256).hexdigest()
```
```javascript tab="JavaScript"
const crypto = require('crypto');
const computedSignature = crypto
.createHmac('sha256', signingSecret)
.update(requestContent)
.digest('hex');
```
```go tab="Go"
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
func main() {
signingSecret := []byte("your_signing_secret")
requestContent := []byte("your_request_content")
h := hmac.New(sha256.New, signingSecret)
h.Write(requestContent)
computedSignature := hex.EncodeToString(h.Sum(nil))
// Use `computedSignature` as needed
}
```
```java tab="Java"
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class HmacSha256Example {
public static void main(String[] args) throws Exception {
String signingSecret = "your_signing_secret";
String requestContent = "your_request_content";
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(signingSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
mac.init(secretKeySpec);
byte[] hmacBytes = mac.doFinal(requestContent.getBytes(StandardCharsets.UTF_8));
String computedSignature = bytesToHex(hmacBytes);
// Use `computedSignature` as needed
}
private static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
}
```
```ruby tab="Ruby"
require 'openssl'
computed_signature = OpenSSL::HMAC.hexdigest('sha256', signing_secret, request_content)
```
# Subscribing to webhooks
URL: /webhooks/subscribing-to-webhooks
Listen to events from your OnlyFans accounts on your webhook endpoint so your integration can automatically process data.
***
title: "Subscribing to webhooks"
description: "Listen to events from your OnlyFans accounts on your webhook endpoint so your integration can automatically process data."
icon: BellPlus
--------------
Webhooks are only available for Pro and Enterprise plans.
You can easily subscribe to webhooks using our console. To do this, follow these steps:
1. Go to the [OnlyFansAPI Console -> Webhooks](https://app.onlyfansapi.com)
2. Click on the **+ Add Webhook** button
3. Fill in the **Endpoint URL** field with your webhook endpoint
4. Optionally, add a [Signing Secret](/webhooks/protecting-your-webhooks) to verify the webhook payloads (recommended)
5. Select the [events](/webhooks/available-events) you want to subscribe to

Once you have added your webhook, you will start receiving events on your webhook endpoint.
You will be able to view the latest response status in the console.
# Disconnect Account
URL: /api-reference/account/disconnect-account
Disconnect an OnlyFans account.
***
title: Disconnect Account
description: Disconnect an OnlyFans account.
full: true
\_openapi:
method: DELETE
route: /api/accounts/{id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Disconnect an OnlyFans account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Current Account
URL: /api-reference/account/get-current-account
Get OnlyFans Profile details for the currently used Account
***
title: Get Current Account
description: Get OnlyFans Profile details for the currently used Account
full: true
\_openapi:
method: GET
route: /api/{account}/me
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get OnlyFans Profile details for the currently used Account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Model Start Date
URL: /api-reference/account/get-model-start-date
Get the start date of the model (the date+time monetization was enabled)
***
title: Get Model Start Date
description: Get the start date of the model (the date+time monetization was enabled)
full: true
\_openapi:
method: GET
route: /api/{account}/me/model-start-date
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get the start date of the model (the date+time monetization was
enabled)
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Top Percentage
URL: /api-reference/account/get-top-percentage
Get the top percentage of the model (e.g., top 0.02% of all creators)
***
title: Get Top Percentage
description: Get the top percentage of the model (e.g., top 0.02% of all creators)
full: true
\_openapi:
method: GET
route: /api/{account}/me/top-percentage
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the top percentage of the model (e.g., top 0.02% of all creators)
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Accounts
URL: /api-reference/account/list-accounts
List all connected OnlyFans accounts.
***
title: List Accounts
description: List all connected OnlyFans accounts.
full: true
\_openapi:
method: GET
route: /api/accounts
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all connected OnlyFans accounts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Account Country Details
URL: /api-reference/banking/get-account-country-details
Returns the account owner's country details for banking, including country code, name, whether the country has states and zip codes, payout eligibility, and W9 form availability.
***
title: Get Account Country Details
description: >-
Returns the account owner's country details for banking, including country
code, name, whether the country has states and zip codes, payout eligibility,
and W9 form availability.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/details/account-country
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Returns the account owner's country details for banking, including
country code, name, whether the country has states and zip codes,
payout eligibility, and W9 form availability.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Bank Payout Details
URL: /api-reference/banking/get-bank-payout-details
Returns the account owner's bank payout details, including whether payout data is filled, available payout methods with their descriptions, and required bank fields.
***
title: Get Bank Payout Details
description: >-
Returns the account owner's bank payout details, including whether payout data
is filled, available payout methods with their descriptions, and required bank
fields.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/details/bank
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Returns the account owner's bank payout details, including whether
payout data is filled, available payout methods with their
descriptions, and required bank fields.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get DAC7 Form Details
URL: /api-reference/banking/get-dac7form-details
If available, returns the account owner's DAC7 form information required for tax reporting, including personal details, address, tax identification, country information, and DAC7 status.
***
title: Get DAC7 Form Details
description: >-
If available, returns the account owner's DAC7 form information required for
tax reporting, including personal details, address, tax identification,
country information, and DAC7 status.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/details/dac7-form
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
If available, returns the account owner's DAC7 form information
required for tax reporting, including personal details, address, tax
identification, country information, and DAC7 status.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Legal and Tax Status
URL: /api-reference/banking/get-legal-and-tax-status
Returns the account owner's legal and tax status required for banking and payout configuration, including W9 requirements, identity verification status, DAC7 compliance, and tax information.
***
title: Get Legal and Tax Status
description: >-
Returns the account owner's legal and tax status required for banking and
payout configuration, including W9 requirements, identity verification status,
DAC7 compliance, and tax information.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/details/legal-info
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Returns the account owner's legal and tax status required for banking
and payout configuration, including W9 requirements, identity
verification status, DAC7 compliance, and tax information.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Legal Form Details
URL: /api-reference/banking/get-legal-form-details
Returns the account owner's legal form details for banking, including personal or business name, address, social media links, date of birth, and available document types for identity verification.
***
title: Get Legal Form Details
description: >-
Returns the account owner's legal form details for banking, including personal
or business name, address, social media links, date of birth, and available
document types for identity verification.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/details/legal-form
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Returns the account owner's legal form details for banking, including
personal or business name, address, social media links, date of birth,
and available document types for identity verification.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Available Payout Systems
URL: /api-reference/banking/list-available-payout-systems
Returns a list of available payout systems for the account, including details such as payout method codes, titles, descriptions, minimum payout amounts, processing times, and the currently selected payout method.
***
title: List Available Payout Systems
description: >-
Returns a list of available payout systems for the account, including details
such as payout method codes, titles, descriptions, minimum payout amounts,
processing times, and the currently selected payout method.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/available-payout-systems
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Returns a list of available payout systems for the account, including
details such as payout method codes, titles, descriptions, minimum
payout amounts, processing times, and the currently selected payout
method.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Countries
URL: /api-reference/banking/list-countries
List countries, their internal OnlyFans IDs, and their payment & tax information.
***
title: List Countries
description: >-
List countries, their internal OnlyFans IDs, and their payment & tax
information.
full: true
\_openapi:
method: GET
route: /api/{account}/banking/countries
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
List countries, their internal OnlyFans IDs, and their payment & tax
information.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Whoami
URL: /api-reference/api-keys/whoami
Get details about the currently used API Key & the relevant Team
***
title: Whoami
description: Get details about the currently used API Key & the relevant Team
full: true
\_openapi:
method: GET
route: /api/whoami
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get details about the currently used API Key & the relevant Team
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Message
URL: /api-reference/chat-messages/delete-message
Delete a message from a chat. Please note that ONLY messages sent less than 24 hours ago can be deleted.
***
title: Delete Message
description: >-
Delete a message from a chat. Please note that ONLY messages sent less than 24
hours ago can be deleted.
full: true
\_openapi:
method: DELETE
route: /api/{account}/chats/{chat_id}/messages/{message_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Delete a message from a chat. Please note that ONLY messages sent less
than 24 hours ago can be deleted.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Like Message
URL: /api-reference/chat-messages/like-message
Like a chat message.
***
title: Like Message
description: Like a chat message.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/messages/{message_id}/like
toc: \[]
structuredData:
headings: \[]
contents:
* content: Like a chat message.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Chat Messages
URL: /api-reference/chat-messages/list-chat-messages
Get messages from a specific chat.
***
title: List Chat Messages
description: Get messages from a specific chat.
full: true
\_openapi:
method: GET
route: /api/{account}/chats/{chat_id}/messages
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get messages from a specific chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Pin Message
URL: /api-reference/chat-messages/pin-message
Pin a message from a chat.
***
title: Pin Message
description: Pin a message from a chat.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/messages/{message_id}/pin
toc: \[]
structuredData:
headings: \[]
contents:
* content: Pin a message from a chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Search Chat Messages
URL: /api-reference/chat-messages/search-chat-messages
Search messages in a specific chat. Returns a list of message IDs matching the search query.
***
title: Search Chat Messages
description: >-
Search messages in a specific chat. Returns a list of message IDs matching the
search query.
full: true
\_openapi:
method: GET
route: /api/{account}/chats/{chat_id}/messages/search
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Search messages in a specific chat. Returns a list of message IDs
matching the search query.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Send Message
URL: /api-reference/chat-messages/send-message
Send a new message to a chat.
***
title: Send Message
description: Send a new message to a chat.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/messages
toc: \[]
structuredData:
headings: \[]
contents:
* content: Send a new message to a chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unlike Message
URL: /api-reference/chat-messages/unlike-message
Unlike a chat message.
***
title: Unlike Message
description: Unlike a chat message.
full: true
\_openapi:
method: DELETE
route: /api/{account}/chats/{chat_id}/messages/{message_id}/unlike
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unlike a chat message.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unpin Message
URL: /api-reference/chat-messages/unpin-message
Unpin a message from a chat.
***
title: Unpin Message
description: Unpin a message from a chat.
full: true
\_openapi:
method: DELETE
route: /api/{account}/chats/{chat_id}/messages/{message_id}/unpin
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unpin a message from a chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Calculate Chargeback Ratio
URL: /api-reference/chargebacks/calculate-chargeback-ratio
The Chargeback Ratio reflects the number of chargebacks compared to the total number of payments as a percentage. Ideally, your Chargeback Ratio should be under 1%.
***
title: Calculate Chargeback Ratio
description: >-
The Chargeback Ratio reflects the number of chargebacks compared to the total
number of payments as a percentage. Ideally, your Chargeback Ratio should be
under 1%.
full: true
\_openapi:
method: GET
route: /api/{account}/chargebacks/ratio
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
The Chargeback Ratio reflects the number of chargebacks compared to
the total number of payments as a percentage. Ideally, your Chargeback
Ratio should be under 1%.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Chargeback Statistics
URL: /api-reference/chargebacks/list-chargeback-statistics
List chargeback counts & amounts per hour, day or month.
***
title: List Chargeback Statistics
description: List chargeback counts & amounts per hour, day or month.
full: true
\_openapi:
method: GET
route: /api/{account}/chargebacks/statistics
toc: \[]
structuredData:
headings: \[]
contents:
* content: List chargeback counts & amounts per hour, day or month.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Chargebacks
URL: /api-reference/chargebacks/list-chargebacks
Retrieve a list of chargebacks within a specified date range.
***
title: List Chargebacks
description: Retrieve a list of chargebacks within a specified date range.
full: true
\_openapi:
method: GET
route: /api/{account}/chargebacks
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of chargebacks within a specified date range.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Hide Chat
URL: /api-reference/chats/hide-chat
Hide a specific chat from the chat list. To unhide this chat, send a new message to the user.
***
title: Hide Chat
description: >-
Hide a specific chat from the chat list. To unhide this chat, send a new
message to the user.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/hide
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Hide a specific chat from the chat list. To unhide this chat, send a
new message to the user.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Chat Media (Gallery)
URL: /api-reference/chats/list-chat-media-gallery
List media files shared in a specific chat.
***
title: List Chat Media (Gallery)
description: List media files shared in a specific chat.
full: true
\_openapi:
method: GET
route: /api/{account}/chats/{chat_id}/media
toc: \[]
structuredData:
headings: \[]
contents:
* content: List media files shared in a specific chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Chats
URL: /api-reference/chats/list-chats
Get the list of chats for an Account.
***
title: List Chats
description: Get the list of chats for an Account.
full: true
\_openapi:
method: GET
route: /api/{account}/chats
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the list of chats for an Account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Mute Chat Notifications
URL: /api-reference/chats/mute-chat-notifications
Mute notifications for a specific chat.
***
title: Mute Chat Notifications
description: Mute notifications for a specific chat.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/mute
toc: \[]
structuredData:
headings: \[]
contents:
* content: Mute notifications for a specific chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Start Typing Indicator
URL: /api-reference/chats/start-typing-indicator
Calling this endpoint will show the target fan a "Model is typing..." note in the chat for ~4 seconds. If you want to continue showing the indicator call this endpoint multiple times. Free - no credits charged.
***
title: Start Typing Indicator
description: >-
Calling this endpoint will show the target fan a "Model is typing..." note in
the chat for \~4 seconds. If you want to continue showing the indicator call
this endpoint multiple times. Free - no credits charged.
full: true
\_openapi:
method: POST
route: /api/{account}/chats/{chat_id}/typing
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Calling this endpoint will show the target fan a "Model is typing..."
note in the chat for \~4 seconds. If you want to continue showing the
indicator call this endpoint multiple times. Free - no credits
charged.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unmute Chat Notifications
URL: /api-reference/chats/unmute-chat-notifications
Unmute notifications for a specific chat.
***
title: Unmute Chat Notifications
description: Unmute notifications for a specific chat.
full: true
\_openapi:
method: DELETE
route: /api/{account}/chats/{chat_id}/unmute
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unmute notifications for a specific chat.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Client Session
URL: /api-reference/client-sessions/create-client-session
Create Client Session Token for later use in embedded auth components - eg. via @onlyfansapi/auth npm package.
***
title: Create Client Session
description: >-
Create Client Session Token for later use in embedded auth components - eg.
via @onlyfansapi/auth npm package.
full: true
\_openapi:
method: POST
route: /api/client-sessions
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Create Client Session Token for later use in embedded auth components
* eg. via @onlyfansapi/auth npm package.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Poll Authentication Status
URL: /api-reference/connect-onlyfans-account/poll-authentication-status
Poll the status of the authentication process. Eg. if 2FA is required, we will ask you for the code using the `twoFactorPending = true` in the response body.
***
title: Poll Authentication Status
description: >-
Poll the status of the authentication process. Eg. if 2FA is required, we will
ask you for the code using the `twoFactorPending = true` in the response body.
full: true
\_openapi:
method: GET
route: /api/authenticate/{attempt_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Poll the status of the authentication process. Eg. if 2FA is required,
we will ask you for the code using the `twoFactorPending = true` in
the response body.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Re-authenticate Account
URL: /api-reference/connect-onlyfans-account/re-authenticate-account
Trigger account reauthentication without the need to submit email & password again.
***
title: Re-authenticate Account
description: >-
Trigger account reauthentication without the need to submit email & password
again.
full: true
\_openapi:
method: POST
route: /api/authenticate/{account_id}/reauthenticate
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Trigger account reauthentication without the need to submit email &
password again.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Start Authentication
URL: /api-reference/connect-onlyfans-account/start-authentication
Start the authentication process for a new account. Our systems will bypass Captcha and also ask you for 2FA code if required. All credentials are stored securely using bcrypt and only used during login.
***
title: Start Authentication
description: >-
Start the authentication process for a new account. Our systems will bypass
Captcha and also ask you for 2FA code if required. All credentials are stored
securely using bcrypt and only used during login.
full: true
\_openapi:
method: POST
route: /api/authenticate
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Start the authentication process for a new account. Our systems will
bypass Captcha and also ask you for 2FA code if required. All
credentials are stored securely using bcrypt and only used during
login.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Submit 2FA
URL: /api-reference/connect-onlyfans-account/submit2fa
Submit the 2FA code for the authentication process.
***
title: Submit 2FA
description: Submit the 2FA code for the authentication process.
full: true
\_openapi:
method: PUT
route: /api/authenticate/{attempt_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Submit the 2FA code for the authentication process.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Download Media from the OnlyFans CDN
URL: /api-reference/endpoints/download-media-from-the-only-fans-cdn
Downloads a file directly from `https://cdn*.onlyfans.com/*` URL. Use this endpoint to directly download a file from URL.
***
title: Download Media from the OnlyFans CDN
description: >-
Downloads a file directly from `https://cdn*.onlyfans.com/*` URL. Use this
endpoint to directly download a file from URL.
full: true
\_openapi:
method: GET
route: /api/{account}/media/download/{cdnUrl}
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Downloads a file directly from `https://cdn*.onlyfans.com/*` URL. Use
this endpoint to directly download a file from URL.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Active Followings
URL: /api-reference/following/list-active-followings
Get a paginated list of followings for an Account. Newest followings are first.
***
title: List Active Followings
description: >-
Get a paginated list of followings for an Account. Newest followings are
first.
full: true
\_openapi:
method: GET
route: /api/{account}/following/active
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list of followings for an Account. Newest followings
are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List All Followings
URL: /api-reference/following/list-all-followings
Get a paginated list of followings for an Account. Newest followings are first.
***
title: List All Followings
description: >-
Get a paginated list of followings for an Account. Newest followings are
first.
full: true
\_openapi:
method: GET
route: /api/{account}/following/all
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list of followings for an Account. Newest followings
are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Expired Followings
URL: /api-reference/following/list-expired-followings
Get a paginated list of expired followings for an Account. Newest followings are first.
***
title: List Expired Followings
description: >-
Get a paginated list of expired followings for an Account. Newest followings
are first.
full: true
\_openapi:
method: GET
route: /api/{account}/following/expired
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list of expired followings for an Account. Newest
followings are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Clear Fan Notes
URL: /api-reference/fans/clear-fan-notes
Clear notes for a specific fan.
***
title: Clear Fan Notes
description: Clear notes for a specific fan.
full: true
\_openapi:
method: DELETE
route: /api/{account}/fans/{fan_id}/notes
toc: \[]
structuredData:
headings: \[]
contents:
* content: Clear notes for a specific fan.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create/Edit Fan Notes
URL: /api-reference/fans/create-edit-fan-notes
Create or edit notes for a specific fan.
***
title: Create/Edit Fan Notes
description: Create or edit notes for a specific fan.
full: true
\_openapi:
method: PUT
route: /api/{account}/fans/{fan_id}/notes
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create or edit notes for a specific fan.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Fan Notes
URL: /api-reference/fans/get-fan-notes
Retrieve notes for a specific fan.
***
title: Get Fan Notes
description: Retrieve notes for a specific fan.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/{fan_id}/notes
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve notes for a specific fan.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Subscription History
URL: /api-reference/fans/get-subscription-history
Get Subscription History for a given OnlyFans User ID. This can be useful, for example, when the user's subscribed to your account for the first time.
***
title: Get Subscription History
description: >-
Get Subscription History for a given OnlyFans User ID. This can be useful, for
example, when the user's subscribed to your account for the first time.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/{user_id}/subscriptions-history
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get Subscription History for a given OnlyFans User ID. This can be
useful, for example, when the user's subscribed to your account for
the first time.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Active Fans
URL: /api-reference/fans/list-active-fans
Get a paginated list of fans for an Account. Newest fans are first.
***
title: List Active Fans
description: Get a paginated list of fans for an Account. Newest fans are first.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/active
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get a paginated list of fans for an Account. Newest fans are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List All Fans
URL: /api-reference/fans/list-all-fans
Get a paginated list of fans for an Account. Newest fans are first.
***
title: List All Fans
description: Get a paginated list of fans for an Account. Newest fans are first.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/all
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get a paginated list of fans for an Account. Newest fans are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Expired Fans
URL: /api-reference/fans/list-expired-fans
Get a paginated list of expired fans for an Account. Newest fans are first.
***
title: List Expired Fans
description: Get a paginated list of expired fans for an Account. Newest fans are first.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/expired
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list of expired fans for an Account. Newest fans are
first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Latest Fans
URL: /api-reference/fans/list-latest-fans
Get a paginated list fans, filterable by total, only new subscribers, or only renewals. Newest fans are first.
***
title: List Latest Fans
description: >-
Get a paginated list fans, filterable by total, only new subscribers, or only
renewals. Newest fans are first.
full: true
\_openapi:
method: GET
route: /api/{account}/fans/latest
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list fans, filterable by total, only new subscribers,
or only renewals. Newest fans are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Set Fan's Custom Name
URL: /api-reference/fans/set-fans-custom-name
Change the Fan's Custom Name shown in OnlyFans
***
title: Set Fan's Custom Name
description: Change the Fan's Custom Name shown in OnlyFans
full: true
\_openapi:
method: PUT
route: /api/{account}/fans/{fan_id}/custom-name
toc: \[]
structuredData:
headings: \[]
contents:
* content: Change the Fan's Custom Name shown in OnlyFans
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Free Trial Link
URL: /api-reference/free-trial-links/create-free-trial-link
Create a new free trial link for the account
***
title: Create Free Trial Link
description: Create a new free trial link for the account
full: true
\_openapi:
method: POST
route: /api/{account}/trial-links
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new free trial link for the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Free Trial Link
URL: /api-reference/free-trial-links/delete-free-trial-link
Delete a free trial link by its ID
***
title: Delete Free Trial Link
description: Delete a free trial link by its ID
full: true
\_openapi:
method: DELETE
route: /api/{account}/trial-links/{trial_link_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a free trial link by its ID
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Introduction
URL: /api-reference/free-trial-links
Get started with our Free Trial Links API
***
title: Introduction
description: "Get started with our Free Trial Links API"
--------------------------------------------------------
import {
ChartPieIcon,
LayersIcon
} from 'lucide-react';
Through our API, you are able to create and manage free trial links, as well as retrieve advanced analytics on their performance, spenders and subscribers.
### A note on our calculation logic \[!toc]
} title="Link Stacking">
We take link stacking into account (e.g., multiple free trial links stacked on top of each other) and divide the revenue equally between them.
} title="Spendings">
We only track the fan’s spending during the period through which they have been subscribed.
# List Free Trial Link Spenders
URL: /api-reference/free-trial-links/list-free-trial-link-spenders
Only available if we already scraped subscribers and calculated revenue per fan
***
title: List Free Trial Link Spenders
description: >-
Only available if we already scraped subscribers and calculated revenue per
fan
full: true
\_openapi:
method: GET
route: /api/{account}/trial-links/{trial_link_id}/spenders
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Only available if we already scraped subscribers and calculated
revenue per fan
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Free Trial Link Subscribers
URL: /api-reference/free-trial-links/list-free-trial-link-subscribers
Get list of subscribers who joined through a Free Trial Link
***
title: List Free Trial Link Subscribers
description: Get list of subscribers who joined through a Free Trial Link
full: true
\_openapi:
method: GET
route: /api/{account}/trial-links/{trial_link_id}/subscribers
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get list of subscribers who joined through a Free Trial Link
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Free Trial Links
URL: /api-reference/free-trial-links/list-free-trial-links
List all free trial links for the account, including the details and statistics
***
title: List Free Trial Links
description: >-
List all free trial links for the account, including the details and
statistics
full: true
\_openapi:
method: GET
route: /api/{account}/trial-links
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
List all free trial links for the account, including the details and
statistics
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Mass Message Overview
URL: /api-reference/mass-messaging/get-mass-message-overview
Get an overview of mass messages, showing the send count and view count.
***
title: Get Mass Message Overview
description: Get an overview of mass messages, showing the send count and view count.
full: true
\_openapi:
method: GET
route: /api/{account}/mass-messaging/overview
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get an overview of mass messages, showing the send count and view
count.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Mass Message
URL: /api-reference/mass-messaging/get-mass-message
Get the content of a mass message.
***
title: Get Mass Message
description: Get the content of a mass message.
full: true
\_openapi:
method: GET
route: /api/{account}/mass-messaging/{id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the content of a mass message.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Mass Message Queue
URL: /api-reference/mass-messaging/list-mass-message-queue
List the pending or recently sent mass messages in the message queue.
***
title: List Mass Message Queue
description: List the pending or recently sent mass messages in the message queue.
full: true
\_openapi:
method: GET
route: /api/{account}/mass-messaging
toc: \[]
structuredData:
headings: \[]
contents:
* content: List the pending or recently sent mass messages in the message queue.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Send Mass Message
URL: /api-reference/mass-messaging/send-mass-message
Send a mass message to lists and/or users. You may use both the `userLists` and `userIds` parameters to send the same message to both lists and individual users.
***
title: Send Mass Message
description: >-
Send a mass message to lists and/or users. You may use both the `userLists`
and `userIds` parameters to send the same message to both lists and individual
users.
full: true
\_openapi:
method: POST
route: /api/{account}/mass-messaging
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Send a mass message to lists and/or users. You may use both the
`userLists` and `userIds` parameters to send the same message to both
lists and individual users.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unsend/Delete Mass Message
URL: /api-reference/mass-messaging/unsend-delete-mass-message
Unsend a recently sent mass message, or delete a scheduled/saved message. When unsending, purchased content will continue to be able to viewable.
***
title: Unsend/Delete Mass Message
description: >-
Unsend a recently sent mass message, or delete a scheduled/saved message. When
unsending, purchased content will continue to be able to viewable.
full: true
\_openapi:
method: DELETE
route: /api/{account}/mass-messaging/{id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Unsend a recently sent mass message, or delete a scheduled/saved
message. When unsending, purchased content will continue to be able to
viewable.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Mass Message
URL: /api-reference/mass-messaging/update-mass-message
Update a mass message.
***
title: Update Mass Message
description: Update a mass message.
full: true
\_openapi:
method: PUT
route: /api/{account}/mass-messaging/{id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Update a mass message.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# [Deprecated] Scrape media from the OnlyFans CDN
URL: /api-reference/media/deprecated-scrape-media-from-the-only-fans-cdn
**⚠️ This is a deprecated endpoint. Please use the new "Download media from the OnlyFans CDN" endpoint!** Scrapes a `https://cdn*.onlyfans.com/*` URL *or* Vault Media ID, and uploads it to the OnlyFans API CDN, where you can view or download the file. **Max file size is 500MB**
***
title: '\[Deprecated] Scrape media from the OnlyFans CDN'
description: >-
**⚠️ This is a deprecated endpoint. Please use the new "Download media from
the OnlyFans CDN" endpoint!** Scrapes a `https://cdn*.onlyfans.com/*` URL *or*
Vault Media ID, and uploads it to the OnlyFans API CDN, where you can view or
download the file. **Max file size is 500MB**
full: true
\_openapi:
method: POST
route: /api/{account}/media/scrape
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
**⚠️ This is a deprecated endpoint. Please use the new "Download media
from the OnlyFans CDN" endpoint!** Scrapes a
`https://cdn*.onlyfans.com/*` URL *or* Vault Media ID, and uploads it
to the OnlyFans API CDN, where you can view or download the file.
**Max file size is 500MB**
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Upload media to the OnlyFans CDN
URL: /api-reference/media/upload-media-to-the-only-fans-cdn
The response can be used **only once** to manually include media in a post or message. This endpoint does not upload media to the Vault.
***
title: Upload media to the OnlyFans CDN
description: >-
The response can be used **only once** to manually include media in a post or
message. This endpoint does not upload media to the Vault.
full: true
\_openapi:
method: POST
route: /api/{account}/media/upload
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
The response can be used **only once** to manually include media in a
post or message. This endpoint does not upload media to the Vault.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Vault Media
URL: /api-reference/media-vault/delete-vault-media
Delete one or multiple media from your vault.
***
title: Delete Vault Media
description: Delete one or multiple media from your vault.
full: true
\_openapi:
method: DELETE
route: /api/{account}/media/vault/delete-media
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete one or multiple media from your vault.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Vault Media
URL: /api-reference/media-vault/get-vault-media
Retrieve details about a specific media item in your vault.
***
title: Get Vault Media
description: Retrieve details about a specific media item in your vault.
full: true
\_openapi:
method: GET
route: /api/{account}/media/vault/{media_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve details about a specific media item in your vault.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Vault Media
URL: /api-reference/media-vault/list-vault-media
List media items stored in your vault. See how many likes and how much tips did they get.
***
title: List Vault Media
description: >-
List media items stored in your vault. See how many likes and how much tips
did they get.
full: true
\_openapi:
method: GET
route: /api/{account}/media/vault
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
List media items stored in your vault. See how many likes and how much
tips did they get.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Add Media To List
URL: /api-reference/media-vault-lists/add-media-to-list
Add one or multiple media to a list.
***
title: Add Media To List
description: Add one or multiple media to a list.
full: true
\_openapi:
method: POST
route: /api/{account}/media/vault/lists/{list_id}/media
toc: \[]
structuredData:
headings: \[]
contents:
* content: Add one or multiple media to a list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Vault List
URL: /api-reference/media-vault-lists/create-vault-list
Create a new Vault list.
***
title: Create Vault List
description: Create a new Vault list.
full: true
\_openapi:
method: POST
route: /api/{account}/media/vault/lists
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new Vault list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Vault List
URL: /api-reference/media-vault-lists/delete-vault-list
Delete a Vault list.
***
title: Delete Vault List
description: Delete a Vault list.
full: true
\_openapi:
method: DELETE
route: /api/{account}/media/vault/lists/{list_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a Vault list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Vault Lists
URL: /api-reference/media-vault-lists/list-vault-lists
List your Vault lists (categories).
***
title: List Vault Lists
description: List your Vault lists (categories).
full: true
\_openapi:
method: GET
route: /api/{account}/media/vault/lists
toc: \[]
structuredData:
headings: \[]
contents:
* content: List your Vault lists (categories).
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Remove Media From List
URL: /api-reference/media-vault-lists/remove-media-from-list
Remove one or multiple media from a list.
***
title: Remove Media From List
description: Remove one or multiple media from a list.
full: true
\_openapi:
method: DELETE
route: /api/{account}/media/vault/lists/{list_id}/media
toc: \[]
structuredData:
headings: \[]
contents:
* content: Remove one or multiple media from a list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Rename Vault List
URL: /api-reference/media-vault-lists/rename-vault-list
Rename a Vault list.
***
title: Rename Vault List
description: Rename a Vault list.
full: true
\_openapi:
method: PUT
route: /api/{account}/media/vault/lists/{list_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Rename a Vault list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Show Vault List
URL: /api-reference/media-vault-lists/show-vault-list
Show a Vault list.
***
title: Show Vault List
description: Show a Vault list.
full: true
\_openapi:
method: GET
route: /api/{account}/media/vault/lists/{list_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Show a Vault list.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Account Balances
URL: /api-reference/payouts/get-account-balances
Get the current available and pending balances for the account.
***
title: Get Account Balances
description: Get the current available and pending balances for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/payouts/balances
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the current available and pending balances for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Earning Statistics
URL: /api-reference/payouts/get-earning-statistics
Get total and monthly time-series earning statistics for the account.
***
title: Get Earning Statistics
description: Get total and monthly time-series earning statistics for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/payouts/earning-statistics
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get total and monthly time-series earning statistics for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Eligibility
URL: /api-reference/payouts/get-eligibility
Get the eligibility details for receiving payouts.
***
title: Get Eligibility
description: Get the eligibility details for receiving payouts.
full: true
\_openapi:
method: GET
route: /api/{account}/payouts/eligibility
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the eligibility details for receiving payouts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Payout Requests
URL: /api-reference/payouts/list-payout-requests
List all payout requests for the account.
***
title: List Payout Requests
description: List all payout requests for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/payouts/payout-requests
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all payout requests for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Transactions (Earnings)
URL: /api-reference/payouts/list-transactions-earnings
List all transactions for the account.
***
title: List Transactions (Earnings)
description: List all transactions for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/payouts/transactions
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all transactions for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Request Manual Withdrawal
URL: /api-reference/payouts/request-manual-withdrawal
Request a payout withdrawal, if the frequency is set to manual. Refer to our `/payouts/balances` endpoint to retrieve the minimum and maximum withdrawal amounts.
***
title: Request Manual Withdrawal
description: >-
Request a payout withdrawal, if the frequency is set to manual. Refer to our
`/payouts/balances` endpoint to retrieve the minimum and maximum withdrawal
amounts.
full: true
\_openapi:
method: POST
route: /api/{account}/payouts/request-manual-withdrawal
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Request a payout withdrawal, if the frequency is set to manual. Refer
to our `/payouts/balances` endpoint to retrieve the minimum and
maximum withdrawal amounts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Payout Frequency
URL: /api-reference/payouts/update-payout-frequency
Update the payout frequency for the account (Manual, Weekly or Monthly).
***
title: Update Payout Frequency
description: Update the payout frequency for the account (Manual, Weekly or Monthly).
full: true
\_openapi:
method: PATCH
route: /api/{account}/payouts/payout-frequency
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Update the payout frequency for the account (Manual, Weekly or
Monthly).
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Notification Counts
URL: /api-reference/notifications/get-notification-counts
Get a quick overview of all unread notification types
***
title: Get Notification Counts
description: Get a quick overview of all unread notification types
full: true
\_openapi:
method: GET
route: /api/{account}/notifications/counts
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get a quick overview of all unread notification types
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Notification Tabs Order
URL: /api-reference/notifications/get-notification-tabs-order
Get the order of an account's notification tabs as displayed on the OnlyFans notifications page
***
title: Get Notification Tabs Order
description: >-
Get the order of an account's notification tabs as displayed on the OnlyFans
notifications page
full: true
\_openapi:
method: GET
route: /api/{account}/notifications/tabs-order
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get the order of an account's notification tabs as displayed on the
OnlyFans notifications page
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Notifications
URL: /api-reference/notifications/list-notifications
List all notifications for the account
***
title: List Notifications
description: List all notifications for the account
full: true
\_openapi:
method: GET
route: /api/{account}/notifications
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all notifications for the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Mark All Notifications As Read
URL: /api-reference/notifications/mark-all-notifications-as-read
Mark all notifications of this account as read
***
title: Mark All Notifications As Read
description: Mark all notifications of this account as read
full: true
\_openapi:
method: POST
route: /api/{account}/notifications/mark-all-as-read
toc: \[]
structuredData:
headings: \[]
contents:
* content: Mark all notifications of this account as read
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Search Users In Notifications
URL: /api-reference/notifications/search-users-in-notifications
Search users that have appeared in your notifications
***
title: Search Users In Notifications
description: Search users that have appeared in your notifications
full: true
\_openapi:
method: GET
route: /api/{account}/notifications/search-users
toc: \[]
structuredData:
headings: \[]
contents:
* content: Search users that have appeared in your notifications
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Notification Tabs Order
URL: /api-reference/notifications/update-notification-tabs-order
Update the order of an account's notification tabs as displayed on the OnlyFans notifications page
***
title: Update Notification Tabs Order
description: >-
Update the order of an account's notification tabs as displayed on the
OnlyFans notifications page
full: true
\_openapi:
method: PUT
route: /api/{account}/notifications/tabs-order
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Update the order of an account's notification tabs as displayed on the
OnlyFans notifications page
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Label
URL: /api-reference/post-labels/create-label
Create a new post label.
***
title: Create Label
description: Create a new post label.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/labels
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new post label.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Labels
URL: /api-reference/post-labels/list-labels
List the labels that you can use to organize your posts.
***
title: List Labels
description: List the labels that you can use to organize your posts.
full: true
\_openapi:
method: GET
route: /api/{account}/posts/labels
toc: \[]
structuredData:
headings: \[]
contents:
* content: List the labels that you can use to organize your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Post Comment
URL: /api-reference/post-comments/create-post-comment
Create a comment on one of your posts.
***
title: Create Post Comment
description: Create a comment on one of your posts.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/comments
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a comment on one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Post Comment
URL: /api-reference/post-comments/delete-post-comment
Delete a comment on one of your posts.
***
title: Delete Post Comment
description: Delete a comment on one of your posts.
full: true
\_openapi:
method: DELETE
route: /api/{account}/posts/{post_id}/comments/{comment_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a comment on one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Like Post Comment
URL: /api-reference/post-comments/like-post-comment
Like a comment on one of your posts.
***
title: Like Post Comment
description: Like a comment on one of your posts.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/comments/{comment_id}/like
toc: \[]
structuredData:
headings: \[]
contents:
* content: Like a comment on one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Post Comments
URL: /api-reference/post-comments/list-post-comments
Get comments from one of your posts.
***
title: List Post Comments
description: Get comments from one of your posts.
full: true
\_openapi:
method: GET
route: /api/{account}/posts/{post_id}/comments
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get comments from one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Pin Post Comment
URL: /api-reference/post-comments/pin-post-comment
Pin a comment on one of your posts.
***
title: Pin Post Comment
description: Pin a comment on one of your posts.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/comments/{comment_id}/pin
toc: \[]
structuredData:
headings: \[]
contents:
* content: Pin a comment on one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unlike Post Comment
URL: /api-reference/post-comments/unlike-post-comment
Unlike a comment on one of your posts.
***
title: Unlike Post Comment
description: Unlike a comment on one of your posts.
full: true
\_openapi:
method: DELETE
route: /api/{account}/posts/{post_id}/comments/{comment_id}/like
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unlike a comment on one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unpin Post Comment
URL: /api-reference/post-comments/unpin-post-comment
Unpin a comment from one of your posts.
***
title: Unpin Post Comment
description: Unpin a comment from one of your posts.
full: true
\_openapi:
method: DELETE
route: /api/{account}/posts/{post_id}/comments/{comment_id}/pin
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unpin a comment from one of your posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Archive Post
URL: /api-reference/posts/archive-post
Archive a post from your account. Also can be used to move posts between the Regular and Private Archive.
***
title: Archive Post
description: >-
Archive a post from your account. Also can be used to move posts between the
Regular and Private Archive.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/archive
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Archive a post from your account. Also can be used to move posts
between the Regular and Private Archive.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Post
URL: /api-reference/posts/delete-post
Delete a post from your account.
***
title: Delete Post
description: Delete a post from your account.
full: true
\_openapi:
method: DELETE
route: /api/{account}/posts/{post_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a post from your account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Post
URL: /api-reference/posts/get-post
Retrieve details of a post from your account.
***
title: Get Post
description: Retrieve details of a post from your account.
full: true
\_openapi:
method: GET
route: /api/{account}/posts/{post_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve details of a post from your account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Posts
URL: /api-reference/posts/list-posts
Get posts from your OnlyFans account.
***
title: List Posts
description: Get posts from your OnlyFans account.
full: true
\_openapi:
method: GET
route: /api/{account}/posts
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get posts from your OnlyFans account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Pin/Unpin Post
URL: /api-reference/posts/pin-unpin-post
Pin or unpin a post to your account.
***
title: Pin/Unpin Post
description: Pin or unpin a post to your account.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/pin
toc: \[]
structuredData:
headings: \[]
contents:
* content: Pin or unpin a post to your account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Send Post
URL: /api-reference/posts/send-post
Compose and send a new post to your OnlyFans account.
***
title: Send Post
description: Compose and send a new post to your OnlyFans account.
full: true
\_openapi:
method: POST
route: /api/{account}/posts
toc: \[]
structuredData:
headings: \[]
contents:
* content: Compose and send a new post to your OnlyFans account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Show Post Statistics
URL: /api-reference/posts/show-post-statistics
Show the statistics of a post like purchases, views, likes, tips and more.
***
title: Show Post Statistics
description: Show the statistics of a post like purchases, views, likes, tips and more.
full: true
\_openapi:
method: GET
route: /api/{account}/posts/{post_id}/stats
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Show the statistics of a post like purchases, views, likes, tips and
more.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unarchive Post
URL: /api-reference/posts/unarchive-post
Unarchive a post from your account.
***
title: Unarchive Post
description: Unarchive a post from your account.
full: true
\_openapi:
method: POST
route: /api/{account}/posts/{post_id}/unarchive
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unarchive a post from your account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Post
URL: /api-reference/posts/update-post
Update a posted, queued, or "saved for later" post.
***
title: Update Post
description: Update a posted, queued, or "saved for later" post.
full: true
\_openapi:
method: PUT
route: /api/{account}/posts/{post_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Update a posted, queued, or "saved for later" post.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Promotion
URL: /api-reference/promotions/create-promotion
Create a new promotion for the account.
***
title: Create Promotion
description: Create a new promotion for the account.
full: true
\_openapi:
method: POST
route: /api/{account}/promotions
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new promotion for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Promotion
URL: /api-reference/promotions/delete-promotion
Delete a promotion for the account.
***
title: Delete Promotion
description: Delete a promotion for the account.
full: true
\_openapi:
method: DELETE
route: /api/{account}/promotions/{promotion_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a promotion for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Promotions
URL: /api-reference/promotions/list-promotions
List all promotions for the account.
***
title: List Promotions
description: List all promotions for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/promotions
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all promotions for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Stop Promotion
URL: /api-reference/promotions/stop-promotion
Stop an active promotion for the account.
***
title: Stop Promotion
description: Stop an active promotion for the account.
full: true
\_openapi:
method: POST
route: /api/{account}/promotions/{promotion_id}/stop
toc: \[]
structuredData:
headings: \[]
contents:
* content: Stop an active promotion for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Profile Details
URL: /api-reference/public-profiles/get-profile-details
Get profile details by username.
***
title: Get Profile Details
description: Get profile details by username.
full: true
\_openapi:
method: GET
route: /api/profiles/{username}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get profile details by username.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Search Profiles
URL: /api-reference/public-profiles/search-profiles
Full-text search for profiles with filters for pricing, free trials, location, media count and more.
***
title: Search Profiles
description: >-
Full-text search for profiles with filters for pricing, free trials, location,
media count and more.
full: true
\_openapi:
method: GET
route: /api/search
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Full-text search for profiles with filters for pricing, free trials,
location, media count and more.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Count Queue Items
URL: /api-reference/queue/count-queue-items
Count posts and messages in the queue.
***
title: Count Queue Items
description: Count posts and messages in the queue.
full: true
\_openapi:
method: GET
route: /api/{account}/queue/counts
toc: \[]
structuredData:
headings: \[]
contents:
* content: Count posts and messages in the queue.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Queue Items
URL: /api-reference/queue/list-queue-items
List posts and messages in the queue.
***
title: List Queue Items
description: List posts and messages in the queue.
full: true
\_openapi:
method: GET
route: /api/{account}/queue
toc: \[]
structuredData:
headings: \[]
contents:
* content: List posts and messages in the queue.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Publish Queue Item
URL: /api-reference/queue/publish-queue-item
Publish a queue item or "saved for later" item (post or mass message). This means that the item will be sent immediately, regardless of its scheduled date.
***
title: Publish Queue Item
description: >-
Publish a queue item or "saved for later" item (post or mass message). This
means that the item will be sent immediately, regardless of its scheduled
date.
full: true
\_openapi:
method: PUT
route: /api/{account}/queue/{queue_id}/publish
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Publish a queue item or "saved for later" item (post or mass message).
This means that the item will be sent immediately, regardless of its
scheduled date.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Disable Automatic Messaging
URL: /api-reference/saved-for-later-messages/disable-automatic-messaging
Disable automatic messaging of Saved For Later messages.
***
title: Disable Automatic Messaging
description: Disable automatic messaging of Saved For Later messages.
full: true
\_openapi:
method: PATCH
route: /api/{account}/saved-for-later/messages/settings/disable-automatic-messaging
toc: \[]
structuredData:
headings: \[]
contents:
* content: Disable automatic messaging of Saved For Later messages.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Enable/Update Automatic Messaging
URL: /api-reference/saved-for-later-messages/enable-update-automatic-messaging
Enable or update automatic messaging of Saved For Later messages.
***
title: Enable/Update Automatic Messaging
description: Enable or update automatic messaging of Saved For Later messages.
full: true
\_openapi:
method: PATCH
route: >-
/api/{account}/saved-for-later/messages/settings/enable-or-update-automatic-messaging
toc: \[]
structuredData:
headings: \[]
contents:
* content: Enable or update automatic messaging of Saved For Later messages.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Message Settings
URL: /api-reference/saved-for-later-messages/get-message-settings
Get the Saved For Later message settings.
***
title: Get Message Settings
description: Get the Saved For Later message settings.
full: true
\_openapi:
method: GET
route: /api/{account}/saved-for-later/messages/settings
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the Saved For Later message settings.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Saved For Later Messages
URL: /api-reference/saved-for-later-messages/list-saved-for-later-messages
List all messages that are marked as "Save For Later".
***
title: List Saved For Later Messages
description: List all messages that are marked as "Save For Later".
full: true
\_openapi:
method: GET
route: /api/{account}/saved-for-later/messages
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all messages that are marked as "Save For Later".
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Disable Automatic Posting
URL: /api-reference/saved-for-later-posts/disable-automatic-posting
Disable automatic posting of Saved For Later posts.
***
title: Disable Automatic Posting
description: Disable automatic posting of Saved For Later posts.
full: true
\_openapi:
method: PATCH
route: /api/{account}/saved-for-later/posts/settings/disable-automatic-posting
toc: \[]
structuredData:
headings: \[]
contents:
* content: Disable automatic posting of Saved For Later posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Enable/Update Automatic Posting
URL: /api-reference/saved-for-later-posts/enable-update-automatic-posting
Enable or update automatic posting of Saved For Later posts.
***
title: Enable/Update Automatic Posting
description: Enable or update automatic posting of Saved For Later posts.
full: true
\_openapi:
method: PATCH
route: >-
/api/{account}/saved-for-later/posts/settings/enable-or-update-automatic-posting
toc: \[]
structuredData:
headings: \[]
contents:
* content: Enable or update automatic posting of Saved For Later posts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Post Settings
URL: /api-reference/saved-for-later-posts/get-post-settings
Get the Saved For Later post settings.
***
title: Get Post Settings
description: Get the Saved For Later post settings.
full: true
\_openapi:
method: GET
route: /api/{account}/saved-for-later/posts/settings
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the Saved For Later post settings.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Saved For Later Posts
URL: /api-reference/saved-for-later-posts/list-saved-for-later-posts
List all posts that are marked as "Save For Later".
***
title: List Saved For Later Posts
description: List all posts that are marked as "Save For Later".
full: true
\_openapi:
method: GET
route: /api/{account}/saved-for-later/posts
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all posts that are marked as "Save For Later".
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Add Social Media Button
URL: /api-reference/settings/add-social-media-button
Adds a new social media button to the account
***
title: Add Social Media Button
description: Adds a new social media button to the account
full: true
\_openapi:
method: POST
route: /api/{account}/settings/social-media-buttons
toc: \[]
structuredData:
headings: \[]
contents:
* content: Adds a new social media button to the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Check Username Availability
URL: /api-reference/settings/check-username-availability
Check if a username is taken. Returns `false` if the username is available, `true` if it is already taken.
***
title: Check Username Availability
description: >-
Check if a username is taken. Returns `false` if the username is available,
`true` if it is already taken.
full: true
\_openapi:
method: POST
route: /api/{account}/settings/username-exists
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Check if a username is taken. Returns `false` if the username is
available, `true` if it is already taken.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Social Media Button
URL: /api-reference/settings/delete-social-media-button
Deletes a social media button from the account
***
title: Delete Social Media Button
description: Deletes a social media button from the account
full: true
\_openapi:
method: DELETE
route: /api/{account}/settings/social-media-buttons/{button_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Deletes a social media button from the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Settings
URL: /api-reference/settings/get-settings
Returns the account settings
***
title: Get Settings
description: Returns the account settings
full: true
\_openapi:
method: GET
route: /api/{account}/settings
toc: \[]
structuredData:
headings: \[]
contents:
* content: Returns the account settings
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Social Media Buttons
URL: /api-reference/settings/list-social-media-buttons
Returns the list of social media buttons for the account
***
title: List Social Media Buttons
description: Returns the list of social media buttons for the account
full: true
\_openapi:
method: GET
route: /api/{account}/settings/social-media-buttons
toc: \[]
structuredData:
headings: \[]
contents:
* content: Returns the list of social media buttons for the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Reorder Social Media Buttons
URL: /api-reference/settings/reorder-social-media-buttons
Changes the order of social media buttons for the account
***
title: Reorder Social Media Buttons
description: Changes the order of social media buttons for the account
full: true
\_openapi:
method: POST
route: /api/{account}/settings/social-media-buttons/reorder
toc: \[]
structuredData:
headings: \[]
contents:
* content: Changes the order of social media buttons for the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Profile
URL: /api-reference/settings/update-profile
Updates the account profile. **Only include the fields you want to update.** To make a field empty, set it to `null`.
***
title: Update Profile
description: >-
Updates the account profile. **Only include the fields you want to update.**
To make a field empty, set it to `null`.
full: true
\_openapi:
method: POST
route: /api/{account}/settings/profile
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Updates the account profile. **Only include the fields you want to
update.** To make a field empty, set it to `null`.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Social Media Button
URL: /api-reference/settings/update-social-media-button
Updates a social media button from the account
***
title: Update Social Media Button
description: Updates a social media button from the account
full: true
\_openapi:
method: PUT
route: /api/{account}/settings/social-media-buttons/{button_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Updates a social media button from the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Calculate Total Transactions
URL: /api-reference/statistics/calculate-total-transactions
Calculate the total transactions and amounts.
***
title: Calculate Total Transactions
description: Calculate the total transactions and amounts.
full: true
\_openapi:
method: GET
route: /api/{account}/statistics/total-transactions
toc: \[]
structuredData:
headings: \[]
contents:
* content: Calculate the total transactions and amounts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Earnings
URL: /api-reference/statistics/get-earnings
Get the earnings for a given period.
***
title: Get Earnings
description: Get the earnings for a given period.
full: true
\_openapi:
method: GET
route: /api/{account}/statistics/statements/earnings
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the earnings for a given period.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Profile Visitors
URL: /api-reference/statistics/get-profile-visitors
Get the number of profile visitors for a given period.
***
title: Get Profile Visitors
description: Get the number of profile visitors for a given period.
full: true
\_openapi:
method: GET
route: /api/{account}/statistics/reach/profile-visitors
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get the number of profile visitors for a given period.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Subscriber Metrics
URL: /api-reference/statistics/get-subscriber-metrics
Get subscriber metrics including total, new, renewed, paid, and free subscriptions for a specified timeframe. `unknown_subscriptions` indicates deleted fan accounts.
***
title: Get Subscriber Metrics
description: >-
Get subscriber metrics including total, new, renewed, paid, and free
subscriptions for a specified timeframe. `unknown_subscriptions` indicates
deleted fan accounts.
full: true
\_openapi:
method: GET
route: /api/{account}/statistics/subscriber-metrics
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get subscriber metrics including total, new, renewed, paid, and free
subscriptions for a specified timeframe. `unknown_subscriptions`
indicates deleted fan accounts.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Subscriber Statistics
URL: /api-reference/statistics/get-subscriber-statistics
Get subscriber and earning statistics for an account for a specified timeframe. Optionally, filter by all, renews, or new subscribers.
***
title: Get Subscriber Statistics
description: >-
Get subscriber and earning statistics for an account for a specified
timeframe. Optionally, filter by all, renews, or new subscribers.
full: true
\_openapi:
method: GET
route: /api/{account}/subscribers/statistics
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get subscriber and earning statistics for an account for a specified
timeframe. Optionally, filter by all, renews, or new subscribers.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Statistics Overview
URL: /api-reference/statistics/statistics-overview
Get an overview of statistics for fans, visitors, posts, or general.
***
title: Statistics Overview
description: Get an overview of statistics for fans, visitors, posts, or general.
full: true
\_openapi:
method: GET
route: /api/{account}/statistics/overview
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get an overview of statistics for fans, visitors, posts, or general.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Add to Story
URL: /api-reference/stories/add-to-story
Post a new media or vault file to your story.
***
title: Add to Story
description: Post a new media or vault file to your story.
full: true
\_openapi:
method: POST
route: /api/{account}/stories
toc: \[]
structuredData:
headings: \[]
contents:
* content: Post a new media or vault file to your story.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Story
URL: /api-reference/stories/delete-story
Delete a specific story by its ID.
***
title: Delete Story
description: Delete a specific story by its ID.
full: true
\_openapi:
method: DELETE
route: /api/{account}/stories/{story_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a specific story by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Story Stats
URL: /api-reference/stories/get-story-stats
Retrieve viewer count, likes count, comments count, and tips statistics for a specific story by its ID.
***
title: Get Story Stats
description: >-
Retrieve viewer count, likes count, comments count, and tips statistics for a
specific story by its ID.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/{story_id}/stats
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Retrieve viewer count, likes count, comments count, and tips
statistics for a specific story by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Active Stories
URL: /api-reference/stories/list-active-stories
Retrieve a list of your currently active stories.
***
title: List Active Stories
description: Retrieve a list of your currently active stories.
full: true
\_openapi:
method: GET
route: /api/{account}/stories
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of your currently active stories.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Story Archive
URL: /api-reference/stories/list-story-archive
Retrieve a list of your archived stories.
***
title: List Story Archive
description: Retrieve a list of your archived stories.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/archive
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of your archived stories.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Story Viewers
URL: /api-reference/stories/list-story-viewers
Retrieve the list of viewers for a specific story by its ID.
***
title: List Story Viewers
description: Retrieve the list of viewers for a specific story by its ID.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/{story_id}/viewers
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve the list of viewers for a specific story by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Mark Story as Watched
URL: /api-reference/stories/mark-story-as-watched
Mark a specific story as watched by its ID.
***
title: Mark Story as Watched
description: Mark a specific story as watched by its ID.
full: true
\_openapi:
method: POST
route: /api/{account}/stories/{story_id}/mark-as-watched
toc: \[]
structuredData:
headings: \[]
contents:
* content: Mark a specific story as watched by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Show Story
URL: /api-reference/stories/show-story
Retrieve details of a specific story by its ID.
***
title: Show Story
description: Retrieve details of a specific story by its ID.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/{story_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve details of a specific story by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Add Story to Highlight
URL: /api-reference/story-highlights/add-story-to-highlight
Add a specific story to a story highlight.
***
title: Add Story to Highlight
description: Add a specific story to a story highlight.
full: true
\_openapi:
method: PATCH
route: /api/{account}/stories/highlights/{highlight_id}/{story_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Add a specific story to a story highlight.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Story Highlight
URL: /api-reference/story-highlights/create-story-highlight
Create a new story highlight.
***
title: Create Story Highlight
description: Create a new story highlight.
full: true
\_openapi:
method: POST
route: /api/{account}/stories/highlights
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new story highlight.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Story Highlight
URL: /api-reference/story-highlights/delete-story-highlight
Delete a specific story highlight by its ID.
***
title: Delete Story Highlight
description: Delete a specific story highlight by its ID.
full: true
\_openapi:
method: DELETE
route: /api/{account}/stories/highlights/{highlight_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a specific story highlight by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Story Highlights
URL: /api-reference/story-highlights/list-story-highlights
Retrieve a list of your story highlights.
***
title: List Story Highlights
description: Retrieve a list of your story highlights.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/highlights
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of your story highlights.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Remove Story from Highlight
URL: /api-reference/story-highlights/remove-story-from-highlight
Remove a specific story from a story highlight.
***
title: Remove Story from Highlight
description: Remove a specific story from a story highlight.
full: true
\_openapi:
method: DELETE
route: /api/{account}/stories/highlights/{highlight_id}/{story_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Remove a specific story from a story highlight.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Show Story Highlight
URL: /api-reference/story-highlights/show-story-highlight
Retrieve details of a specific story highlight by its ID.
***
title: Show Story Highlight
description: Retrieve details of a specific story highlight by its ID.
full: true
\_openapi:
method: GET
route: /api/{account}/stories/highlights/{highlight_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve details of a specific story highlight by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Story Highlight
URL: /api-reference/story-highlights/update-story-highlight
Update the details of a specific story highlight by its ID.
***
title: Update Story Highlight
description: Update the details of a specific story highlight by its ID.
full: true
\_openapi:
method: PUT
route: /api/{account}/stories/highlights/{highlight_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Update the details of a specific story highlight by its ID.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Bundle
URL: /api-reference/subscription-bundles/create-bundle
Create a new bundle for the account.
***
title: Create Bundle
description: Create a new bundle for the account.
full: true
\_openapi:
method: POST
route: /api/{account}/bundles
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new bundle for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Bundle
URL: /api-reference/subscription-bundles/delete-bundle
Delete a bundle for the account.
***
title: Delete Bundle
description: Delete a bundle for the account.
full: true
\_openapi:
method: DELETE
route: /api/{account}/bundles/{bundle_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a bundle for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Bundles
URL: /api-reference/subscription-bundles/list-bundles
List all bundles for the account.
***
title: List Bundles
description: List all bundles for the account.
full: true
\_openapi:
method: GET
route: /api/{account}/bundles
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all bundles for the account.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Tracking Link
URL: /api-reference/tracking-links/create-tracking-link
Create a new Tracking Link for the account
***
title: Create Tracking Link
description: Create a new Tracking Link for the account
full: true
\_openapi:
method: POST
route: /api/{account}/tracking-links
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new Tracking Link for the account
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Tracking Link
URL: /api-reference/tracking-links/delete-tracking-link
Delete a Tracking Link
***
title: Delete Tracking Link
description: Delete a Tracking Link
full: true
\_openapi:
method: DELETE
route: /api/{account}/tracking-links/{tracking_link_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a Tracking Link
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Introduction
URL: /api-reference/tracking-links
Get started with our Tracking Links API
***
title: Introduction
description: "Get started with our Tracking Links API"
------------------------------------------------------
import {
ChartPieIcon,
LayersIcon
} from 'lucide-react';
Through our API, you are able to create and manage tracking links, as well as retrieve advanced analytics on their performance, spenders and subscribers.
### A note on our calculation logic \[!toc]
} title="Link Stacking">
We take link stacking into account (e.g., multiple tracking links stacked on top of each other) and divide the revenue equally between them.
} title="Spendings">
We only track the fan’s spending during the period through which they have been subscribed.
# List Tracking Link Spenders
URL: /api-reference/tracking-links/list-tracking-link-spenders
Get list of spenders who made purchases through a Tracking Link
***
title: List Tracking Link Spenders
description: Get list of spenders who made purchases through a Tracking Link
full: true
\_openapi:
method: GET
route: /api/{account}/tracking-links/{tracking_link_id}/spenders
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get list of spenders who made purchases through a Tracking Link
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Tracking Link Subscribers
URL: /api-reference/tracking-links/list-tracking-link-subscribers
Get list of subscribers who joined through a Tracking Link
***
title: List Tracking Link Subscribers
description: Get list of subscribers who joined through a Tracking Link
full: true
\_openapi:
method: GET
route: /api/{account}/tracking-links/{tracking_link_id}/subscribers
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get list of subscribers who joined through a Tracking Link
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Tracking Links
URL: /api-reference/tracking-links/list-tracking-links
List all tracking links for the account and revenue data
***
title: List Tracking Links
description: List all tracking links for the account and revenue data
full: true
\_openapi:
method: GET
route: /api/{account}/tracking-links
toc: \[]
structuredData:
headings: \[]
contents:
* content: List all tracking links for the account and revenue data
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Transactions
URL: /api-reference/transactions/list-transactions
Get a paginated list of transactions for an Account. Newest transactions are first.
***
title: List Transactions
description: >-
Get a paginated list of transactions for an Account. Newest transactions are
first.
full: true
\_openapi:
method: GET
route: /api/{account}/transactions
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get a paginated list of transactions for an Account. Newest
transactions are first.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Add Users to User List
URL: /api-reference/user-list-collections/add-users-to-user-list
Add multiple Users To OnlyFans User List
***
title: Add Users to User List
description: Add multiple Users To OnlyFans User List
full: true
\_openapi:
method: POST
route: /api/{account}/user-lists/{userListId}/users
toc: \[]
structuredData:
headings: \[]
contents:
* content: Add multiple Users To OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Clear User List
URL: /api-reference/user-list-collections/clear-user-list
Remove all users from a OnlyFans User List
***
title: Clear User List
description: Remove all users from a OnlyFans User List
full: true
\_openapi:
method: DELETE
route: /api/{account}/user-lists/{userListId}/users
toc: \[]
structuredData:
headings: \[]
contents:
* content: Remove all users from a OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create User List
URL: /api-reference/user-list-collections/create-user-list
Create a OnlyFans User List
***
title: Create User List
description: Create a OnlyFans User List
full: true
\_openapi:
method: POST
route: /api/{account}/user-lists
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete User List
URL: /api-reference/user-list-collections/delete-user-list
Delete a OnlyFans User List
***
title: Delete User List
description: Delete a OnlyFans User List
full: true
\_openapi:
method: DELETE
route: /api/{account}/user-lists/{userListId}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete a OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get User List
URL: /api-reference/user-list-collections/get-user-list
Get a user list
***
title: Get User List
description: Get a user list
full: true
\_openapi:
method: GET
route: /api/{account}/user-lists/{userListId}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get a user list
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List User List Users
URL: /api-reference/user-list-collections/list-user-list-users
Get all users in a OnlyFans User List
***
title: List User List Users
description: Get all users in a OnlyFans User List
full: true
\_openapi:
method: GET
route: /api/{account}/user-lists/{userListId}/users
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get all users in a OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List User Lists
URL: /api-reference/user-list-collections/list-user-lists
Get a list of OnlyFans Collections - User Lists
***
title: List User Lists
description: Get a list of OnlyFans Collections - User Lists
full: true
\_openapi:
method: GET
route: /api/{account}/user-lists
toc: \[]
structuredData:
headings: \[]
contents:
* content: Get a list of OnlyFans Collections - User Lists
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Remove User from a User List
URL: /api-reference/user-list-collections/remove-user-from-a-user-list
Remove User from OnlyFans User List
***
title: Remove User from a User List
description: Remove User from OnlyFans User List
full: true
\_openapi:
method: DELETE
route: /api/{account}/user-lists/{userListId}/users/{userId}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Remove User from OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update User List
URL: /api-reference/user-list-collections/update-user-list
Update a OnlyFans User List
***
title: Update User List
description: Update a OnlyFans User List
full: true
\_openapi:
method: PUT
route: /api/{account}/user-lists/{userListId}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Update a OnlyFans User List
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Block User
URL: /api-reference/users/block-user
Block user from accessing your profile.
***
title: Block User
description: Block user from accessing your profile.
full: true
\_openapi:
method: POST
route: /api/{account}/users/{user_id}/block
toc: \[]
structuredData:
headings: \[]
contents:
* content: Block user from accessing your profile.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get User Details
URL: /api-reference/users/get-user-details
Get OnlyFans Profile details for a given username. User details are retrieved using the current current `{account}` so fields like `subscribedOnData` which include potential subscription details will be included.
***
title: Get User Details
description: >-
Get OnlyFans Profile details for a given username. User details are retrieved
using the current current `{account}` so fields like `subscribedOnData` which
include potential subscription details will be included.
full: true
\_openapi:
method: GET
route: /api/{account}/users/{username}
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Get OnlyFans Profile details for a given username. User details are
retrieved using the current current `{account}` so fields like
`subscribedOnData` which include potential subscription details will
be included.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Restrict User
URL: /api-reference/users/restrict-user
Restrict a user. You will not see messages or comments from this them.
***
title: Restrict User
description: Restrict a user. You will not see messages or comments from this them.
full: true
\_openapi:
method: POST
route: /api/{account}/users/{user_id}/restrict
toc: \[]
structuredData:
headings: \[]
contents:
* content: Restrict a user. You will not see messages or comments from this them.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unblock User
URL: /api-reference/users/unblock-user
Unblock a previously blocked user.
***
title: Unblock User
description: Unblock a previously blocked user.
full: true
\_openapi:
method: DELETE
route: /api/{account}/users/{user_id}/block
toc: \[]
structuredData:
headings: \[]
contents:
* content: Unblock a previously blocked user.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Unrestrict User
URL: /api-reference/users/unrestrict-user
Unrestrict a previously restricted user. You will start seeing messages and comments from them again.
***
title: Unrestrict User
description: >-
Unrestrict a previously restricted user. You will start seeing messages and
comments from them again.
full: true
\_openapi:
method: DELETE
route: /api/{account}/users/{user_id}/restrict
toc: \[]
structuredData:
headings: \[]
contents:
* content: >-
Unrestrict a previously restricted user. You will start seeing
messages and comments from them again.
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Webhook
URL: /api-reference/webhooks/create-webhook
Create a new webhook for your Team
***
title: Create Webhook
description: Create a new webhook for your Team
full: true
\_openapi:
method: POST
route: /api/webhooks
toc: \[]
structuredData:
headings: \[]
contents:
* content: Create a new webhook for your Team
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Delete Webhook
URL: /api-reference/webhooks/delete-webhook
Delete an existing webhook
***
title: Delete Webhook
description: Delete an existing webhook
full: true
\_openapi:
method: DELETE
route: /api/webhooks/{webhook_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Delete an existing webhook
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Available Events
URL: /api-reference/webhooks/list-available-events
Retrieve a list of all available webhook event types
***
title: List Available Events
description: Retrieve a list of all available webhook event types
full: true
\_openapi:
method: GET
route: /api/webhooks/events
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of all available webhook event types
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# List Webhooks
URL: /api-reference/webhooks/list-webhooks
Retrieve a list of webhooks for your Team
***
title: List Webhooks
description: Retrieve a list of webhooks for your Team
full: true
\_openapi:
method: GET
route: /api/webhooks
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve a list of webhooks for your Team
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Show Webhook
URL: /api-reference/webhooks/show-webhook
Retrieve details about a specific webhook
***
title: Show Webhook
description: Retrieve details about a specific webhook
full: true
\_openapi:
method: GET
route: /api/webhooks/{webhook_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Retrieve details about a specific webhook
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Webhook
URL: /api-reference/webhooks/update-webhook
Update an existing webhook
***
title: Update Webhook
description: Update an existing webhook
full: true
\_openapi:
method: PUT
route: /api/webhooks/{webhook_id}
toc: \[]
structuredData:
headings: \[]
contents:
* content: Update an existing webhook
***
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Credit System
URL: /introduction/essentials/credits
Understanding credit allocation and subscription plans
***
title: "Credit System"
description: "Understanding credit allocation and subscription plans"
icon: Coins
-----------
import {
ChartNoAxesCombinedIcon,
CodeIcon,
CoinsIcon,
DatabaseZapIcon,
FileTextIcon,
HeartPlusIcon,
MonitorIcon,
ScanSearchIcon,
SquareActivityIcon,
TrendingUpIcon,
} from "lucide-react";
## Credit calculator
## Credit cost overview
Please refer to the table below to get a general overview of the credit cost for our endpoints.
For detailed information about where to find credit information in API responses, see our [Response Structure](/introduction/essentials/response-structure) documentation.
| Endpoint(s) | Cost | Notes |
| ------------------------------------------------------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------- |
| [Search Profiles](/api-reference/public-profiles/search-profiles) | 1 credit per result | E.g. if your search query has 10 results, you will be debited 10 credits. |
| [Media Uploading](/api-reference/media/upload-media-to-the-only-fans-cdn) | 3 credits per MB | For easy calculation, we use decimal measurements. This means that 1MB is 1,000 KB. |
| [Media Downloading](/api-reference/media/download-media-from-the-only-fans-cdn) | 3 credits per MB | For easy calculation, we use decimal measurements. This means that 1MB is 1,000 KB. |
| [Webhooks](/webhooks) | 1 credit per 100 Webhook events | - |
| [All other uncached responses](#uncached-responses) | 1 credit per request | - |
| [All other cached responses](#cached-responses) | 0 credits | - |
## Cached vs uncached
### Cached responses
Public endpoints make use of automatic caching by default, and thus won't cost you any credits if a cached response already exists.
**Account-specific endpoints will never be cached**, and will always give you
a fresh response from OnlyFans.
#### Forcing a fresh response
You can force a fresh response by appending the endpoint URL with `?fresh=true`
### Uncached responses
All account-specific endpoints, and endpoints that reply on real-time data, will always return a fresh response from OnlyFans and thus will consume credits.
## Subscription Plans
Our subscription tiers provide different credit allocations:
• Perfect for small to medium projects\
• Includes all basic features\
• Automatic credit tracking
• Ideal for larger applications\
• Priority support\
• Advanced features included
• Tailored to your needs\
• Contact us to discuss requirements\
• Custom features and support
## Credit Features
All subscription tiers include:
}>
• Up to 200% of monthly allocation\
• Automatic rollover management\
• No manual activation required
}>
• Real-time balance tracking\
• Detailed usage analytics\
• Automated notifications
}>
• Automatic response caching\
• Zero-credit cached responses\
• Cache control with `?fresh=true`
## Monitoring Tools
You can easily track your credit usage through all of our API responses, and through our Console
}>
* Real-time credit balance
* Request-specific credit usage
* Cache status indicators
}>
* Real-time credit balance
* View your rate limit usage
* Easily purchase more credits
## Credit Management
Best practices for optimizing credit usage:
}>
Leverage cached responses when possible.
}>
Monitor your credit balance regularly.
}>
Review usage patterns regularly. Consider optimizing your requests.
Cached responses are free and don't consume any credits from your balance.
This applies to public endpoints like profile information.
## Enterprise Solutions
For high-volume requirements, we offer:
} />
} />
} />
} />
Please contact our team to discuss your specific needs and get a tailored solution.
# Proxies
URL: /introduction/essentials/proxies
Advanced proxy infrastructure and configuration options
***
title: "Proxies"
description: "Advanced proxy infrastructure and configuration options"
icon: ShieldCheck
-----------------
## Proxy Infrastructure
OnlyFans API leverages an advanced proxy architecture to ensure high-availability connections and robust security. Our infrastructure automatically manages dedicated proxy assignments for each account, providing enterprise-grade reliability and performance.
### Built-in Proxy System (Recommended)
We provide a sophisticated proxy management system at no additional cost:
* **Dedicated Mobile IP**: Each connected account gets its own exclusive mobile proxy IP
* **Intelligent Routing**: Advanced traffic routing optimized for OnlyFans platform
* **Geographic Distribution**: Choose your preferred proxy country during setup
* **Zero Configuration**: Everything is handled automatically
Our proxy infrastructure is specifically engineered for optimal OnlyFans API
performance. We recommend using our built-in system for the best experience.
### Custom Proxy Integration
For organizations with existing proxy infrastructure:
1. Select "Use custom proxy" during account configuration
2. Configure your proxy details:
* Host
* Port
* Username (if required)
* Password (if required)
### Technical Requirements
Custom proxy configurations must meet these specifications:
* **IP Exclusivity**: Dedicated, non-shared IP address per account
* **Network Type**: Mobile or residential IP ranges (datacenter IPs not supported)
* **Geolocation**: IP geolocation matching historical access patterns
* **Protocol Support**: HTTP/HTTPS protocols
### Best Practices
* Maintain consistent geolocation patterns
* Use the same proxy consistently for each account
* Monitor proxy health metrics
* Contact support if you experience connection issues
# Rate Limits
URL: /introduction/essentials/rate-limits
Understanding API rate limits and optimization
***
title: "Rate Limits"
description: "Understanding API rate limits and optimization"
icon: Gauge
-----------
We have decided to remove our daily rate limits. Please remove any references to these values in your integrations.
## Rate Limiting Overview
Our platform employs a distributed rate limiting system to ensure optimal performance and resource allocation. Rate limits vary based on your subscription plan:
### Plan-Based Limits
1. **Basic Plan**:
* 1,000 requests per minute (RPM)
* Resets every minute
* Perfect for most applications
* Tracked via `remaining_minute` counter
2. **Pro Plan**:
* 5,000 requests per minute (RPM)
* Higher throughput for demanding applications
* Priority request processing
* Tracked via `remaining_minute` counter
3. **Enterprise Plan**:
* No rate limits
* Unlimited requests per minute
* Custom infrastructure
* Performance monitoring included
Enterprise customers get unlimited request throughput with dedicated
infrastructure to ensure optimal performance at any scale.
For information about where to find rate limit data in responses, see our [Response Structure](/introduction/essentials/response-structure) documentation.
### Caching and Rate Limits
Our caching system helps you optimize your rate limit usage:
* Public endpoints (like profile information) are automatically cached
* Cached responses don't count towards your rate limits
* Use `?fresh=true` when you need real-time data
* Cache duration varies by endpoint type
When using cached responses, you're not consuming any of your rate limits,
making it an effective way to optimize your API usage.
### Rate Limit Monitoring
Track your rate limit usage through:
1. **Response Headers**
* Current limits
* Remaining requests
* Reset timers
2. **Dashboard Analytics**
* Usage patterns
* Peak usage times
* Rate limit warnings
### Best Practices
Implement these strategies for optimal throughput:
1. **Monitor Your Limits**
* Track usage patterns
* Plan for limit resets
* Set up alerts before limits are reached
2. **Optimize Request Patterns**
* Distribute requests evenly
* Avoid request bursts
* Use batch operations when available
3. **Handle Rate Limits Gracefully**
* Implement exponential backoff
* Queue requests when near limits
* Use cached responses when possible
4. **Cache Strategy**
* Leverage cached responses
* Only use `?fresh=true` when necessary
* Implement local caching when appropriate
### Error Handling
When you exceed rate limits:
* Response will have status code `429 Too Many Requests`
* Contains information about when limits reset
* Implement automatic retry with backoff
Example backoff strategy:
```javascript
async function fetchWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(url);
if (response.status !== 429) return response;
// Get retry delay from headers or use exponential backoff
const retryAfter = response.headers.get("retry-after") || Math.pow(2, i);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
} catch (error) {
if (i === maxRetries - 1) throw error;
}
}
}
```
### Enterprise Options
For high-volume requirements:
* No rate limits
* Dedicated infrastructure
* Custom performance tuning
* Advanced monitoring tools
Contact our enterprise team to discuss your specific needs.
# Response Structure
URL: /introduction/essentials/response-structure
Understanding API response format, metadata, and headers
***
title: "Response Structure"
description: "Understanding API response format, metadata, and headers"
icon: CodeXml
-------------
## Response Format
Every API response follows a consistent structure with two main components:
1. The `data` field containing OnlyFans information
2. Optional `_pagination` field with pagination information, if the endpoint is paginated
3. The `_meta` object containing request metadata
Here's an example response:
### Response Body Structure
We have decided to remove our daily rate limits. Please remove any references to these values in your integrations.
```json
{
"data": {
// OnlyFans response data
"view": "f",
"avatar": "https://...",
"isFriend": false,
"isBlocked": false,
"canReport": false
},
"_meta": {
"_credits": {
"used": 0,
"balance": 9852,
"note": "Cache HIT. No credits debited"
},
"_cache": {
"is_cached": true,
"cached_at": "2025-01-29T16:30:43+00:00",
"note": "Add ?fresh=true to the request URL to skip the cache and get a fresh response from OnlyFans"
},
"_rate_limits": {
"limit_minute": 60,
"limit_day": null, // Legacy
"remaining_minute": 59,
"remaining_day": null, // Legacy
"notice": "We have decided to remove our daily rate limits. Please remove any references to this in your integrations."
}
}
}
```
### The `data` Field
The `data` field always contains the actual OnlyFans response data. Its structure varies depending on the endpoint being called. For example:
* Profile information for `/profiles/{username}`
* Message data for `/messages` endpoints
* Subscriber data for `/subscribers` endpoints
### The optional `_pagination` field
Some endpoints return paginated data. For example, `/chats`, `/chats/XYZ/messages` or `/tracking-links`.
In this case, the response will include a `_pagination` field with the `next_page` field that you can use to fetch the next page of results.
If there are no more pages, the `next_page` field will be `null`.
```json
{
"data": {
// OnlyFans response data
},
"_meta": {
"_pagination": {
"next_page": "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXX/chats/?offset=10&limit=10"
}
}
}
```
### The `_meta` Object
The `_meta` object contains three sections of metadata about your request:
1. **`_credits`**: Credit usage information
* `used`: Credits consumed by this request
* `balance`: Your remaining credit balance
* `note`: Additional information about credit usage
2. **`_cache`**: Caching status and information
* `is_cached`: Whether this response was served from cache
* `cached_at`: When the response was cached
* `note`: Instructions for bypassing cache if needed
3. **`_rate_limits`**: Rate limiting information
* `limit_minute`: Requests allowed per minute
* `limit_day`: Legacy: Requests allowed per day **(removed)**
* `remaining_minute`: Remaining requests this minute
* `remaining_day`: Legacy: Remaining requests today **(removed)**
## Response Headers
Each response includes comprehensive metadata in the headers:
| Header | Value | Category | Description |
| ------------------------------- | ------------------ | ------------------ | ----------------------------- |
| `content-type` | `application/json` | Content Headers | Always `application/json` |
| `x-ofapi-credits-balance` | `9852` | Credit Headers | Your remaining credit balance |
| `x-ofapi-credits-used` | `0` | Credit Headers | Credits used by this request |
| `x-ofapi-is-cached` | `true` | Credit Headers | Whether response was cached |
| `x-rate-limit-limit-day` | `1000` | Rate Limit Headers | **Legacy: Removed** |
| `x-rate-limit-limit-minute` | `60` | Rate Limit Headers | Per-minute limit |
| `x-rate-limit-remaining-day` | `988` | Rate Limit Headers | **Legacy: Removed** |
| `x-rate-limit-remaining-minute` | `59` | Rate Limit Headers | Remaining minute requests |
## Cache Control
You can control caching behavior using query parameters:
* By default, responses are cached when possible (only for public endpoints)
* Add `?fresh=true` to force a fresh response from OnlyFans
* Cached responses don't consume credits
* Cache duration varies by endpoint
The same information is available in both headers and the `_meta` object. Use
headers for quick access in code, and the `_meta` object for more detailed
information including notes and timestamps.
# Composing messages
URL: /introduction/guides/composing-messages
Learn how to compose and send messages from our API, media, PPVs, and more.
***
title: "Composing messages"
description: "Learn how to compose and send messages from our API, media, PPVs, and more."
icon: MessageSquareText
-----------------------
This guide will give you a brief overview of how to compose messages with various elements using our API.
Please keep in mind that all of the below examples are meant to be sent as a `POST` request to our `https://app.onlyfansapi.com/api/{account}/chats/{chat_id}/messages` endpoint.
**Looking for the `chat_id`? Use our [List Chats](/api-reference/chats/list-chats) endpoint.**
**Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/chats/send-message).
## Text-only messages
Simply want to send a regular message? Use the following payload:
```json
{
"text": "The text of your message"
}
```
## Adding media
Please refer to our dedicated guide on [uploading media](/introduction/guides/uploading-media) for more information on how to upload media files, and how to include them in your chat messages.
## Setting a price (PPV)
To set a price for your chat message, you can use the `price` field in your payload. This will make your message paid (PPV). **All paid messages must contain at least one media file.**
### Only including paid media
To send a paid message without any free preview media, you can use the following payload:
```json
{
"text": "The text of your message",
"mediaFiles": ["ofapi_media_123", 3866342509],
"price": 5
}
```
The `mediaFiles` parameter can contain either `ofapi_media` IDs, or OnlyFans Vault Media ID (e.g., `3866342509`). You can find more information about these IDs in our [media uploads guide](/introduction/guides/uploading-media). **You can mix-and-match these IDs in the same array.**
### Including free preview media
To send a paid message with free preview media, you can use the `previews` field in your payload. This allows you to include media that will be visible to the recipient, even if they haven't paid for the message.
**Important!**\
Make sure to list every `previews` media file in the `mediaFiles` array as well. Otherwise, the API will return an error.
The `previews` array is only used to indicate which media files are free, while the `mediaFiles` array contains all media files included in the message, regardless of whether they are paid or free.
```json
{
"text": "The text of your message",
"mediaFiles": ["ofapi_media_123", 3866342509],
"previews": ["ofapi_media_456", 1234567890],
"price": 5
}
```
The `mediaFiles` and `previews` parameters can contain either `ofapi_media` IDs, or OnlyFans Vault Media ID (e.g., `3866342509`). You can find more information about these IDs in our [media uploads guide](/introduction/guides/uploading-media). **You can mix-and-match these IDs in the same array.**
## Tagging other OnlyFans creators
To tag other OnlyFans creators in your message, you can use the `rfTag` field in your payload. You can specify multiple creators by providing an array of their OnlyFans user IDs.
```json
{
"text": "The text of your message",
"rfTag": [123, 456]
}
```
**How to find the OnlyFans user ID of a creator?**
* **If you've connected the relevant creator account to OnlyFans API**, you can use our [List Accounts](/api-reference/account/list-accounts) endpoint.
* **Not connected, but you know the creator's username?** You can use our [Get Profile Details](/api-reference/public-profiles/get-profile-details) endpoint.
* **Not connected and don't know the username?** You can use our [Search Profiles](/api-reference/public-profiles/search-profiles) endpoint.
## Formatting your message text
Please refer to our dedicated guide on [text formatting](/introduction/guides/text-formatting) for more information on how to format your message text, including text styles, colors, and more.
# Composing posts
URL: /introduction/guides/composing-posts
Learn how to compose posts from our API, including labels, media, polls, schedules, and more.
***
title: "Composing posts"
description: "Learn how to compose posts from our API, including labels, media, polls, schedules, and more."
icon: SquarePen
---------------
This guide will give you a brief overview of how to compose posts with various elements using our API.
Please keep in mind that all of the below examples are meant to be sent as a `POST` request to our `https://app.onlyfansapi.com/api/{account}/posts` endpoint.
**Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/posts/send-post).
## Text-only posts
Simply want to send a regular text post? Use the following payload:
```json
{
"text": "The text of your post"
}
```
## Post labels
### Retrieving the account's existing labels
**Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/post-labels/list-labels).
You can retrieve the account's existing labels by sending a `GET` request to the `https://app.onlyfansapi.com/api/{account}/posts/labels` endpoint.
It will return a payload like:
```json
[
{
"id": "archived",
"name": "Archive",
"type": "archived",
"isClearInProgress": false,
"postsCount": 0,
"posts": []
},
{
"id": "private_archived",
"name": "Private Archive",
"type": "private_archived",
"isClearInProgress": false,
"postsCount": 0,
"posts": []
},
{
"id": 123,
"name": "My new label",
"type": "custom",
"isClearInProgress": false,
"postsCount": 123,
"posts": []
}
]
```
You can then use the `id` of the label(s) to apply it to your post.
### Creating a new label
**Looking for the developer-oriented documentation?** Please refer to our [API Reference](/api-reference/post-labels/create-label).
To create a new label, send a `POST` request to the `https://app.onlyfansapi.com/api/{account}/posts/labels` endpoint with the following payload:
```json
{
"name": "My new label"
}
```
It will then return a payload like:
```json
{
"data": {
"id": 123,
"name": "My new label",
"type": "custom",
"isClearInProgress": false,
"postsCount": 0,
"posts": []
}
}
```
You can then use the `id` of the newly created label to apply it to your post.
### Adding label(s) to your post
To add label(s) to your post, you can use the `labels` field in your payload. You can specify multiple labels by providing an array of label IDs.
```json
{
"text": "The text of your post",
"labelIds": [123, 456]
}
```
## Adding media
Please refer to our dedicated guide on [uploading media](/introduction/guides/uploading-media) for more information on how to upload media files, and how to include them in your posts.
## Adding polls
Both regular polls and quizzes are supported in our API. You can choose which type of poll to include in your post by setting the `votingType` field in your payload to either `poll` or `quiz`.
### Regular polls
To include a regular poll in your post, set the `votingType` field to `poll`.
**Specifying the options**\
The poll's options can be set by using the `votingOptions` field. It should be an array of strings. **You must provide at least 2 options.**
**Setting a due date** (optional)\
You can set a due date by using the `votingDue` field, which specifies the number of days until the poll expires. Valid values are **1**, **3**, **7**, or **30** days. If not specified, the poll will never expire.
```json
{
"text": "The text of your post",
"votingType": "poll",
"votingOptions": ["Option 1", "Option 2"],
"votingDue": 7
}
```
### Quizzes
To include a quiz in your post, set the `votingType` field to `quiz`.
**Specifying the options**\
The quiz options can be set by using the `votingOptions` field. It should be an array of strings. **You must provide at least 2 options.**
**Specifying the correct answer**\
Specify the correct answer by using the `votingCorrectIndex` field. It should be an integer representing the index of the correct answer in the `votingOptions` array (starting from 0). For example, if the correct answer is the first option, set it to `0`.
**Setting a due date** (optional)\
You can set a due date by using the `votingDue` field, which specifies the number of days until the quiz expires. Valid values are **1**, **3**, **7**, or **30** days. If not specified, the quiz will never expire.
```json
{
"text": "The text of your post",
"votingType": "quiz",
"votingOptions": ["Option 1", "Option 2"],
"votingCorrectIndex": 0,
"votingDue": 7
}
```
## Setting an expiration date
To set an expiration date for your post, you can use the `expireDays` field in your payload. The value must be **1**, **3**, **7** or **30** days.
```json
{
"text": "The text of your post",
"expireDays": 7
}
```
## Scheduling posts
To schedule your post, you can use the `scheduledDate` field in your payload. The value must be a valid date-time string formatted as `2025-06-03T15:30:00.000Z` (ISO 8601 format) in UTC timezone.
```json
{
"text": "The text of your post",
"scheduledDate": "2023-10-01T12:00:00Z"
}
```
## Saving a post for later
To save a post for later, you can use the `saveForLater` field in your payload. Set it to `true` to save the post without publishing it immediately. You can then find your post here: [https://onlyfans.com/saved-for-later-posts](https://onlyfans.com/saved-for-later-posts)
```json
{
"text": "The text of your post",
"saveForLater": true
}
```
## Setting a fundraising target
To include a fundraising target in your post, you can use the `fundRaisingTargetAmount` and `fundRaisingTipsPresets` fields in your payload.
**Setting a target amount**\
The `fundRaisingTargetAmount` field specifies the target amount for your fundraising post. It must be a at least `10` representing the amount in your account's currency.
**Setting tip presets**\
The `fundRaisingTipsPresets` field allows you to specify the preset tip amounts that users can choose from. It should be an array of integers representing the amounts in your account's currency.
**Tip preset rules**
* You must provide at least one preset value.
* Each preset value must be at least `5`.
* Each preset value may not be more than the `fundRaisingTargetAmount`.
```json
{
"text": "The text of your post",
"fundRaisingTargetAmount": 30,
"fundRaisingTipsPresets": [5, 10, 15]
}
```
## Tagging other OnlyFans creators
To tag other OnlyFans creators in your post, you can use the `rfTag` field in your payload. You can specify multiple creators by providing an array of their OnlyFans user IDs.
```json
{
"text": "The text of your post",
"rfTag": [123, 456]
}
```
**How to find the OnlyFans user ID of a creator?**
* **If you've connected the relevant creator account to OnlyFans API**, you can use our [List Accounts](/api-reference/account/list-accounts) endpoint.
* **Not connected, but you know the creator's username?** You can use our [Get Profile Details](/api-reference/public-profiles/get-profile-details) endpoint.
* **Not connected and don't know the username?** You can use our [Search Profiles](/api-reference/public-profiles/search-profiles) endpoint.
## Formatting your post text
Please refer to our dedicated guide on [text formatting](/introduction/guides/text-formatting) for more information on how to format your post text, including text styles, colors, and more.
# Connect OnlyFans account
URL: /introduction/guides/connect-onlyfans-account
Learn how to connect your OnlyFans account so you can use it with OnlyFans API
***
title: "Connect OnlyFans account"
description: "Learn how to connect your OnlyFans account so you can use it with OnlyFans API"
icon: UserPlus
--------------
## Why do you need to connect your OnlyFans account?
If you want to use our API to interact with OnlyFans API endpoints like:
* Reading chats
* Sending messages to fans
* Getting statistics
* Getting fans
* Following / unfollowing users
* Getting webhook notifications
* ... basically anything that requires you to be logged in to your OnlyFans account.
Then, you need to connect your OnlyFans account to our API.
Currently, there are two ways to connect your OnlyFans account to our API:
1. Using our automated login flow (email & password) - **Captcha and 2FA supported** *(Recommended)*
2. By providing cURL request
### Option 1: Using our automated login flow (email & password)
This is the recommended way to connect your OnlyFans account to our API.
Our system can bypass captcha and if you've setup 2FA, you'll be able to enter the 2FA code directly inside our interface while we sign in your profile.
Your credentials are securely stored in our database and are never shared with
anyone (not even our engineers can see your credentials).
Steps to connect your OnlyFans account:
1. Go to the [OnlyFansAPI Console -> Accounts](https://app.onlyfansapi.com/accounts)
2. Click on the **+ Connect Account** button
3. Enter name of the account (this will be used for your reference)
4. Enter your OnlyFans email and password
5. Choose Proxy Country (we will automatically assign a dedicated mobile IP address for this account), or enter your own proxy details
6. Click on the **Add** button
7. Your account will start connecting and you'll see the live progress of the login process.
8. **If you've 2FA enabled on your OnlyFans account**, you'll be asked to enter the 2FA code.

9. Done! ✅ You're now able to see the account details and start using your account with our API.
### Option 2: By providing cURL request
This is the manual way to connect your OnlyFans account to our API.
We recommend to sign in and enter the cURL request from a **incognito
window**. Please do NOT sign out account after you've connected it to our API,
just close the incognito window.
Honestly, it's easier to watch the video below and follow the steps.
# Downloading Media from OnlyFans CDN
URL: /introduction/guides/downloading-media
Learn how to download photos/videos/audio from OnlyFans CDN URLs and store them locally or in your cloud storage.
***
title: Downloading Media from OnlyFans CDN
description: "Learn how to download photos/videos/audio from OnlyFans CDN URLs and store them locally or in your cloud storage."
icon: Download
--------------
OnlyFans API makes it easy to download media files directly from OnlyFans CDN URLs. You can download photos, videos, and audio files by calling our download endpoint with the CDN URL.
## Download media from OnlyFans CDN
The full media download endpoint documentation can be found
[here](/api-reference/media/download-media-from-the-only-fans-cdn).
Media can be downloaded by calling GET `https://app.onlyfansapi.com/api/{account}/media/download/{ONLYFANS_CDN_URL}`.
The `{ONLYFANS_CDN_URL}` parameter should be a URL from OnlyFans CDN (e.g., `https://cdn2.onlyfans.com/files/e/e5/123/600x400_123.jpg?Tag=2&u=123&Policy=123&Signature=signature&Key-Pair-Id=123`). You can just enter the OnlyFans CDN URL after the `.../media/download/{ONLYFANS_CDN_URL}` without any need for encoding the URL.
```bash tab="cURL"
curl --location 'https://app.onlyfansapi.com/api/{account}/media/download/https://cdn2.onlyfans.com/files/e/e5/123/600x400_123.jpg?Tag=2&u=123&Policy=123&Signature=signature&Key-Pair-Id=123' \
--header 'Authorization: Bearer {token}' \
--output 'downloaded-media.jpg'
```
```ts tab="JavaScript (Fetch)"
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer {token}");
const cdnUrl =
"https://cdn2.onlyfans.com/files/e/e5/123/600x400_123.jpg?Tag=2&u=123&Policy=123&Signature=signature&Key-Pair-Id=123";
const requestOptions = {
method: "GET",
headers: myHeaders,
};
fetch(
`https://app.onlyfansapi.com/api/{account}/media/download/${cdnUrl}`,
requestOptions
)
.then((response) => response.blob())
.then((blob) => {
// Save the blob to a file or process it
const url = window.URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "downloaded-media.jpg";
a.click();
})
.catch((error) => console.error(error));
```
```js tab="Node.js (Axios)"
const axios = require("axios");
const fs = require("fs");
const cdnUrl =
"https://cdn2.onlyfans.com/files/e/e5/123/600x400_123.jpg?Tag=2&u=123&Policy=123&Signature=signature&Key-Pair-Id=123";
let config = {
method: "get",
url: `https://app.onlyfansapi.com/api/{account}/media/download/${cdnUrl}`,
headers: {
Authorization: "Bearer {token}",
},
responseType: "stream",
};
axios
.request(config)
.then((response) => {
response.data.pipe(fs.createWriteStream("downloaded-media.jpg"));
})
.catch((error) => {
console.log(error);
});
```
```php tab="PHP (Guzzle)"
$client = new Client();
$headers = [
'Authorization' => 'Bearer {token}'
];
$cdnUrl = "https://cdn2.onlyfans.com/files/e/e5/123/600x400_123.jpg?Tag=2&u=123&Policy=123&Signature=signature&Key-Pair-Id=123";
$request = new Request('GET', "https://app.onlyfansapi.com/api/{account}/media/download/{$cdnUrl}", $headers);
$res = $client->sendAsync($request)->wait();
file_put_contents('downloaded-media.jpg', $res->getBody());
```
The endpoint will return the media file directly, which you can then save to your local storage or process as needed.
# Text formatting
URL: /introduction/guides/text-formatting
Learn how to format text in your posts and chat messages.
***
title: "Text formatting"
description: "Learn how to format text in your posts and chat messages."
icon: Type
----------
## Best practices
Generally, all text should be contained within one singular `
` tag. Example:
```html
Hi there! This is a message containing normal text
```
## New lines
To create a new line, you can use the ` ` tag. Example:
```html
Hi there! This is a message containing normal text
This is a new line!
```
Which will render as:
> Hi there! This is a message containing normal text\
> This is a new line!
## Text sizes
OnlyFans has the following text size options:
* Largest
* Large
* Default
* Small
* Smallest

You can use them as follows:
### Smallest
To create the smallest text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is the smallest text!
```
### Small
To create a small text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is a small text!
```
### Large
To create a large text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is a large text!
```
### Largest
To create the largest text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is the largest text!
```
## Text styles
When using text styles like **bold** or *italic*, make sure that you wrap the text in a `` tag. Example:
```html
Bold textItalic text
```
### Bold
To create bold text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is bold text!
```
### Italic
To create italic text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is italic text!
```
## Text colors
OnlyFans has three possible colors for text:
* Gray (`#8a96a3`)
* Blue 1 (`#00aff0`)
* Blue 2 (`#1b98e0`)

You can use them as follows:
### Gray
To create gray text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is gray text!
```
### Blue 1
To create blue 1 text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is blue 1 text!
```
### Blue 2
To create blue 2 text, you can use the `` tag. Example:
```html
Hi there! This is a message containing normal text
This is blue 2 text!
```
# Uploading media
URL: /introduction/guides/uploading-media
Learn how to upload photos/videos, and include them in your posts or messages.
***
title: Uploading media
description: "Learn how to upload photos/videos, and include them in your posts or messages."
icon: Upload
------------
OnlyFans API makes it really easy to include photos and videos in your posts and messages. You can upload media files directly to our API, and then reference them in our relevant endpoints.
## Prepare the relevant photo or video
* If you want to use a new photo or video, you may upload it to our API.
* Alternatively, if you want to use a photo or video from your Vault, you may reference its ID directly in the relevant endpoints.
### Upload your photo or video to our API
The full media upload endpoint documentation can be found
[here](/api-reference/media/upload-media-to-the-only-fans-cdn).
Submit a POST request to our `https://app.onlyfansapi.com/api/{account}/media/upload` endpoint, with `form-data` as the body type.
It must have a `file` field, which is the media file you want to upload. This can either be a photo or a video, and it can be in any format that OnlyFans supports (e.g., JPEG, PNG, MP4).
```bash tab="cURL"
curl --location 'https://app.onlyfansapi.com/api/{account}/media/upload' \
--header 'Authorization: Bearer {token}' \
--form 'file=@"/Users/me/Documents/MyVideo.mp4"'
```
```ts tab="JavaScript (Fetch)"
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer {token}");
const formdata = new FormData();
formdata.append("file", fileInput.files[0], "MyVideo.mp4");
const requestOptions = {
method: "POST",
headers: myHeaders,
body: formdata,
redirect: "follow",
};
fetch("https://app.onlyfansapi.com/api/{account}/media/upload", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
```
```js tab="Node.js (Axios)"
const axios = require("axios");
const FormData = require("form-data");
const fs = require("fs");
let data = new FormData();
data.append("file", fs.createReadStream("/Users/me/Documents/MyVideo.mp4"));
let config = {
method: "post",
maxBodyLength: Infinity,
url: "https://app.onlyfansapi.com/api/{account}/media/upload",
headers: {
Authorization: "Bearer {token}",
...data.getHeaders()
},
data: data
};
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
```
```php tab="PHP (Guzzle)"
$client = new Client();
$headers = [
'Authorization' => 'Bearer {token}'
];
$options = [
'multipart' => [
[
'name' => 'file',
'contents' => Utils::tryFopen('/Users/me/Documents/MyVideo.mp4', 'r'),
'filename' => '/Users/me/Documents/MyVideo.mp4',
]
]];
$request = new Request('POST', 'https://app.onlyfansapi.com/api/{account}/media/upload', $headers);
$res = $client->sendAsync($request, $options)->wait();
echo $res->getBody();
```
**If the upload was successful, the response will be something as follows:**
```json
{
"prefixed_id": "ofapi_media_123",
"file_name": "MyVideo.mp4",
"processId": "a9k3l2m7n8p0q4r5s6t",
"host": "convert1.onlyfans.com",
"sourceUrl": "https://of2transcoder.s3.amazonaws.com/upload/642a4d7e-134e-4cb4-99b5-6774248341c2/57141494436/file_name.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=token&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=credentials&X-Amz-Date=20250521T151119Z&X-Amz-SignedHeaders=host&X-Amz-Expires=604800&X-Amz-Signature=signature",
"extra": "YW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZCBzdHJpbmcgYW4gZW5jb2RlZA==",
"additional": {
"user": "123"
},
"thumbs": [
{
"id": 1,
"url": "https://cdn2.onlyfans.com/files/f/f0/fsdnjdsnf3k2rk/300x300_fjkdnknk23efsknj.jpg?Expires=1750518679&Signature=signature&Key-Pair-Id=PAIRID"
}
]
}
```
You may use the `prefixed_id` (e.g., `ofapi_media_123`) in our relevant endpoints to include this media file.
**Important!**
The `prefixed_id` from the above request can only be used **once**. After you use it in a post or message, it will no longer be valid for future use. If you want to reuse the same media file, you must upload it again to get a new `prefixed_id`.
## Including your media in a new post
The full send post endpoint documentation can be found
[here](/api-reference/posts/send-post).
Once you have retrieved the correct media IDs (either from the upload response, or from your Vault), you can include them in your post:
```json Example request body
{
"text": "The text of your post",
"mediaFiles": ["ofapi_media_123", "1234567890"]
}
```
## Including your media in a chat message
The full send chat message endpoint documentation can be found
[here](/api-reference/chats/send-message).
Once you have retrieved the correct media IDs (either from the upload response, or from your Vault), you can include them in your post:
```json Example request body
{
"text": "The text of your message",
"mediaFiles": ["ofapi_media_123", "1234567890"]
}
```
## Media file array options
You can include two different types of IDs in the `mediaFiles` array:
1. An OnlyFans API ID starting with `ofapi_media_`. This needs to be the `prefixed_id` of the media file we just uploaded.
**Important! The `ofapi_media_` ID from a media file upload can only be used once.**
After you use it in a post or message, it will no longer be valid for future use. To use the media again, you must use the OnlyFans Vault Media ID.
2. An OnlyFans Vault Media ID like `1234567890`. This is the OnlyFans ID of a media file that already exists in the Vault. Use our [List Vault Media](api-reference/media-vault/list-vault-media) endpoint to retrieve this ID.
## Demo video
# Available modules
URL: /integrations/make/available-modules
A list of all available OnlyFans API modules in Make.com.
***
title: "Available modules"
description: "A list of all available OnlyFans API modules in Make.com."
icon: Puzzle
------------
Please reach out to us, we can add it!
## Instant Triggers
An Instant Trigger (also known as a "webhook"), is a module that is executed immediately when an event occurs.
### 🤑 Chat Message PPV Purchased
A PPV (pay-per-view) message that you sent has been purchased by a fan
```json title="Example data"
{
"event": "messages.ppv.unlocked",
"account_id": "acct_123",
"payload": {
"id": "123",
"type": "paided_message",
"createdAt": "2025-05-05T22:18:00+00:00",
"text": "has purchased your message for $5.00!",
"replacePairs": {
"{NAME}": "Name",
"{MESSAGE_LINK}": "message",
"{AMOUNT}": "$5.00"
},
"subType": "subscriber_pay_for_chat_message",
"user_id": "123",
"isRead": false,
"canGoToProfile": true,
"user": {
"avatar": null,
"avatarThumbs": null,
"header": null,
"headerSize": null,
"headerThumbs": null,
"id": 123,
"name": "Name",
"username": "username",
"canLookStory": false,
"canCommentStory": false,
"hasNotViewedStory": false,
"isVerified": false,
"canPayInternal": false,
"hasScheduledStream": false,
"hasStream": false,
"hasStories": false,
"tipsEnabled": false,
"tipsTextEnabled": true,
"tipsMin": 5,
"tipsMinInternal": 1,
"tipsMax": 200,
"canEarn": false,
"canAddSubscriber": false,
"subscribePrice": 0,
"subscribedBy": false,
"subscribedOn": false,
"canReceiveChatMessage": false,
"hideChat": false,
"lastSeen": "2025-05-05T22:17:29+00:00",
"isPerformer": false,
"isRealPerformer": false,
"view": "mn",
"canReport": true,
"subscribedByData": null,
"subscribedOnData": null,
"isBlocked": false
}
}
}
```
### 📥 Chat Message Received
A new chat message has been received.
```json title="Example data"
{
"event": "messages.received",
"account_id": "acct_abc123",
"payload": {
"responseType": "message",
"text": "
",
"email": "user@example.com",
"wsUrl": "wss://ws2.onlyfans.com/ws3/01",
"avatar": "https://public.onlyfans.com/.../avatar.jpg",
"header": "https://public.onlyfans.com/.../header_image.jpg",
"isAuth": true,
"ivFlow": "default",
"upload": {
"geoUploadArgs": {
"preset": "of_beta",
"isDelay": true,
"additional": {
"user": "123"
},
"needThumbs": true,
"preset_png": "of_png",
"protected_preset": "of_drm"
}
},
"canChat": true,
"canEarn": true,
"hasTags": false,
"tipsMax": 200,
"tipsMin": 5,
"website": null,
"advBlock": ["banners"],
"hasLinks": false,
"ivStatus": "approved",
"joinDate": "2025-01-01T00:00:00+00:00",
"lastSeen": "2025-01-21T00:00:00+00:00",
"location": null,
"paidFeed": false,
"username": "username",
"wishlist": null,
"hasLabels": true,
"hasStream": false,
"hasStripe": false,
"ivCountry": "US",
"canAddCard": true,
"canPinPost": true,
"creditsMax": 200,
"creditsMin": 10,
"hasFriends": false,
"hasStories": false,
"headerSize": {
"width": 4032,
"height": 3024
},
"isVerified": true,
"payoutType": "bank_ebics_sepa",
"postsCount": 1,
"unreadTips": 0,
"audiosCount": 0,
"canAddStory": true,
"hasNewHints": true,
"hasScenario": false,
"isPerformer": true,
"mediasCount": 1,
"photosCount": 1,
"tipsEnabled": false,
"videosCount": 0,
"wsAuthToken": "wsAuthToken",
"avatarThumbs": {
"c50": "https://thumbs.onlyfans.com/.../avatar.jpg",
"c144": "https://thumbs.onlyfans.com/.../avatar.jpg"
},
"canLookStory": true,
"canStreaming": false,
"canTrialSend": false,
"hasNewAlerts": false,
"headerThumbs": {
"w480": "https://thumbs.onlyfans.com/.../header_image.jpg",
"w760": "https://thumbs.onlyfans.com/.../header_image.jpg"
},
"isOtpEnabled": true,
"ivFailReason": null,
"newTagsCount": 0,
"postMaxPrice": 100,
"postMinPrice": 3,
"trialMaxDays": 7,
"creditBalance": 0,
"faceIdRegular": [],
"isAgeVerified": false,
"isAllowTweets": false,
"isMakePayment": false,
"isStripeExist": false,
"isVatRequired": false,
"needIVApprove": false,
"vatNumberName": "VAT",
"watermarkText": "OnlyFans.com/username",
"canCreateLists": true,
"canCreateTrial": true,
"canPayInternal": true,
"favoritedCount": 0,
"favoritesCount": 0,
"hasPinnedPosts": false,
"isAdultContent": false,
"isEmailChecked": true,
"isWantComments": true,
"showMediaCount": true,
"subscribePrice": 4.99,
"canCommentStory": true,
"countPinnedChat": 0,
"isEmailRequired": false,
"isPaywallPassed": true,
"isRealPerformer": true,
"isVisibleOnline": true,
"messageMaxPrice": 100,
"messageMinPrice": 3,
"showPostsInFeed": true,
"subscribesCount": 123,
"tipsMinInternal": 1,
"tipsTextEnabled": true,
"twitterUsername": "TwitterUsername",
"canAddSubscriber": false,
"canSendChatToAll": true,
"isCountryWithVat": false,
"isCreditsEnabled": true,
"isVerifiedReason": false,
"pinnedPostsCount": 0,
"subscribedByData": null,
"subscribedOnData": null,
"subscribersCount": 123,
"chatMessagesCount": 123,
"countPriorityChat": 123,
"hasNotViewedStory": false,
"hasPurchasedPosts": false,
"hasWatermarkPhoto": true,
"hasWatermarkVideo": true,
"isDeleteInitiated": false,
"isReferrerAllowed": true,
"isSpringConnected": false,
"subscribeMaxPrice": 50,
"subscribeMinPrice": 4.99,
"watermarkPosition": "bottom_right",
"archivedPostsCount": 0,
"canCreatePromotion": true,
"canMakeExpirePosts": true,
"hasScheduledStream": false,
"isSpotifyConnected": false,
"isTwitterConnected": false,
"notificationsCount": 0,
"walletFirstRebills": false,
"canConnectOfAccount": true,
"connectedOfAccounts": [],
"hasInternalPayments": false,
"hasNewTicketReplies": {
"open": false,
"closed": false,
"solved": false
},
"isNeedConfirmPayout": false,
"isRealCardConnected": true,
"ivHideForPerformers": false,
"maxPinnedPostsCount": 5,
"subscriptionBundles": [],
"trialMaxExpiresDays": 30,
"canCreateFundRaising": false,
"isPrivateRestriction": false,
"isWalletAutorecharge": false,
"maxFundRaisingTarget": 10000,
"minFundRaisingTarget": 10,
"showSubscribersCount": false,
"canChangeContentPrice": true,
"canReceiveChatMessage": false,
"walletAutorechargeMin": 0,
"canReceiveManualPayout": true,
"canReceiveStripePayout": false,
"firstPublishedPostDate": "2025-01-01T00:00:00+00:00",
"hasSystemNotifications": false,
"isCountryVatRefundable": false,
"isLegalApprovedAllowed": true,
"isPaymentCardConnected": true,
"ageVerificationRequired": false,
"payoutLegalApproveState": "approved",
"walletAutorechargeAmount": 0,
"canAlternativeWalletTopUp": false,
"enabledImageEditorForChat": true,
"isCountryVatNumberCollect": false,
"isScheduledStreamsAllowed": false,
"privateArchivedPostsCount": 0,
"isMarkdownDisabledForAbout": true,
"avatarHeaderConverterUpload": true,
"hasNewChangedPriceSubscriptions": true
}
}
```
### 💰 List Earnings (monetary values)
Get the earnings in monetary values for a given period. E.g. `123.45`
```json title="Example data"
{
"date": "2025-01-01T00:00:00+00:00",
"count": 123.45
}
```
### 💰 List Earnings (transaction count)
Get the transaction counts for a given period. E.g. `123`
```json title="Example data"
{
"date": "2025-01-01T00:00:00+00:00",
"count": 123
}
```
### 🔗 List Tracking Links
List all tracking links & their revenue data for the account.
```json title="Example data"
{
"id": 123,
"campaignCode": 1,
"campaignName": "campaign-name",
"campaignUrl": "https://onlyfans.com/username/c1",
"subscribersCount": 123,
"clicksCount": 123,
"createdAt": "2025-05-23T16:19:38+00:00",
"endDate": null,
"revenue": {
"total": 0,
"revenuePerSubscriber": 0,
"revenuePerClick": 0,
"calculatedAt": "2025-05-23T16:45:36.000000Z",
"isLoading": false
},
"links": {
"related": {
"subscribers": "https://app.onlyfansapi.com/api/acct_123/tracking-links/123/subscribers"
}
}
}
```
### 🔗 List Tracking Link Subscribers
Get list of subscribers who joined through a Tracking Link.
```json title="Example data"
{
"view": "s",
"avatar": null,
"avatarThumbs": null,
"header": null,
"headerSize": null,
"headerThumbs": null,
"id": 123,
"name": "name",
"username": "username",
"canLookStory": false,
"canCommentStory": false,
"hasNotViewedStory": false,
"isVerified": false,
"canPayInternal": false,
"hasScheduledStream": false,
"hasStream": false,
"hasStories": false,
"tipsEnabled": false,
"tipsTextEnabled": true,
"tipsMin": 5,
"tipsMinInternal": 1,
"tipsMax": 200,
"canEarn": false,
"canAddSubscriber": false,
"subscribePrice": 0,
"displayName": "",
"notice": "",
"isRestricted": false,
"canRestrict": true,
"subscribedBy": true,
"subscribedByExpire": false,
"subscribedByExpireDate": "2025-01-01T00:00:00+00:00",
"subscribedByAutoprolong": true,
"subscribedIsExpiredNow": false,
"currentSubscribePrice": 0,
"subscribedOn": true,
"subscribedOnExpiredNow": false,
"subscribedOnDuration": "1 year",
"showMediaCount": true,
"lastSeen": null,
"canReport": true
}
```
### 💳 List Transactions
Get a paginated list of transactions for an Account. Newest transactions are first.
```json title="Example data"
{
"amount": 9.99,
"vatAmount": 0.5,
"taxAmount": 0,
"net": 7.99,
"fee": 2,
"createdAt": "2025-05-26T00:00:00+00:00",
"currency": "USD",
"description": "Payment for message from User",
"status": "loading",
"user": {
"view": "t",
"id": 123,
"name": "Name",
"username": "username",
"isVerified": false,
"avatar": null,
"avatarThumbs": null
},
"payoutPendingDays": 7,
"id": "exampleId"
}
```
### 🆓 List Trial Links
List all trial links & their revenue data for the account.
```json title="Example data"
{
"id": 123,
"trialLinkName": "My trial link",
"url": "https://onlyfans.com/username/trial/abc123",
"subscribeDays": 7,
"subscribeCounts": 123,
"claimCounts": 123,
"expiredAt": null,
"createdAt": "2025-01-01T00:00:00+00:00",
"isFinished": false
}
```
## Universal
### Make a custom API call
Call any OnlyFans API endpoint from Make.com.
# Make.com & OnlyFans - Quickstart
URL: /integrations/make
Best for simple OnlyFans automations, all without writing code. Ideal for users who want simple visual workflow design.
***
title: "Make.com & OnlyFans - Quickstart"
description: "Best for simple OnlyFans automations, all without writing code. Ideal for users who want simple visual workflow design."
icon: Rocket
------------
import { DownloadIcon } from "lucide-react";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Card } from "fumadocs-ui/components/card";
## Prerequisites
To get started, you must have:
* An OnlyFans API account with a creator account connected
* A [Make.com](https://www.make.com/en/register?pc=onlyfans) account
## Getting started
Log in to your Make.com account.
Install our Make.com integration:
} href="https://www.make.com/en/hq/app-invitation/ee8eed5fafe0c65c4989c5b7112b741d" title="Install our Make.com app" className="w-fit">
It only takes a few seconds.
## Connecting your OnlyFans API account to Make.com
### Go to a Make scenario, or create a new scenario \[!toc]
Go to the Scenarios page in Make.com, click on the relevant scenario, or click on "Create a new scenario".
### Add the OnlyFans API app \[!toc]
Click on the "+" button to add an app, and search for "OnlyFans API".
### Select or search for a module \[!toc]

### Add a new API connection \[!toc]

### Create a new API key from the OnlyFans API Console \[!toc]
#### Go to the OnlyFans API console -> API Keys \[!toc]

#### Create a new API key from the OnlyFans API Console \[!toc]

#### Give it a name, and press "Add" \[!toc]

#### Copy the API key to your clipboard \[!toc]

### Save the new API key in Make.com \[!toc]
Give the connection a helpful name, paste the API key, and click "Save".

You're now ready to use the OnlyFans API app in your Make.com scenario.
## Tutorial Video
# Ready-made scenarios
URL: /integrations/make/ready-made-scenarios
Can't wait to get started? Use our ready-made scenarios to get going in a matter of minutes!
***
title: "Ready-made scenarios"
description: "Can't wait to get started? Use our ready-made scenarios to get going in a matter of minutes!"
icon: WandSparkles
------------------
import { Step, Steps } from 'fumadocs-ui/components/steps';
### Available blueprints
### Account synchronization \[!toc]
This scenario will synchronize your OnlyFans accounts with Airtable, and update the data once a day.
**Download scenario blueprint ›**
### Hourly account revenue data \[!toc]
This scenario will synchronize your OnlyFans account revenue data with Airtable. Every account will have one record for each day, which updates hourly.
**Download scenario blueprint ›**
### How to use the scenario blueprints
If you import a blueprint while editing another scenario that hasn't been saved, all the changes in that scenario will be lost.
To import a blueprint:
#### On the Scenario Builder toolbar, click the three dots > Import blueprint. \[!toc]

#### Click Choose File, select the blueprint file in .json format, and click Save. \[!toc]

The imported scenario appears in the Scenario Builder. You can now configure your own account connections, make any necessary edits to the scenario, schedule it, and click the Save icon.
# Available modules
URL: /integrations/zapier/available-modules
A list of all available OnlyFans API modules in Zapier.
***
title: "Available modules"
description: "A list of all available OnlyFans API modules in Zapier."
icon: Puzzle
------------
Please reach out to us, we can add it!
## Instant Triggers
An Instant Trigger (also known as a "webhook"), is a module that is executed immediately when an event occurs.
### 🤑 Chat Message PPV Purchased
A PPV (pay-per-view) message that you sent has been purchased by a fan
```json title="Example data"
{
"event": "messages.ppv.unlocked",
"account_id": "acct_123",
"payload": {
"id": "123",
"type": "paided_message",
"createdAt": "2025-05-05T22:18:00+00:00",
"text": "has purchased your message for $5.00!",
"replacePairs": {
"{NAME}": "Name",
"{MESSAGE_LINK}": "message",
"{AMOUNT}": "$5.00"
},
"subType": "subscriber_pay_for_chat_message",
"user_id": "123",
"isRead": false,
"canGoToProfile": true,
"user": {
"avatar": null,
"avatarThumbs": null,
"header": null,
"headerSize": null,
"headerThumbs": null,
"id": 123,
"name": "Name",
"username": "username",
"canLookStory": false,
"canCommentStory": false,
"hasNotViewedStory": false,
"isVerified": false,
"canPayInternal": false,
"hasScheduledStream": false,
"hasStream": false,
"hasStories": false,
"tipsEnabled": false,
"tipsTextEnabled": true,
"tipsMin": 5,
"tipsMinInternal": 1,
"tipsMax": 200,
"canEarn": false,
"canAddSubscriber": false,
"subscribePrice": 0,
"subscribedBy": false,
"subscribedOn": false,
"canReceiveChatMessage": false,
"hideChat": false,
"lastSeen": "2025-05-05T22:17:29+00:00",
"isPerformer": false,
"isRealPerformer": false,
"view": "mn",
"canReport": true,
"subscribedByData": null,
"subscribedOnData": null,
"isBlocked": false
}
}
}
```
### 📥 Chat Message Received
A new chat message has been received.
```json title="Example data"
{
"event": "messages.received",
"account_id": "acct_abc123",
"payload": {
"responseType": "message",
"text": "
Browse our frequently used API endpoints below to get a feel for what's possible
with OnlyFans API.
## Chats & Messages \[!toc]
} href="/api-reference/chats/list-chats" title="List Chats">
Retrieve the latest chats, including details like last message and fan details.
} href="/api-reference/chat-messages/list-chat-messages" title="List Chat Messages">
Retrieve messages from a specific chat.
} href="/api-reference/chat-messages/send-message" title="Send Message">
Send a new chat message to a fan, including support for media and PPVs.
} href="/api-reference/mass-messaging/send-mass-message" title="Send Mass Message">
Send or schedule a mass message to collections or individual fans, including support for media and PPVs.
## Payouts & Earnings \[!toc]
} href="/api-reference/payouts/get-earning-statistics" title="Earning Statistics">
Get a summary of model earnings over time, including totals and breakdowns.
} href="/api-reference/payouts/list-transactions-earnings" title="List Transactions (Earnings)">
Get a list of earning transactions, including details like amount, type, and fan info.
} href="/api-reference/payouts/request-manual-withdrawal" title="Request Manual Withdrawal">
Initiate a manual withdrawal, perfect for automating daily payouts.
## Fans & Subscribers \[!toc]
} href="/api-reference/fans/list-all-fans" title="List All Fans">
Retrieve a list of all fans, and filter by online, total spendings, duration, and more.
} href="/api-reference/fans/list-active-fans" title="List Active Fans">
Get a list of fans who have an active subscription.
} href="/api-reference/fans/list-expired-fans" title="List Expired Fans">
Get a list of fans whose subscriptions have expired.
} href="/api-reference/fans/list-latest-fans" title="List Latest Fans">
Get a list of fans within a specific date range.
## Media & Vault \[!toc]
} href="/api-reference/media-vault/list-vault-media" title="List Vault Media">
Retrieve a list of all fans, and filter by online, total spendings, duration, and more.
} href="/api-reference/media-vault-lists/list-vault-lists" title="List Vault Lists">
Get a list of fans who have an active subscription.
} href="/api-reference/media/upload-media-to-the-only-fans-cdn" title="Upload media to OnlyFans">
Upload an image, video or audio file to the OnlyFans CDN to include in a message or post.
} href="/api-reference/media/download-media-from-the-only-fans-cdn" title="Download media from OnlyFans">
Download an image, video or audio file from OnlyFans to our own CDN.
Haven't found what you're looking for?
} title="Explore our full API reference in the sidebar" href="/api-reference">
We have over 100 endpoints covering most OnlyFans functionality. Check out the sidebar to explore all available endpoints.
} title="Ask our AI chatbot">
Our AI chatbot can help you find the right endpoint for your use case. Click the "Ask AI" button in the bottom right to get started.
} title="Request a new functionality" href="mailto:hello@onlyfansapi.com">
Need something specific? Let us know! We're constantly adding new endpoints based on user feedback.
# n8n & OnlyFans - Quickstart
URL: /integrations/n8n
Best for building complex, multi-step no-code automations. Perfect for users who want powerful automation capabilities with full control over their workflows.
***
title: "n8n & OnlyFans - Quickstart"
description: "Best for building complex, multi-step no-code automations. Perfect for users who want powerful automation capabilities with full control over their workflows."
icon: Rocket
------------
import {
SiDigitalocean,
SiHostinger,
SiN8n,
} from "@icons-pack/react-simple-icons";
import { BoxIcon, ServerIcon, TerminalIcon } from "lucide-react";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Card, Cards } from "fumadocs-ui/components/card";
import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
import {ZapIcon} from "lucide-react";
}>
Our n8n integration is our most actively maintained integration, and it supports every single endpoint in our API.
Currently, our n8n integration is only available for self-hosted instances of n8n. We are actively working on making it available for n8n cloud users as well.
## Prerequisites
To get started, you must have:
} href="https://app.onlyfansapi.com" title="An OnlyFans API account">
If you don't have one yet, registering takes just a few seconds.
» Create a free account
} title="A self-hosted n8n instance">
You can either use your own infrastructure, or a one-click provider. Some popular options are:
Hostinger (20% OFF)DigitalOcean (Get $200 in Credit)Self-hosted
## Getting started
There are two ways to install our community node, through the n8n interface, or through the command line.
Use this method to easily install our community node from the npm registry.
Log in to your n8n instance.
Click on your profile image in the bottom-left corner, and then press on "Settings".

Click on **"**
**Community nodes"** and then **"Install a community node"**.

In the **"npm Package Name"** field, enter `n8n-nodes-onlyfansapi`, tick the checkbox, and press "Install".

Use this method to install our community node from npm if your n8n instance doesn't support installation through the in-app interface.
Access your Docker shell:
```bash
docker exec -it n8n sh
```
Create the `~/.n8n/nodes` directory if it doesn't already exist, and navigate into it:
```bash
mkdir ~/.n8n/nodes
cd ~/.n8n/nodes
```
Install the OnlyFans API node with your package manager:
```npm
npm i @onlyfansapi/n8n-nodes-onlyfansapi -D
```
Finally, restart n8n.
## Upgrading the OnlyFans API node
We frequently release updates to our n8n community node, adding new features and fixing bugs. To upgrade to the latest version, follow the instructions below:
Access the **"Community nodes"** page through the n8n settings
Find the OnlyFans API node in the list of installed nodes, and click on the **"Update"** button next to it
Follow the prompts to complete the update process.
Access your Docker shell:
```bash
docker exec -it n8n sh
```
Update our node through your package manager:
```bash
npm update @onlyfansapi/n8n-nodes-onlyfansapi
```
## Connecting your OnlyFans API account to n8n
Head to your n8n instance's homepage, and click on **"Create Credential"**
in the **"Create Workflow"** dropdown. 
Select **"OnlyFans API"** from the list of available credential types, and
click **"Continue"**. 
### Create a new API key from the OnlyFans API Console \[!toc]
#### Go to the OnlyFans API console -> API Keys \[!toc]

#### Create a new API key from the OnlyFans API Console \[!toc]

#### Give it a name, and press "Add" \[!toc]

#### Copy the API key to your clipboard \[!toc]

Paste the API key into the **"API Key"** field, and click **"Save"**.

# Notes
URL: /integrations/n8n/main-callouts
undefined
***
## title: "Notes"
import {ZapIcon} from "lucide-react";
}>
Our n8n integration is our most actively maintained integration, and it supports every single endpoint in our API.
Currently, our n8n integration is only available for self-hosted instances of n8n. We are actively working on making it available for n8n cloud users as well.
# Example scenarios
URL: /integrations/make/example-scenarios
We've prepared a few common example scenarios for you. Please choose one of the following to get started:
***
title: "Example scenarios"
description: "We've prepared a few common example scenarios for you. Please choose one of the following to get started:"
------------------------------------------------------------------------------------------------------------------------
import {ArrowLeftRightIcon, LinkIcon} from "lucide-react";
} href="/integrations/make/example-scenarios/tracking-links-airtable" title="Tracking Links + Airtable">
Learn how to easily synchronize Tracking Link Data from your OnlyFans accounts to Airtable.
} href="/integrations/make/example-scenarios/transaction-data-airtable" title="Transaction Data + Airtable">
Learn how to easily synchronize Transaction Data from your OnlyFans accounts to Airtable.
# [Airtable] Tracking links
URL: /integrations/make/example-scenarios/tracking-links-airtable
Learn how to easily synchronize Tracking Link Data from your OnlyFans accounts to Airtable.
***
title: "\[Airtable] Tracking links"
description: "Learn how to easily synchronize Tracking Link Data from your OnlyFans accounts to Airtable."
----------------------------------------------------------------------------------------------------------
import { Step, Steps } from 'fumadocs-ui/components/steps';
For this example, we'll create a scenario that periodically retrieves the tracking link data from all of your connected OnlyFans accounts, and saves the data to Airtable.
#### Create a base on Airtable
Go to Airtable and create a base. You can name it "OnlyFans API", or anything else that will help you identify it later.
#### Create a table within your base
Within the base, create a table named "Tracking links". Give the table the following fields:
* `ID` (primary) - Single line text
* `Campaign code` - Single line text
* `Campaign URL` - URL
* `Clicks count` - Number
* `Subscriber count` - Number
* `Total revenue` - Currency
Your table should now look like this:

#### Add our "List Accounts" module
If you don't see this module, make sure to click on "Show more".

#### Add our "List Tracking Links" module
After adding "List Tracking Links" module, you will be asked to provide an "Account ID".
Simply click on the field, and drag the "ID" from the left card into the field, like in the below image. Make sure to click on "Save".

#### Add the Airtable "Create a Record" module
If you don't see this module, make sure to click on "Show more".
#### Connect your Airtable account, and select the correct Base and Table

#### Map the fields
Now, let's map the OnlyFans API module fields to your Airtable's table fields. Make sure to click on "Save".
If you've done it correctly, your scenario should look like this:

#### Finally, schedule and run the scenario!
You can set a schedule time, and then run it manually with the "Run once" button to see if everything works correctly.
If it does, you will see the tracking link data of all your accounts appear in your Airtable table, like so:

The tracking link data of all of your connected OnlyFans accounts will now automatically be updated in Airtable.
Of course, you can further customize this scenario for a more advanced setup.
# [Airtable] Tracking links
URL: /integrations/make/example-scenarios/transaction-data-airtable
Learn how to easily synchronize Transaction Data from your OnlyFans accounts to Airtable.
***
title: "\[Airtable] Tracking links"
description: "Learn how to easily synchronize Transaction Data from your OnlyFans accounts to Airtable."
--------------------------------------------------------------------------------------------------------
import { Step, Steps } from 'fumadocs-ui/components/steps';
For this example, we'll create a scenario that periodically retrieves the transaction data from all of your connected OnlyFans accounts, and saves the data to Airtable.
#### Create a base on Airtable
Go to Airtable and create a base. You can name it "OnlyFans API", or anything else that will help you identify it later.
#### Create a table within your base
Within the base, create a table named "Transaction data". Give the table the following fields:
* `Transaction ID` (primary) - Single line text
* `Account name` - Single line text
* `Amount` - Currency
* `Net amount` - Currency
Your table should now look like this:

#### Add our "List Accounts" module

#### Add our "List Transactions" module
You will be asked to provide an "Account ID".
Simply click on the field, and drag the "ID" from the left card into the field. Afterwards, choose a start date like "-30 days".

Afterwards, make sure to click on "Save".
#### Add the Airtable "Create a Record" module
If you don't see this module, make sure to click on "Show more".
#### Connect your Airtable account, and select the correct Base and Table

#### Map the fields
Now, let's map the OnlyFans API module fields to your Airtable's table fields. Make sure to click on "Save".
If you've done it correctly, your scenario should look like this:

#### Finally, schedule and run the scenario!
You can set a schedule time, and then run it manually with the "Run once" button to see if everything works correctly.
If it does, you will see the tracking link data of all your accounts appear in your Airtable table, like so:

The transaction data of all of your connected OnlyFans accounts will now automatically be updated in Airtable.
Of course, you can further customize this scenario for a more advanced setup.