[{"_id":"/faq","title":"Frequently Asked Questions","description":"Quick answers to common OnlyFans API questions about authentication, security, rate limits, fan analytics, webhooks, and integration best practices.","url":"/faq","structured":{"contents":[{"heading":"getting-started","content":"Follow the steps at app.onlyfansapi.com/register. It takes less than 1 minute."},{"heading":"getting-started","content":"Yes! You can use our no-code integrations with Make, n8n, or Zapier. If you need hands-on help, email us at hello@onlyfansapi.com."},{"heading":"getting-started","content":"No sandbox environment is available. However, you can simply create a new account on OnlyFans.com and connect it to OnlyFans API for testing purposes."},{"heading":"getting-started","content":"All of our API endpoints can be used with any programming language. Click on any endpoint in our API Reference to view code examples in cURL, JavaScript/TypeScript, Go, Python, Java, and C#."},{"heading":"getting-started","content":"Yes, absolutely. Having your account connected to OnlyFans API doesn't affect your ability to use any other OnlyFans CRM and vice versa."},{"heading":"api-capabilities--features","content":"Yes, our API fully supports reading and sending messages. Refer to our List Chats and Send Message endpoints for more details."},{"heading":"api-capabilities--features","content":"Image generation is not natively supported at this time. However, we recommend third-party solutions like fanscreator.ai for this functionality."},{"heading":"api-capabilities--features","content":"Direct vault uploads aren't supported by OnlyFans. However, you have a few options:"},{"heading":"api-capabilities--features","content":"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."},{"heading":"api-capabilities--features","content":"If you still want to store media in the vault ahead of time, you can:"},{"heading":"api-capabilities--features","content":"Upload media using our OnlyFans CDN upload endpoint."},{"heading":"api-capabilities--features","content":"Create a post with the media, then delete it immediately - the media will remain in your vault"},{"heading":"api-capabilities--features","content":"Use our Send Message endpoint to include the media in a message, then delete the message — again, the media will stay in your vault."},{"heading":"api-capabilities--features","content":"Yes! Many customers successfully use tools like n8n and Supabase for faster development and deployment."},{"heading":"api-capabilities--features","content":"Use our Send Mass Message endpoint. Include just one user ID in the userIds array to effectively schedule a message for an individual chat. This behaves exactly like the native \"Scheduled Messages\" feature in OnlyFans."},{"heading":"api-capabilities--features","content":"Refer to our dedicated guide on setting a price for PPV content."},{"heading":"api-capabilities--features","content":"This will be available in our upcoming Advanced Endpoints feature."},{"heading":"api-capabilities--features","content":"You're likely missing the account prefix."},{"heading":"api-capabilities--features","content":"❌ Wrong: /api/fans/active"},{"heading":"api-capabilities--features","content":"✅ Correct: /api/acct_XXXXXXXX/fans/active"},{"heading":"api-capabilities--features","content":"Use our Search Profiles endpoint with the sort query parameter to list and sort creators. For more frequent data updates on individual creators, use Get Profile Details. You can also use our Create Data Export tool for bulk exports."},{"heading":"api-capabilities--features","content":"Not currently. When you add text, questions, or stickers to a story on OnlyFans, the browser actually renders those elements onto the image locally using an HTML Canvas, then uploads the composed image as a separate file."},{"heading":"api-capabilities--features","content":"To achieve this through the API, you would need to compose the image yourself before uploading. You can use image processing libraries to render text onto your image, then upload the result via our media upload endpoint:"},{"heading":"api-capabilities--features","content":"PHP — GD (built-in) or Imagick"},{"heading":"api-capabilities--features","content":"Node.js — sharp, @napi-rs/canvas, node-canvas"},{"heading":"api-capabilities--features","content":"Python — Pillow, pyvips"},{"heading":"api-capabilities--features","content":"Ruby — MiniMagick, ruby-vips"},{"heading":"api-capabilities--features","content":"Once you've composed the image with your overlays, upload it normally and use the returned ofapi_media_ ID in your story request."},{"heading":"security--safety","content":"Yes, absolutely. We have a 5-year track record with:"},{"heading":"security--safety","content":"Zero accounts banned"},{"heading":"security--safety","content":"Zero accounts red-flagged"},{"heading":"security--safety","content":"Enterprise-grade security measures"},{"heading":"security--safety","content":"No. We have a track record of zero account bans over the past 5 years, including many customers using OnlyFans API to build chatbots."},{"heading":"security--safety","content":"Your security is our priority:"},{"heading":"security--safety","content":"All passwords and cookies are hashed in our database"},{"heading":"security--safety","content":"We use OpenSSL with AES-256-CBC encryption"},{"heading":"security--safety","content":"All data is signed with MAC (Message Authentication Code)"},{"heading":"security--safety","content":"We implement robust proxy protection:"},{"heading":"security--safety","content":"Each connected account gets a dedicated IP address"},{"heading":"security--safety","content":"Public endpoints use rotating residential proxies"},{"heading":"security--safety","content":"This prevents detection and ensures account safety"},{"heading":"security--safety","content":"For more information, refer to our dedicated proxies guide."},{"heading":"security--safety","content":"No. We do not store any data from authenticated accounts on our servers. All credentials are encrypted using OpenSSL with the AES-256-CBC cipher and signed with a message authentication code (MAC) to prevent tampering."},{"heading":"security--safety","content":"When a session expires, we automatically attempt to re-login up to 3 times within a one-hour period. This ensures minimal disruption to your API usage without requiring any manual intervention."},{"heading":"api-stability--performance","content":"Our API infrastructure includes:"},{"heading":"api-stability--performance","content":"Web Application Firewall (WAF)"},{"heading":"api-stability--performance","content":"Proxy management"},{"heading":"api-stability--performance","content":"Built-in rate limiting"},{"heading":"api-stability--performance","content":"No stability issues reported to date"},{"heading":"api-stability--performance","content":"title: Please note we cannot control OnlyFans platform stability"},{"heading":"api-stability--performance","content":"Check our real-time status at: status.onlyfansapi.com"},{"heading":"api-stability--performance","content":"Website updates have minimal impact:"},{"heading":"api-stability--performance","content":"Downtime only occurs if OnlyFans itself is down"},{"heading":"api-stability--performance","content":"We typically adapt to changes within minutes"},{"heading":"api-stability--performance","content":"No extended service interruptions"},{"heading":"api-stability--performance","content":"Cache duration varies per endpoint, though most endpoints are not cached. Check our response structure guide for specific cache durations."},{"heading":"rate-limiting--best-practices","content":"Recommended approach: Implement exponential backoff"},{"heading":"rate-limiting--best-practices","content":"When you receive a 429 error, wait 1 second"},{"heading":"rate-limiting--best-practices","content":"If it happens again, double the wait time (2s → 4s → 8s)"},{"heading":"rate-limiting--best-practices","content":"Continue up to a maximum wait time"},{"heading":"rate-limiting--best-practices","content":"Use queuing systems like AWS SQS, Laravel Queues, or Ruby Sidekiq"},{"heading":"rate-limiting--best-practices","content":"title: Need more help?"},{"heading":"rate-limiting--best-practices","content":"Email us at hello@onlyfansapi.com for code examples."},{"heading":"rate-limiting--best-practices","content":"Rate limits are documented in our Rate Limits guide."},{"heading":"api-keys-management","content":"Best practice: One API key per service/integration"},{"heading":"api-keys-management","content":"Create separate keys for different features"},{"heading":"api-keys-management","content":"Assign dedicated keys to external developers"},{"heading":"api-keys-management","content":"This improves security and tracking"},{"heading":"api-keys-management","content":"No, you can create as many API keys as you want, regardless of your subscription plan."},{"heading":"api-keys-management","content":"Yes, a single API key can access all available endpoints."},{"heading":"api-keys-management","content":"No. Every API key has full access to every account you've connected to OnlyFans API, including every endpoint."},{"heading":"account-authentication--management","content":"Through our Console:"},{"heading":"account-authentication--management","content":"Go to Dashboard -> Accounts"},{"heading":"account-authentication--management","content":"Find the relevant account"},{"heading":"account-authentication--management","content":"Click on the Account ID to copy it"},{"heading":"account-authentication--management","content":"Through our API:"},{"heading":"account-authentication--management","content":"Call our List Accounts endpoint"},{"heading":"account-authentication--management","content":"The response includes the account ID in the id field"},{"heading":"account-authentication--management","content":"className: pb-"},{"heading":"account-authentication--management","content":"OnlyFans API account IDs always start with acct_"},{"heading":"account-authentication--management","content":"Always use the format: acct_XXXXXXXX"},{"heading":"account-authentication--management","content":"Include the acct_ prefix"},{"heading":"account-authentication--management","content":"Endpoint URL example: https://app.onlyfansapi.com/api/acct_abc123/chats"},{"heading":"account-authentication--management","content":"Yes! Use these endpoints for authentication:"},{"heading":"account-authentication--management","content":"Start Authentication"},{"heading":"account-authentication--management","content":"Poll Authentication Status"},{"heading":"account-authentication--management","content":"Optionally, Submit 2FA"},{"heading":"account-authentication--management","content":"title: All done?"},{"heading":"account-authentication--management","content":"type: success"},{"heading":"account-authentication--management","content":"Use our Get Current Account endpoint to retrieve the authenticated account details."},{"heading":"account-authentication--management","content":"No need to use our UI - integrate these endpoints directly with your platform."},{"heading":"account-authentication--management","content":"Yes! Use our Start Authentication endpoint. We also have an authentication library available on NPM — see our Login with OnlyFans documentation."},{"heading":"account-authentication--management","content":"Follow the \"Option 2: By providing cURL request\" step in our connect OnlyFans account guide."},{"heading":"account-authentication--management","content":"It is currently not possible to retrieve the user agent that OnlyFans API uses to make requests."},{"heading":"account-authentication--management","content":"Unfortunately, no — not without risking a red-flag from OnlyFans. Our authentication process is already optimized to be as fast as possible while maintaining safety."},{"heading":"account-authentication--management","content":"The experience is nearly identical to OnlyFans' native process:"},{"heading":"account-authentication--management","content":"The QR code that the model normally scans during OF login will appear in our dashboard and via email (sent to both the OnlyFans API user and the model)"},{"heading":"account-authentication--management","content":"After scanning the code and completing the selfie check, the account will be authenticated"},{"heading":"account-authentication--management","content":"You're probably adding the account again instead of re-connecting it. Use the Re-authenticate Account endpoint instead of Start Authentication."},{"heading":"account-authentication--management","content":"Yes! Use our List Accounts endpoint."},{"heading":"account-authentication--management","content":"You can retrieve this through:"},{"heading":"account-authentication--management","content":"The Get Current Account endpoint under subscribersCount"},{"heading":"account-authentication--management","content":"Or the List User Lists endpoint under fans.usersCount"},{"heading":"account-authentication--management","content":"The \"top X percentage of all creators\" value can be retrieved through:"},{"heading":"account-authentication--management","content":"Get Top Percentage endpoint"},{"heading":"account-authentication--management","content":"Or Get Current Account under performerTop"},{"heading":"account-authentication--management","content":"Go to our dashboard at app.onlyfansapi.com and click on \"Invite & manage members\" in the sidebar."},{"heading":"fan-data--analytics","content":"This is normal behavior:"},{"heading":"fan-data--analytics","content":"Chat lists return immediately"},{"heading":"fan-data--analytics","content":"Fan details are scraped in the background (usually takes 2-3 seconds)"},{"heading":"fan-data--analytics","content":"title: Solution:"},{"heading":"fan-data--analytics","content":"type: success"},{"heading":"fan-data--analytics","content":"Either call our Get User Details endpoint, or retry the original endpoint after 10 seconds."},{"heading":"fan-data--analytics","content":"Use the lastSeen field from our Get Profile Details or Get User Details endpoints. If the lastSeen value is recent, the fan is likely online."},{"heading":"fan-data--analytics","content":"title: Response may be cached, so data might be slightly outdated."},{"heading":"fan-data--analytics","content":"-> Read more about caching"},{"heading":"fan-data--analytics","content":"There's two options available:"},{"heading":"fan-data--analytics","content":"Calculate manually: Use subscribedOnData.subscribeAt on endpoints like List Active Fans or Get User Details."},{"heading":"fan-data--analytics","content":"Human-readable format: Use subscribedOnData.duration (e.g., \"3 months\")"},{"heading":"fan-data--analytics","content":"Access comprehensive spending data through these fields:"},{"heading":"fan-data--analytics","content":"Field"},{"heading":"fan-data--analytics","content":"Description"},{"heading":"fan-data--analytics","content":"totalSumm"},{"heading":"fan-data--analytics","content":"Combined total of all spending"},{"heading":"fan-data--analytics","content":"subscribesSumm"},{"heading":"fan-data--analytics","content":"Total spent on subscriptions"},{"heading":"fan-data--analytics","content":"tipsSumm"},{"heading":"fan-data--analytics","content":"Total spent on tips"},{"heading":"fan-data--analytics","content":"messagesSumm"},{"heading":"fan-data--analytics","content":"Total spent on paid messages"},{"heading":"fan-data--analytics","content":"postsSumm"},{"heading":"fan-data--analytics","content":"Total spent on paid posts"},{"heading":"fan-data--analytics","content":"streamsSumm"},{"heading":"fan-data--analytics","content":"Total spent on streams"},{"heading":"fan-data--analytics","content":"title: Useful endpoints:"},{"heading":"fan-data--analytics","content":"Get User Details"},{"heading":"fan-data--analytics","content":"List Active Fans"},{"heading":"fan-data--analytics","content":"Filter by fan spendings in our List Active Fans, List All Fans, and List Expired Fans endpoints by adding filter.total_spent to the query parameters. You can even filter by minimum tips."},{"heading":"fan-data--analytics","content":"Use our Search Profiles endpoint with the sort query parameter set to subscribers."},{"heading":"fan-data--analytics","content":"Retrieve it through the List User Lists endpoint under following.usersCount."},{"heading":"fan-data--analytics","content":"Use the Get User List endpoint with rebill_on as the {userListId}."},{"heading":"fan-data--analytics","content":"Call the List User Lists endpoint and calculate the difference between rebill_on.usersCount and rebill_off.usersCount."},{"heading":"fan-data--analytics","content":"Use our Set Fan's Custom Name endpoint."},{"heading":"fan-data--analytics","content":"Sadly, OnlyFans doesn't store language preferences. Workaround:"},{"heading":"fan-data--analytics","content":"Fetch chat messages from the fan"},{"heading":"fan-data--analytics","content":"Use a third-party language detection API"},{"heading":"fan-data--analytics","content":"Store the detected language in your database"},{"heading":"fan-data--analytics","content":"No direct endpoint exists, but you can:"},{"heading":"fan-data--analytics","content":"Retrieve chat messages using the List ChatMessage endpoint"},{"heading":"fan-data--analytics","content":"Check if isOpened = true AND price > 0, which indicates a purchased PPV"},{"heading":"fan-data--analytics","content":"Yes. Any data that you can retrieve through our API endpoints, you can programmatically scrape."},{"heading":"fan-data--analytics","content":"data.fan.id is the OnlyFans User ID of the fan, which you can also use to get the chat's messages in the List Chat Messages endpoint."},{"heading":"fan-data--analytics","content":"Use our List Chats endpoint, where data.fan.id is the chat_id you need for the List Chat Messages endpoint."},{"heading":"fan-data--analytics","content":"Currently, OnlyFans API doesn't support removing multiple users from a list in a single request. You have two options:"},{"heading":"fan-data--analytics","content":"Clear the entire list using Clear User List"},{"heading":"fan-data--analytics","content":"Send one DELETE request per user via Remove User from a User List"},{"heading":"fan-data--analytics","content":"Use the isNew field from the List Chat Messages endpoint:"},{"heading":"fan-data--analytics","content":"isNew: true — the message has not been seen yet"},{"heading":"fan-data--analytics","content":"isNew: false — the fan has read the message"},{"heading":"fan-data--analytics","content":"A real-time read-receipt webhook is not available, as OnlyFans does not expose message-read events in real time. Polling the isNew field is the recommended workaround."},{"heading":"webhooks--media-handling","content":"📚 Documentation: docs.onlyfansapi.com/webhooks"},{"heading":"webhooks--media-handling","content":"🎥 Video Demo: cap.so/s/p2wfkj072yt2x96"},{"heading":"webhooks--media-handling","content":"When \"isReady\": false, the media is still processing."},{"heading":"webhooks--media-handling","content":"Solution:"},{"heading":"webhooks--media-handling","content":"Get the chat ID from the webhook"},{"heading":"webhooks--media-handling","content":"Poll the List ChatMessage endpoint every 10-20 seconds"},{"heading":"webhooks--media-handling","content":"Wait for \"isReady\": true"},{"heading":"webhooks--media-handling","content":"The URL will then be available"},{"heading":"webhooks--media-handling","content":"Alternatively: Download and store vault content internally for reverse searching by media ID, once the media is ready."},{"heading":"webhooks--media-handling","content":"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."},{"heading":"webhooks--media-handling","content":"title: Want to get started in no time?"},{"heading":"webhooks--media-handling","content":"We have most webhook events available as Make and Zapier modules, which you can find in our Make and Zapier directories."},{"heading":"webhooks--media-handling","content":"Click on the webhook in your dashboard. It will take you to a details page where you can view all events that have recently been sent to your webhook URL."},{"heading":"webhooks--media-handling","content":"No. Here's how OnlyFans handles typing indicators:"},{"heading":"webhooks--media-handling","content":"When users.typing is received, OnlyFans shows a typing indicator for exactly 5 seconds"},{"heading":"webhooks--media-handling","content":"If a user continues typing, consecutive users.typing events are sent every ~3 seconds, resetting the timer"},{"heading":"webhooks--media-handling","content":"If no new users.typing event is received after 5 seconds, the indicator is hidden"},{"heading":"webhooks--media-handling","content":"If a messages.received event is received while the indicator is active, it is hidden"},{"heading":"webhooks--media-handling","content":"You can replicate this logic in your own UI. You may need to adjust the timing slightly due to webhook delivery delays."},{"heading":"webhooks--media-handling","content":"We use at-least-once delivery semantics for webhooks. If your server doesn't respond within 15 seconds, the event will be retried up to 5 times with exponential backoff."},{"heading":"webhooks--media-handling","content":"Best practices:"},{"heading":"webhooks--media-handling","content":"Return a 2xx status code as quickly as possible, then handle logic asynchronously"},{"heading":"webhooks--media-handling","content":"Implement idempotency by deduplicating events based on their unique event_id"},{"heading":"webhooks--media-handling","content":"Check the \"Attempts\" column in the dashboard to confirm if retries are occurring"},{"heading":"webhooks--media-handling","content":"OnlyFans uses the term \"follow\" when a user subscribes to a free account. There is no separate \"follow\" action — it's the same as subscribing, just with a $0 price.\nTo get notified about new followers, use the subscriptions webhooks (e.g. subscriptions.new). These fire for both paid and free subscriptions."},{"heading":"webhooks--media-handling","content":"No. OnlyFans does not expose message-read events in real time — even their own UI only updates read indicators on page refresh, not via websockets."},{"heading":"webhooks--media-handling","content":"Workaround: Poll the isNew field on the List Chat Messages endpoint. When isNew changes from true to false, the fan has read the message."},{"heading":"media--downloads","content":"cdn*.onlyfans.com URLs cannot be accessed directly due to OnlyFans' security — they are tied to specific IPs (in this case, our proxy IP). Use our Download Media from the OnlyFans CDN endpoint to successfully download media files."},{"heading":"media--downloads","content":"When a 403 occurs:"},{"heading":"media--downloads","content":"Call the endpoint again that you retrieved the cdn*.onlyfans.com URL from"},{"heading":"media--downloads","content":"Call the download endpoint again with the newly retrieved CDN URL"},{"heading":"media--downloads","content":"Important checks:"},{"heading":"media--downloads","content":"Always use the same Account ID for both retrieving and downloading. For example, if you got the URL from /api/acct_ABC123/chats/123/messages, you must use acct_ABC123 in your download request"},{"heading":"media--downloads","content":"Use the CDN URL immediately — don't wait longer than 1 minute, as CDN URLs expire quickly"},{"heading":"media--downloads","content":"No distinction between public vs. premium or owned vs. subscribed content. The only limitation is that the authenticated account must have access to view the media file on OnlyFans."},{"heading":"media--downloads","content":"No. Any account type can download media as long as the authenticated account has access to view the media file."},{"heading":"media--downloads","content":"This happens when convertedToVideo is set to false. The file is still being converted. Once the conversion completes and the status changes to true, you'll be able to download the video successfully."},{"heading":"media--downloads","content":"You can only view content that is accessible to the connected account — either your own content (if it's a creator account) or content from creators the account is subscribed to."},{"heading":"media--downloads","content":"TL;DR: Through our API, you can view all content you can also see when logging into onlyfans.com. Our API does not bypass any subscription or PPV pricing."},{"heading":"tracking--free-trial-links","content":"Yes! In our dashboard at app.onlyfansapi.com, click on \"Trial & Tracking Links\" in the sidebar. You'll see an overview with clicks, subscribers, revenue, spender count, ARPS, creation date, and expiration date."},{"heading":"tracking--free-trial-links","content":"You can also create links and generate shareable URLs with optional revenue visibility."},{"heading":"tracking--free-trial-links","content":"For calculation logic details, see our Free Trial Links documentation."},{"heading":"tracking--free-trial-links","content":"No limits! We've created hundreds to thousands of links per day via our API with no restrictions:"},{"heading":"tracking--free-trial-links","content":"🎁 Free Trials: No limit per day"},{"heading":"tracking--free-trial-links","content":"🔗 Tracking Links: No limit per day"},{"heading":"tracking--free-trial-links","content":"Different services calculate tracking and free trial link revenue differently, since OnlyFans doesn't provide this data natively. Some discrepancies between tools (e.g., Infloww, FansMetrics) are expected and normal."},{"heading":"tracking--free-trial-links","content":"We are continuously improving our calculation logic to be as accurate as possible."},{"heading":"api-troubleshooting","content":"A 401 error indicates an authorization problem — usually an invalid API key. Verify that:"},{"heading":"api-troubleshooting","content":"Your API key is correct"},{"heading":"api-troubleshooting","content":"The authorization header is set up correctly in your request"},{"heading":"api-troubleshooting","content":"Check your API key status at app.onlyfansapi.com/api-keys."},{"heading":"api-troubleshooting","content":"You're using the wrong HTTP method. Check our API Reference to see which HTTP method (GET, POST, DELETE, etc.) is required for the endpoint."},{"heading":"api-troubleshooting","content":"The API URL doesn't exist. This usually means:"},{"heading":"api-troubleshooting","content":"You're missing the account prefix (use /api/acct_XXXXXXXX/...)"},{"heading":"api-troubleshooting","content":"The endpoint URL is incorrect"},{"heading":"api-troubleshooting","content":"Check our API Reference for valid endpoint URLs."},{"heading":"api-troubleshooting","content":"Double-check that the URL has the correct parameters and there are no network issues on your side."},{"heading":"api-troubleshooting","content":"In our dashboard, click on \"Logs\" in the sidebar to see an overview of all requests and any errors. Click on a specific request to view the full details and response."},{"heading":"api-troubleshooting","content":"A 400 Bad Request with the message \"Input contains restricted words\" is an error returned by OnlyFans itself — not by our API. It means your message contains words that OnlyFans has blocked."},{"heading":"api-troubleshooting","content":"Review your message content and remove or rephrase any terms that may be flagged. The error response includes a textHighLight field showing which part of your message triggered the restriction."},{"heading":"billing--subscriptions","content":"All of our subscription plans, account pricing, and credit pricing are explained at onlyfansapi.com/pricing."},{"heading":"billing--subscriptions","content":"For as long as you want, until you've consumed all of your 10 free credits. Afterwards, you'll need to subscribe to a plan."},{"heading":"billing--subscriptions","content":"Pricing depends on your needs — the more accounts or credits you need, the better our pricing. Schedule a call at cal.com/onlyfansapi/15min."},{"heading":"billing--subscriptions","content":"We offer dynamic pricing for additional accounts, explained at onlyfansapi.com/pricing. You can also pre-purchase account seats."},{"heading":"billing--subscriptions","content":"View and change your current plan at app.onlyfansapi.com/billing."},{"heading":"billing--subscriptions","content":"You currently cannot pause your subscription. To cancel, go to app.onlyfansapi.com/billing."},{"heading":"documentation--resources","content":"Yes! Our OpenAPI schema is available at app.onlyfansapi.com/scribe-docs/openapi.yaml."},{"heading":"documentation--resources","content":"No. Please refer to our API Reference for a complete list of available endpoints."},{"heading":"documentation--resources","content":"Yes! Visit docs.onlyfansapi.com/llms.txt for the canonical AI-friendly version of our documentation. We also keep docs.onlyfansapi.com/llms-full.txt for backward compatibility."}],"headings":[{"id":"getting-started","content":"Getting Started"},{"id":"api-capabilities--features","content":"API Capabilities & Features"},{"id":"security--safety","content":"Security & Safety"},{"id":"api-stability--performance","content":"API Stability & Performance"},{"id":"rate-limiting--best-practices","content":"Rate Limiting & Best Practices"},{"id":"api-keys-management","content":"API Keys Management"},{"id":"account-authentication--management","content":"Account Authentication & Management"},{"id":"fan-data--analytics","content":"Fan Data & Analytics"},{"id":"webhooks--media-handling","content":"Webhooks & Media Handling"},{"id":"media--downloads","content":"Media & Downloads"},{"id":"tracking--free-trial-links","content":"Tracking & Free Trial Links"},{"id":"api-troubleshooting","content":"API Troubleshooting"},{"id":"billing--subscriptions","content":"Billing & Subscriptions"},{"id":"documentation--resources","content":"Documentation & Resources"}]}},{"_id":"/api-reference","title":"API Reference","description":"Browse our OnlyFans and Fansly API endpoints and data structures","url":"/api-reference","structured":{"contents":[{"heading":"pick-your-platform","content":"We currently offer two API surfaces. Choose the one you're building against to explore its endpoints."},{"heading":"pick-your-platform","content":"Our most popular API with 350+ endpoints covering messaging, fans, media, payouts, posts, and more."},{"heading":"pick-your-platform","content":"Our brand-new Fansly API, currently in closed beta with a public launch coming soon."}],"headings":[{"id":"pick-your-platform","content":"Pick your platform"}]},"tag":"onlyfans"},{"_id":"/data-exports","title":"Data Exports","description":"Our data exports offer full historic data of transactions, chat messages, media, and much more.","url":"/data-exports","structured":{"contents":[{"heading":"getting-started","content":"You can create and manage data exports in two ways:"},{"heading":"getting-started","content":"Dashboard: Visit the Data Exports page on our Console for a no-code interface"},{"heading":"getting-started","content":"API: Use our Data Exports API endpoints to programmatically create and manage exports"},{"heading":"starting-an-export-via-dashboard","content":"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:"},{"heading":"data-type","content":"As the first step, select the type of data you want to export. Please refer to the list above for available export types."},{"heading":"export-fields","content":"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."},{"heading":"accounts","content":"Choose which accounts you want to include in your export. You can select all connected accounts, or select specific accounts."},{"heading":"date-range","content":"Select the data range that you wish to be included in your export."},{"heading":"view-the-export-cost","content":"For some Data Export types, it is not possible to calculate the cost upfront. If this is the case, it will be calculated once the export is completed. For other Data Export types, you will see the cost of the export here."},{"heading":"select-the-export-file-type","content":"Click on \"Export Data\", and choose either CSV or Excel (XSLX). This will start the export!"},{"heading":"select-the-export-file-type","content":"title: That's it!"},{"heading":"select-the-export-file-type","content":"type: success"},{"heading":"select-the-export-file-type","content":"Your data export will now be processed by our servers in the background, and you will be able to download it once completed."},{"heading":"using-the-api","content":"Data exports can be created and managed either through our Dashboard or programmatically using our API endpoints. The API provides full control over the export lifecycle, allowing you to automate data exports and integrate them into your workflows."},{"heading":"export-workflow","content":"The data export process follows a two-step workflow:"},{"heading":"create-data-export","content":"Use the Create Data Export endpoint to create a new export request. This endpoint will calculate the required credits based on your selected parameters (data type, fields, accounts, and date range) and prepare the export for processing."},{"heading":"start-data-export","content":"Once the export has been created and credit calculation is complete, use the Start Data Export endpoint to begin processing. This will charge the calculated credits and start the actual export process."},{"heading":"monitoring-exports","content":"You can monitor the status and progress of your exports using the following endpoints:"},{"heading":"monitoring-exports","content":"List Data Exports - Get a paginated list of all data exports for your team"},{"heading":"monitoring-exports","content":"Get Data Export Status - Check the current status, progress, and download URL for a specific export"},{"heading":"monitoring-exports","content":"Once an export is completed, you can download the file using the download URL provided in the export status response."},{"heading":"big-data-exports","content":"Depending on the chosen date range and account size, your export might take several hours to complete if you're exporting a large amount of data. You can safely close the browser window, and return to the Data Exports page later to check the status of your export."},{"heading":"understanding-export-progress--row-counts","content":"When you create an export, we first scan OnlyFans to find every record that matches your selection, then write those records to the export file. The status endpoints — Get Data Export Status and List Data Exports — and the dashboard surface a few fields that describe this progress:"},{"heading":"understanding-export-progress--row-counts","content":"Field"},{"heading":"understanding-export-progress--row-counts","content":"Dashboard label"},{"heading":"understanding-export-progress--row-counts","content":"What it means"},{"heading":"understanding-export-progress--row-counts","content":"total_rows"},{"heading":"understanding-export-progress--row-counts","content":"Total Rows"},{"heading":"understanding-export-progress--row-counts","content":"The number of matching records found for your export during scanning. Your credit cost is based on this number. For most export types every found row is written to the file, so total_rows equals the number of rows in the delivered file."},{"heading":"understanding-export-progress--row-counts","content":"rows_processed"},{"heading":"understanding-export-progress--row-counts","content":"—"},{"heading":"understanding-export-progress--row-counts","content":"The number of rows actually written to the export file — i.e. the delivered count."},{"heading":"understanding-export-progress--row-counts","content":"failed_downloads"},{"heading":"understanding-export-progress--row-counts","content":"—"},{"heading":"understanding-export-progress--row-counts","content":"Media exports only. The number of media files that could not be downloaded (failed_downloads = total_rows − rows_processed). It is 0 for every other export type."},{"heading":"understanding-export-progress--row-counts","content":"type: info"},{"heading":"understanding-export-progress--row-counts","content":"title: Why a media export can show more “rows” than files delivered"},{"heading":"understanding-export-progress--row-counts","content":"For media exports, each \"row\" is an individual file that has to be downloaded from OnlyFans and added to the ZIP. Unlike CSV or Excel exports — where every found row is always written to the file — a media file download can occasionally fail at the moment it runs (for example, a temporary access error)."},{"heading":"understanding-export-progress--row-counts","content":"We automatically retry failed downloads, but a few may still not succeed within a single export run. This means a completed media export can legitimately contain fewer files than its Total Rows. The dashboard reflects this by showing, for example, \"48 of 50 media downloaded\" and, when any files failed, a \"Completed with N failed\" status instead of a plain success — so the numbers always reconcile:"},{"heading":"understanding-export-progress--row-counts","content":"total_rows (found) = rows_processed (delivered) + failed_downloads"},{"heading":"understanding-export-progress--row-counts","content":"If some files failed, simply re-run the export to attempt the remaining files again. These failures are usually transient and succeed on a later run."},{"heading":"understanding-export-progress--row-counts","content":"type: info"},{"heading":"understanding-export-progress--row-counts","content":"title: Other export types always match"},{"heading":"understanding-export-progress--row-counts","content":"This rows-vs-delivered distinction only applies to media exports. For transactions, chat messages, payouts, and every other export type, each found row is always written to the file — so total_rows and rows_processed are always equal."},{"heading":"understanding-export-progress--row-counts","content":"type: warn"},{"heading":"understanding-export-progress--row-counts","content":"title: DRM-protected videos can't be exported"},{"heading":"understanding-export-progress--row-counts","content":"Media Vault exports of videos will fail to download when DRM is enabled for them in OnlyFans. DRM-protected video files are encrypted and cannot be retrieved, so they will be counted as failed_downloads rather than written to the export file. Photos and other non-DRM media are unaffected."},{"heading":"available-export-fields","content":"Transactions"},{"heading":"available-export-fields","content":"Chat Messages"},{"heading":"available-export-fields","content":"Trial Links"},{"heading":"available-export-fields","content":"Tracking Links"},{"heading":"available-export-fields","content":"Payouts"},{"heading":"available-export-fields","content":"Chargebacks"},{"heading":"available-export-fields","content":"Public Profiles"},{"heading":"available-export-fields","content":"Media"},{"heading":"available-export-fields","content":"Fans"},{"heading":"available-export-fields","content":"Followings"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"Account ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"ZIP of every media vault file (photo, video, audio)"},{"heading":"available-export-fields","content":"ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Account Name"},{"heading":"available-export-fields","content":"Username"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Account Username"},{"heading":"available-export-fields","content":"Name"},{"heading":"available-export-fields","content":"Username"},{"heading":"available-export-fields","content":"Name"},{"heading":"available-export-fields","content":"Transaction ID"},{"heading":"available-export-fields","content":"Fan ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"OnlyFans ID"},{"heading":"available-export-fields","content":"About"},{"heading":"available-export-fields","content":"Name"},{"heading":"available-export-fields","content":"Avatar"},{"heading":"available-export-fields","content":"Type"},{"heading":"available-export-fields","content":"Fan Username"},{"heading":"available-export-fields","content":"Name"},{"heading":"available-export-fields","content":"Campaign Code"},{"heading":"available-export-fields","content":"Amount"},{"heading":"available-export-fields","content":"Payment Type"},{"heading":"available-export-fields","content":"Location"},{"heading":"available-export-fields","content":"Display Name"},{"heading":"available-export-fields","content":"Is Performer"},{"heading":"available-export-fields","content":"Fan ID"},{"heading":"available-export-fields","content":"Fan Name"},{"heading":"available-export-fields","content":"URL"},{"heading":"available-export-fields","content":"Campaign Name"},{"heading":"available-export-fields","content":"Currency"},{"heading":"available-export-fields","content":"Fan ID"},{"heading":"available-export-fields","content":"Website"},{"heading":"available-export-fields","content":"Avatar"},{"heading":"available-export-fields","content":"Is Verified"},{"heading":"available-export-fields","content":"Fan Username"},{"heading":"available-export-fields","content":"Chat ID"},{"heading":"available-export-fields","content":"Claim Counts"},{"heading":"available-export-fields","content":"OnlyFans URL"},{"heading":"available-export-fields","content":"State"},{"heading":"available-export-fields","content":"Fan Username"},{"heading":"available-export-fields","content":"Subscribe Price"},{"heading":"available-export-fields","content":"Location"},{"heading":"available-export-fields","content":"Is Real Performer"},{"heading":"available-export-fields","content":"Fan Name"},{"heading":"available-export-fields","content":"Message ID"},{"heading":"available-export-fields","content":"Clicks Counts"},{"heading":"available-export-fields","content":"Count Subscribers"},{"heading":"available-export-fields","content":"Reject Reason"},{"heading":"available-export-fields","content":"Fan Name"},{"heading":"available-export-fields","content":"Min Subscribe Price"},{"heading":"available-export-fields","content":"Is Performer"},{"heading":"available-export-fields","content":"Subscribe Price"},{"heading":"available-export-fields","content":"Amount"},{"heading":"available-export-fields","content":"Message Text"},{"heading":"available-export-fields","content":"Subscribe Counts"},{"heading":"available-export-fields","content":"Count Transitions"},{"heading":"available-export-fields","content":"OnlyFans Created At"},{"heading":"available-export-fields","content":"Amount"},{"heading":"available-export-fields","content":"Posts Count"},{"heading":"available-export-fields","content":"Is Verified"},{"heading":"available-export-fields","content":"Subscription Price"},{"heading":"available-export-fields","content":"VAT Amount"},{"heading":"available-export-fields","content":"Price"},{"heading":"available-export-fields","content":"Subscribe Days"},{"heading":"available-export-fields","content":"Revenue"},{"heading":"available-export-fields","content":"VAT Amount"},{"heading":"available-export-fields","content":"Photos Count"},{"heading":"available-export-fields","content":"Can Add Subscriber"},{"heading":"available-export-fields","content":"Subscription Autoprolong"},{"heading":"available-export-fields","content":"Tax Amount"},{"heading":"available-export-fields","content":"Tip Amount"},{"heading":"available-export-fields","content":"Is Finished"},{"heading":"available-export-fields","content":"Revenue Per Subscriber"},{"heading":"available-export-fields","content":"Tax Amount"},{"heading":"available-export-fields","content":"Videos Count"},{"heading":"available-export-fields","content":"Can Chat"},{"heading":"available-export-fields","content":"Subscription Is Muted"},{"heading":"available-export-fields","content":"Net Amount"},{"heading":"available-export-fields","content":"Is Free"},{"heading":"available-export-fields","content":"Revenue"},{"heading":"available-export-fields","content":"Revenue Per Click"},{"heading":"available-export-fields","content":"Media Tax Amount"},{"heading":"available-export-fields","content":"Audios Count"},{"heading":"available-export-fields","content":"Subscribe Price"},{"heading":"available-export-fields","content":"Show Posts In Feed"},{"heading":"available-export-fields","content":"Fee Amount"},{"heading":"available-export-fields","content":"Is Tip"},{"heading":"available-export-fields","content":"Revenue Per Subscriber"},{"heading":"available-export-fields","content":"OnlyFans Created At"},{"heading":"available-export-fields","content":"Net Amount"},{"heading":"available-export-fields","content":"Favorites Count"},{"heading":"available-export-fields","content":"Total Summ"},{"heading":"available-export-fields","content":"Has Active Paid Subscriptions"},{"heading":"available-export-fields","content":"Currency"},{"heading":"available-export-fields","content":"Sent by (creator or fan)"},{"heading":"available-export-fields","content":"OnlyFans Created At"},{"heading":"available-export-fields","content":"OnlyFans End Date"},{"heading":"available-export-fields","content":"Fee Amount"},{"heading":"available-export-fields","content":"Favorited Count"},{"heading":"available-export-fields","content":"Messages Summ"},{"heading":"available-export-fields","content":"Subscription Status"},{"heading":"available-export-fields","content":"Description"},{"heading":"available-export-fields","content":"Is Opened"},{"heading":"available-export-fields","content":"OnlyFans Expired At"},{"heading":"available-export-fields","content":"Currency"},{"heading":"available-export-fields","content":"Subscribers Count"},{"heading":"available-export-fields","content":"Subscribes Summ"},{"heading":"available-export-fields","content":"Subscribe At"},{"heading":"available-export-fields","content":"Status"},{"heading":"available-export-fields","content":"Media Count"},{"heading":"available-export-fields","content":"Tags (comma separated)"},{"heading":"available-export-fields","content":"Tags (comma separated)"},{"heading":"available-export-fields","content":"Description"},{"heading":"available-export-fields","content":"Is Verified"},{"heading":"available-export-fields","content":"Posts Summ"},{"heading":"available-export-fields","content":"Expired At"},{"heading":"available-export-fields","content":"Created At"},{"heading":"available-export-fields","content":"OnlyFans Created At"},{"heading":"available-export-fields","content":"Status"},{"heading":"available-export-fields","content":"Is Performer"},{"heading":"available-export-fields","content":"Tips Summ"},{"heading":"available-export-fields","content":"Renewed At"},{"heading":"available-export-fields","content":"Payment Created At"},{"heading":"available-export-fields","content":"Is Real Performer"},{"heading":"available-export-fields","content":"Streams Summ"},{"heading":"available-export-fields","content":"Last Seen At"},{"heading":"available-export-fields","content":"OnlyFans Created At"},{"heading":"available-export-fields","content":"Avatar URL"},{"heading":"available-export-fields","content":"Rebill On"},{"heading":"available-export-fields","content":"Regular Price"},{"heading":"available-export-fields","content":"Header URL"},{"heading":"available-export-fields","content":"Subscribe At"},{"heading":"available-export-fields","content":"Discount Percent"},{"heading":"available-export-fields","content":"Instagram"},{"heading":"available-export-fields","content":"Expired At"},{"heading":"available-export-fields","content":"Duration"},{"heading":"available-export-fields","content":"Twitter"},{"heading":"available-export-fields","content":"Renewed At"},{"heading":"available-export-fields","content":"Can Receive Chat Message"},{"heading":"available-export-fields","content":"TikTok"},{"heading":"available-export-fields","content":"Is Blocked"},{"heading":"available-export-fields","content":"Facebook"},{"heading":"available-export-fields","content":"Can Unsubscribe"},{"heading":"available-export-fields","content":"Gender"},{"heading":"available-export-fields","content":"Tips Enabled"},{"heading":"available-export-fields","content":"Gender Confidence"},{"heading":"available-export-fields","content":"Join Date"},{"heading":"available-export-fields","content":"Last Seen At"},{"heading":"pricing","content":"The following pricing applies to our data exports:"},{"heading":"pricing","content":"Export type"},{"heading":"pricing","content":"Cost"},{"heading":"pricing","content":"Transactions"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Chat Messages"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Media"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Trial Links"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Tracking Links"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Payouts"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Chargebacks"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Public Profiles"},{"heading":"pricing","content":"3 credits per profile"},{"heading":"pricing","content":"Fans"},{"heading":"pricing","content":"1 credit per 20 results"},{"heading":"pricing","content":"Followings"},{"heading":"pricing","content":"1 credit per 20 results"}],"headings":[{"id":"available-data-export-types","content":"Available data export types"},{"id":"getting-started","content":"Getting started"},{"id":"starting-an-export-via-dashboard","content":"Starting an export via Dashboard"},{"id":"data-type","content":"Data type"},{"id":"export-fields","content":"Export fields"},{"id":"accounts","content":"Accounts"},{"id":"date-range","content":"Date range"},{"id":"view-the-export-cost","content":"View the export cost"},{"id":"select-the-export-file-type","content":"Select the export file type"},{"id":"using-the-api","content":"Using the API"},{"id":"export-workflow","content":"Export workflow"},{"id":"create-data-export","content":"Create Data Export"},{"id":"start-data-export","content":"Start Data Export"},{"id":"monitoring-exports","content":"Monitoring exports"},{"id":"big-data-exports","content":"Big data exports"},{"id":"understanding-export-progress--row-counts","content":"Understanding export progress & row counts"},{"id":"available-export-fields","content":"Available export fields"},{"id":"pricing","content":"Pricing"}]}},{"_id":"/data-exports/use-cases","title":"Use Cases","description":"Discover powerful ways to leverage data exports for automation, analytics, AI training, and more.","url":"/data-exports/use-cases","structured":{"contents":[{"content":"Data exports unlock the full potential of your OnlyFans data. Whether you're building automations, training AI models, or migrating to new systems, our comprehensive export tools give you complete control over your data."},{"heading":"download-media-and-chats-for-llm-and-lora-training","content":"title: Perfect for"},{"heading":"download-media-and-chats-for-llm-and-lora-training","content":"type: info"},{"heading":"download-media-and-chats-for-llm-and-lora-training","content":"AI developers, chatbot builders, and content personalization tools"},{"heading":"download-media-and-chats-for-llm-and-lora-training","content":"Training AI models to mimic a creator's voice, style, or persona? Our Media and Chat Messages exports provide the raw data you need for LLM fine-tuning and LoRA training."},{"heading":"media-exports-for-visual-ai","content":"Export your entire Media Vault as a ZIP file containing:"},{"heading":"media-exports-for-visual-ai","content":"All photos (full resolution)"},{"heading":"media-exports-for-visual-ai","content":"All videos (original quality)"},{"heading":"media-exports-for-visual-ai","content":"All audio files"},{"heading":"media-exports-for-visual-ai","content":"This is invaluable for training:"},{"heading":"media-exports-for-visual-ai","content":"LoRA models for Stable Diffusion and similar image generators"},{"heading":"media-exports-for-visual-ai","content":"Content classifiers and moderation systems"},{"heading":"media-exports-for-visual-ai","content":"Style transfer and editing tools"},{"heading":"chat-exports-for-language-models","content":"The Chat Messages export includes:"},{"heading":"chat-exports-for-language-models","content":"Complete message history"},{"heading":"chat-exports-for-language-models","content":"Message text and timestamps"},{"heading":"chat-exports-for-language-models","content":"Fan context (ID, username, name)"},{"heading":"chat-exports-for-language-models","content":"Tip and pricing data"},{"heading":"chat-exports-for-language-models","content":"Media attachment counts"},{"heading":"chat-exports-for-language-models","content":"Use this data to:"},{"heading":"chat-exports-for-language-models","content":"Fine-tune LLMs on a creator's communication style"},{"heading":"chat-exports-for-language-models","content":"Build AI chatbots that authentically represent creator personalities"},{"heading":"chat-exports-for-language-models","content":"Analyze conversation patterns for engagement optimization"},{"heading":"chat-exports-for-language-models","content":"Train response suggestion systems"},{"heading":"export-financial-data-for-analytics-and-automation","content":"title: Perfect for"},{"heading":"export-financial-data-for-analytics-and-automation","content":"type: info"},{"heading":"export-financial-data-for-analytics-and-automation","content":"Accountants, agencies managing multiple creators, and analytics platforms"},{"heading":"export-financial-data-for-analytics-and-automation","content":"Need to sync your OnlyFans financial data with external tools? Export Transactions, Payouts, and Chargebacks to power your analytics dashboards and automation workflows."},{"heading":"available-financial-exports","content":"Export Type"},{"heading":"available-financial-exports","content":"Key Fields"},{"heading":"available-financial-exports","content":"Transactions"},{"heading":"available-financial-exports","content":"Amount, VAT, tax, net, fee, currency, type, status, fan details"},{"heading":"available-financial-exports","content":"Payouts"},{"heading":"available-financial-exports","content":"Amount, currency, state, reject reason, timestamps"},{"heading":"available-financial-exports","content":"Chargebacks"},{"heading":"available-financial-exports","content":"Amount, payment type, status, fan info, media tax breakdown"},{"heading":"power-your-automation-stack","content":"Integrate data exports with tools like n8n, Zapier, or Make to build powerful financial workflows:"},{"heading":"example-n8n-revenue-sync-workflow","content":"Schedule trigger — Run weekly or monthly"},{"heading":"example-n8n-revenue-sync-workflow","content":"API call — Create and start a Transactions export"},{"heading":"example-n8n-revenue-sync-workflow","content":"Wait for completion — Poll export status"},{"heading":"example-n8n-revenue-sync-workflow","content":"Download CSV — Fetch the completed export"},{"heading":"example-n8n-revenue-sync-workflow","content":"Parse data — Transform for your target system"},{"heading":"example-n8n-revenue-sync-workflow","content":"Update database — Sync to Airtable, Google Sheets, or your data warehouse"},{"heading":"example-n8n-revenue-sync-workflow","content":"Trigger alerts — Notify on anomalies (chargebacks, revenue drops)"},{"heading":"example-n8n-revenue-sync-workflow","content":"title: Backfill historical data"},{"heading":"example-n8n-revenue-sync-workflow","content":"type: success"},{"heading":"example-n8n-revenue-sync-workflow","content":"Starting fresh with a new analytics tool? Export your entire transaction history to backfill your database with years of financial data in minutes."},{"heading":"real-world-applications","content":"Revenue dashboards: Sync to Metabase, Tableau, or custom BI tools"},{"heading":"real-world-applications","content":"Tax preparation: Export all transactions for your accountant"},{"heading":"real-world-applications","content":"Chargeback monitoring: Track and analyze disputed payments"},{"heading":"real-world-applications","content":"Multi-account reconciliation: Consolidate finances across all managed creators"},{"heading":"real-world-applications","content":"Payout forecasting: Analyze historical patterns to predict future earnings"},{"heading":"complete-data-backup-and-migration","content":"title: Perfect for"},{"heading":"complete-data-backup-and-migration","content":"type: info"},{"heading":"complete-data-backup-and-migration","content":"Creators switching platforms, agencies managing transitions, and disaster recovery"},{"heading":"complete-data-backup-and-migration","content":"Your OnlyFans data is valuable. Whether you're preparing for a platform migration, setting up disaster recovery, or just want peace of mind, our comprehensive exports have you covered."},{"heading":"export-everything","content":"Data Type"},{"heading":"export-everything","content":"What's Included"},{"heading":"export-everything","content":"Media"},{"heading":"export-everything","content":"Every photo, video, and audio file from your vault"},{"heading":"export-everything","content":"Chat Messages"},{"heading":"export-everything","content":"Complete conversation history with all fans"},{"heading":"export-everything","content":"Transactions"},{"heading":"export-everything","content":"Full financial record of all earnings"},{"heading":"export-everything","content":"Trial Links"},{"heading":"export-everything","content":"All free trial campaigns and performance data"},{"heading":"export-everything","content":"Tracking Links"},{"heading":"export-everything","content":"Marketing campaign data and attribution"},{"heading":"export-everything","content":"Payouts"},{"heading":"export-everything","content":"Complete payout history"},{"heading":"export-everything","content":"Chargebacks"},{"heading":"export-everything","content":"Dispute and chargeback records"},{"heading":"export-everything","content":"Public Profiles"},{"heading":"export-everything","content":"Profile snapshots for record-keeping"},{"heading":"backup-strategy","content":"Set up a robust backup workflow:"},{"heading":"backup-strategy","content":"Monthly full exports — Download all data types for comprehensive snapshots"},{"heading":"backup-strategy","content":"Weekly incremental exports — Export recent data using date range filters"},{"heading":"backup-strategy","content":"Store securely — Save to cloud storage (S3, Google Cloud, Azure) or local NAS"},{"heading":"backup-strategy","content":"Version your backups — Maintain historical snapshots for point-in-time recovery"},{"heading":"migration-use-cases","content":"Platform switch: Export everything before moving to a new content platform"},{"heading":"migration-use-cases","content":"Agency transition: Hand off complete data when onboarding or offboarding creators"},{"heading":"migration-use-cases","content":"Legal compliance: Maintain records for regulatory requirements"},{"heading":"migration-use-cases","content":"Content repurposing: Access your full media library for use on other platforms"},{"heading":"migration-use-cases","content":"title: Large exports?"},{"heading":"migration-use-cases","content":"type: info"},{"heading":"migration-use-cases","content":"Exporting years of data? Our system handles big exports seamlessly. Start the export, close your browser, and come back later to download your complete archive."},{"heading":"get-started","content":"Ready to unlock the full potential of your OnlyFans data?"}],"headings":[{"id":"download-media-and-chats-for-llm-and-lora-training","content":"Download Media and Chats for LLM and LoRA Training"},{"id":"media-exports-for-visual-ai","content":"Media exports for visual AI"},{"id":"chat-exports-for-language-models","content":"Chat exports for language models"},{"id":"technical-integration","content":"Technical integration"},{"id":"export-financial-data-for-analytics-and-automation","content":"Export Financial Data for Analytics and Automation"},{"id":"available-financial-exports","content":"Available financial exports"},{"id":"power-your-automation-stack","content":"Power your automation stack"},{"id":"example-n8n-revenue-sync-workflow","content":"Example: n8n revenue sync workflow"},{"id":"real-world-applications","content":"Real-world applications"},{"id":"complete-data-backup-and-migration","content":"Complete Data Backup and Migration"},{"id":"export-everything","content":"Export everything"},{"id":"backup-strategy","content":"Backup strategy"},{"id":"migration-use-cases","content":"Migration use cases"},{"id":"get-started","content":"Get Started"}]}},{"_id":"/fansbot/add-an-integration","title":"Add an integration","description":"Connect the apps you already use so FansBot can read and act on them in chats and scheduled tasks.","url":"/fansbot/add-an-integration","structured":{"contents":[{"content":"Integrations let FansBot work with the other tools you use. Connect apps like Google Sheets, Gmail, Notion, Google Calendar, Airtable, HubSpot, or Stripe, and FansBot can read from and act on them — both in live chats and in scheduled tasks."},{"heading":"connect-an-app","content":"In your OnlyFansAPI dashboard, open FansBot → Integrations in the sidebar."},{"heading":"find-the-app-toc","content":"Search the catalog — there are 3,000+ apps to choose from — and pick the one you want. Switch to Popular integrations to see the most-used ones, or flip on Show connected only to see just the apps you've already connected."},{"heading":"choose-team-or-personal-then-connect-toc","content":"Pick Connect a team account (everyone on your team can use it) or Connect a personal account (just for you), then authorize FansBot to access it. You can connect one of each per app."},{"heading":"confirm-its-connected-toc","content":"The app now shows it's connected, tagged Team or Personal."},{"heading":"confirm-its-connected-toc","content":"title: Team vs. personal accounts"},{"heading":"confirm-its-connected-toc","content":"A team integration is shared — anyone on your team can use it through FansBot. A personal integration is just for you. When someone chats with a FansBot channel, it can use your team's shared integrations plus the personal integrations of whoever set that channel up."},{"heading":"confirm-its-connected-toc","content":"title: Can't find an app?"},{"heading":"confirm-its-connected-toc","content":"Click Request integration at the top of the page to tell us which app you'd like, and we'll look into adding it."},{"heading":"use-it-in-chat","content":"Once an app is connected, just ask FansBot to use it:"},{"heading":"use-it-in-chat","content":"\"Add my top 10 fans this month to a Google Sheet.\""},{"heading":"use-it-in-chat","content":"\"What's on my calendar today?\""},{"heading":"use-it-in-chat","content":"\"Draft an email to my VA with this week's numbers.\""},{"heading":"use-it-in-chat","content":"FansBot figures out which connected app to use and — for anything that writes or sends — confirms with you before going ahead."}],"headings":[{"id":"connect-an-app","content":"Connect an app"},{"id":"find-the-app-toc","content":"Find the app [!toc]"},{"id":"choose-team-or-personal-then-connect-toc","content":"Choose team or personal, then connect [!toc]"},{"id":"confirm-its-connected-toc","content":"Confirm it's connected [!toc]"},{"id":"use-it-in-chat","content":"Use it in chat"}]}},{"_id":"/fansbot/channels","title":"Channels","description":"Add FansBot to Telegram, Slack, or Discord from your OnlyFansAPI dashboard.","url":"/fansbot/channels","structured":{"contents":[{"content":"A channel is a chat platform where your team talks to FansBot — a private bot in Telegram, Slack, or Discord. You can connect more than one; the same FansBot works across all of them."},{"heading":"open-the-channels-tab","content":"In your OnlyFansAPI dashboard, open FansBot in the sidebar. You land on the Channels tab, which lists every channel you've connected with its platform, access, and status."},{"heading":"open-the-channels-tab","content":"Click Add channel and pick a platform."},{"heading":"open-the-channels-tab","content":"The steps differ slightly per platform:"},{"heading":"create-a-bot-with-botfather-toc","content":"In Telegram, open @BotFather, send /newbot, and follow the prompts. Copy the bot token it gives you — it looks like 1234567890:ABC-DEF...."},{"heading":"add-the-channel-toc","content":"In the platform picker, choose Telegram. Give the channel a name, paste your Telegram Bot Token, and save."},{"heading":"find-your-user-id-toc","content":"A new Telegram bot won't talk to anyone yet. Open your bot, send it any message, and it replies that you're not allowed — along with your Telegram User ID. Copy that ID."},{"heading":"allow-yourself-to-chat-toc","content":"On the Channels tab, open the channel's Configure menu and paste your User ID into Permitted Users IDs (separate multiple IDs with commas). Save, then message the bot again and it'll respond."},{"heading":"allow-yourself-to-chat-toc","content":"title: Who can use the bot?"},{"heading":"allow-yourself-to-chat-toc","content":"A Telegram channel is locked by default — only the User IDs you add to Permitted Users IDs can chat. Anyone else is shown their own User ID, so adding a teammate is just a copy-paste. Send /start any time to reset the conversation."},{"heading":"choose-slack-toc","content":"In the platform picker, choose Slack, then click Add to Slack."},{"heading":"authorize-your-workspace-toc","content":"You're redirected to Slack to authorize the OnlyFans API app and pick the workspace to install it into. Confirm, and you're returned to the dashboard with the workspace listed as a channel."},{"heading":"start-chatting-toc","content":"Send FansBot a direct message, or invite it to a channel and mention it."},{"heading":"choose-discord-toc","content":"In the platform picker, choose Discord, then click Add to Discord."},{"heading":"pick-a-server-toc","content":"You're redirected to Discord to add the OnlyFans API bot to a server you manage. Authorize it, and you're returned to the dashboard with the server listed as a channel."},{"heading":"set-who-can-use-it-toc","content":"By default everyone in the server can chat with the bot. To restrict it, open the channel's Configure menu and turn off Allow everyone, then pick the specific permitted members (see below)."},{"heading":"start-chatting-toc-1","content":"In a server channel, @mention the bot (for example, @FansBot) to talk to it — Discord doesn't support DMing the bot. Once it replies, you can keep chatting in that thread without mentioning it again."},{"heading":"start-chatting-toc-1","content":"type: success"},{"heading":"start-chatting-toc-1","content":"title: Connected!"},{"heading":"start-chatting-toc-1","content":"Your channel shows as Live on the Channels tab. Next, learn what to ask FansBot."},{"heading":"manage-a-channel","content":"On the Channels tab, open the menu at the end of any row. Telegram and Discord channels have a Configure option; Slack isn't configurable. Any channel can be removed with Delete. The Access column shows who can chat — Public when everyone is allowed, or a count like 3 permitted when you've restricted it."},{"heading":"permitted-users","content":"Telegram — Configure lists Permitted Users IDs, a comma-separated list of the Telegram User IDs allowed to chat. Anyone not on the list is shown their own ID so an admin can add them."},{"heading":"permitted-users","content":"Discord — Configure has an Allow everyone switch. Turn it off to reveal a Permitted members picker: search your server's members and select exactly who can chat. Members who join the server later won't have access until you add them."}],"headings":[{"id":"open-the-channels-tab","content":"Open the Channels tab"},{"id":"create-a-bot-with-botfather-toc","content":"Create a bot with @BotFather [!toc]"},{"id":"add-the-channel-toc","content":"Add the channel [!toc]"},{"id":"find-your-user-id-toc","content":"Find your User ID [!toc]"},{"id":"allow-yourself-to-chat-toc","content":"Allow yourself to chat [!toc]"},{"id":"choose-slack-toc","content":"Choose Slack [!toc]"},{"id":"authorize-your-workspace-toc","content":"Authorize your workspace [!toc]"},{"id":"start-chatting-toc","content":"Start chatting [!toc]"},{"id":"choose-discord-toc","content":"Choose Discord [!toc]"},{"id":"pick-a-server-toc","content":"Pick a server [!toc]"},{"id":"set-who-can-use-it-toc","content":"Set who can use it [!toc]"},{"id":"start-chatting-toc-1","content":"Start chatting [!toc]"},{"id":"manage-a-channel","content":"Manage a channel"},{"id":"permitted-users","content":"Permitted users"}]}},{"_id":"/fansbot","title":"FansBot","description":"Run your OnlyFans agency by chatting with an AI assistant in Telegram, Slack, or Discord.","url":"/fansbot","structured":{"contents":[{"content":"FansBot is an AI assistant that lives in your team's chat app. Connect Telegram, Slack, or Discord, then just message it to check earnings, find your top fans, review subscriber growth, track link performance, run any OnlyFans action, search the web, and automate recurring reports — no dashboard digging, no code."},{"content":"FansBot is powered by your OnlyFansAPI account and works across every creator on your roster. Each message it answers uses credits."},{"heading":"how-it-works","content":"FansBot is managed from the FansBot section of your OnlyFansAPI dashboard, organized into a few tabs:"},{"heading":"how-it-works","content":"Channels — add a Telegram bot, or install FansBot into your Slack workspace or Discord server. This is where your team talks to it."},{"heading":"how-it-works","content":"Integrations — connect the other apps you use (Google Sheets, Gmail, Notion, and more) so FansBot can read and act on them."},{"heading":"how-it-works","content":"Skills — install curated know-how that teaches FansBot how to handle specific jobs, like earnings recaps or ad reviews."},{"heading":"how-it-works","content":"Scheduled Tasks & Workflows — automate recurring reports and reminders, either from scratch or from a ready-made workflow."},{"heading":"how-it-works","content":"Once a channel is connected, you just message FansBot in plain language. It reads live data from your connected OnlyFans accounts and replies right in the chat."},{"heading":"supported-platforms","content":"Platform"},{"heading":"supported-platforms","content":"Status"},{"heading":"supported-platforms","content":"How you connect"},{"heading":"supported-platforms","content":"Telegram"},{"heading":"supported-platforms","content":"Available"},{"heading":"supported-platforms","content":"Bot token from @BotFather"},{"heading":"supported-platforms","content":"Slack"},{"heading":"supported-platforms","content":"Available"},{"heading":"supported-platforms","content":"1-click install (OAuth)"},{"heading":"supported-platforms","content":"Discord"},{"heading":"supported-platforms","content":"Available"},{"heading":"supported-platforms","content":"1-click install (OAuth)"},{"heading":"supported-platforms","content":"WhatsApp"},{"heading":"supported-platforms","content":"Coming soon"},{"heading":"supported-platforms","content":"—"},{"heading":"supported-platforms","content":"Microsoft Teams"},{"heading":"supported-platforms","content":"Coming soon"},{"heading":"supported-platforms","content":"—"},{"heading":"get-started","content":"Add FansBot to Telegram, Slack, or Discord."},{"heading":"get-started","content":"What to ask, and how the assistant responds."},{"heading":"get-started","content":"Connect your other apps so FansBot can act on them."},{"heading":"get-started","content":"Install curated skills to teach FansBot specific jobs."},{"heading":"get-started","content":"Automate recurring reports and reminders."},{"heading":"get-started","content":"Start from ready-made, pre-built scheduled tasks."},{"heading":"get-started","content":"Track credits, models, and activity."},{"heading":"get-started","content":"title: Don't see FansBot in your dashboard?"},{"heading":"get-started","content":"FansBot is managed from your OnlyFansAPI dashboard. If the FansBot section isn't visible on your team, reach out at hello@onlyfansapi.com."}],"headings":[{"id":"how-it-works","content":"How it works"},{"id":"supported-platforms","content":"Supported platforms"},{"id":"get-started","content":"Get started"}]}},{"_id":"/fansbot/scheduled-tasks","title":"Scheduled tasks","description":"Automate recurring reports and reminders that FansBot runs on a schedule and delivers to your chat.","url":"/fansbot/scheduled-tasks","structured":{"contents":[{"content":"A scheduled task is a recurring job FansBot runs on a schedule and delivers to a chat you choose — a daily earnings summary, a weekly recap, a morning reminder, or anything else you can ask FansBot to do."},{"content":"Want a head start? Browse Workflows for ready-made scheduled tasks you can set up in one click."},{"heading":"create-a-task","content":"There are two ways to set one up."},{"heading":"ask-in-chat","content":"Just tell FansBot what you want:"},{"heading":"ask-in-chat","content":"\"Send me a daily earnings summary for the whole agency every morning at 8am.\""},{"heading":"ask-in-chat","content":"FansBot confirms the details — including your timezone, which it asks for if you haven't said — creates the task, and offers to run it once right away as a preview."},{"heading":"use-the-dashboard","content":"In your OnlyFansAPI dashboard, open FansBot → Scheduled Tasks and click New scheduled task. Fill in:"},{"heading":"use-the-dashboard","content":"Name — a label for the task."},{"heading":"use-the-dashboard","content":"Connection — which connected channel delivers it (chosen when you create the task)."},{"heading":"use-the-dashboard","content":"Send to — the destination on that channel (the chat or user ID)."},{"heading":"use-the-dashboard","content":"Model — the AI model that runs the task: Claude (Opus, Sonnet, Haiku), GPT (GPT, GPT Mini, GPT-5.4 Nano), or Gemini (Pro, 3.1 Flash Lite). Defaults to Claude Sonnet."},{"heading":"use-the-dashboard","content":"Prompt — what you want FansBot to do on each run."},{"heading":"use-the-dashboard","content":"Frequency — Daily, Weekly, Monthly, every N minutes/hours, or a custom cron expression, plus the time / days and timezone."},{"heading":"manage-tasks","content":"Each task is a card showing its schedule, status, last run, and next run. Switch between All tasks and My tasks. From a card you can:"},{"heading":"manage-tasks","content":"Run now — trigger it immediately."},{"heading":"manage-tasks","content":"Edit — change the prompt, schedule, or destination."},{"heading":"manage-tasks","content":"Pause / Resume — stop it running without deleting it."},{"heading":"manage-tasks","content":"Delete — remove it for good."},{"heading":"manage-tasks","content":"Scheduled task runs use credits too, billed to the model you pick. See them broken out on the usage page."}],"headings":[{"id":"create-a-task","content":"Create a task"},{"id":"ask-in-chat","content":"Ask in chat"},{"id":"use-the-dashboard","content":"Use the dashboard"},{"id":"manage-tasks","content":"Manage tasks"}]}},{"_id":"/fansbot/skills","title":"Skills","description":"Install curated skills that teach FansBot how to handle specific jobs — from earnings recaps to ad reviews.","url":"/fansbot/skills","structured":{"contents":[{"content":"Skills are curated playbooks that teach FansBot how to handle a specific job well — a weekly earnings recap, a top-spender breakdown, a Google Ads audit, and so on. Install the ones you want, and FansBot follows them automatically whenever a chat or scheduled task calls for it. Installed skills apply across all your team's channels."},{"heading":"install-a-skill","content":"In your OnlyFansAPI dashboard, open FansBot → Skills. Search the catalog or filter by category (Analytics, Coaching, Engagement, Fans, Messaging, Portfolio, and more), then click Install on any skill. Each card shows the skill's name, category, a short description, and tags."},{"heading":"install-a-skill","content":"To stop using one, open its menu and choose Remove — FansBot stops using it for your team, and you can re-install it any time."},{"heading":"skill-bundles","content":"A bundle is a curated set of related skills you can install in one click — a fast way to teach FansBot a whole area at once. Bundles appear at the top of the Skills page, each showing how many skills it includes."},{"heading":"skill-bundles","content":"Install bundle adds every skill in the set."},{"heading":"skill-bundles","content":"Open a bundle to see Skills in this bundle and install or remove them individually."},{"heading":"skill-bundles","content":"Remove bundle uninstalls every skill in it — including any you also installed on their own or through another bundle."},{"heading":"skill-bundles","content":"Skills don't cost anything to install. They only shape how FansBot works — you're still billed credits for the messages and tasks that use them."}],"headings":[{"id":"install-a-skill","content":"Install a skill"},{"id":"skill-bundles","content":"Skill bundles"}]}},{"_id":"/fansbot/talking-to-fansbot","title":"Talking to FansBot","description":"Ask FansBot about earnings, fans, subscribers and more — in plain language, right in your chat app.","url":"/fansbot/talking-to-fansbot","structured":{"contents":[{"content":"Once a channel is connected, talking to FansBot is just messaging it. Depending on the platform you either DM it or mention it in a channel (see the platform notes below) — then it replies right there in the chat. The first time, it introduces itself as FansBot, your agency assistant."},{"heading":"what-you-can-ask","content":"FansBot reads live data from every OnlyFans account connected to your team. A few examples:"},{"heading":"what-you-can-ask","content":"\"How much did we earn this week?\""},{"heading":"what-you-can-ask","content":"\"Who are my top fans this month?\""},{"heading":"what-you-can-ask","content":"\"How many new subscribers today?\""},{"heading":"what-you-can-ask","content":"\"How are my tracking links performing?\""},{"heading":"what-you-can-ask","content":"\"Give me an overview of @creator's account.\""},{"heading":"what-you-can-ask","content":"\"Set up a daily earnings summary at 8am.\""},{"heading":"what-you-can-ask","content":"\"What apps do I have connected?\""},{"heading":"what-you-can-ask","content":"\"Search the web for the going rate on PPV bundles right now.\""},{"heading":"what-you-can-ask","content":"It can also act on your connected integrations — for example, pulling a list of your spreadsheets or your upcoming calendar events:"},{"heading":"how-it-behaves","content":"It asks before making changes. Anything that creates, edits, or deletes — a scheduled task, a tracking link, and so on — is summarized first with a \"Should I go ahead?\" confirmation."},{"heading":"how-it-behaves","content":"It never invents data. If it can't find something, it tells you."},{"heading":"how-it-behaves","content":"It works while you wait. For multi-step questions, it posts a quick \"on it…\" and follows up with the answer."},{"heading":"how-it-behaves","content":"It uses your installed skills. When a request matches a skill your team has installed, FansBot follows that playbook automatically — you don't have to invoke it."},{"heading":"how-it-behaves","content":"It can search the web. When a question needs outside information, FansBot looks it up. Web searches are billed separately — see usage."},{"heading":"how-it-behaves","content":"It can send you files. FansBot can post files straight into the chat (a CSV export, a generated image, and so on). File size limits depend on the platform: roughly 10 MB on Discord, 50 MB on Telegram, and 100 MB on Slack."},{"heading":"platform-notes","content":"Telegram: the bot only replies to users on the channel's Permitted Users IDs list — anyone else is shown their own User ID so an admin can add them (see Channels). Send /start to reset the conversation and clear history."},{"heading":"platform-notes","content":"Slack: send FansBot a direct message, or invite it to a channel and mention it."},{"heading":"platform-notes","content":"Discord: @mention the bot (for example, @FansBot) in a server channel to start — Discord DMs aren't supported. After it replies, keep chatting in that thread without re-mentioning it. Who can use it is set per channel from the dashboard (Allow everyone, or a list of permitted members) — see Channels."},{"heading":"platform-notes","content":"Every answer uses credits. Track what FansBot is spending on the usage page."}],"headings":[{"id":"what-you-can-ask","content":"What you can ask"},{"id":"how-it-behaves","content":"How it behaves"},{"id":"platform-notes","content":"Platform notes"}]}},{"_id":"/fansbot/usage","title":"Checking usage","description":"See how many credits FansBot is using, broken down by request type, model, and platform.","url":"/fansbot/usage","structured":{"contents":[{"content":"FansBot usage is billed in credits. To see what it's spending, open Usage in your OnlyFansAPI dashboard sidebar and switch to the FansBot tab."},{"heading":"usage-chart","content":"The chart shows credits used by FansBot over time. Use the controls to dig in:"},{"heading":"usage-chart","content":"Dimension — group the chart by Request Type (for example, chat vs. scheduled task), Model, or Platform."},{"heading":"usage-chart","content":"Period — Today, the past 7 or 30 days, the past 6 months, the past year, or all time."},{"heading":"activity-table","content":"Below the chart, FansBot Activity lists individual requests — model calls, tokens, and cost:"},{"heading":"activity-table","content":"Column"},{"heading":"activity-table","content":"What it shows"},{"heading":"activity-table","content":"Platform"},{"heading":"activity-table","content":"Telegram, Slack, or Discord"},{"heading":"activity-table","content":"Model"},{"heading":"activity-table","content":"The AI model that handled the request"},{"heading":"activity-table","content":"User"},{"heading":"activity-table","content":"Who triggered it"},{"heading":"activity-table","content":"Type"},{"heading":"activity-table","content":"Chat, scheduled task, and so on"},{"heading":"activity-table","content":"Credit"},{"heading":"activity-table","content":"Credits the request cost"},{"heading":"activity-table","content":"Cost"},{"heading":"activity-table","content":"The equivalent cost"},{"heading":"activity-table","content":"Date"},{"heading":"activity-table","content":"When it ran"},{"heading":"activity-table","content":"Filter by Platform, Model, or date range to narrow it down."},{"heading":"activity-table","content":"title: What about web search?"},{"heading":"activity-table","content":"When FansBot searches the web, that's billed at a flat rate per search (rather than per token) and shows up in the activity breakdown alongside your chat and scheduled-task usage."},{"heading":"activity-table","content":"Running low? Top up from Billing in your dashboard."}],"headings":[{"id":"usage-chart","content":"Usage chart"},{"id":"activity-table","content":"Activity table"}]}},{"_id":"/fansbot/workflows","title":"Workflows","description":"Set up ready-made scheduled tasks in one click — pick a workflow, choose where it reports, and it runs on a schedule.","url":"/fansbot/workflows","structured":{"contents":[{"content":"Workflows are pre-built scheduled tasks — the fastest way to get value without writing a prompt from scratch. Pick one, choose where it should report, and it runs on a schedule. Each is built on a skill, so the output is tuned for the job."},{"heading":"use-a-workflow","content":"In your OnlyFansAPI dashboard, open FansBot → Workflows. Browse by category (Analytics, Coaching, Engagement, Reports) or search. Each card shows what it does, its suggested schedule, whether it includes a skill, and any apps it requires."},{"heading":"click-use-workflow-toc","content":"This opens the task form, pre-filled with the workflow's name, prompt, and suggested schedule. You can tweak any of it."},{"heading":"choose-where-it-reports-toc","content":"Pick the connection (which channel delivers it) and the destination on that channel. You need at least one channel connected — the Use workflow button is disabled until you do."},{"heading":"connect-any-required-apps-toc","content":"Some workflows need an integration first — for example, Weekly Earnings → Google Sheets needs Google Sheets. The form shows what's missing and a Connect button for each, and won't let you create the task until they're connected."},{"heading":"create-it-toc","content":"Submit, and the workflow becomes a regular scheduled task. Manage it from the Scheduled Tasks tab like any other."},{"heading":"create-it-toc","content":"A workflow is just a starting point — once created it's an ordinary scheduled task, so it uses credits on each run, billed to the model you pick."}],"headings":[{"id":"use-a-workflow","content":"Use a workflow"},{"id":"click-use-workflow-toc","content":"Click \"Use workflow\" [!toc]"},{"id":"choose-where-it-reports-toc","content":"Choose where it reports [!toc]"},{"id":"connect-any-required-apps-toc","content":"Connect any required apps [!toc]"},{"id":"create-it-toc","content":"Create it [!toc]"}]}},{"_id":"/auth","title":"Login with OnlyFans","description":"The official, secure, and easy-to-use authentication library for OnlyFans API. Streamline your integration with enterprise-grade security and developer experience.","url":"/auth","structured":{"contents":[{"content":"@onlyfansapi/auth - Official Authentication Library"},{"content":"The official authentication library for OnlyFans API provides a seamless, secure way to authenticate users with their OnlyFans accounts directly from your application."},{"heading":"features","content":"Built with enterprise-grade security and works seamlessly on both desktop and mobile devices."},{"heading":"features","content":"1.5kB script loads in just 2ms on 4G internet, ensuring your users never wait for authentication."},{"heading":"features","content":"Developer-friendly with TypeScript support, comprehensive docs, and intuitive APIs."},{"heading":"why-choose-onlyfansapiauth","content":"Built with industry-standard security practices to protect user credentials and authentication flows. Trusted by developers who prioritize security."},{"heading":"why-choose-onlyfansapiauth","content":"Seamlessly works across all devices—desktop, mobile, and tablet. Your users get a consistent authentication experience regardless of their platform."},{"heading":"why-choose-onlyfansapiauth","content":"Minimal footprint at just 1.5kB ensures lightning-fast load times. Authenticate users in under 2ms even on slower 4G connections."},{"heading":"why-choose-onlyfansapiauth","content":"Full TypeScript definitions included for better developer experience, type safety, and autocomplete support in your IDE."},{"heading":"why-choose-onlyfansapiauth","content":"Use with any framework or no framework at all. Works seamlessly with React, Vue, Svelte, Angular, and vanilla JavaScript with zero dependencies."},{"heading":"why-choose-onlyfansapiauth","content":"Intuitive APIs designed for ease of use with comprehensive documentation, clear examples, and straightforward integration patterns."},{"heading":"getting-started","content":"Ready to integrate authentication into your application? Check out our installation guide and quickstart to get started in minutes."},{"heading":"getting-started","content":"Learn how to install and set up @onlyfansapi/auth in your project."},{"heading":"getting-started","content":"Get up and running with our auth package in just a few minutes."},{"heading":"getting-started","content":"Explore a complete example of using @onlyfansapi/auth with Next.js and Prisma."}],"headings":[{"id":"features","content":"Features"},{"id":"why-choose-onlyfansapiauth","content":"Why choose @onlyfansapi/auth?"},{"id":"getting-started","content":"Getting started"}]}},{"_id":"/auth/installation","title":"Installation","description":"Install and set up @onlyfansapi/auth in your project","url":"/auth/installation","structured":{"contents":[{"heading":"package-manager","content":"Install @onlyfansapi/auth using your preferred package manager:"},{"heading":"prerequisites","content":"Before you begin, make sure you have:"},{"heading":"prerequisites","content":"If you don't have one yet, registering takes just a few seconds."},{"heading":"prerequisites","content":"» Create a free account"},{"heading":"get-your-api-key","content":"Before creating a client session token, you'll need an API key to authenticate your requests to the OnlyFans API."},{"heading":"go-to-the-onlyfans-api-console--api-keys","content":"Navigate to your OnlyFans API console and click on API Keys in the navigation menu."},{"heading":"create-a-new-api-key","content":"Click the \"Create API Key\" button to generate a new API key."},{"heading":"create-a-new-api-key","content":"Copy and save your API key securely - you'll need it to create client session tokens."},{"heading":"create-your-client-session-token","content":"To use @onlyfansapi/auth, you'll need to create a client session token (starts with ofapi_cs_) through the Create Client Session API endpoint."},{"heading":"make-a-post-request-to-create-a-client-session","content":"Use your API key to authenticate the request:"},{"heading":"make-a-post-request-to-create-a-client-session","content":"Optional fields:"},{"heading":"make-a-post-request-to-create-a-client-session","content":"client_reference_id - Your internal reference ID for the connected account"},{"heading":"make-a-post-request-to-create-a-client-session","content":"proxy_country - Proxy country value (\"us\" | \"uk\")"},{"heading":"make-a-post-request-to-create-a-client-session","content":"type: warn"},{"heading":"make-a-post-request-to-create-a-client-session","content":"Other proxy countries (DE, FR, IT) have been temporarily removed due to OnlyFans restrictions. Only US and UK proxies are currently available."},{"heading":"get-the-client-session-token-from-the-response","content":"The response will include a token field that starts with ofapi_cs_:"},{"heading":"get-the-client-session-token-from-the-response","content":"This token is what you'll use with the @onlyfansapi/auth package."},{"heading":"use-the-client-session-token","content":"Copy the client session token and use it in your application with @onlyfansapi/auth."},{"heading":"use-the-client-session-token","content":"Important: Keep your client session token secure. While it's designed for client-side use, treat it with appropriate security measures."},{"heading":"next-steps","content":"Once you've installed the package and created your client session token, you're ready to start implementing authentication in your application."},{"heading":"next-steps","content":"Quick Start Guide - Get up and running in minutes"},{"heading":"next-steps","content":"Create Client Session API Reference - Full API documentation"},{"heading":"next-steps","content":"NPM Package - Full package documentation on npm"}],"headings":[{"id":"package-manager","content":"Package Manager"},{"id":"prerequisites","content":"Prerequisites"},{"id":"get-your-api-key","content":"Get Your API Key"},{"id":"go-to-the-onlyfans-api-console--api-keys","content":"Go to the OnlyFans API console → API Keys"},{"id":"create-a-new-api-key","content":"Create a new API key"},{"id":"create-your-client-session-token","content":"Create Your Client Session Token"},{"id":"make-a-post-request-to-create-a-client-session","content":"Make a POST request to create a client session"},{"id":"get-the-client-session-token-from-the-response","content":"Get the client session token from the response"},{"id":"use-the-client-session-token","content":"Use the client session token"},{"id":"next-steps","content":"Next Steps"}]}},{"_id":"/auth/quickstart","title":"Quick Start","description":"Get started with @onlyfansapi/auth in minutes","url":"/auth/quickstart","structured":{"contents":[{"heading":"overview","content":"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."},{"heading":"before-you-start","content":"type: info"},{"heading":"before-you-start","content":"Make sure you've completed the installation steps first. You'll need:"},{"heading":"before-you-start","content":"The package installed in your project"},{"heading":"before-you-start","content":"An API key to create client session tokens"},{"heading":"before-you-start","content":"A client session token (starts with ofapi_cs_) to use with the library"},{"heading":"basic-usage","content":"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."},{"heading":"function-signature","content":"Parameters:"},{"heading":"function-signature","content":"clientSecret (string, required): Your client session token obtained from the Create Client Session API endpoint"},{"heading":"function-signature","content":"options.onSuccess (function, required): Callback invoked when authentication succeeds"},{"heading":"function-signature","content":"options.onError (function, required): Callback invoked when authentication fails"},{"heading":"response-data","content":"The library provides TypeScript types for better type safety. Import them if needed:"},{"heading":"success-response","content":"When authentication is successful, the onSuccess callback receives an AuthSuccessData object:"},{"heading":"success-response","content":"Example usage:"},{"heading":"error-response","content":"When authentication fails, the onError callback receives an AuthError object:"},{"heading":"error-response","content":"Common error scenarios:"},{"heading":"error-response","content":"User cancels the authentication flow"},{"heading":"error-response","content":"Network connectivity issues"},{"heading":"error-response","content":"Invalid or expired client session token"},{"heading":"error-response","content":"OnlyFans account access issues"},{"heading":"error-response","content":"Example error handling:"},{"heading":"security","content":"The authentication library implements multiple security measures to protect user data:"},{"heading":"security","content":"Origin validation: All communication with the authentication iframe is validated by origin"},{"heading":"security","content":"Domain whitelisting: Only messages from the configured OnlyFansAPI.com domain are accepted"},{"heading":"security","content":"Secure token transmission: Client session tokens are passed securely via URL parameters"},{"heading":"security","content":"HTTPS required: The library requires HTTPS connections in production environments"},{"heading":"storing-client-session-tokens","content":"Store your client session token securely:"},{"heading":"error-handling","content":"Always handle both success and error cases:"},{"heading":"user-experience","content":"Show a loading state while authentication is in progress"},{"heading":"user-experience","content":"Disable the authentication button during the flow to prevent duplicate requests"},{"heading":"user-experience","content":"Provide clear feedback on success or failure"},{"heading":"user-experience","content":"Consider adding a \"try again\" option if authentication fails"},{"heading":"common-issues","content":"Authentication modal doesn't open:"},{"heading":"common-issues","content":"Ensure your client session token is valid and properly formatted"},{"heading":"common-issues","content":"Check browser console for any error messages"},{"heading":"common-issues","content":"Verify that pop-ups aren't blocked by your browser"},{"heading":"common-issues","content":"\"Invalid client secret\" error:"},{"heading":"common-issues","content":"Verify your client session token is correct (starts with ofapi_cs_)"},{"heading":"common-issues","content":"Check that the token hasn't expired"},{"heading":"common-issues","content":"Ensure you're using a token created via the Create Client Session API"},{"heading":"common-issues","content":"Network errors:"},{"heading":"common-issues","content":"Check your internet connection"},{"heading":"common-issues","content":"Verify OnlyFansAPI.com is accessible from your network"},{"heading":"common-issues","content":"Some corporate firewalls may block the authentication iframe"},{"heading":"next-steps","content":"Review the Installation Guide if you haven't already"},{"heading":"next-steps","content":"Check out the NPM package for the latest version and updates"},{"heading":"next-steps","content":"Visit onlyfansapi.com/auth for more information"},{"heading":"next-steps","content":"Explore the API Reference to see what you can do with authenticated accounts"}],"headings":[{"id":"overview","content":"Overview"},{"id":"before-you-start","content":"Before You Start"},{"id":"basic-usage","content":"Basic Usage"},{"id":"import","content":"Import"},{"id":"function-signature","content":"Function Signature"},{"id":"framework-examples","content":"Framework Examples"},{"id":"response-data","content":"Response Data"},{"id":"success-response","content":"Success Response"},{"id":"error-response","content":"Error Response"},{"id":"security","content":"Security"},{"id":"best-practices","content":"Best Practices"},{"id":"storing-client-session-tokens","content":"Storing Client Session Tokens"},{"id":"error-handling","content":"Error Handling"},{"id":"user-experience","content":"User Experience"},{"id":"troubleshooting","content":"Troubleshooting"},{"id":"common-issues","content":"Common Issues"},{"id":"next-steps","content":"Next Steps"}]}},{"_id":"/integrations","title":"Integrations","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.","url":"/integrations","structured":{"contents":[{"content":"Please choose an integration to get started:"},{"content":"Best for building complex, multi-step no-code automations. Perfect for users who want powerful automation capabilities with full control over their workflows."},{"content":"Best for simple OnlyFans automations, all without writing code. Ideal for users who want simple visual workflow design."},{"content":"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."},{"content":"Or watch our tutorial video:"}],"headings":[]}},{"_id":"/onlyfans-ai","title":"OnlyFans x AI Tools","description":"Run your OnlyFans agency from the AI tool you already use. Plug Claude, ChatGPT, Manus, or any custom AI agent into 350+ OnlyFans tools.","url":"/onlyfans-ai","structured":{"contents":[{"content":"OnlyFans MCP lets you connect Claude, ChatGPT, Manus, Cursor, and any other custom AI tool to your OnlyFans agency. 350+ tools across chats, fans, earnings, and every creator on your roster — no coding required."},{"content":"New here? Start with the OnlyFans MCP overview to learn what MCP is and how the install flow works. Then pick the guide for the AI tool your team uses."},{"heading":"pick-your-ai-tool","content":"Start here. What MCP is, the server URL, and which AI clients are supported."},{"heading":"pick-your-ai-tool","content":"Best for long-form ops, research, and agentic workflows. Works with Claude Desktop, Claude.ai, Claude Code, and the Anthropic API."},{"heading":"pick-your-ai-tool","content":"Best for team-wide Custom GPTs, Agent Mode, and Deep Research. Requires a paid ChatGPT plan (Pro, Business, or Enterprise)."},{"heading":"pick-your-ai-tool","content":"Best for autonomous, scheduled agents. Wake up to a finished revenue digest, churn rescue, or whale watch report."},{"heading":"what-you-can-do","content":"A few things teams ship in the first week:"},{"heading":"what-you-can-do","content":"Daily revenue digest — every morning, get last-24h earnings per creator in Slack-ready markdown"},{"heading":"what-you-can-do","content":"Churn rescue — find subs lapsing in the next 7 days and draft reactivation DMs"},{"heading":"what-you-can-do","content":"Whale watch — auto-tag fans spending over $200 and alert the assigned chatter"},{"heading":"what-you-can-do","content":"Chat backlog audit — surface every chat with no reply in 24h, before fans unsub"},{"heading":"what-you-can-do","content":"See more on the OnlyFans MCP marketing page — including the full tool catalog (350+ tools) and agency safety guidelines."}],"headings":[{"id":"pick-your-ai-tool","content":"Pick your AI tool"},{"id":"what-you-can-do","content":"What you can do"}]}},{"_id":"/webhooks/available-events","title":"Available webhook events","description":"A list of all available webhook events that you can subscribe to.","url":"/webhooks/available-events","structured":{"contents":[{"content":"title: Looking for a specific event?"},{"content":"Please reach out to us, we can add it!"},{"heading":"accountsconnected","content":"A new OnlyFans account was connected."},{"heading":"accountsconnected","content":"Please note that payload.client_reference_id can be null - it's only\nincluded if you provided us with client_reference_id while Creating Client\nSession"},{"heading":"accountsreconnected","content":"An OnlyFans account was reconnected."},{"heading":"accountssession_expired","content":"OnlyFans account connection has expired, but we automatically re-connected it using our system - you don't need to do anything."},{"heading":"accountsauthentication_failed","content":"OnlyFans account connection has expired, and we couldn't automatically re-connect it using our system. You need to reconnect with our /authenticate endpoint or manually in our dashboard."},{"heading":"accountsotp_code_required","content":"A two-factor authentication code is required to connect one of your OnlyFans accounts."},{"heading":"accountsface_otp_required","content":"Face verification is required to connect one of your OnlyFans accounts."},{"heading":"transactionsnew","content":"A new transaction has been received from a fan (eg. a subscription, a tip, a post, etc.)."},{"heading":"transactionsnew","content":"type: info"},{"heading":"transactionsnew","content":"Please note that this event may be delayed by up to 3 minutes."},{"heading":"transactionsnew","content":"Supported payload.type values"},{"heading":"transactionsnew","content":"Description"},{"heading":"transactionsnew","content":"message"},{"heading":"transactionsnew","content":"A message has been sent to you"},{"heading":"transactionsnew","content":"post"},{"heading":"transactionsnew","content":"Payment for a post"},{"heading":"transactionsnew","content":"post"},{"heading":"transactionsnew","content":"tip"},{"heading":"transactionsnew","content":"Payment for a tip"},{"heading":"transactionsnew","content":"tip"},{"heading":"transactionsnew","content":"new_subscription"},{"heading":"transactionsnew","content":"Payment for a new subscription"},{"heading":"transactionsnew","content":"recurring_subscription"},{"heading":"transactionsnew","content":"Payment for a recurring subscription"},{"heading":"transactionsnew","content":"stream"},{"heading":"transactionsnew","content":"Payment for a stream"},{"heading":"transactionsnew","content":"other"},{"heading":"transactionsnew","content":"Another type of transaction"},{"heading":"messagesreceived","content":"New message received from a fan."},{"heading":"messagessent","content":"A new message has been sent from one of your OnlyFans accounts to a fan."},{"heading":"messagesppvunlocked","content":"A PPV message that you sent has been purchased by a fan."},{"heading":"messagesdeleted","content":"A chat message was deleted."},{"heading":"chat_queueupdated","content":"A queued message batch has been updated (e.g. progress change)."},{"heading":"chat_queuefinished","content":"A queued message batch has finished sending."},{"heading":"tipsreceived","content":"A new tip has been received from a fan."},{"heading":"subscriptionsnew","content":"A new fan has subscribed."},{"heading":"subscriptionsrenewed","content":"A fan has renewed their subscription."},{"heading":"postsliked","content":"A fan has liked one of your posts."},{"heading":"userstyping","content":"A fan is typing a message."},{"heading":"usersonline","content":"A fan was detected as online."},{"heading":"usersoffline","content":"A fan that was previously detected as online was detected as offline."},{"heading":"usersoffline","content":"These events are detected by periodic online-status polling, so delivery is not instant. users.online is emitted when a tracked fan transitions from unknown/offline to online. users.offline is emitted when a fan that was previously detected online is no longer present in a successful online-status check."},{"heading":"data-exports","content":"type: info"},{"heading":"data-exports","content":"Data export webhook events are team-level events and do not include an account_id at the top level. Instead, the account_ids array is included in the payload."},{"heading":"data_exportscalculating_credits","content":"Credit calculation has started for a data export."},{"heading":"data_exportscalculating_credits_completed","content":"Credit calculation has completed successfully for a data export."},{"heading":"data_exportscalculating_credits_failed","content":"Credit calculation has failed for a data export."},{"heading":"data_exportsin_progress","content":"A data export is now in progress."},{"heading":"data_exportscompleted","content":"A data export has completed successfully. The payload includes a temporary download URL that expires after 1 hour."},{"heading":"data_exportsfailed","content":"A data export has failed. The failed_reason field is only included when the failure was due to insufficient credits."},{"heading":"data_exportscancelled","content":"A data export was cancelled."},{"heading":"fan_summarycompleted","content":"An AI Fan Profile Summary has finished generating. This event fires for both new summaries and regenerations, and is dispatched after the summary completes successfully."}],"headings":[{"id":"accounts","content":"Accounts"},{"id":"accountsconnected","content":"accounts.connected"},{"id":"accountsreconnected","content":"accounts.reconnected"},{"id":"accountssession_expired","content":"accounts.session_expired"},{"id":"accountsauthentication_failed","content":"accounts.authentication_failed"},{"id":"accountsotp_code_required","content":"accounts.otp_code_required"},{"id":"accountsface_otp_required","content":"accounts.face_otp_required"},{"id":"transactions","content":"Transactions"},{"id":"transactionsnew","content":"transactions.new"},{"id":"messages","content":"Messages"},{"id":"messagesreceived","content":"messages.received"},{"id":"messagessent","content":"messages.sent"},{"id":"messagesppvunlocked","content":"messages.ppv.unlocked"},{"id":"messagesdeleted","content":"messages.deleted"},{"id":"chat-queue","content":"Chat Queue"},{"id":"chat_queueupdated","content":"chat_queue.updated"},{"id":"chat_queuefinished","content":"chat_queue.finished"},{"id":"tips","content":"Tips"},{"id":"tipsreceived","content":"tips.received"},{"id":"subscriptions","content":"Subscriptions"},{"id":"subscriptionsnew","content":"subscriptions.new"},{"id":"subscriptionsrenewed","content":"subscriptions.renewed"},{"id":"posts","content":"Posts"},{"id":"postsliked","content":"posts.liked"},{"id":"users","content":"Users"},{"id":"userstyping","content":"users.typing"},{"id":"usersonline","content":"users.online"},{"id":"usersoffline","content":"users.offline"},{"id":"data-exports","content":"Data Exports"},{"id":"data_exportscalculating_credits","content":"data_exports.calculating_credits"},{"id":"data_exportscalculating_credits_completed","content":"data_exports.calculating_credits_completed"},{"id":"data_exportscalculating_credits_failed","content":"data_exports.calculating_credits_failed"},{"id":"data_exportsin_progress","content":"data_exports.in_progress"},{"id":"data_exportscompleted","content":"data_exports.completed"},{"id":"data_exportsfailed","content":"data_exports.failed"},{"id":"data_exportscancelled","content":"data_exports.cancelled"},{"id":"fan-summary","content":"Fan Summary"},{"id":"fan_summarycompleted","content":"fan_summary.completed"}]}},{"_id":"/webhooks","title":"Webhooks","description":"Listen to events from your OnlyFans accounts on your webhook endpoint so your integration can automatically process data.","url":"/webhooks","structured":{"contents":[{"content":"title: Webhooks are for everyone!"},{"content":"type: success"},{"content":"All types of webhook events are available on every plan - Basic, Pro and Enterprise."},{"content":"title: Prefer no-code?"},{"content":"We offer native integrations for most no-code tools. Get started in minutes without writing a single line of code."},{"content":"A webhook is an HTTP endpoint that receives events from OnlyFans API. They allow you to be notified about events such as:"},{"content":"Receiving a message from a fan (messages.received)"},{"content":"New fan subscriptions (subscriptions.new)"},{"content":"Fan has renewed their subscription (subscriptions.renewed)"},{"content":"Fan purchased a PPV message (messages.ppv.unlocked)"},{"content":"And more! See a complete list of available webhook events"},{"content":"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."}],"headings":[]}},{"_id":"/webhooks/protecting-your-webhooks","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.","url":"/webhooks/protecting-your-webhooks","structured":{"contents":[{"content":"You can choose any signing secret, but it is recommended to use a long, random string."},{"heading":"how-the-signature-is-calculated","content":"We calculate the signature using the HMAC SHA256 algorithm. The payload (as json) is the string, and the signing secret is the key."},{"heading":"verifying-the-signature","content":"Below you can find examples of how to verify the signature in different programming languages."}],"headings":[{"id":"how-the-signature-is-calculated","content":"How the signature is calculated"},{"id":"verifying-the-signature","content":"Verifying the signature"}]}},{"_id":"/webhooks/subscribing-to-webhooks","title":"Subscribing to webhooks","description":"Listen to events from your OnlyFans accounts on your webhook endpoint so your integration can automatically process data.","url":"/webhooks/subscribing-to-webhooks","structured":{"contents":[{"content":"You can easily subscribe to webhooks using our console. To do this, follow these steps:"},{"content":"Go to the OnlyFans API Console -> Webhooks"},{"content":"Click on the + Add Webhook button"},{"content":"Fill in the Endpoint URL field with your webhook endpoint"},{"content":"Optionally, add a Signing Secret to verify the webhook payloads (recommended)"},{"content":"Select the events you want to subscribe to"},{"content":"Once you have added your webhook, you will start receiving events on your webhook endpoint.\nYou will be able to view the latest response status in the console."}],"headings":[]}},{"_id":"/introduction","title":"Introduction","description":"Welcome to the OnlyFansAPI.com documentation!","url":"/introduction","structured":{"contents":[{"heading":"why-onlyfansapicom","content":"OnlyFansAPI.com is a platform that allows you to interact with the OnlyFans API without the need to build\nyour proxy management system, reverse engineer the API, or deal with WebSockets."},{"heading":"why-onlyfansapicom","content":"Our engineers have spent years building 350+ simple REST API endpoints that cover everything OnlyFans agencies, creators, and developers need:"},{"heading":"why-onlyfansapicom","content":"Connect any OnlyFans account in under 2 minutes"},{"heading":"why-onlyfansapicom","content":"Read and send messages, posts, mass-DMs, and PPVs"},{"heading":"why-onlyfansapicom","content":"Pull earnings, transactions, fans, and chargebacks"},{"heading":"why-onlyfansapicom","content":"Manage media vault, queue, stories, and promotions"},{"heading":"why-onlyfansapicom","content":"Receive real-time webhook events for new messages, subs, tips, and more"},{"heading":"why-onlyfansapicom","content":"Search a database of 3.5M+ public OnlyFans creator profiles"},{"heading":"popular-use-cases","content":"What teams build on OnlyFansAPI today:"},{"heading":"popular-use-cases","content":"Server-side Smart Links attribute every click, sub, and dollar to the right creative. No pixels, no lost events."},{"heading":"popular-use-cases","content":"Server-side tracking for Meta, TikTok, and Snapchat media buyers — every click, sub, and dollar tied to the right creative. No pixels, no lost events."},{"heading":"popular-use-cases","content":"Read live chats, send replies, manage queue, and apply tags — the same surface our partners build chatbot products on."},{"heading":"popular-use-cases","content":"Our AI agency assistant in Telegram, Slack, and Discord — chat to manage creators, draft replies, run workflows, and get earnings digests."},{"heading":"popular-use-cases","content":"Pull statistics, transactions, and fan analytics into Postgres, BigQuery, or your in-house dashboard."},{"heading":"popular-use-cases","content":"350+ tools across chats, fans, and earnings via the OnlyFans MCP — ask in plain English, get reports, drafts, and digests."},{"heading":"popular-use-cases","content":"Trigger workflows on new messages, PPV purchases, subs, tips, and more — no engineer required."},{"heading":"popular-use-cases","content":"Schedule, target, and track mass-message performance across creators."},{"heading":"browse-the-docs","content":"OnlyFansAPI has different areas:"},{"heading":"browse-the-docs","content":"Every endpoint, request/response shapes, and SDK snippets."},{"heading":"browse-the-docs","content":"Get notified about new messages, subs, tips, chargebacks, and more."},{"heading":"browse-the-docs","content":"Server-side attribution links for Meta, TikTok, and Snapchat media buying."},{"heading":"browse-the-docs","content":"Run your agency from Claude, ChatGPT, or Manus via the OnlyFans MCP."},{"heading":"browse-the-docs","content":"Your AI agency assistant in Telegram, Slack, and Discord."},{"heading":"browse-the-docs","content":"No-code automations with n8n, Make, and Zapier."},{"heading":"browse-the-docs","content":"Bulk export transactions, messages, and more."},{"heading":"browse-the-docs","content":"OnlyFans API's official authentication library."},{"heading":"browse-the-docs","content":"Common questions about plans, limits, and account safety."},{"heading":"get-started","content":"Whether you're building a chatbot, OnlyFans Search Engine, OnlyFans CRM, or anything else, you can get started with OnlyFansAPI.com in minutes."},{"heading":"get-started","content":"Learn how to make your first API request and get started with OnlyFans API"},{"heading":"get-started","content":"Create your first API Key and start making requests"},{"heading":"get-started","content":"Learn how to connect you OnlyFans accounts in under 2 minutes"},{"heading":"get-started","content":"Get webhook notifications for new messages, new subscribers, tips, ..."}],"headings":[{"id":"why-onlyfansapicom","content":"Why OnlyFansAPI.com?"},{"id":"popular-use-cases","content":"Popular use cases"},{"id":"browse-the-docs","content":"Browse the docs"},{"id":"get-started","content":"Get started"}]}},{"_id":"/introduction/quickstart","title":"Quickstart (2m)","description":"Start using the OnlyFans API in minutes","url":"/introduction/quickstart","structured":{"contents":[{"heading":"getting-started-with-onlyfans-api","content":"Follow these steps to start using the OnlyFans API for your project."},{"heading":"1-create-your-api-key","content":"To get started with the OnlyFans API, you'll need an API key:"},{"heading":"1-create-your-api-key","content":"Sign up for an account at OnlyFans API Console"},{"heading":"1-create-your-api-key","content":"Navigate to the API Keys section"},{"heading":"1-create-your-api-key","content":"Create a new API key for your project"},{"heading":"1-create-your-api-key","content":"Save your API key securely - you'll need it for all API requests"},{"heading":"2-connect-your-onlyfans-account","content":"You'll need to connect your OnlyFans account to use the API. We offer two methods:"},{"heading":"automated-login-flow-recommended","content":"Go to OnlyFans API Console -> Accounts"},{"heading":"automated-login-flow-recommended","content":"Click \"+ Connect Account\""},{"heading":"automated-login-flow-recommended","content":"Follow the setup process (supports 2FA and captcha)"},{"heading":"manual-curl-method","content":"An alternative method using cURL request is available. See our detailed guide for instructions."},{"heading":"3-essential-concepts","content":"Before you start making API calls, familiarize yourself with these important concepts:"},{"heading":"3-essential-concepts","content":"Understand how our API responses are structured."},{"heading":"3-essential-concepts","content":"Understand API rate limits and how to handle them properly."},{"heading":"3-essential-concepts","content":"Learn about our credit-based billing and how to manage your usage."},{"heading":"3-essential-concepts","content":"Learn about proxy options for secure API access."},{"heading":"4-next-steps","content":"Once you're set up, you can:"},{"heading":"4-next-steps","content":"Explore our API endpoints in the API Reference"},{"heading":"4-next-steps","content":"Test API calls directly from our documentation"},{"heading":"4-next-steps","content":"Start building your application with our comprehensive guides"}],"headings":[{"id":"getting-started-with-onlyfans-api","content":"Getting Started with OnlyFans API"},{"id":"1-create-your-api-key","content":"1. Create Your API Key"},{"id":"2-connect-your-onlyfans-account","content":"2. Connect Your OnlyFans Account"},{"id":"automated-login-flow-recommended","content":"Automated Login Flow (Recommended)"},{"id":"manual-curl-method","content":"Manual cURL Method"},{"id":"3-essential-concepts","content":"3. Essential Concepts"},{"id":"4-next-steps","content":"4. Next Steps"}]}},{"_id":"/api-reference/overview","title":"OnlyFans API Overview","description":"Deep dive into our API endpoints and data structures","url":"/api-reference/overview","structured":{"contents":[{"heading":"not-sure-where-to-start","content":"Browse our frequently used API endpoints below to get a feel for what's possible with OnlyFans API."},{"heading":"not-sure-where-to-start","content":"title: Wondering which fields come from OnlyFans vs. OFAPI?"},{"heading":"not-sure-where-to-start","content":"Some endpoints pass OnlyFans data straight through, others enrich it with fields from our database, and some are computed entirely on our side. See Endpoint data sources for the full breakdown."},{"heading":"chats--messages-toc","content":"Retrieve the latest chats, including details like last message and fan details."},{"heading":"chats--messages-toc","content":"Retrieve messages from a specific chat."},{"heading":"chats--messages-toc","content":"Send a new chat message to a fan, including support for media and PPVs."},{"heading":"chats--messages-toc","content":"Send or schedule a mass message to collections or individual fans, including support for media and PPVs."},{"heading":"payouts--earnings-toc","content":"Get a summary of model earnings over time, including totals and breakdowns."},{"heading":"payouts--earnings-toc","content":"Get a list of earning transactions, including details like amount, type, and fan info."},{"heading":"payouts--earnings-toc","content":"Initiate a manual withdrawal, perfect for automating daily payouts."},{"heading":"fans--subscribers-toc","content":"Retrieve a list of all fans, and filter by online, total spendings, duration, and more."},{"heading":"fans--subscribers-toc","content":"Get a list of fans who have an active subscription."},{"heading":"fans--subscribers-toc","content":"Get a list of fans whose subscriptions have expired."},{"heading":"fans--subscribers-toc","content":"Get a list of fans within a specific date range."},{"heading":"media--vault-toc","content":"Retrieve a list of all fans, and filter by online, total spendings, duration, and more."},{"heading":"media--vault-toc","content":"Get a list of fans who have an active subscription."},{"heading":"media--vault-toc","content":"Upload an image, video or audio file to the OnlyFans CDN to include in a message or post."},{"heading":"media--vault-toc","content":"Download an image, video or audio file from OnlyFans to our own CDN."},{"heading":"media--vault-toc","content":"We have over 100 endpoints covering most OnlyFans functionality. Check out the sidebar to explore all available endpoints."},{"heading":"media--vault-toc","content":"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."},{"heading":"media--vault-toc","content":"Need something specific? Let us know! We're constantly adding new endpoints based on user feedback."}],"headings":[{"id":"not-sure-where-to-start","content":"Not sure where to start?"},{"id":"chats--messages-toc","content":"Chats & Messages [!toc]"},{"id":"payouts--earnings-toc","content":"Payouts & Earnings [!toc]"},{"id":"fans--subscribers-toc","content":"Fans & Subscribers [!toc]"},{"id":"media--vault-toc","content":"Media & Vault [!toc]"}]},"tag":"onlyfans"},{"_id":"/integrations/make/available-modules","title":"Available modules","description":"A list of all available OnlyFans API modules in Make.com.","url":"/integrations/make/available-modules","structured":{"contents":[{"content":"title: Looking for a specific module?"},{"content":"Please reach out to us, we can add it!"},{"heading":"instant-triggers","content":"An Instant Trigger (also known as a \"webhook\"), is a module that is executed immediately when an event occurs."},{"heading":"-chat-message-ppv-purchased","content":"A PPV (pay-per-view) message that you sent has been purchased by a fan"},{"heading":"-chat-message-received","content":"A new chat message has been received."},{"heading":"-chat-message-sent","content":"A new message has been sent from one of your OnlyFans accounts to a fan."},{"heading":"-new-subscription","content":"A new fan has subscribed."},{"heading":"-subscription-renewed","content":"A fan has renewed their subscription."},{"heading":"️-post-liked","content":"A fan has liked one of your posts."},{"heading":"-user-is-typing","content":"A fan is typing a message."},{"heading":"ℹ️-new-account-connected","content":"A new OnlyFans account was connected."},{"heading":"ℹ️-new-account-connected","content":"Please note that payload.client_reference_id can be null - it's only\nincluded if you provided us with client_reference_id while Creating Client\nSession"},{"heading":"ℹ️-account-connection-failed","content":"An OnlyFans account's connection has expired, and we couldn't automatically re-connect it using our system."},{"heading":"ℹ️-account-session-expired","content":"An OnlyFans account's connection has expired, but we're automatically re-connecting it using our system — you don't need to do anything."},{"heading":"ℹ️-face-otp-required-for-account","content":"Face verification is required to connect one of your OnlyFans accounts"},{"heading":"ℹ️-otp-code-required-for-account","content":"A two-factor authentication code is required to connect one of your OnlyFans accounts."},{"heading":"actions","content":"Actions are simple modules that return a single result."},{"heading":"-get-profile-view-duration-totals","content":"Get the view duration stats for guests, users, and combined for the specified timeframe."},{"heading":"-get-profile-visitor-totals","content":"Get the profile visit stats for guests, users, and combined for the specified timeframe."},{"heading":"-get-total-earnings","content":"Get the total earnings for a given period."},{"heading":"-payouts-list-earning-statistics","content":"List all earning statistics for the account."},{"heading":"-get-profile-visitors-top-countries","content":"Get the top countries of profile visitors for a specified timeframe"},{"heading":"-list-accounts","content":"List all connected OnlyFans accounts."},{"heading":"-list-earnings-monetary-values","content":"Get the earnings in monetary values for a given period. E.g. 123.45"},{"heading":"-list-earnings-transaction-count","content":"Get the transaction counts for a given period. E.g. 123"},{"heading":"-list-tracking-links","content":"List all tracking links & their revenue data for the account."},{"heading":"-list-tracking-link-subscribers","content":"Get list of subscribers who joined through a Tracking Link."},{"heading":"-list-transactions","content":"Get a paginated list of transactions for an Account. Newest transactions are first."},{"heading":"-list-trial-links","content":"List all trial links & their revenue data for the account."},{"heading":"make-a-custom-api-call","content":"Call any OnlyFans API endpoint from Make.com."}],"headings":[{"id":"instant-triggers","content":"Instant Triggers"},{"id":"-chat-message-ppv-purchased","content":"🤑 Chat Message PPV Purchased"},{"id":"-chat-message-received","content":"📥 Chat Message Received"},{"id":"-chat-message-sent","content":"📤 Chat Message Sent"},{"id":"-new-subscription","content":"🎉 New Subscription"},{"id":"-subscription-renewed","content":"🎉 Subscription renewed"},{"id":"️-post-liked","content":"❤️ Post Liked"},{"id":"-user-is-typing","content":"💬 User is Typing"},{"id":"ℹ️-new-account-connected","content":"ℹ️ New Account Connected"},{"id":"ℹ️-account-connection-failed","content":"ℹ️ Account Connection Failed"},{"id":"ℹ️-account-session-expired","content":"ℹ️ Account Session Expired"},{"id":"ℹ️-face-otp-required-for-account","content":"ℹ️ Face OTP Required For Account"},{"id":"ℹ️-otp-code-required-for-account","content":"ℹ️ OTP Code Required For Account"},{"id":"actions","content":"Actions"},{"id":"-get-profile-view-duration-totals","content":"🕘 Get Profile View Duration Totals"},{"id":"-get-profile-visitor-totals","content":"📈 Get Profile Visitor Totals"},{"id":"-get-total-earnings","content":"💰 Get Total Earnings"},{"id":"searches","content":"Searches"},{"id":"-payouts-list-earning-statistics","content":"📈 [Payouts] List Earning Statistics"},{"id":"-get-profile-visitors-top-countries","content":"🌍 Get Profile Visitors (Top Countries)"},{"id":"-list-accounts","content":"📋 List Accounts"},{"id":"-list-earnings-monetary-values","content":"💰 List Earnings (monetary values)"},{"id":"-list-earnings-transaction-count","content":"💰 List Earnings (transaction count)"},{"id":"-list-tracking-links","content":"🔗 List Tracking Links"},{"id":"-list-tracking-link-subscribers","content":"🔗 List Tracking Link Subscribers"},{"id":"-list-transactions","content":"💳 List Transactions"},{"id":"-list-trial-links","content":"🆓 List Trial Links"},{"id":"universal","content":"Universal"},{"id":"make-a-custom-api-call","content":"Make a custom API call"}]}},{"_id":"/integrations/make","title":"Make.com & OnlyFans - Quickstart","description":"Best for simple OnlyFans automations, all without writing code. Ideal for users who want simple visual workflow design.","url":"/integrations/make","structured":{"contents":[{"heading":"prerequisites","content":"To get started, you must have:"},{"heading":"prerequisites","content":"An OnlyFans API account with a creator account connected"},{"heading":"prerequisites","content":"A Make.com account"},{"heading":"getting-started","content":"Install our Make.com integration:"},{"heading":"getting-started","content":"It only takes a few seconds."},{"heading":"go-to-a-make-scenario-or-create-a-new-scenario-toc","content":"Go to the Scenarios page in Make.com, click on the relevant scenario, or click on \"Create a new scenario\"."},{"heading":"add-the-onlyfans-api-app-toc","content":"Click on the \"+\" button to add an app, and search for \"OnlyFans API\"."},{"heading":"save-the-new-api-key-in-makecom-toc","content":"Give the connection a helpful name, paste the API key, and click \"Save\"."},{"heading":"save-the-new-api-key-in-makecom-toc","content":"type: success"},{"heading":"save-the-new-api-key-in-makecom-toc","content":"title: That's it!"},{"heading":"save-the-new-api-key-in-makecom-toc","content":"You're now ready to use the OnlyFans API app in your Make.com scenario."}],"headings":[{"id":"prerequisites","content":"Prerequisites"},{"id":"getting-started","content":"Getting started"},{"id":"connecting-your-onlyfans-api-account-to-makecom","content":"Connecting your OnlyFans API account to Make.com"},{"id":"go-to-a-make-scenario-or-create-a-new-scenario-toc","content":"Go to a Make scenario, or create a new scenario [!toc]"},{"id":"add-the-onlyfans-api-app-toc","content":"Add the OnlyFans API app [!toc]"},{"id":"select-or-search-for-a-module-toc","content":"Select or search for a module [!toc]"},{"id":"add-a-new-api-connection-toc","content":"Add a new API connection [!toc]"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"go-to-the-onlyfans-api-console---api-keys-toc","content":"Go to the OnlyFans API console -> API Keys [!toc]"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc-1","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"give-it-a-name-and-press-add-toc","content":"Give it a name, and press \"Add\" [!toc]"},{"id":"copy-the-api-key-to-your-clipboard-toc","content":"Copy the API key to your clipboard [!toc]"},{"id":"save-the-new-api-key-in-makecom-toc","content":"Save the new API key in Make.com [!toc]"},{"id":"tutorial-video","content":"Tutorial Video"}]}},{"_id":"/integrations/make/ready-made-scenarios","title":"Ready-made scenarios","description":"Can't wait to get started? Use our ready-made scenarios to get going in a matter of minutes!","url":"/integrations/make/ready-made-scenarios","structured":{"contents":[{"heading":"account-synchronization-toc","content":"This scenario will synchronize your OnlyFans accounts with Airtable, and update the data once a day."},{"heading":"hourly-account-revenue-data-toc","content":"This scenario will synchronize your OnlyFans account revenue data with Airtable. Every account will have one record for each day, which updates hourly."},{"heading":"how-to-use-the-scenario-blueprints","content":"title: We recommend creating a new scenario and importing the blueprint there."},{"heading":"how-to-use-the-scenario-blueprints","content":"If you import a blueprint while editing another scenario that hasn't been saved, all the changes in that scenario will be lost."},{"heading":"how-to-use-the-scenario-blueprints","content":"To import a blueprint:"},{"heading":"click-choose-file-select-the-blueprint-file-in-json-format-and-click-save-toc","content":"type: success"},{"heading":"click-choose-file-select-the-blueprint-file-in-json-format-and-click-save-toc","content":"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."}],"headings":[{"id":"available-blueprints","content":"Available blueprints"},{"id":"account-synchronization-toc","content":"Account synchronization [!toc]"},{"id":"hourly-account-revenue-data-toc","content":"Hourly account revenue data [!toc]"},{"id":"how-to-use-the-scenario-blueprints","content":"How to use the scenario blueprints"},{"id":"on-the-scenario-builder-toolbar-click-the-three-dots--import-blueprint-toc","content":"On the Scenario Builder toolbar, click the three dots > Import blueprint. [!toc]"},{"id":"click-choose-file-select-the-blueprint-file-in-json-format-and-click-save-toc","content":"Click Choose File, select the blueprint file in .json format, and click Save. [!toc]"}]}},{"_id":"/integrations/n8n/available-modules","title":"n8n & OnlyFans - Available modules","description":"A list of all available OnlyFans API modules in n8n.","url":"/integrations/n8n/available-modules","structured":{"contents":[{"content":"title: This integration supports every OnlyFans API endpoint!"},{"content":"type: success"},{"content":"icon: <ZapIcon size={18} className=\"text-(--callout-color)\"/>"},{"content":"Our n8n integration is our most actively maintained integration, and it supports every single endpoint in our API."},{"content":"title: Available in official n8n node library or self-hosted instances"},{"content":"type: success"},{"content":"Currently, our n8n integration is available in the official n8n nodes library or as a self-hosted instance."},{"heading":"pick-your-platform","content":"We currently offer two API surfaces. Choose the one you're building against to explore its endpoints."},{"heading":"pick-your-platform","content":"Our most popular API with 350+ endpoints covering messaging, fans, media, payouts, posts, and more."},{"heading":"pick-your-platform","content":"Our brand-new Fansly API, currently in closed beta with a public launch coming soon."}],"headings":[{"id":"pick-your-platform","content":"Pick your platform"}]}},{"_id":"/integrations/n8n","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.","url":"/integrations/n8n","structured":{"contents":[{"content":"title: This integration supports every OnlyFans API endpoint!"},{"content":"type: success"},{"content":"icon: <ZapIcon size={18} className=\"text-(--callout-color)\"/>"},{"content":"Our n8n integration is our most actively maintained integration, and it supports every single endpoint in our API."},{"content":"title: Available in official n8n node library or self-hosted instances"},{"content":"type: success"},{"content":"Currently, our n8n integration is available in the official n8n nodes library or as a self-hosted instance."},{"heading":"prerequisites","content":"To get started, you must have:"},{"heading":"prerequisites","content":"If you don't have one yet, registering takes just a few seconds."},{"heading":"prerequisites","content":"» Create a free account"},{"heading":"prerequisites","content":"You can either use n8n's native infrastructure, or a one-click provider. Some popular options are:"},{"heading":"installing-the-onlyfans-api-node","content":"type: info"},{"heading":"installing-the-onlyfans-api-node","content":"title: Limited to n8n instance owners"},{"heading":"installing-the-onlyfans-api-node","content":"Only the n8n instance owner can install and manage verified community nodes.\nThe instance owner is the person who sets up and manages user management.\nAll members of an n8n instance can use already installed community nodes in their workflows."},{"heading":"installing-the-onlyfans-api-node","content":"To install the OnlyFans API node in your n8n instance:"},{"heading":"installing-the-onlyfans-api-node","content":"Log in to your n8n instance."},{"heading":"installing-the-onlyfans-api-node","content":"Create a new workflow by clicking on \"Create workflow\" in the top right corner."},{"heading":"installing-the-onlyfans-api-node","content":"Go to the Canvas and open the nodes panel (either by selecting '+' or pressing Tab)."},{"heading":"installing-the-onlyfans-api-node","content":"Search for \"OnlyFans API\" in the nodes panel, and select it. This takes you to a detailed view of the OnlyFans API node, showing all the supported actions."},{"heading":"installing-the-onlyfans-api-node","content":"Next to our logo, click on the \"Install node\" button.\nThis will install the node for your instance and enable all members to use it in their workflows."},{"heading":"installing-the-onlyfans-api-node","content":"That's it! You can now add the node to your workflows."},{"heading":"updating-the-onlyfans-api-node","content":"We frequently release updates to our n8n node, adding new features and fixing bugs. To update to the latest version, follow the instructions below:"},{"heading":"updating-the-onlyfans-api-node","content":"Access the \"Community nodes\" page through the n8n settings"},{"heading":"updating-the-onlyfans-api-node","content":"Find the OnlyFans API node in the list of installed nodes, and click on the \"Update\" button next to it"},{"heading":"updating-the-onlyfans-api-node","content":"Follow the prompts to complete the update process."},{"heading":"updating-the-onlyfans-api-node","content":"Access your Docker shell:"},{"heading":"updating-the-onlyfans-api-node","content":"Update our node through your package manager:"},{"heading":"connecting-your-onlyfans-api-account-to-n8n","content":"Head to your n8n instance's homepage, and click on \"Create Credential\"\nin the \"Create Workflow\" dropdown."},{"heading":"connecting-your-onlyfans-api-account-to-n8n","content":"Select \"OnlyFans API\" from the list of available credential types, and\nclick \"Continue\"."},{"heading":"copy-the-api-key-to-your-clipboard-toc","content":"Paste the API key into the \"API Key\" field, and click \"Save\"."}],"headings":[{"id":"prerequisites","content":"Prerequisites"},{"id":"installing-the-onlyfans-api-node","content":"Installing the OnlyFans API node"},{"id":"updating-the-onlyfans-api-node","content":"Updating the OnlyFans API node"},{"id":"connecting-your-onlyfans-api-account-to-n8n","content":"Connecting your OnlyFans API account to n8n"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"go-to-the-onlyfans-api-console---api-keys-toc","content":"Go to the OnlyFans API console -> API Keys [!toc]"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc-1","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"give-it-a-name-and-press-add-toc","content":"Give it a name, and press \"Add\" [!toc]"},{"id":"copy-the-api-key-to-your-clipboard-toc","content":"Copy the API key to your clipboard [!toc]"}]}},{"_id":"/integrations/n8n/main-callouts","title":"Notes","url":"/integrations/n8n/main-callouts","structured":{"contents":[{"content":"title: This integration supports every OnlyFans API endpoint!"},{"content":"type: success"},{"content":"icon: <ZapIcon size={18} className=\"text-(--callout-color)\"/>"},{"content":"Our n8n integration is our most actively maintained integration, and it supports every single endpoint in our API."},{"content":"title: Available in official n8n node library or self-hosted instances"},{"content":"type: success"},{"content":"Currently, our n8n integration is available in the official n8n nodes library or as a self-hosted instance."}],"headings":[]}},{"_id":"/integrations/zapier/available-modules","title":"Available modules","description":"A list of all available OnlyFans API modules in Zapier.","url":"/integrations/zapier/available-modules","structured":{"contents":[{"content":"title: Looking for a specific module?"},{"content":"Please reach out to us, we can add it!"},{"heading":"instant-triggers","content":"An Instant Trigger (also known as a \"webhook\"), is a module that is executed immediately when an event occurs."},{"heading":"-chat-message-ppv-purchased","content":"A PPV (pay-per-view) message that you sent has been purchased by a fan"},{"heading":"-chat-message-received","content":"A new chat message has been received."},{"heading":"-chat-message-sent","content":"A new message has been sent from one of your OnlyFans accounts to a fan."},{"heading":"-new-subscriber","content":"A new fan has subscribed."},{"heading":"-subscription-renewed","content":"A fan has renewed their subscription."},{"heading":"️-post-liked","content":"A fan has liked one of your posts."},{"heading":"-fan-is-typing","content":"A fan is typing a message."},{"heading":"ℹ️-account-connected","content":"A new OnlyFans account was connected."},{"heading":"ℹ️-account-reconnected","content":"An OnlyFans account was reconnected."},{"heading":"ℹ️-account-connection-failed","content":"An OnlyFans account's connection has expired, and we couldn't automatically re-connect it using our system."},{"heading":"ℹ️-account-session-expired","content":"An OnlyFans account's connection has expired, but we're automatically re-connecting it using our system — you don't need to do anything."},{"heading":"ℹ️-account-requires-face-verification","content":"Face verification is required to connect one of your OnlyFans accounts"},{"heading":"ℹ️-account-requires-otp-2fa-code","content":"A two-factor authentication code is required to connect one of your OnlyFans accounts."}],"headings":[{"id":"instant-triggers","content":"Instant Triggers"},{"id":"-chat-message-ppv-purchased","content":"🤑 Chat Message PPV Purchased"},{"id":"-chat-message-received","content":"📥 Chat Message Received"},{"id":"-chat-message-sent","content":"📤 Chat Message Sent"},{"id":"-new-subscriber","content":"🎉 New Subscriber"},{"id":"-subscription-renewed","content":"🎉 Subscription renewed"},{"id":"️-post-liked","content":"❤️ Post Liked"},{"id":"-fan-is-typing","content":"💬 Fan is Typing"},{"id":"ℹ️-account-connected","content":"ℹ️ Account Connected"},{"id":"ℹ️-account-reconnected","content":"ℹ️ Account Reconnected"},{"id":"ℹ️-account-connection-failed","content":"ℹ️ Account Connection Failed"},{"id":"ℹ️-account-session-expired","content":"ℹ️ Account Session Expired"},{"id":"ℹ️-account-requires-face-verification","content":"ℹ️ Account Requires Face Verification"},{"id":"ℹ️-account-requires-otp-2fa-code","content":"ℹ️ Account Requires OTP (2FA) Code"}]}},{"_id":"/integrations/zapier","title":"Zapier & OnlyFans - Quickstart","description":"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.","url":"/integrations/zapier","structured":{"contents":[{"heading":"prerequisites","content":"To get started, you must have:"},{"heading":"prerequisites","content":"An OnlyFans API account with a creator account connected"},{"heading":"prerequisites","content":"A Zapier account"},{"heading":"getting-started","content":"Install our Zapier app:"},{"heading":"getting-started","content":"It only takes a few seconds."},{"heading":"create-a-new-zap-or-edit-an-existing-one-toc","content":"Build automated OnlyFans workflows by creating your first Zap."},{"heading":"your-zapier-account-is-now-connected-to-onlyfans-api-toc-if-all-went","content":"well, under \"Account\", Zapier will show your API key name, and the name of\nyour OnlyFans API team."},{"heading":"your-zapier-account-is-now-connected-to-onlyfans-api-toc-if-all-went","content":"type: success"},{"heading":"your-zapier-account-is-now-connected-to-onlyfans-api-toc-if-all-went","content":"title: That's it!"},{"heading":"your-zapier-account-is-now-connected-to-onlyfans-api-toc-if-all-went","content":"You're now ready to use the OnlyFans API app in your Zaps."}],"headings":[{"id":"prerequisites","content":"Prerequisites"},{"id":"getting-started","content":"Getting started"},{"id":"connecting-your-onlyfans-api-account-to-zapier","content":"Connecting your OnlyFans API account to Zapier"},{"id":"create-a-new-zap-or-edit-an-existing-one-toc","content":"Create a new Zap, or edit an existing one [!toc]"},{"id":"choose-the-onlyfans-api-app-as-the-trigger-toc","content":"Choose the OnlyFans API App as the trigger [!toc]"},{"id":"select-a-trigger-event-toc-","content":"Select a trigger event [!toc]"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"go-to-the-onlyfans-api-console---api-keys-toc","content":"Go to the OnlyFans API console -> API Keys [!toc]"},{"id":"create-a-new-api-key-from-the-onlyfans-api-console-toc-1","content":"Create a new API key from the OnlyFans API Console [!toc]"},{"id":"give-it-a-name-and-press-add-toc","content":"Give it a name, and press \"Add\" [!toc]"},{"id":"copy-the-api-key-to-your-clipboard-toc","content":"Copy the API key to your clipboard [!toc]"},{"id":"connect-zapier-with-onlyfans-api-toc-","content":"Connect Zapier with OnlyFans API [!toc]"},{"id":"paste-the-api-key-into-the-zapier-connection-window-toc","content":"Paste the API Key into the Zapier connection window [!toc]"},{"id":"your-zapier-account-is-now-connected-to-onlyfans-api-toc-if-all-went","content":"Your Zapier account is now connected to OnlyFans API [!toc] If all went"}]}},{"_id":"/introduction/essentials/credits","title":"Credit System","description":"Understanding credit allocation and subscription plans","url":"/introduction/essentials/credits","structured":{"contents":[{"heading":"credit-cost-overview","content":"Please refer to the table below to get a general overview of the credit cost for our endpoints."},{"heading":"credit-cost-overview","content":"For detailed information about where to find credit information in API responses, see our Response Structure documentation."},{"heading":"credit-cost-overview","content":"Endpoint(s)"},{"heading":"credit-cost-overview","content":"Cost"},{"heading":"credit-cost-overview","content":"Notes"},{"heading":"credit-cost-overview","content":"Search Profiles"},{"heading":"credit-cost-overview","content":"1 credit per result"},{"heading":"credit-cost-overview","content":"E.g. if your search query has 10 results, you will be debited 10 credits."},{"heading":"credit-cost-overview","content":"Media Uploading"},{"heading":"credit-cost-overview","content":"3 credits per MB"},{"heading":"credit-cost-overview","content":"For easy calculation, we use decimal measurements. This means that 1MB is 1,000 KB."},{"heading":"credit-cost-overview","content":"Media Downloading"},{"heading":"credit-cost-overview","content":"3 credits per MB"},{"heading":"credit-cost-overview","content":"For easy calculation, we use decimal measurements. This means that 1MB is 1,000 KB."},{"heading":"credit-cost-overview","content":"Webhooks"},{"heading":"credit-cost-overview","content":"1 credit per 100 Webhook events"},{"heading":"credit-cost-overview","content":"-"},{"heading":"credit-cost-overview","content":"Data Exports (Public Profiles)"},{"heading":"credit-cost-overview","content":"3 credits per profile"},{"heading":"credit-cost-overview","content":"-"},{"heading":"credit-cost-overview","content":"Data Exports (Other)"},{"heading":"credit-cost-overview","content":"1 credit per 20 results"},{"heading":"credit-cost-overview","content":"Applies to: Transactions, Chat Messages, Media, Trial Links, Tracking Links, Payouts, Chargebacks, Fans, Followings"},{"heading":"credit-cost-overview","content":"AI Profile Summaries"},{"heading":"credit-cost-overview","content":"200 credits per generation"},{"heading":"credit-cost-overview","content":"Applies to both initial generation and re-generation."},{"heading":"credit-cost-overview","content":"All other uncached responses"},{"heading":"credit-cost-overview","content":"1 credit per request"},{"heading":"credit-cost-overview","content":"-"},{"heading":"credit-cost-overview","content":"All other cached responses"},{"heading":"credit-cost-overview","content":"0 credits"},{"heading":"credit-cost-overview","content":"-"},{"heading":"cached-responses","content":"Public endpoints make use of automatic caching by default, and thus won't cost you any credits if a cached response already exists."},{"heading":"cached-responses","content":"Account-specific endpoints will never be cached, and will always give you\na fresh response from OnlyFans."},{"heading":"forcing-a-fresh-response","content":"You can force a fresh response by appending the endpoint URL with ?fresh=true"},{"heading":"uncached-responses","content":"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."},{"heading":"subscription-plans","content":"Our subscription tiers provide different credit allocations:"},{"heading":"subscription-plans","content":"• Perfect for small to medium projects• Includes all basic features• Automatic credit tracking"},{"heading":"subscription-plans","content":"• Ideal for larger applications• Priority support• Advanced features included"},{"heading":"subscription-plans","content":"• Tailored to your needs• Contact us to discuss requirements• Custom features and support"},{"heading":"credit-features","content":"All subscription tiers include:"},{"heading":"credit-features","content":"• Up to 200% of monthly allocation• Automatic rollover management• No manual activation required"},{"heading":"credit-features","content":"• Real-time balance tracking• Detailed usage analytics• Automated notifications"},{"heading":"credit-features","content":"• Automatic response caching• Zero-credit cached responses• Cache control with ?fresh=true"},{"heading":"monitoring-tools","content":"You can easily track your credit usage through all of our API responses, and through our Console"},{"heading":"monitoring-tools","content":"Real-time credit balance"},{"heading":"monitoring-tools","content":"Request-specific credit usage"},{"heading":"monitoring-tools","content":"Cache status indicators"},{"heading":"monitoring-tools","content":"Real-time credit balance"},{"heading":"monitoring-tools","content":"View your rate limit usage"},{"heading":"monitoring-tools","content":"Easily purchase more credits"},{"heading":"credit-management","content":"Best practices for optimizing credit usage:"},{"heading":"credit-management","content":"Leverage cached responses when possible."},{"heading":"credit-management","content":"Monitor your credit balance regularly."},{"heading":"credit-management","content":"Review usage patterns regularly. Consider optimizing your requests."},{"heading":"credit-management","content":"Cached responses are free and don't consume any credits from your balance.\nThis applies to public endpoints like profile information."},{"heading":"enterprise-solutions","content":"For high-volume requirements, we offer:"},{"heading":"enterprise-solutions","content":"Please contact our team to discuss your specific needs and get a tailored solution."}],"headings":[{"id":"credit-calculator","content":"Credit calculator"},{"id":"credit-cost-overview","content":"Credit cost overview"},{"id":"cached-vs-uncached","content":"Cached vs uncached"},{"id":"cached-responses","content":"Cached responses"},{"id":"forcing-a-fresh-response","content":"Forcing a fresh response"},{"id":"uncached-responses","content":"Uncached responses"},{"id":"subscription-plans","content":"Subscription Plans"},{"id":"credit-features","content":"Credit Features"},{"id":"monitoring-tools","content":"Monitoring Tools"},{"id":"credit-management","content":"Credit Management"},{"id":"enterprise-solutions","content":"Enterprise Solutions"}]}},{"_id":"/introduction/essentials/endpoint-data-sources","title":"Endpoint Data Sources","description":"Where the data on each OFAPI endpoint comes from — OnlyFans, OFAPI's own database, or a mix of both.","url":"/introduction/essentials/endpoint-data-sources","structured":{"contents":[{"content":"We classify every endpoint as one of three types:"},{"content":"We make a live request to OnlyFans and then enriches the response\nwith fields from the our database (timestamps, tags, computed classifications, etc.)."},{"content":"We never call OnlyFans during the request.\nThe response is built entirely from data we have stored, synced, or calculated."},{"content":"Anything not listed as Hybrid or Computed.\nThe response is straight from OnlyFans, with no enrichment."},{"heading":"quick-answers-to-common-questions","content":"GET /{account}/statistics/overview → Live passthrough. The numbers come straight from OnlyFans."},{"heading":"quick-answers-to-common-questions","content":"GET /{account}/fans/active → Hybrid. OnlyFans response plus a lastReplyAt timestamp on each fan, sourced from the OFAPI database."},{"heading":"quick-answers-to-common-questions","content":"GET /{account}/transactions → Hybrid. OnlyFans response plus a computed type field (subs, tips, post, chat_messages, stream)."},{"heading":"hybrid-endpoints","content":"These endpoints call OnlyFans live and then enrich the response with extra fields from the OFAPI database. The \"Enriched with\" column lists exactly what OFAPI adds on top of the OnlyFans payload."},{"heading":"hybrid-endpoints","content":"HTTP"},{"heading":"hybrid-endpoints","content":"Path"},{"heading":"hybrid-endpoints","content":"Enriched by OFAPI"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/chats"},{"heading":"hybrid-endpoints","content":"lastReplyAt per chat"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/chats/{chat_id}/messages"},{"heading":"hybrid-endpoints","content":"lastReplyAt per participant"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/fans/all"},{"heading":"hybrid-endpoints","content":"lastReplyAt per fan"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/fans/active"},{"heading":"hybrid-endpoints","content":"lastReplyAt per fan"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/fans/expired"},{"heading":"hybrid-endpoints","content":"lastReplyAt per fan"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/fans/latest"},{"heading":"hybrid-endpoints","content":"lastReplyAt per fan"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/fans/top"},{"heading":"hybrid-endpoints","content":"lastReplyAt per fan"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/users/{username}"},{"heading":"hybrid-endpoints","content":"lastReplyAt (if the user is a fan)"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/transactions"},{"heading":"hybrid-endpoints","content":"Computed type (subs / tips / post / chat_messages / stream), derived from the OF description"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/tracking-links"},{"heading":"hybrid-endpoints","content":"Tags, cached revenue & spender counts, full campaign URL prefixed with the creator's profile URL"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/trial-links"},{"heading":"hybrid-endpoints","content":"Tags, cached revenue & spender counts, full campaign URL"},{"heading":"hybrid-endpoints","content":"GET"},{"heading":"hybrid-endpoints","content":"/{account}/engagement/messages/top-message"},{"heading":"hybrid-endpoints","content":"Engagement stats joined onto the message metadata"},{"heading":"computed-endpoints","content":"These endpoints never hit OnlyFans during the request. The response is built entirely from data OFAPI has stored, synced, or calculated."},{"heading":"smart-links-analytics--management","content":"HTTP"},{"heading":"smart-links-analytics--management","content":"Path"},{"heading":"smart-links-analytics--management","content":"Notes"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links"},{"heading":"smart-links-analytics--management","content":"List smart links"},{"heading":"smart-links-analytics--management","content":"POST"},{"heading":"smart-links-analytics--management","content":"/smart-links"},{"heading":"smart-links-analytics--management","content":"Create a smart link"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}"},{"heading":"smart-links-analytics--management","content":"Fetch a single smart link"},{"heading":"smart-links-analytics--management","content":"DELETE"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}"},{"heading":"smart-links-analytics--management","content":"Delete a smart link"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/stats"},{"heading":"smart-links-analytics--management","content":"Clicks, subs, revenue, spenders aggregated from OFAPI tables"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/cohort-arps"},{"heading":"smart-links-analytics--management","content":"ARPS by acquisition cohort"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/fans"},{"heading":"smart-links-analytics--management","content":"Attributed fans with aggregate metrics"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/spenders"},{"heading":"smart-links-analytics--management","content":"Fans where spend > 0"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/clicks"},{"heading":"smart-links-analytics--management","content":"Raw click rows"},{"heading":"smart-links-analytics--management","content":"GET"},{"heading":"smart-links-analytics--management","content":"/smart-links/{smart_link_id}/conversions"},{"heading":"smart-links-analytics--management","content":"Raw conversion rows"},{"heading":"stored-cache-link-inventory","content":"Explicitly free — these never call OnlyFans."},{"heading":"stored-cache-link-inventory","content":"HTTP"},{"heading":"stored-cache-link-inventory","content":"Path"},{"heading":"stored-cache-link-inventory","content":"Notes"},{"heading":"stored-cache-link-inventory","content":"GET"},{"heading":"stored-cache-link-inventory","content":"/{account}/stored/tracking-links"},{"heading":"stored-cache-link-inventory","content":"Cached tracking links"},{"heading":"stored-cache-link-inventory","content":"GET"},{"heading":"stored-cache-link-inventory","content":"/{account}/stored/trial-links"},{"heading":"stored-cache-link-inventory","content":"Cached free trial links"},{"heading":"stored-cache-link-inventory","content":"GET"},{"heading":"stored-cache-link-inventory","content":"/{account}/stored/shared-tracking-links"},{"heading":"stored-cache-link-inventory","content":"Cached shared tracking links"},{"heading":"stored-cache-link-inventory","content":"GET"},{"heading":"stored-cache-link-inventory","content":"/{account}/stored/shared-trial-links"},{"heading":"stored-cache-link-inventory","content":"Cached shared free trial links"},{"heading":"webhooks","content":"HTTP"},{"heading":"webhooks","content":"Path"},{"heading":"webhooks","content":"Notes"},{"heading":"webhooks","content":"GET"},{"heading":"webhooks","content":"/{account}/webhooks"},{"heading":"webhooks","content":"List webhooks"},{"heading":"webhooks","content":"POST"},{"heading":"webhooks","content":"/{account}/webhooks"},{"heading":"webhooks","content":"Create a webhook"},{"heading":"webhooks","content":"GET"},{"heading":"webhooks","content":"/{account}/webhooks/{webhook_id}"},{"heading":"webhooks","content":"Fetch a single webhook"},{"heading":"webhooks","content":"PUT"},{"heading":"webhooks","content":"/{account}/webhooks/{webhook_id}"},{"heading":"webhooks","content":"Update a webhook"},{"heading":"webhooks","content":"DELETE"},{"heading":"webhooks","content":"/{account}/webhooks/{webhook_id}"},{"heading":"webhooks","content":"Delete a webhook"},{"heading":"webhooks","content":"GET"},{"heading":"webhooks","content":"/{account}/webhooks/events"},{"heading":"webhooks","content":"Enum of available event types"},{"heading":"webhooks","content":"GET"},{"heading":"webhooks","content":"/{account}/webhooks/{webhookEventType}/example-payload"},{"heading":"webhooks","content":"Static payload generator"},{"heading":"data-exports","content":"HTTP"},{"heading":"data-exports","content":"Path"},{"heading":"data-exports","content":"Notes"},{"heading":"data-exports","content":"GET"},{"heading":"data-exports","content":"/data-exports"},{"heading":"data-exports","content":"List data exports"},{"heading":"data-exports","content":"POST"},{"heading":"data-exports","content":"/data-exports"},{"heading":"data-exports","content":"Create a data export"},{"heading":"data-exports","content":"GET"},{"heading":"data-exports","content":"/data-exports/{data_export_id}"},{"heading":"data-exports","content":"Fetch a single data export"},{"heading":"data-exports","content":"POST"},{"heading":"data-exports","content":"/data-exports/{data_export_id}/start"},{"heading":"data-exports","content":"Start a data export"},{"heading":"data-exports","content":"DELETE"},{"heading":"data-exports","content":"/data-exports/{data_export_id}"},{"heading":"data-exports","content":"Delete a data export"},{"heading":"data-exports","content":"POST"},{"heading":"data-exports","content":"/data-exports/{data_export_id}/retry"},{"heading":"data-exports","content":"Retry a data export"},{"heading":"link-tags","content":"Tags live entirely in the OFAPI database — none of these endpoints touch OnlyFans."},{"heading":"link-tags","content":"HTTP"},{"heading":"link-tags","content":"Path"},{"heading":"link-tags","content":"Notes"},{"heading":"link-tags","content":"GET"},{"heading":"link-tags","content":"/link-tags"},{"heading":"link-tags","content":"List every tag in your org"},{"heading":"link-tags","content":"GET"},{"heading":"link-tags","content":"/{account}/tracking-links/{tracking_link_id}/tags"},{"heading":"link-tags","content":"List tags on a tracking link"},{"heading":"link-tags","content":"POST"},{"heading":"link-tags","content":"/{account}/tracking-links/{tracking_link_id}/tags"},{"heading":"link-tags","content":"Add tags to a tracking link"},{"heading":"link-tags","content":"DELETE"},{"heading":"link-tags","content":"/{account}/tracking-links/{tracking_link_id}/tags"},{"heading":"link-tags","content":"Remove tags from a tracking link"},{"heading":"link-tags","content":"GET"},{"heading":"link-tags","content":"/{account}/trial-links/{trial_link_id}/tags"},{"heading":"link-tags","content":"List tags on a free trial link"},{"heading":"link-tags","content":"POST"},{"heading":"link-tags","content":"/{account}/trial-links/{trial_link_id}/tags"},{"heading":"link-tags","content":"Add tags to a free trial link"},{"heading":"link-tags","content":"DELETE"},{"heading":"link-tags","content":"/{account}/trial-links/{trial_link_id}/tags"},{"heading":"link-tags","content":"Remove tags from a free trial link"},{"heading":"link-tags","content":"GET"},{"heading":"link-tags","content":"/{account}/shared-tracking-links/{shared_tracking_link_id}/tags"},{"heading":"link-tags","content":"List tags on a shared tracking link"},{"heading":"link-tags","content":"POST"},{"heading":"link-tags","content":"/{account}/shared-tracking-links/{shared_tracking_link_id}/tags"},{"heading":"link-tags","content":"Add tags to a shared tracking link"},{"heading":"link-tags","content":"DELETE"},{"heading":"link-tags","content":"/{account}/shared-tracking-links/{shared_tracking_link_id}/tags"},{"heading":"link-tags","content":"Remove tags from a shared tracking link"},{"heading":"link-tags","content":"GET"},{"heading":"link-tags","content":"/{account}/shared-trial-links/{shared_trial_link_id}/tags"},{"heading":"link-tags","content":"List tags on a shared free trial link"},{"heading":"link-tags","content":"POST"},{"heading":"link-tags","content":"/{account}/shared-trial-links/{shared_trial_link_id}/tags"},{"heading":"link-tags","content":"Add tags to a shared free trial link"},{"heading":"link-tags","content":"DELETE"},{"heading":"link-tags","content":"/{account}/shared-trial-links/{shared_trial_link_id}/tags"},{"heading":"link-tags","content":"Remove tags from a shared free trial link"},{"heading":"auth--accounts","content":"The request itself only reads or writes OFAPI rows; the actual OnlyFans login runs asynchronously in a queued job."},{"heading":"auth--accounts","content":"HTTP"},{"heading":"auth--accounts","content":"Path"},{"heading":"auth--accounts","content":"Notes"},{"heading":"auth--accounts","content":"GET"},{"heading":"auth--accounts","content":"/whoami"},{"heading":"auth--accounts","content":"Identify the current API key"},{"heading":"auth--accounts","content":"GET"},{"heading":"auth--accounts","content":"/accounts"},{"heading":"auth--accounts","content":"List connected OF accounts"},{"heading":"auth--accounts","content":"DELETE"},{"heading":"auth--accounts","content":"/accounts/{account}"},{"heading":"auth--accounts","content":"Disconnect an OF account"},{"heading":"auth--accounts","content":"POST"},{"heading":"auth--accounts","content":"/authenticate"},{"heading":"auth--accounts","content":"Start an authentication attempt"},{"heading":"auth--accounts","content":"GET"},{"heading":"auth--accounts","content":"/authenticate/{attempt_id}"},{"heading":"auth--accounts","content":"Poll attempt status"},{"heading":"auth--accounts","content":"PUT"},{"heading":"auth--accounts","content":"/authenticate/{attempt_id}"},{"heading":"auth--accounts","content":"Submit credentials / 2FA"},{"heading":"auth--accounts","content":"POST"},{"heading":"auth--accounts","content":"/authenticate/{attempt_id}/send-email-to-creator"},{"heading":"auth--accounts","content":"Trigger the OF email-code helper"},{"heading":"auth--accounts","content":"POST"},{"heading":"auth--accounts","content":"/authenticate/{account_id}/reauthenticate"},{"heading":"auth--accounts","content":"Re-auth an existing account"},{"heading":"auth--accounts","content":"POST"},{"heading":"auth--accounts","content":"/client-sessions"},{"heading":"auth--accounts","content":"Mint a short-lived client session"},{"heading":"media-upload-status","content":"HTTP"},{"heading":"media-upload-status","content":"Path"},{"heading":"media-upload-status","content":"Notes"},{"heading":"media-upload-status","content":"GET"},{"heading":"media-upload-status","content":"/{account}/media/upload/{upload}/status"},{"heading":"media-upload-status","content":"Poll an in-progress media upload"},{"heading":"important-clarifications","content":"A couple of endpoints sound like they should be Hybrid or Computed, but aren't. Calling them out here to preempt confusion:"},{"heading":"important-clarifications","content":"title: These sound calculated, but are Live passthrough"},{"heading":"important-clarifications","content":"type: warn"},{"heading":"important-clarifications","content":"The following endpoints return numbers and metrics, but the response is a straight passthrough of what OnlyFans returns — OFAPI does not compute or enrich them:"},{"heading":"important-clarifications","content":"/statistics/overview"},{"heading":"important-clarifications","content":"/statistics/total-transactions"},{"heading":"important-clarifications","content":"/statistics/subscriber-metrics"},{"heading":"important-clarifications","content":"/me/model-start-date"},{"heading":"important-clarifications","content":"/me/top-percentage"},{"heading":"important-clarifications","content":"/payouts/balances"},{"heading":"important-clarifications","content":"/payouts/eligibility"},{"heading":"important-clarifications","content":"/payouts/list-earning-statistics"},{"heading":"important-clarifications","content":"/payouts/list-payout-requests"},{"heading":"media-urls--file-downloads","content":"OnlyFans media files (everything served from https://cdn*.onlyfans.com/) get special handling. The first time we see a media file, we save our own copy of it; subsequent requests for that same file are served from our own CDN at https://cdn.fansapi.com/ instead of contacting OnlyFans."},{"heading":"media-urls--file-downloads","content":"Two reasons this matters for you:"},{"heading":"media-urls--file-downloads","content":"It saves credits. Once a file is cached, fetching it again does not consume any credits — OnlyFans is never contacted."},{"heading":"media-urls--file-downloads","content":"It's significantly faster. Our CDN is geographically distributed, so cached files are served from a location close to your end users instead of round-tripping through OnlyFans every time."},{"heading":"media-urls--file-downloads","content":"This affects two kinds of endpoints."},{"heading":"downloading-or-scraping-media-files","content":"The endpoints that hand you back actual media bytes — Download Media and the deprecated Scrape Media — first check whether we already have that file in our own CDN."},{"heading":"downloading-or-scraping-media-files","content":"If we have it cached → you get a URL on our own cdn.fansapi.com. Download Media returns a 302 redirect to it (most HTTP clients follow redirects automatically; curl needs -L). Scrape Media returns it as temporary_url in the response body. No credits are charged in this case, because OnlyFans is never contacted."},{"heading":"downloading-or-scraping-media-files","content":"If we don't have it cached yet → we stream the bytes from OnlyFans straight back to you as the response, and at the same time start saving our own copy. The next time anyone asks for that same file, it will be served from our CDN."},{"heading":"endpoints-that-return-media-urls-in-their-response","content":"Any endpoint that returns OnlyFans CDN URLs in its response body — List Chat Messages, List Posts, List Vault Media, and so on — follows the same caching pattern, applied per-URL:"},{"heading":"endpoints-that-return-media-urls-in-their-response","content":"Each https://cdn*.onlyfans.com/* URL in the response is checked against our CDN."},{"heading":"endpoints-that-return-media-urls-in-their-response","content":"URLs we already have cached are replaced with the equivalent https://cdn.fansapi.com/* URL before the response is returned to you."},{"heading":"endpoints-that-return-media-urls-in-their-response","content":"URLs we don't have cached yet are left as the original https://cdn*.onlyfans.com/* URL, and we start saving our own copy. Future responses that include the same URL will return the cdn.fansapi.com version instead."},{"heading":"endpoints-that-return-media-urls-in-their-response","content":"This rewriting is applied per-URL, so a single response can contain any mix of OnlyFans CDN URLs and rewritten cdn.fansapi.com URLs depending on what we've already cached."},{"heading":"anything-not-listed-here","content":"If an endpoint isn't listed on this page, treat it as a Live passthrough. The response is the OnlyFans payload, unmodified by OFAPI."}],"headings":[{"id":"quick-answers-to-common-questions","content":"Quick answers to common questions"},{"id":"hybrid-endpoints","content":"Hybrid endpoints"},{"id":"computed-endpoints","content":"Computed endpoints"},{"id":"smart-links-analytics--management","content":"Smart Links (analytics + management)"},{"id":"stored-cache-link-inventory","content":"Stored (cache) link inventory"},{"id":"webhooks","content":"Webhooks"},{"id":"data-exports","content":"Data exports"},{"id":"link-tags","content":"Link tags"},{"id":"auth--accounts","content":"Auth & accounts"},{"id":"media-upload-status","content":"Media upload status"},{"id":"important-clarifications","content":"Important clarifications"},{"id":"media-urls--file-downloads","content":"Media URLs & file downloads"},{"id":"downloading-or-scraping-media-files","content":"Downloading or scraping media files"},{"id":"endpoints-that-return-media-urls-in-their-response","content":"Endpoints that return media URLs in their response"},{"id":"anything-not-listed-here","content":"Anything not listed here"}]}},{"_id":"/introduction/essentials/proxies","title":"Proxies","description":"Advanced proxy infrastructure and configuration options","url":"/introduction/essentials/proxies","structured":{"contents":[{"heading":"proxy-infrastructure","content":"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."},{"heading":"built-in-proxy-system-recommended","content":"We provide a sophisticated proxy management system at no additional cost:"},{"heading":"built-in-proxy-system-recommended","content":"Dedicated Mobile IP: Each connected account gets its own exclusive mobile proxy IP"},{"heading":"built-in-proxy-system-recommended","content":"Intelligent Routing: Advanced traffic routing optimized for OnlyFans platform"},{"heading":"built-in-proxy-system-recommended","content":"Geographic Distribution: Choose your preferred proxy country during setup (currently US and UK)"},{"heading":"built-in-proxy-system-recommended","content":"Zero Configuration: Everything is handled automatically"},{"heading":"built-in-proxy-system-recommended","content":"type: warn"},{"heading":"built-in-proxy-system-recommended","content":"Other proxy countries (DE, FR, IT) have been temporarily removed due to OnlyFans restrictions. Only US and UK proxies are currently available."},{"heading":"built-in-proxy-system-recommended","content":"Our proxy infrastructure is specifically engineered for optimal OnlyFans API\nperformance. We recommend using our built-in system for the best experience."},{"heading":"custom-proxy-integration","content":"For organizations with existing proxy infrastructure:"},{"heading":"custom-proxy-integration","content":"Select \"Use custom proxy\" during account configuration"},{"heading":"custom-proxy-integration","content":"Configure your proxy details:"},{"heading":"custom-proxy-integration","content":"Host"},{"heading":"custom-proxy-integration","content":"Port"},{"heading":"custom-proxy-integration","content":"Username (if required)"},{"heading":"custom-proxy-integration","content":"Password (if required)"},{"heading":"technical-requirements","content":"Custom proxy configurations must meet these specifications:"},{"heading":"technical-requirements","content":"IP Exclusivity: Dedicated, non-shared IP address per account"},{"heading":"technical-requirements","content":"Network Type: Mobile or residential IP ranges (datacenter IPs not supported)"},{"heading":"technical-requirements","content":"Geolocation: IP geolocation matching historical access patterns"},{"heading":"technical-requirements","content":"Protocol Support: HTTP/HTTPS protocols"},{"heading":"best-practices","content":"Maintain consistent geolocation patterns"},{"heading":"best-practices","content":"Use the same proxy consistently for each account"},{"heading":"best-practices","content":"Monitor proxy health metrics"},{"heading":"best-practices","content":"Contact support if you experience connection issues"}],"headings":[{"id":"proxy-infrastructure","content":"Proxy Infrastructure"},{"id":"built-in-proxy-system-recommended","content":"Built-in Proxy System (Recommended)"},{"id":"custom-proxy-integration","content":"Custom Proxy Integration"},{"id":"technical-requirements","content":"Technical Requirements"},{"id":"best-practices","content":"Best Practices"}]}},{"_id":"/introduction/essentials/rate-limits","title":"Rate Limits","description":"Understanding API rate limits and optimization","url":"/introduction/essentials/rate-limits","structured":{"contents":[{"content":"title: We have removed our daily rate limits!"},{"content":"type: warn"},{"content":"We have decided to remove our daily rate limits. Please remove any references to these values in your integrations."},{"heading":"rate-limiting-overview","content":"Our platform employs a distributed rate limiting system to ensure optimal performance and resource allocation. Rate limits vary based on your subscription plan:"},{"heading":"plan-based-limits","content":"Basic Plan:"},{"heading":"plan-based-limits","content":"1,000 requests per minute (RPM)"},{"heading":"plan-based-limits","content":"Resets every minute"},{"heading":"plan-based-limits","content":"Perfect for most applications"},{"heading":"plan-based-limits","content":"Tracked via remaining_minute counter"},{"heading":"plan-based-limits","content":"Pro Plan:"},{"heading":"plan-based-limits","content":"5,000 requests per minute (RPM)"},{"heading":"plan-based-limits","content":"Higher throughput for demanding applications"},{"heading":"plan-based-limits","content":"Priority request processing"},{"heading":"plan-based-limits","content":"Tracked via remaining_minute counter"},{"heading":"plan-based-limits","content":"Enterprise Plan:"},{"heading":"plan-based-limits","content":"No rate limits"},{"heading":"plan-based-limits","content":"Unlimited requests per minute"},{"heading":"plan-based-limits","content":"Custom infrastructure"},{"heading":"plan-based-limits","content":"Performance monitoring included"},{"heading":"plan-based-limits","content":"Enterprise customers get unlimited request throughput with dedicated\ninfrastructure to ensure optimal performance at any scale."},{"heading":"plan-based-limits","content":"For information about where to find rate limit data in responses, see our Response Structure documentation."},{"heading":"caching-and-rate-limits","content":"Our caching system helps you optimize your rate limit usage:"},{"heading":"caching-and-rate-limits","content":"Public endpoints (like profile information) are automatically cached"},{"heading":"caching-and-rate-limits","content":"Cached responses don't count towards your rate limits"},{"heading":"caching-and-rate-limits","content":"Use ?fresh=true when you need real-time data"},{"heading":"caching-and-rate-limits","content":"Cache duration varies by endpoint type"},{"heading":"caching-and-rate-limits","content":"When using cached responses, you're not consuming any of your rate limits,\nmaking it an effective way to optimize your API usage."},{"heading":"rate-limit-monitoring","content":"Track your rate limit usage through:"},{"heading":"rate-limit-monitoring","content":"Response Headers"},{"heading":"rate-limit-monitoring","content":"Current limits"},{"heading":"rate-limit-monitoring","content":"Remaining requests"},{"heading":"rate-limit-monitoring","content":"Reset timers"},{"heading":"rate-limit-monitoring","content":"Dashboard Analytics"},{"heading":"rate-limit-monitoring","content":"Usage patterns"},{"heading":"rate-limit-monitoring","content":"Peak usage times"},{"heading":"rate-limit-monitoring","content":"Rate limit warnings"},{"heading":"best-practices","content":"Implement these strategies for optimal throughput:"},{"heading":"best-practices","content":"Monitor Your Limits"},{"heading":"best-practices","content":"Track usage patterns"},{"heading":"best-practices","content":"Plan for limit resets"},{"heading":"best-practices","content":"Set up alerts before limits are reached"},{"heading":"best-practices","content":"Optimize Request Patterns"},{"heading":"best-practices","content":"Distribute requests evenly"},{"heading":"best-practices","content":"Avoid request bursts"},{"heading":"best-practices","content":"Use batch operations when available"},{"heading":"best-practices","content":"Handle Rate Limits Gracefully"},{"heading":"best-practices","content":"Implement exponential backoff"},{"heading":"best-practices","content":"Queue requests when near limits"},{"heading":"best-practices","content":"Use cached responses when possible"},{"heading":"best-practices","content":"Cache Strategy"},{"heading":"best-practices","content":"Leverage cached responses"},{"heading":"best-practices","content":"Only use ?fresh=true when necessary"},{"heading":"best-practices","content":"Implement local caching when appropriate"},{"heading":"error-handling","content":"When you exceed rate limits:"},{"heading":"error-handling","content":"Response will have status code 429 Too Many Requests"},{"heading":"error-handling","content":"Contains information about when limits reset"},{"heading":"error-handling","content":"Implement automatic retry with backoff"},{"heading":"error-handling","content":"Example backoff strategy:"},{"heading":"enterprise-options","content":"For high-volume requirements:"},{"heading":"enterprise-options","content":"No rate limits"},{"heading":"enterprise-options","content":"Dedicated infrastructure"},{"heading":"enterprise-options","content":"Custom performance tuning"},{"heading":"enterprise-options","content":"Advanced monitoring tools"},{"heading":"enterprise-options","content":"Contact our enterprise team to discuss your specific needs."}],"headings":[{"id":"rate-limiting-overview","content":"Rate Limiting Overview"},{"id":"plan-based-limits","content":"Plan-Based Limits"},{"id":"caching-and-rate-limits","content":"Caching and Rate Limits"},{"id":"rate-limit-monitoring","content":"Rate Limit Monitoring"},{"id":"best-practices","content":"Best Practices"},{"id":"error-handling","content":"Error Handling"},{"id":"enterprise-options","content":"Enterprise Options"}]}},{"_id":"/introduction/essentials/response-structure","title":"Response Structure","description":"Understanding API response format, metadata, and headers","url":"/introduction/essentials/response-structure","structured":{"contents":[{"heading":"response-format","content":"Every API response follows a consistent structure with two main components:"},{"heading":"response-format","content":"The data field containing OnlyFans information"},{"heading":"response-format","content":"Optional _pagination field with pagination information, if the endpoint is paginated"},{"heading":"response-format","content":"The _meta object containing request metadata"},{"heading":"response-format","content":"Here's an example response:"},{"heading":"response-body-structure","content":"title: We have removed our daily rate limits!"},{"heading":"response-body-structure","content":"type: warn"},{"heading":"response-body-structure","content":"We have decided to remove our daily rate limits. Please remove any references to these values in your integrations."},{"heading":"the-data-field","content":"The data field always contains the actual OnlyFans response data. Its structure varies depending on the endpoint being called. For example:"},{"heading":"the-data-field","content":"Profile information for /profiles/{username}"},{"heading":"the-data-field","content":"Message data for /messages endpoints"},{"heading":"the-data-field","content":"Subscriber data for /subscribers endpoints"},{"heading":"the-data-field","content":"title: Not every field in `data` comes straight from OnlyFans"},{"heading":"the-data-field","content":"Some endpoints are Hybrid (live OnlyFans response enriched with extra fields from our database) or Computed (built entirely from data we've stored or calculated). See Endpoint data sources for the exhaustive breakdown of which endpoints fall into each category."},{"heading":"the-optional-_pagination-field","content":"Some endpoints return paginated data. For example, /chats, /chats/XYZ/messages or /tracking-links."},{"heading":"the-optional-_pagination-field","content":"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."},{"heading":"the-optional-_pagination-field","content":"If there are no more pages, the next_page field will be null."},{"heading":"the-_meta-object","content":"The _meta object contains three sections of metadata about your request:"},{"heading":"the-_meta-object","content":"_credits: Credit usage information"},{"heading":"the-_meta-object","content":"used: Credits consumed by this request"},{"heading":"the-_meta-object","content":"balance: Your remaining credit balance"},{"heading":"the-_meta-object","content":"note: Additional information about credit usage"},{"heading":"the-_meta-object","content":"_cache: Caching status and information"},{"heading":"the-_meta-object","content":"is_cached: Whether this response was served from cache"},{"heading":"the-_meta-object","content":"cached_at: When the response was cached"},{"heading":"the-_meta-object","content":"note: Instructions for bypassing cache if needed"},{"heading":"the-_meta-object","content":"_rate_limits: Rate limiting information"},{"heading":"the-_meta-object","content":"limit_minute: Requests allowed per minute"},{"heading":"the-_meta-object","content":"limit_day: Legacy: Requests allowed per day (removed)"},{"heading":"the-_meta-object","content":"remaining_minute: Remaining requests this minute"},{"heading":"the-_meta-object","content":"remaining_day: Legacy: Remaining requests today (removed)"},{"heading":"response-headers","content":"Each response includes comprehensive metadata in the headers:"},{"heading":"response-headers","content":"Header"},{"heading":"response-headers","content":"Value"},{"heading":"response-headers","content":"Category"},{"heading":"response-headers","content":"Description"},{"heading":"response-headers","content":"content-type"},{"heading":"response-headers","content":"application/json"},{"heading":"response-headers","content":"Content Headers"},{"heading":"response-headers","content":"Always application/json"},{"heading":"response-headers","content":"x-ofapi-credits-balance"},{"heading":"response-headers","content":"9852"},{"heading":"response-headers","content":"Credit Headers"},{"heading":"response-headers","content":"Your remaining credit balance"},{"heading":"response-headers","content":"x-ofapi-credits-used"},{"heading":"response-headers","content":"0"},{"heading":"response-headers","content":"Credit Headers"},{"heading":"response-headers","content":"Credits used by this request"},{"heading":"response-headers","content":"x-ofapi-is-cached"},{"heading":"response-headers","content":"true"},{"heading":"response-headers","content":"Credit Headers"},{"heading":"response-headers","content":"Whether response was cached"},{"heading":"response-headers","content":"x-rate-limit-limit-day"},{"heading":"response-headers","content":"1000"},{"heading":"response-headers","content":"Rate Limit Headers"},{"heading":"response-headers","content":"Legacy: Removed"},{"heading":"response-headers","content":"x-rate-limit-limit-minute"},{"heading":"response-headers","content":"60"},{"heading":"response-headers","content":"Rate Limit Headers"},{"heading":"response-headers","content":"Per-minute limit"},{"heading":"response-headers","content":"x-rate-limit-remaining-day"},{"heading":"response-headers","content":"988"},{"heading":"response-headers","content":"Rate Limit Headers"},{"heading":"response-headers","content":"Legacy: Removed"},{"heading":"response-headers","content":"x-rate-limit-remaining-minute"},{"heading":"response-headers","content":"59"},{"heading":"response-headers","content":"Rate Limit Headers"},{"heading":"response-headers","content":"Remaining minute requests"},{"heading":"cache-control","content":"You can control caching behavior using query parameters:"},{"heading":"cache-control","content":"By default, responses are cached when possible (only for public endpoints)"},{"heading":"cache-control","content":"Add ?fresh=true to force a fresh response from OnlyFans"},{"heading":"cache-control","content":"Cached responses don't consume credits"},{"heading":"cache-control","content":"Cache duration varies by endpoint"},{"heading":"cache-control","content":"The same information is available in both headers and the _meta object. Use\nheaders for quick access in code, and the _meta object for more detailed\ninformation including notes and timestamps."}],"headings":[{"id":"response-format","content":"Response Format"},{"id":"response-body-structure","content":"Response Body Structure"},{"id":"the-data-field","content":"The data Field"},{"id":"the-optional-_pagination-field","content":"The optional _pagination field"},{"id":"the-_meta-object","content":"The _meta Object"},{"id":"response-headers","content":"Response Headers"},{"id":"cache-control","content":"Cache Control"}]}},{"_id":"/introduction/essentials/team-roles-and-permissions","title":"Team roles & permissions","description":"Understand team roles, the permissions each role grants by default, the full list of available permissions, and how custom roles work.","url":"/introduction/essentials/team-roles-and-permissions","structured":{"contents":[{"content":"Your team in the dashboard can have as many members as you need, and every member is assigned a role that determines what they can see and do. This page explains each role, the permissions it grants by default, the full list of available permissions, and how to build your own custom roles."},{"heading":"how-roles--permissions-work","content":"A team has one Owner and any number of members. Each member is assigned a single role."},{"heading":"how-roles--permissions-work","content":"The Owner always has every permission. Ownership is set when the team is created or via an ownership transfer — it cannot be assigned by invite."},{"heading":"how-roles--permissions-work","content":"Permissions are granular and named category.action (for example, smart-links.manage). A role is simply a named bundle of default permissions."},{"heading":"how-roles--permissions-work","content":"Extra permissions can be granted on top of a role's defaults. These are additive — for example, you can give a Viewer one extra capability without switching them to a Custom role."},{"heading":"how-roles--permissions-work","content":"A Custom role has no default permissions. You build it up entirely by ticking individual permissions from the grouped list."},{"heading":"how-roles--permissions-work","content":"A member's effective permissions = their role's defaults + any extra permissions granted to them."},{"heading":"how-roles--permissions-work","content":"type: info"},{"heading":"how-roles--permissions-work","content":"The roles you can assign when inviting or editing a member are Admin,\nMember, Developer, Viewer, and Custom. The Owner role is\nnot in this list — it is set only at team creation or via ownership transfer."},{"heading":"choosing-a-role","content":"Role"},{"heading":"choosing-a-role","content":"Summary"},{"heading":"choosing-a-role","content":"Owner"},{"heading":"choosing-a-role","content":"Full control over the team, billing, and all settings. Always has every permission. Set at team creation or via ownership transfer; cannot be assigned by invite."},{"heading":"choosing-a-role","content":"Admin"},{"heading":"choosing-a-role","content":"Full access to everything except deleting the team."},{"heading":"choosing-a-role","content":"Member"},{"heading":"choosing-a-role","content":"Create and manage accounts, links, pixels, reports, and creator tools. No team-management or billing access."},{"heading":"choosing-a-role","content":"Developer"},{"heading":"choosing-a-role","content":"Create and use API keys, webhooks, and integrations. Mostly view-only on creator features."},{"heading":"choosing-a-role","content":"Viewer"},{"heading":"choosing-a-role","content":"View-only access to all data and reports."},{"heading":"choosing-a-role","content":"Custom"},{"heading":"choosing-a-role","content":"A custom set of permissions you choose yourself."},{"heading":"choosing-a-role","content":"When deciding which role to assign:"},{"heading":"choosing-a-role","content":"Admin — for trusted co-managers who should be able to do everything you can, except delete the team. Admin equals every permission except Delete the team."},{"heading":"choosing-a-role","content":"Member — for day-to-day operators. They get full operational access to accounts, links, pixels, free trials, reports, and developer/AI/creator tools, but no team management, no billing, and they cannot purchase credits."},{"heading":"choosing-a-role","content":"Developer — for engineers integrating with the API. They get full control of API keys, webhooks, integrations, and data exports, but are view-only on creator features (accounts, smart links, free trials, and so on)."},{"heading":"choosing-a-role","content":"Viewer — for stakeholders who only need to look. Their defaults are exactly \"all view permissions\" — every *.view capability and nothing that creates, edits, deletes, or manages."},{"heading":"choosing-a-role","content":"Custom — when none of the presets fit. A Custom role starts empty; you tick individual permissions from the grouped list below."},{"heading":"choosing-a-role","content":"Need a role that's almost right? Instead of building a Custom role from\nscratch, assign the closest preset and grant a few extra permissions on\ntop. See Custom roles & extra permissions."},{"heading":"permissions-reference","content":"The tables below list every available permission, grouped by category. Each row shows what the permission allows, its internal key (useful for API and role automation), and whether each role gets it by default (✓) or not (—)."},{"heading":"permissions-reference","content":"The Owner is granted every permission, so it is ✓ on every row. Custom roles start with no default permissions and are therefore omitted from the matrix."},{"heading":"team-management","content":"Permission"},{"heading":"team-management","content":"Allows"},{"heading":"team-management","content":"Key"},{"heading":"team-management","content":"Owner"},{"heading":"team-management","content":"Admin"},{"heading":"team-management","content":"Member"},{"heading":"team-management","content":"Developer"},{"heading":"team-management","content":"Viewer"},{"heading":"team-management","content":"Edit team name & settings"},{"heading":"team-management","content":"Edit the team's name and settings"},{"heading":"team-management","content":"team.update"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"Delete the team"},{"heading":"team-management","content":"Permanently delete the team"},{"heading":"team-management","content":"team.delete"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"View team members"},{"heading":"team-management","content":"See the list of team members"},{"heading":"team-management","content":"team.members.view"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"Invite, remove & change roles"},{"heading":"team-management","content":"Manage team membership and roles"},{"heading":"team-management","content":"team.members.manage"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"✓"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"team-management","content":"—"},{"heading":"billing--credits","content":"Permission"},{"heading":"billing--credits","content":"Allows"},{"heading":"billing--credits","content":"Key"},{"heading":"billing--credits","content":"Owner"},{"heading":"billing--credits","content":"Admin"},{"heading":"billing--credits","content":"Member"},{"heading":"billing--credits","content":"Developer"},{"heading":"billing--credits","content":"Viewer"},{"heading":"billing--credits","content":"View plans, invoices & payment info"},{"heading":"billing--credits","content":"See billing plans, invoices, and payment details"},{"heading":"billing--credits","content":"billing.view"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"Subscribe, cancel & manage payments"},{"heading":"billing--credits","content":"Subscribe, cancel, and manage payment methods"},{"heading":"billing--credits","content":"billing.manage"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"View credit balance"},{"heading":"billing--credits","content":"See the current credit balance"},{"heading":"billing--credits","content":"credits.view"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"Purchase credits"},{"heading":"billing--credits","content":"Buy additional credits"},{"heading":"billing--credits","content":"credits.topup"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"—"},{"heading":"billing--credits","content":"View API usage & credit history"},{"heading":"billing--credits","content":"See API usage and credit history"},{"heading":"billing--credits","content":"usage.view"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"billing--credits","content":"✓"},{"heading":"onlyfans-accounts","content":"Permission"},{"heading":"onlyfans-accounts","content":"Allows"},{"heading":"onlyfans-accounts","content":"Key"},{"heading":"onlyfans-accounts","content":"Owner"},{"heading":"onlyfans-accounts","content":"Admin"},{"heading":"onlyfans-accounts","content":"Member"},{"heading":"onlyfans-accounts","content":"Developer"},{"heading":"onlyfans-accounts","content":"Viewer"},{"heading":"onlyfans-accounts","content":"View accounts"},{"heading":"onlyfans-accounts","content":"See connected OnlyFans accounts"},{"heading":"onlyfans-accounts","content":"accounts.view"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"Add, edit & delete accounts"},{"heading":"onlyfans-accounts","content":"Connect, edit, and remove accounts"},{"heading":"onlyfans-accounts","content":"accounts.manage"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"✓"},{"heading":"onlyfans-accounts","content":"—"},{"heading":"onlyfans-accounts","content":"—"},{"heading":"smart-links","content":"Permission"},{"heading":"smart-links","content":"Allows"},{"heading":"smart-links","content":"Key"},{"heading":"smart-links","content":"Owner"},{"heading":"smart-links","content":"Admin"},{"heading":"smart-links","content":"Member"},{"heading":"smart-links","content":"Developer"},{"heading":"smart-links","content":"Viewer"},{"heading":"smart-links","content":"View smart links & reports"},{"heading":"smart-links","content":"See smart links and their reports"},{"heading":"smart-links","content":"smart-links.view"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"Create, edit & delete smart links"},{"heading":"smart-links","content":"Manage smart links"},{"heading":"smart-links","content":"smart-links.manage"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"✓"},{"heading":"smart-links","content":"—"},{"heading":"smart-links","content":"—"},{"heading":"postbacks","content":"Permission"},{"heading":"postbacks","content":"Allows"},{"heading":"postbacks","content":"Key"},{"heading":"postbacks","content":"Owner"},{"heading":"postbacks","content":"Admin"},{"heading":"postbacks","content":"Member"},{"heading":"postbacks","content":"Developer"},{"heading":"postbacks","content":"Viewer"},{"heading":"postbacks","content":"View postbacks"},{"heading":"postbacks","content":"See configured postbacks"},{"heading":"postbacks","content":"postbacks.view"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"Create, edit & delete postbacks"},{"heading":"postbacks","content":"Manage postbacks"},{"heading":"postbacks","content":"postbacks.manage"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"✓"},{"heading":"postbacks","content":"—"},{"heading":"postbacks","content":"—"},{"heading":"meta-pixels","content":"Permission"},{"heading":"meta-pixels","content":"Allows"},{"heading":"meta-pixels","content":"Key"},{"heading":"meta-pixels","content":"Owner"},{"heading":"meta-pixels","content":"Admin"},{"heading":"meta-pixels","content":"Member"},{"heading":"meta-pixels","content":"Developer"},{"heading":"meta-pixels","content":"Viewer"},{"heading":"meta-pixels","content":"View meta pixels"},{"heading":"meta-pixels","content":"See configured meta pixels"},{"heading":"meta-pixels","content":"meta-pixels.view"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"Create, edit & delete meta pixels"},{"heading":"meta-pixels","content":"Manage meta pixels"},{"heading":"meta-pixels","content":"meta-pixels.manage"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"✓"},{"heading":"meta-pixels","content":"—"},{"heading":"meta-pixels","content":"—"},{"heading":"free-trials","content":"Permission"},{"heading":"free-trials","content":"Allows"},{"heading":"free-trials","content":"Key"},{"heading":"free-trials","content":"Owner"},{"heading":"free-trials","content":"Admin"},{"heading":"free-trials","content":"Member"},{"heading":"free-trials","content":"Developer"},{"heading":"free-trials","content":"Viewer"},{"heading":"free-trials","content":"View free trials & analytics"},{"heading":"free-trials","content":"See free trials and their analytics"},{"heading":"free-trials","content":"free-trials.view"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"Create, edit & delete free trials"},{"heading":"free-trials","content":"Manage free trials"},{"heading":"free-trials","content":"free-trials.manage"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"✓"},{"heading":"free-trials","content":"—"},{"heading":"free-trials","content":"—"},{"heading":"tracking-links","content":"Permission"},{"heading":"tracking-links","content":"Allows"},{"heading":"tracking-links","content":"Key"},{"heading":"tracking-links","content":"Owner"},{"heading":"tracking-links","content":"Admin"},{"heading":"tracking-links","content":"Member"},{"heading":"tracking-links","content":"Developer"},{"heading":"tracking-links","content":"Viewer"},{"heading":"tracking-links","content":"View tracking links & analytics"},{"heading":"tracking-links","content":"See tracking links and their analytics"},{"heading":"tracking-links","content":"tracking-links.view"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"Create, edit & delete tracking links"},{"heading":"tracking-links","content":"Manage tracking links"},{"heading":"tracking-links","content":"tracking-links.manage"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"✓"},{"heading":"tracking-links","content":"—"},{"heading":"tracking-links","content":"—"},{"heading":"api-keys--logs","content":"Permission"},{"heading":"api-keys--logs","content":"Allows"},{"heading":"api-keys--logs","content":"Key"},{"heading":"api-keys--logs","content":"Owner"},{"heading":"api-keys--logs","content":"Admin"},{"heading":"api-keys--logs","content":"Member"},{"heading":"api-keys--logs","content":"Developer"},{"heading":"api-keys--logs","content":"Viewer"},{"heading":"api-keys--logs","content":"View API keys"},{"heading":"api-keys--logs","content":"See API keys"},{"heading":"api-keys--logs","content":"api-keys.view"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"Create, edit & delete API keys"},{"heading":"api-keys--logs","content":"Manage API keys"},{"heading":"api-keys--logs","content":"api-keys.manage"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"—"},{"heading":"api-keys--logs","content":"View request logs"},{"heading":"api-keys--logs","content":"See API request logs"},{"heading":"api-keys--logs","content":"logs.view"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"Use API playground"},{"heading":"api-keys--logs","content":"Access the interactive API playground"},{"heading":"api-keys--logs","content":"playground.access"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"✓"},{"heading":"api-keys--logs","content":"—"},{"heading":"webhooks","content":"Permission"},{"heading":"webhooks","content":"Allows"},{"heading":"webhooks","content":"Key"},{"heading":"webhooks","content":"Owner"},{"heading":"webhooks","content":"Admin"},{"heading":"webhooks","content":"Member"},{"heading":"webhooks","content":"Developer"},{"heading":"webhooks","content":"Viewer"},{"heading":"webhooks","content":"View webhooks"},{"heading":"webhooks","content":"See configured webhooks"},{"heading":"webhooks","content":"webhooks.view"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"Create, edit & delete webhooks"},{"heading":"webhooks","content":"Manage webhooks"},{"heading":"webhooks","content":"webhooks.manage"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"✓"},{"heading":"webhooks","content":"—"},{"heading":"integrations","content":"Permission"},{"heading":"integrations","content":"Allows"},{"heading":"integrations","content":"Key"},{"heading":"integrations","content":"Owner"},{"heading":"integrations","content":"Admin"},{"heading":"integrations","content":"Member"},{"heading":"integrations","content":"Developer"},{"heading":"integrations","content":"Viewer"},{"heading":"integrations","content":"View team integrations"},{"heading":"integrations","content":"See team integrations"},{"heading":"integrations","content":"team-integrations.view"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"Manage team integrations"},{"heading":"integrations","content":"Manage team integrations"},{"heading":"integrations","content":"team-integrations.manage"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"—"},{"heading":"integrations","content":"Configure MCP / AI client integrations"},{"heading":"integrations","content":"Set up MCP and AI client integrations"},{"heading":"integrations","content":"mcp.configure"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"✓"},{"heading":"integrations","content":"—"},{"heading":"ai-analytics","content":"Permission"},{"heading":"ai-analytics","content":"Allows"},{"heading":"ai-analytics","content":"Key"},{"heading":"ai-analytics","content":"Owner"},{"heading":"ai-analytics","content":"Admin"},{"heading":"ai-analytics","content":"Member"},{"heading":"ai-analytics","content":"Developer"},{"heading":"ai-analytics","content":"Viewer"},{"heading":"ai-analytics","content":"View AI Analytics"},{"heading":"ai-analytics","content":"See AI Analytics"},{"heading":"ai-analytics","content":"ai-analytics.view"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"View AI fan profile summaries"},{"heading":"ai-analytics","content":"See AI-generated fan profile summaries"},{"heading":"ai-analytics","content":"fan-profile-summary.view"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"Generate AI fan profile summaries"},{"heading":"ai-analytics","content":"Generate AI fan profile summaries"},{"heading":"ai-analytics","content":"fan-profile-summary.generate"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"—"},{"heading":"ai-analytics","content":"—"},{"heading":"ai-analytics","content":"View fan notes"},{"heading":"ai-analytics","content":"See fan notes"},{"heading":"ai-analytics","content":"fan-notes.view"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"Edit fan notes"},{"heading":"ai-analytics","content":"Create and edit fan notes"},{"heading":"ai-analytics","content":"fan-notes.manage"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"—"},{"heading":"ai-analytics","content":"—"},{"heading":"ai-analytics","content":"Configure daily payouts"},{"heading":"ai-analytics","content":"Configure daily payouts"},{"heading":"ai-analytics","content":"daily-payouts.manage"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"✓"},{"heading":"ai-analytics","content":"—"},{"heading":"ai-analytics","content":"—"},{"heading":"data-exports","content":"Permission"},{"heading":"data-exports","content":"Allows"},{"heading":"data-exports","content":"Key"},{"heading":"data-exports","content":"Owner"},{"heading":"data-exports","content":"Admin"},{"heading":"data-exports","content":"Member"},{"heading":"data-exports","content":"Developer"},{"heading":"data-exports","content":"Viewer"},{"heading":"data-exports","content":"View data exports"},{"heading":"data-exports","content":"See data exports"},{"heading":"data-exports","content":"data-export.view"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"Create & download data exports"},{"heading":"data-exports","content":"Create and download data exports"},{"heading":"data-exports","content":"data-export.manage"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"✓"},{"heading":"data-exports","content":"—"},{"heading":"tools","content":"Permission"},{"heading":"tools","content":"Allows"},{"heading":"tools","content":"Key"},{"heading":"tools","content":"Owner"},{"heading":"tools","content":"Admin"},{"heading":"tools","content":"Member"},{"heading":"tools","content":"Developer"},{"heading":"tools","content":"Viewer"},{"heading":"tools","content":"View AI voice messages"},{"heading":"tools","content":"See AI voice messages"},{"heading":"tools","content":"ai-voice.view"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"Create & edit AI voice messages"},{"heading":"tools","content":"Manage AI voice messages"},{"heading":"tools","content":"ai-voice.manage"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"—"},{"heading":"tools","content":"—"},{"heading":"tools","content":"View housekeeping"},{"heading":"tools","content":"See housekeeping"},{"heading":"tools","content":"housekeeping.view"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"Start & configure housekeeping"},{"heading":"tools","content":"Start and configure housekeeping"},{"heading":"tools","content":"housekeeping.manage"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"✓"},{"heading":"tools","content":"—"},{"heading":"tools","content":"—"},{"heading":"custom-roles--extra-permissions","content":"When the presets don't fit, you have two options:"},{"heading":"custom-roles","content":"A Custom role starts with no permissions. You build it up entirely by ticking individual permissions from the grouped list above. Use this when a member needs a unique combination of capabilities that none of the presets provide."},{"heading":"extra-permissions","content":"Any role can be granted individual extra permissions beyond its defaults. These are additive, so you don't have to switch a member to a Custom role just to give them one more capability — for example, you can grant a Viewer a single *.manage permission while keeping all their view-only defaults."},{"heading":"extra-permissions","content":"A member's effective access is always: role defaults + any extra permissions granted to them"},{"heading":"extra-permissions","content":"type: info"},{"heading":"extra-permissions","content":"title: Email notification defaults"},{"heading":"extra-permissions","content":"By default, Owner, Admin, and Member roles receive\nauthentication-action-required emails (for example, when an account needs\nre-authentication)."}],"headings":[{"id":"how-roles--permissions-work","content":"How roles & permissions work"},{"id":"choosing-a-role","content":"Choosing a role"},{"id":"permissions-reference","content":"Permissions reference"},{"id":"team-management","content":"Team Management"},{"id":"billing--credits","content":"Billing & Credits"},{"id":"onlyfans-accounts","content":"OnlyFans Accounts"},{"id":"smart-links","content":"Smart Links"},{"id":"postbacks","content":"Postbacks"},{"id":"meta-pixels","content":"Meta Pixels"},{"id":"free-trials","content":"Free Trials"},{"id":"tracking-links","content":"Tracking Links"},{"id":"api-keys--logs","content":"API Keys & Logs"},{"id":"webhooks","content":"Webhooks"},{"id":"integrations","content":"Integrations"},{"id":"ai-analytics","content":"AI Analytics"},{"id":"data-exports","content":"Data Exports"},{"id":"tools","content":"Tools"},{"id":"custom-roles--extra-permissions","content":"Custom roles & extra permissions"},{"id":"custom-roles","content":"Custom roles"},{"id":"extra-permissions","content":"Extra permissions"}]}},{"_id":"/onlyfans-ai/mcp/chatgpt","title":"ChatGPT x OnlyFans","description":"Build Custom GPTs and run Agent Mode on your OnlyFans accounts. 350+ tools, no code required.","url":"/onlyfans-ai/mcp/chatgpt","structured":{"contents":[{"heading":"what-this-does","content":"ChatGPT can call OnlyFans API endpoints directly through the OnlyFans MCP server. Add it once as a custom connector, then build a Custom GPT for your team or fire off Agent Mode to run scheduled work overnight."},{"heading":"what-this-does","content":"Works with Custom GPTs, Agent Mode, Deep Research, and any chat with the connector enabled."},{"heading":"what-this-does","content":"type: warn"},{"heading":"what-this-does","content":"ChatGPT custom connectors require a paid plan with MCP support — Pro, Business, or Enterprise. Free and Plus do not yet support custom MCP connectors."},{"heading":"prerequisites","content":"An OnlyFans API account"},{"heading":"prerequisites","content":"A paid ChatGPT plan (Pro, Business, or Enterprise)"},{"heading":"prerequisites","content":"At least one connected OnlyFans account"},{"heading":"prerequisites","content":"On Business and Enterprise, an admin can approve the connector once and roll it out to every seat in your workspace."},{"heading":"1-open-chatgpt-settings--connectors","content":"In ChatGPT, click your profile → Settings → Connectors → Create."},{"heading":"2-add-a-custom-connector","content":"Enter these details:"},{"heading":"2-add-a-custom-connector","content":"Name — OnlyFans MCP (or any label you prefer)"},{"heading":"2-add-a-custom-connector","content":"MCP server URL:"},{"heading":"2-add-a-custom-connector","content":"Authentication — set to OAuth"},{"heading":"2-add-a-custom-connector","content":"type: warn"},{"heading":"2-add-a-custom-connector","content":"The OnlyFans MCP server expects OAuth for ChatGPT connectors. Don't pick \"No authentication\" — the connector will fail."},{"heading":"3-click-connect-and-finish-oauth","content":"ChatGPT redirects you to app.onlyfansapi.com. Click Authorize."},{"heading":"3-click-connect-and-finish-oauth","content":"You'll land back in ChatGPT with the connector marked as connected. Done — your agent now has 350+ tools across chats, fans, and earnings."},{"heading":"3-click-connect-and-finish-oauth","content":"Sign in to app.onlyfansapi.com in a separate tab first, so the OAuth flow doesn't stall on the sign-in page."},{"heading":"4-enable-the-connector-in-a-chat","content":"Open a new chat. Click the tools picker → toggle OnlyFans MCP on."},{"heading":"build-a-custom-gpt-for-your-agency","content":"In ChatGPT, go to Explore GPTs → Create → Configure. Drop this into Instructions, attach the OnlyFans MCP connector under Tools, and share with your team."},{"heading":"build-a-custom-gpt-for-your-agency","content":"Replace {{Agency Name}} with your agency:"},{"heading":"build-a-custom-gpt-for-your-agency","content":"A Custom GPT replaces a recurring n8n / Zapier workflow with one URL your team can open from any device."},{"heading":"run-scheduled-work-in-agent-mode","content":"Agent Mode is ChatGPT's autonomous workspace — it can plan, run tools, and iterate over multi-step tasks. Use it to ship a daily revenue digest with zero human touch:"},{"heading":"run-scheduled-work-in-agent-mode","content":"type: warn"},{"heading":"run-scheduled-work-in-agent-mode","content":"Configure tool approvals so write actions (mass-message, label updates) require a human OK. Read-only actions (earnings, fan lookups) can run unattended."},{"heading":"run-cohort-analysis-in-deep-research","content":"Deep Research is ChatGPT's long-form research agent — perfect for cohort analysis across hundreds of fans:"},{"heading":"example-use-cases","content":"8 prompts that replace daily ops grunt work. Drop them into your Custom GPT or any ChatGPT conversation with the connector enabled:"},{"heading":"example-use-cases","content":"\"Pull this week's revenue per creator and chart it.\" — replaces the Monday-morning spreadsheet build"},{"heading":"example-use-cases","content":"\"List my top 50 spenders with their last message timestamp.\" — no more switching dashboards per creator"},{"heading":"example-use-cases","content":"\"Find every fan flagged for chargeback in the last 30 days.\" — catch chargeback patterns before finance does"},{"heading":"example-use-cases","content":"\"Draft a renewal DM for fans churning in the next 7 days. No auto-send.\" — agent drafts, your team approves and ships"},{"heading":"example-use-cases","content":"\"Compare PPV conversion rates across my creators this month.\" — see which creator's offers are working"},{"heading":"example-use-cases","content":"\"Build a daily report for Slack: revenue, top fans, chat backlog.\" — one Custom GPT replaces a recurring n8n workflow"},{"heading":"example-use-cases","content":"\"Identify whales who haven't messaged in 14 days — draft a re-engagement.\" — reactivate dormant high-spenders before they unsub"},{"heading":"example-use-cases","content":"\"Export all transactions over $200 from last quarter as CSV.\" — accounting stops chasing you for reports"},{"heading":"example-use-cases","content":"Most tools are account-scoped and need the account id in the form acct_XXXXXXXXXXXXXXX. If you omit it, ChatGPT will ask — or it will call list_accounts first to find one."},{"heading":"troubleshooting","content":"Check that Authentication is set to OAuth (not \"No authentication\"). Sign in to app.onlyfansapi.com in a separate tab first, then retry."},{"heading":"troubleshooting","content":"MCP calls are rate-limited to 120 requests/minute per API key. Wait a minute and retry. If you hit this often, split work across multiple API keys."},{"heading":"troubleshooting","content":"The connector is toggled off in that conversation. Open the tools picker and toggle OnlyFans MCP on."},{"heading":"troubleshooting","content":"Custom MCP connectors require Pro, Business, or Enterprise. Upgrade your plan, or use Claude instead — Claude supports custom connectors on every paid plan."},{"heading":"see-also","content":"OnlyFans MCP overview — what MCP is, how it works, and supported clients"},{"heading":"see-also","content":"Claude MCP install guide"},{"heading":"see-also","content":"Manus MCP install guide"},{"heading":"see-also","content":"Develop with AI Agents — llms.txt, OpenAPI schema, onlyfansapi-skill"},{"heading":"see-also","content":"API Reference — every endpoint exposed as an MCP tool"}],"headings":[{"id":"what-this-does","content":"What this does"},{"id":"prerequisites","content":"Prerequisites"},{"id":"step-by-step","content":"Step-by-step"},{"id":"1-open-chatgpt-settings--connectors","content":"1. Open ChatGPT Settings → Connectors"},{"id":"2-add-a-custom-connector","content":"2. Add a custom connector"},{"id":"3-click-connect-and-finish-oauth","content":"3. Click \"Connect\" and finish OAuth"},{"id":"4-enable-the-connector-in-a-chat","content":"4. Enable the connector in a chat"},{"id":"build-a-custom-gpt-for-your-agency","content":"Build a Custom GPT for your agency"},{"id":"run-scheduled-work-in-agent-mode","content":"Run scheduled work in Agent Mode"},{"id":"run-cohort-analysis-in-deep-research","content":"Run cohort analysis in Deep Research"},{"id":"example-use-cases","content":"Example use cases"},{"id":"troubleshooting","content":"Troubleshooting"},{"id":"see-also","content":"See also"}]}},{"_id":"/onlyfans-ai/mcp/claude","title":"Claude x OnlyFans","description":"Connect OnlyFans MCP to Claude as a custom connector and run your agency from any chat — Claude Desktop, Claude.ai, Claude Code, or the Anthropic API.","url":"/onlyfans-ai/mcp/claude","structured":{"contents":[{"heading":"what-this-does","content":"Claude can call OnlyFans API endpoints directly — send messages, pull stats, manage posts — through the OnlyFans MCP server. Add it once as a custom connector in Claude, then ask Claude to run OnlyFans tasks in plain English from any chat."},{"heading":"what-this-does","content":"Works with Claude Desktop, Claude.ai (web), Claude Code, and the Anthropic API."},{"heading":"what-this-does","content":"Custom connectors are currently in beta on Claude. All Claude plans support them (Free is capped at 1 custom connector; Pro/Max/Team/Enterprise allow multiple)."},{"heading":"prerequisites","content":"A Claude.ai account"},{"heading":"prerequisites","content":"An OnlyFans API account"},{"heading":"prerequisites","content":"At least one connected OnlyFans account"},{"heading":"1-open-claude-settings--customize--connectors","content":"In Claude.ai, click your profile → Settings → Customize → Connectors."},{"heading":"2-add-a-custom-connector","content":"Click the + icon at the top of the Connectors list to open Add custom connector. Enter:"},{"heading":"2-add-a-custom-connector","content":"Name — OnlyFans MCP (or any label you prefer)"},{"heading":"2-add-a-custom-connector","content":"Remote MCP server URL:"},{"heading":"2-add-a-custom-connector","content":"Leave Advanced settings closed, then click Add."},{"heading":"2-add-a-custom-connector","content":"The Advanced settings (OAuth Client ID / Secret) stay empty. Our server handles OAuth automatically."},{"heading":"3-click-connect","content":"The new connector opens to a \"You are not connected to OnlyFans MCP yet.\" screen. Click Connect to start the OAuth flow."},{"heading":"3-click-connect","content":"type: warn"},{"heading":"3-click-connect","content":"Sign in to app.onlyfansapi.com in a separate tab first. If you're signed out when you click Connect, Claude sends you to the sign-in page — but once you sign in, you land on the dashboard instead of the OAuth authorize screen, and the flow stalls. Sign in first, then come back to Claude and click Connect."},{"heading":"4-authorize-claude-on-onlyfans-api","content":"Claude redirects you to app.onlyfansapi.com. Click Authorize."},{"heading":"4-authorize-claude-on-onlyfans-api","content":"The button changes to Redirecting to Claude… and sends you back automatically."},{"heading":"5-connector-shows-connected","content":"Back in Claude, you see a Connected to OnlyFans MCP toast and the connector's tool permissions list (all 350+ tools, organized by Read-only / Write / Destructive)."},{"heading":"5-connector-shows-connected","content":"Tool permissions default to Needs approval — Claude asks before each tool call. You can switch a tool (or the whole group) to Always allow here, or do it inline on first use."},{"heading":"6-enable-the-connector-in-a-chat","content":"Open a new chat. Click the + button in the composer → Connectors → toggle OnlyFans MCP on."},{"heading":"7-prompt-claude--approve-the-first-tool-call","content":"Ask Claude to do something. On the first tool call, Claude shows a \"Claude wants to use <tool> from OnlyFans MCP\" prompt. Click Always allow (or Deny)."},{"heading":"7-prompt-claude--approve-the-first-tool-call","content":"Done. Claude can now drive your OnlyFans accounts through the API."},{"heading":"example-use-cases","content":"Drop these prompts into a Claude chat with the OnlyFans MCP connector enabled:"},{"heading":"reporting--analytics","content":"\"Summarize today's PPV revenue per creator.\""},{"heading":"reporting--analytics","content":"\"List my top 20 spenders this week with their last message timestamp.\""},{"heading":"reporting--analytics","content":"\"Get the earnings for acct_XXXXXXXXXXXXXXX this month, broken down by day.\""},{"heading":"reporting--analytics","content":"\"Pull last quarter's chargebacks and group them by reason.\""},{"heading":"reporting--analytics","content":"\"Build a daily Slack-ready report: revenue, top fans, chat backlog.\""},{"heading":"fan--chat-ops","content":"\"Find every chat with no reply in 24h and surface them.\""},{"heading":"fan--chat-ops","content":"\"Show my top 20 spending fans for acct_XXXXXXXXXXXXXXX in the last 30 days.\""},{"heading":"fan--chat-ops","content":"\"Tag whales spending over $500 with the vip label.\""},{"heading":"fan--chat-ops","content":"\"Identify whales who haven't messaged in 14 days — draft a re-engagement DM.\""},{"heading":"mass-messaging--monetization","content":"\"Draft a renewal DM for fans churning in the next 7 days. Don't auto-send.\""},{"heading":"mass-messaging--monetization","content":"\"Mass-message expired subs with a 50% reactivation offer.\""},{"heading":"mass-messaging--monetization","content":"\"Rewrite my welcome message and A/B test it.\""},{"heading":"mass-messaging--monetization","content":"Most tools are account-scoped and need the account id in the form acct_XXXXXXXXXXXXXXX. If you omit it, Claude will ask — or it will call list_accounts first to find one."},{"heading":"troubleshooting","content":"Your OnlyFans API session is invalid or expired. Sign in again at app.onlyfansapi.com, then retry the Connect button on the connector."},{"heading":"troubleshooting","content":"MCP calls are rate-limited to 120 requests/minute per API key. Wait a minute and retry. If you hit this often, split work across multiple API keys."},{"heading":"troubleshooting","content":"The connector is toggled off in that conversation. Click + in the composer → Connectors → toggle OnlyFans MCP on."},{"heading":"troubleshooting","content":"Click Always allow instead of approving once."},{"heading":"plan-notes","content":"Claude Free supports 1 custom connector total. If you hit the limit, upgrade to Pro/Max/Team/Enterprise or remove an unused connector first."},{"heading":"see-also","content":"OnlyFans MCP overview — what MCP is, how it works, and supported clients"},{"heading":"see-also","content":"ChatGPT MCP install guide"},{"heading":"see-also","content":"Manus MCP install guide"},{"heading":"see-also","content":"Develop with AI Agents — llms.txt, OpenAPI schema, onlyfansapi-skill"},{"heading":"see-also","content":"API Reference — every endpoint exposed as an MCP tool"},{"heading":"see-also","content":"Connect OnlyFans account — prerequisite for account-scoped tool calls"}],"headings":[{"id":"what-this-does","content":"What this does"},{"id":"prerequisites","content":"Prerequisites"},{"id":"step-by-step","content":"Step-by-step"},{"id":"1-open-claude-settings--customize--connectors","content":"1. Open Claude Settings → Customize → Connectors"},{"id":"2-add-a-custom-connector","content":"2. Add a custom connector"},{"id":"3-click-connect","content":"3. Click \"Connect\""},{"id":"4-authorize-claude-on-onlyfans-api","content":"4. Authorize Claude on OnlyFans API"},{"id":"5-connector-shows-connected","content":"5. Connector shows \"Connected\""},{"id":"6-enable-the-connector-in-a-chat","content":"6. Enable the connector in a chat"},{"id":"7-prompt-claude--approve-the-first-tool-call","content":"7. Prompt Claude — approve the first tool call"},{"id":"example-use-cases","content":"Example use cases"},{"id":"reporting--analytics","content":"Reporting & analytics"},{"id":"fan--chat-ops","content":"Fan & chat ops"},{"id":"mass-messaging--monetization","content":"Mass messaging & monetization"},{"id":"troubleshooting","content":"Troubleshooting"},{"id":"plan-notes","content":"Plan notes"},{"id":"see-also","content":"See also"}]}},{"_id":"/onlyfans-ai/mcp/embed","title":"Embed in your app","description":"Expose the OnlyFans MCP server to an LLM running inside your own SaaS product — chatbot, agent, copilot, or batch worker — using your API keys.","url":"/onlyfans-ai/mcp/embed","structured":{"contents":[{"heading":"who-this-is-for","content":"SaaS builders who already hold an OnlyFans API key and want to expose its tools to an LLM running inside their own product — chatbot, agent, copilot, batch worker, anything."},{"heading":"who-this-is-for","content":"If you just want to chat with your OnlyFans accounts in Claude or ChatGPT, use the Claude or ChatGPT install guides instead. This page is the backend integration, not the end-user setup."},{"heading":"tldr","content":"Pass your OnlyFans API key as a Bearer token to:"},{"heading":"tldr","content":"That is the entire authentication. There is no client registration, no callback URL, no PKCE, no token refresh."},{"heading":"tldr","content":"The OAuth 2.1 flow that the server also supports is only relevant when a third-party MCP client (Claude Desktop, ChatGPT, Cursor) needs to authorize on behalf of one of your end users in a browser. When your backend is the caller, you skip all of it."},{"heading":"prerequisites","content":"An OnlyFans API account."},{"heading":"prerequisites","content":"An API key generated at app.onlyfansapi.com/api-keys. The key is scoped to the team it was created in — all MCP tool calls run as that team."},{"heading":"prerequisites","content":"At least one connected OnlyFans account (acct_…) on that team. Most tools require an account parameter to identify which account to act on."},{"heading":"prerequisites","content":"type: warn"},{"heading":"prerequisites","content":"If your product is multi-tenant and each customer has their own OnlyFans API team, generate one API key per customer team and store it against your internal customer record. Do not share a single key across tenants."},{"heading":"anthropic-messages-api","content":"Anthropic's Messages API supports remote MCP servers directly. Pass the server URL and your OnlyFans API key as authorization_token."},{"heading":"anthropic-messages-api","content":"The model sees the MCP tool list, decides which tools to call, and the Anthropic platform handles the JSON-RPC dance with our server. Tool calls and results are returned inline in the response."},{"heading":"anthropic-messages-api","content":"Notes:"},{"heading":"anthropic-messages-api","content":"name is a label that shows up in tool_use blocks. Pick something stable."},{"heading":"anthropic-messages-api","content":"authorization_token is sent to our server as Authorization: Bearer {value}. Do not include the word Bearer in the value."},{"heading":"anthropic-messages-api","content":"The MCP beta header may be required on some Anthropic accounts. Check Anthropic's current MCP connector documentation."},{"heading":"openai-responses-api","content":"OpenAI's Responses API exposes remote MCP servers as a tool of type: \"mcp\"."},{"heading":"openai-responses-api","content":"The exact field name for custom auth headers on OpenAI's MCP tool has shifted during the feature's rollout. Check OpenAI's current Responses API MCP reference before shipping. The semantics are identical: relay Authorization: Bearer … to our server on every tool call."},{"heading":"direct-json-rpc","content":"If you're running an agent loop yourself — without going through Anthropic or OpenAI's hosted tool execution — you can speak JSON-RPC to the MCP server directly. The transport is the standard MCP streamable HTTP."},{"heading":"direct-json-rpc","content":"Standard MCP methods are available: initialize, tools/list, tools/call, notifications/initialized. Pagination is supported on tools/list with a default page size of 500 and a max of 1000."},{"heading":"per-request-scoping","content":"The API key fixes the team. Most tools additionally take an account parameter (format acct_XXXXXXXXXXXXXXX) to choose which connected OnlyFans account to act on."},{"heading":"per-request-scoping","content":"The model will ask the user or call a discovery tool (e.g. list_accounts) to figure this out. If your product already knows which account the current chat is about, pin it in the system prompt:"},{"heading":"tool-surface","content":"The MCP server auto-generates one tool per documented OnlyFans API endpoint. The full list is returned by tools/list. Annotations follow the MCP conventions:"},{"heading":"tool-surface","content":"GET endpoints have readOnlyHint: true."},{"heading":"tool-surface","content":"PUT and PATCH endpoints have idempotentHint: true."},{"heading":"tool-surface","content":"DELETE endpoints have destructiveHint: true."},{"heading":"tool-surface","content":"If your LLM context budget is tight, prune the tool surface client-side before sending it to the model. Anthropic's connector and OpenAI's Responses MCP tool both support filtering tools at the request level — check the platform documentation for the exact field name."},{"heading":"rate-limits","content":"Route"},{"heading":"rate-limits","content":"Limit"},{"heading":"rate-limits","content":"/mcp/onlyfans-mcp"},{"heading":"rate-limits","content":"120 requests/minute"},{"heading":"rate-limits","content":"A single LLM turn may produce multiple tool calls, each of which is one MCP request. Budget accordingly when planning agentic loops."},{"heading":"errors","content":"Status"},{"heading":"errors","content":"Meaning"},{"heading":"errors","content":"Fix"},{"heading":"errors","content":"401 invalid_token"},{"heading":"errors","content":"Bearer token missing, malformed, or revoked."},{"heading":"errors","content":"Check the Authorization header. Regenerate the key if rotated."},{"heading":"errors","content":"401 token_not_pinned"},{"heading":"errors","content":"You're authenticating with an OAuth access token that has no team binding. Should not happen with a plain API key."},{"heading":"errors","content":"Use an API key, not an OAuth token, or re-authorize."},{"heading":"errors","content":"403"},{"heading":"errors","content":"Scope is fine but the requested resource belongs to a different team, or the account is not connected."},{"heading":"errors","content":"Confirm account belongs to the key's team."},{"heading":"errors","content":"429"},{"heading":"errors","content":"Rate limit."},{"heading":"errors","content":"Back off, respect Retry-After."},{"heading":"errors","content":"type: warn"},{"heading":"errors","content":"The invalid_client error that some teams hit when getting started is an OAuth error, not an API error. It means you're sending requests to /oauth/token with a client_id that does not exist. You do not need to call /oauth/token at all in this integration pattern. Talk only to /mcp/onlyfans-mcp and pass the API key directly."},{"heading":"security-checklist","content":"Store API keys server-side only. Never ship them to the browser, even for authenticated users."},{"heading":"security-checklist","content":"One API key per customer team. Do not let tenant A's chatbot call tools that resolve against tenant B's accounts."},{"heading":"security-checklist","content":"Treat MCP tool calls like any other API call from your product. Log them, rate-limit them per customer, and surface failures to the end user."},{"heading":"security-checklist","content":"Rotate keys when staff with access leaves. There's no separate revoke per session — revocation is at the key level."},{"heading":"security-checklist","content":"Scope prompts so the LLM can't escalate beyond the customer's own accounts (system prompt, allowed account IDs, etc.). The API enforces team isolation, but defense in depth is cheap."},{"heading":"see-also","content":"OnlyFans MCP overview — what MCP is, how it works, and supported clients"},{"heading":"see-also","content":"Claude MCP install guide"},{"heading":"see-also","content":"ChatGPT MCP install guide"},{"heading":"see-also","content":"Manus MCP install guide"},{"heading":"see-also","content":"Develop with AI Agents — llms.txt, OpenAPI schema, onlyfansapi-skill"},{"heading":"see-also","content":"API Reference — every endpoint exposed as an MCP tool"}],"headings":[{"id":"who-this-is-for","content":"Who this is for"},{"id":"tldr","content":"TL;DR"},{"id":"prerequisites","content":"Prerequisites"},{"id":"anthropic-messages-api","content":"Anthropic Messages API"},{"id":"openai-responses-api","content":"OpenAI Responses API"},{"id":"direct-json-rpc","content":"Direct JSON-RPC"},{"id":"per-request-scoping","content":"Per-request scoping"},{"id":"tool-surface","content":"Tool surface"},{"id":"rate-limits","content":"Rate limits"},{"id":"errors","content":"Errors"},{"id":"security-checklist","content":"Security checklist"},{"id":"see-also","content":"See also"}]}},{"_id":"/onlyfans-ai/mcp","title":"Get Started with OnlyFans MCP","description":"What the OnlyFans MCP server is, how it works, and which AI clients it supports.","url":"/onlyfans-ai/mcp","structured":{"contents":[{"heading":"what-is-the-onlyfans-mcp-server","content":"The OnlyFans MCP server exposes every OnlyFans API endpoint as a tool that any AI agent can call. Add it once to your AI tool of choice and your agent can read chats, fans, earnings, post content, run mass messages — without you writing any code."},{"heading":"what-is-the-onlyfans-mcp-server","content":"It's built on the open Model Context Protocol standard, so the same server works with Claude, ChatGPT, Manus, Cursor, VS Code Copilot, and any custom agent."},{"heading":"what-is-the-onlyfans-mcp-server","content":"5 years live · 0 bans. Thousands of agencies run OnlyFans API in production today. Your AI agents ride on the same surface they do."},{"heading":"mcp-server-url","content":"Same URL for every supported AI tool:"},{"heading":"supported-ai-tools","content":"Claude Desktop, Claude.ai (web), Claude Code, and the Anthropic API. 60-second install."},{"heading":"supported-ai-tools","content":"Custom GPTs, Agent Mode, Deep Research. Requires Pro / Business / Enterprise. 90-second install."},{"heading":"supported-ai-tools","content":"Autonomous, scheduled agents — daily reports, churn rescue, whale watch. 90-second install."},{"heading":"supported-ai-tools","content":"Built-in MCP support. Use claude mcp add or paste the URL into your MCP config."},{"heading":"prerequisites","content":"Before you connect any AI tool:"},{"heading":"prerequisites","content":"An OnlyFans API account — free to create, no credit card required"},{"heading":"prerequisites","content":"An API key — generate one in your dashboard"},{"heading":"prerequisites","content":"At least one connected OnlyFans account"},{"heading":"how-the-install-works-4-steps-60-seconds","content":"Sign up + grab an API key in the OnlyFans API dashboard."},{"heading":"how-the-install-works-4-steps-60-seconds","content":"Add the MCP server URL to your AI client's connector panel."},{"heading":"how-the-install-works-4-steps-60-seconds","content":"Authorize via OAuth — you'll be redirected to OnlyFans API to approve access."},{"heading":"how-the-install-works-4-steps-60-seconds","content":"Prompt your agent. It now has 350+ tools across chats, fans, and earnings."},{"heading":"control--safety","content":"Built for agencies, not hobbyists:"},{"heading":"control--safety","content":"Scoped API keys — restrict each key to specific endpoints. Read-only analyst agents and full-write ops agents in the same workspace."},{"heading":"control--safety","content":"Per-account permissions — limit a key to one creator or a roster."},{"heading":"control--safety","content":"Audit log — every API call your agent makes is logged. Review weekly."},{"heading":"control--safety","content":"No media stored — photos, videos, and voice notes never live on our servers."},{"heading":"control--safety","content":"2FA on the dashboard — mandatory for write-scoped keys."},{"heading":"control--safety","content":"type: warn"},{"heading":"control--safety","content":"Use scoped, per-creator keys when handing access to autonomous agents. Audit weekly."},{"heading":"rate-limits","content":"MCP calls are rate-limited to 120 requests per minute per API key. If you hit this often, split work across multiple keys."},{"heading":"see-also","content":"Claude MCP install guide"},{"heading":"see-also","content":"ChatGPT MCP install guide"},{"heading":"see-also","content":"Manus MCP install guide"},{"heading":"see-also","content":"Develop with AI Agents — llms.txt, OpenAPI schema, onlyfansapi-skill"},{"heading":"see-also","content":"API Reference — every endpoint exposed as an MCP tool"}],"headings":[{"id":"what-is-the-onlyfans-mcp-server","content":"What is the OnlyFans MCP server?"},{"id":"mcp-server-url","content":"MCP server URL"},{"id":"supported-ai-tools","content":"Supported AI tools"},{"id":"prerequisites","content":"Prerequisites"},{"id":"how-the-install-works-4-steps-60-seconds","content":"How the install works (4 steps, ~60 seconds)"},{"id":"control--safety","content":"Control & safety"},{"id":"rate-limits","content":"Rate limits"},{"id":"see-also","content":"See also"}]}},{"_id":"/onlyfans-ai/mcp/manus","title":"Manus x OnlyFans","description":"Schedule autonomous Manus agents on your OnlyFans accounts — daily reports, churn rescue, whale watch. 350+ tools, no code required.","url":"/onlyfans-ai/mcp/manus","structured":{"contents":[{"heading":"what-this-does","content":"Manus runs autonomous, scheduled agents on top of OnlyFans MCP. Wake up to a finished revenue digest, not a backlog. Drop in a recipe — daily digest, churn rescue, whale watch — or build your own Manus agent on top of 350+ tools."},{"heading":"what-this-does","content":"Schedules and webhooks included. No code required."},{"heading":"what-this-does","content":"Manus is the right pick when you want work to happen without you. For interactive chat, use Claude or ChatGPT."},{"heading":"prerequisites","content":"An OnlyFans API account"},{"heading":"prerequisites","content":"A Manus workspace with custom-MCP integration support"},{"heading":"prerequisites","content":"At least one connected OnlyFans account"},{"heading":"step-by-step","content":"Manus uses streamable HTTP MCP. The setup lives behind Direct Configuration."},{"heading":"1-open-the-mcp-configuration-modal","content":"In Manus, navigate:"},{"heading":"1-open-the-mcp-configuration-modal","content":"Settings → Connectors → Add Connector → Custom MCP → Add Custom MCP → Direct Configuration"},{"heading":"1-open-the-mcp-configuration-modal","content":"That opens the MCP configuration modal where you add a custom HTTP MCP."},{"heading":"2-fill-in-the-connector-details","content":"Transport Type — HTTP"},{"heading":"2-fill-in-the-connector-details","content":"Server Name — OnlyFans MCP (or any label you prefer)"},{"heading":"2-fill-in-the-connector-details","content":"Server URL:"},{"heading":"2-fill-in-the-connector-details","content":"Note (optional) — tell Manus when to use this MCP, e.g. \"Use for OnlyFans revenue, fans, and messaging tasks\""},{"heading":"3-save","content":"Click Save. Your agent can now call the 350+ tools exposed by the OnlyFans MCP server."},{"heading":"3-save","content":"type: warn"},{"heading":"3-save","content":"Configure approval queues so write actions (mass-message, label updates, deletes) require a human OK. Read-only actions (earnings, fan lookups) can run unattended."},{"heading":"production-ready-agent-recipes","content":"Drop these into Manus as scheduled agents. Each one runs end-to-end — no human, no chatter, no morning standup ritual. Adjust cadences and creator scopes to fit your roster."},{"heading":"daily-revenue-digest","content":"Schedule: every day, 8am UTC"},{"heading":"daily-revenue-digest","content":"Pull last-24h earnings + chargebacks across every connected creator."},{"heading":"daily-revenue-digest","content":"Group by creator, flag any drop >25% vs yesterday."},{"heading":"daily-revenue-digest","content":"Format as Slack-ready markdown."},{"heading":"daily-revenue-digest","content":"Post to #ops-revenue. No human approval required."},{"heading":"whale-watch","content":"Schedule: every 4 hours"},{"heading":"whale-watch","content":"Scan new fans across the agency for spend > $200."},{"heading":"whale-watch","content":"Tag matches with the vip label via the OnlyFans API."},{"heading":"whale-watch","content":"Drop a message in #ops-whales with last message + last spend."},{"heading":"whale-watch","content":"Notify the assigned chatter directly."},{"heading":"churn-rescue","content":"Schedule: every Monday, 9am UTC"},{"heading":"churn-rescue","content":"Find subs lapsing in the next 7 days across every creator."},{"heading":"churn-rescue","content":"Draft a personalised reactivation DM per fan. Never auto-send."},{"heading":"churn-rescue","content":"Queue drafts in the ops chatter approval queue."},{"heading":"churn-rescue","content":"Chatter reviews, edits, and ships in bulk."},{"heading":"example-use-cases","content":"4 prompts to ship as scheduled Manus agents — overnight ops that pay back day one:"},{"heading":"example-use-cases","content":"\"Pull last 24h revenue and post to Slack at 8am every weekday.\" — replaces a recurring n8n / Zapier workflow"},{"heading":"example-use-cases","content":"\"Find every fan whose subscription expires in 7 days and draft reactivation DMs.\" — catches churn before it costs you the renewal"},{"heading":"example-use-cases","content":"\"Every 4h, label new whales (>$200 lifetime spend) and alert the assigned chatter.\" — whales never slip through your dashboard"},{"heading":"example-use-cases","content":"\"Audit every creator nightly: chats with no reply >24h, list them in #ops-backlog.\" — dropped chats never make it to morning standup"},{"heading":"example-use-cases","content":"Most tools are account-scoped and need the account id in the form acct_XXXXXXXXXXXXXXX. If you omit it, Manus will call list_accounts first to find one."},{"heading":"troubleshooting","content":"Confirm Transport Type is set to HTTP (not stdio) and the Server URL is exactly https://app.onlyfansapi.com/mcp/onlyfans-mcp. Then re-save the connector."},{"heading":"troubleshooting","content":"MCP calls are rate-limited to 120 requests/minute per API key. Wait a minute and retry. If you hit this often, split work across multiple API keys (one per scheduled agent)."},{"heading":"troubleshooting","content":"Check the agent's run log for an OAuth or Authentication failed error. Re-authorize the connector by signing in to app.onlyfansapi.com and reconnecting in Manus."},{"heading":"troubleshooting","content":"Lock down the connector with an approval queue for write actions. Use a scoped, read-only API key for analyst agents and reserve write-scoped keys for ops agents you actively supervise."},{"heading":"compared-to-n8n--zapier","content":"Manus"},{"heading":"compared-to-n8n--zapier","content":"n8n"},{"heading":"compared-to-n8n--zapier","content":"Zapier"},{"heading":"compared-to-n8n--zapier","content":"Best for"},{"heading":"compared-to-n8n--zapier","content":"Autonomous AI agents"},{"heading":"compared-to-n8n--zapier","content":"Complex multi-step workflows"},{"heading":"compared-to-n8n--zapier","content":"Trigger-based automations"},{"heading":"compared-to-n8n--zapier","content":"Skill needed"},{"heading":"compared-to-n8n--zapier","content":"Plain English"},{"heading":"compared-to-n8n--zapier","content":"Light technical"},{"heading":"compared-to-n8n--zapier","content":"None"},{"heading":"compared-to-n8n--zapier","content":"AI reasoning"},{"heading":"compared-to-n8n--zapier","content":"Built-in"},{"heading":"compared-to-n8n--zapier","content":"Bring your own"},{"heading":"compared-to-n8n--zapier","content":"Limited"},{"heading":"compared-to-n8n--zapier","content":"Manus is the right pick when the work needs judgement — drafting DMs, ranking priorities, writing reports. Use n8n / Zapier when the work is purely rule-based — webhook in, action out."},{"heading":"see-also","content":"OnlyFans MCP overview — what MCP is, how it works, and supported clients"},{"heading":"see-also","content":"Claude MCP install guide"},{"heading":"see-also","content":"ChatGPT MCP install guide"},{"heading":"see-also","content":"n8n integration — for rule-based automation"},{"heading":"see-also","content":"API Reference — every endpoint exposed as an MCP tool"}],"headings":[{"id":"what-this-does","content":"What this does"},{"id":"prerequisites","content":"Prerequisites"},{"id":"step-by-step","content":"Step-by-step"},{"id":"1-open-the-mcp-configuration-modal","content":"1. Open the MCP configuration modal"},{"id":"2-fill-in-the-connector-details","content":"2. Fill in the connector details"},{"id":"3-save","content":"3. Save"},{"id":"production-ready-agent-recipes","content":"Production-ready agent recipes"},{"id":"daily-revenue-digest","content":"Daily revenue digest"},{"id":"whale-watch","content":"Whale watch"},{"id":"churn-rescue","content":"Churn rescue"},{"id":"example-use-cases","content":"Example use cases"},{"id":"troubleshooting","content":"Troubleshooting"},{"id":"compared-to-n8n--zapier","content":"Compared to n8n / Zapier"},{"id":"see-also","content":"See also"}]}},{"_id":"/introduction/guides/composing-messages","title":"Composing messages","description":"Learn how to compose and send messages from our API, media, PPVs, and more.","url":"/introduction/guides/composing-messages","structured":{"contents":[{"content":"This guide will give you a brief overview of how to compose messages with various elements using our API."},{"content":"type: warn"},{"content":"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."},{"content":"Looking for the chat_id? Use our List Chats endpoint."},{"content":"Looking for the developer-oriented documentation? Please refer to our API Reference."},{"heading":"text-only-messages","content":"Simply want to send a regular message? Use the following payload:"},{"heading":"adding-media","content":"Please refer to our dedicated guide on uploading media for more information on how to upload media files, and how to include them in your chat messages."},{"heading":"setting-a-price-ppv","content":"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."},{"heading":"only-including-paid-media","content":"To send a paid message without any free preview media, you can use the following payload:"},{"heading":"only-including-paid-media","content":"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. You can mix-and-match these IDs in the same array."},{"heading":"including-free-preview-media","content":"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."},{"heading":"including-free-preview-media","content":"Important!Make sure to list every previews media file in the mediaFiles array as well. Otherwise, the API will return an error."},{"heading":"including-free-preview-media","content":"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."},{"heading":"including-free-preview-media","content":"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. You can mix-and-match these IDs in the same array."},{"heading":"tagging-other-onlyfans-creators","content":"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."},{"heading":"tagging-other-onlyfans-creators","content":"How to find the OnlyFans user ID of a creator?"},{"heading":"tagging-other-onlyfans-creators","content":"If you've connected the relevant creator account to OnlyFans API, you can use our List Accounts endpoint."},{"heading":"tagging-other-onlyfans-creators","content":"Not connected, but you know the creator's username? You can use our Get Profile Details endpoint."},{"heading":"tagging-other-onlyfans-creators","content":"Not connected and don't know the username? You can use our Search Profiles endpoint."},{"heading":"formatting-your-message-text","content":"Please refer to our dedicated guide on text formatting for more information on how to format your message text, including text styles, colors, and more."}],"headings":[{"id":"text-only-messages","content":"Text-only messages"},{"id":"adding-media","content":"Adding media"},{"id":"setting-a-price-ppv","content":"Setting a price (PPV)"},{"id":"only-including-paid-media","content":"Only including paid media"},{"id":"including-free-preview-media","content":"Including free preview media"},{"id":"tagging-other-onlyfans-creators","content":"Tagging other OnlyFans creators"},{"id":"formatting-your-message-text","content":"Formatting your message text"}]}},{"_id":"/introduction/guides/composing-posts","title":"Composing posts","description":"Learn how to compose posts from our API, including labels, media, polls, schedules, and more.","url":"/introduction/guides/composing-posts","structured":{"contents":[{"content":"This guide will give you a brief overview of how to compose posts with various elements using our API."},{"content":"type: warn"},{"content":"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."},{"content":"Looking for the developer-oriented documentation? Please refer to our API Reference."},{"heading":"text-only-posts","content":"Simply want to send a regular text post? Use the following payload:"},{"heading":"retrieving-the-accounts-existing-labels","content":"Looking for the developer-oriented documentation? Please refer to our API Reference."},{"heading":"retrieving-the-accounts-existing-labels","content":"You can retrieve the account's existing labels by sending a GET request to the https://app.onlyfansapi.com/api/{account}/posts/labels endpoint."},{"heading":"retrieving-the-accounts-existing-labels","content":"It will return a payload like:"},{"heading":"retrieving-the-accounts-existing-labels","content":"You can then use the id of the label(s) to apply it to your post."},{"heading":"creating-a-new-label","content":"Looking for the developer-oriented documentation? Please refer to our API Reference."},{"heading":"creating-a-new-label","content":"To create a new label, send a POST request to the https://app.onlyfansapi.com/api/{account}/posts/labels endpoint with the following payload:"},{"heading":"creating-a-new-label","content":"It will then return a payload like:"},{"heading":"creating-a-new-label","content":"You can then use the id of the newly created label to apply it to your post."},{"heading":"adding-labels-to-your-post","content":"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."},{"heading":"adding-media","content":"Please refer to our dedicated guide on uploading media for more information on how to upload media files, and how to include them in your posts."},{"heading":"adding-polls","content":"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."},{"heading":"regular-polls","content":"To include a regular poll in your post, set the votingType field to poll."},{"heading":"regular-polls","content":"Specifying the optionsThe 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."},{"heading":"regular-polls","content":"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."},{"heading":"quizzes","content":"To include a quiz in your post, set the votingType field to quiz."},{"heading":"quizzes","content":"Specifying the optionsThe quiz options can be set by using the votingOptions field. It should be an array of strings. You must provide at least 2 options."},{"heading":"quizzes","content":"Specifying the correct answerSpecify 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."},{"heading":"quizzes","content":"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."},{"heading":"setting-an-expiration-date","content":"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."},{"heading":"scheduling-posts","content":"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."},{"heading":"saving-a-post-for-later","content":"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"},{"heading":"setting-a-fundraising-target","content":"To include a fundraising target in your post, you can use the fundRaisingTargetAmount and fundRaisingTipsPresets fields in your payload."},{"heading":"setting-a-fundraising-target","content":"Setting a target amountThe 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."},{"heading":"setting-a-fundraising-target","content":"Setting tip presetsThe 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."},{"heading":"setting-a-fundraising-target","content":"Tip preset rules"},{"heading":"setting-a-fundraising-target","content":"You must provide at least one preset value."},{"heading":"setting-a-fundraising-target","content":"Each preset value must be at least 5."},{"heading":"setting-a-fundraising-target","content":"Each preset value may not be more than the fundRaisingTargetAmount."},{"heading":"tagging-other-onlyfans-creators","content":"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."},{"heading":"tagging-other-onlyfans-creators","content":"How to find the OnlyFans user ID of a creator?"},{"heading":"tagging-other-onlyfans-creators","content":"If you've connected the relevant creator account to OnlyFans API, you can use our List Accounts endpoint."},{"heading":"tagging-other-onlyfans-creators","content":"Not connected, but you know the creator's username? You can use our Get Profile Details endpoint."},{"heading":"tagging-other-onlyfans-creators","content":"Not connected and don't know the username? You can use our Search Profiles endpoint."},{"heading":"formatting-your-post-text","content":"Please refer to our dedicated guide on text formatting for more information on how to format your post text, including text styles, colors, and more."}],"headings":[{"id":"text-only-posts","content":"Text-only posts"},{"id":"post-labels","content":"Post labels"},{"id":"retrieving-the-accounts-existing-labels","content":"Retrieving the account's existing labels"},{"id":"creating-a-new-label","content":"Creating a new label"},{"id":"adding-labels-to-your-post","content":"Adding label(s) to your post"},{"id":"adding-media","content":"Adding media"},{"id":"adding-polls","content":"Adding polls"},{"id":"regular-polls","content":"Regular polls"},{"id":"quizzes","content":"Quizzes"},{"id":"setting-an-expiration-date","content":"Setting an expiration date"},{"id":"scheduling-posts","content":"Scheduling posts"},{"id":"saving-a-post-for-later","content":"Saving a post for later"},{"id":"setting-a-fundraising-target","content":"Setting a fundraising target"},{"id":"tagging-other-onlyfans-creators","content":"Tagging other OnlyFans creators"},{"id":"formatting-your-post-text","content":"Formatting your post text"}]}},{"_id":"/introduction/guides/connect-onlyfans-account","title":"Connect OnlyFans account","description":"Learn how to connect your OnlyFans account so you can use it with OnlyFans API","url":"/introduction/guides/connect-onlyfans-account","structured":{"contents":[{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"If you want to use our API to interact with OnlyFans API endpoints like:"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Reading chats"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Sending messages to fans"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Getting statistics"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Getting fans"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Following / unfollowing users"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Getting webhook notifications"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"... basically anything that requires you to be logged in to your OnlyFans account."},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Then, you need to connect your OnlyFans account to our API."},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"You can connect your OnlyFans account in five ways:"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Using our automated login flow (recommended for most users)"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Using our Auth+ iPhone app (recommended when 2FA tokens aren't available to you, or when Face ID is enabled)"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Add \"Login with OnlyFans\" to your app"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Connect using API (programmatic flow)"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"By providing cURL request"},{"heading":"why-do-you-need-to-connect-your-onlyfans-account","content":"Which option should you pick?\nIf you (the OFAPI user — e.g. an agency) have easy access to the OnlyFans account's credentials and 2FA tokens, use Option 1 (automated login flow).\nIf you don't have direct access to the creator's 2FA tokens, or the creator's OnlyFans account has Face ID verification enabled, use Option 2 (Auth+ app) — the creator completes sign-in and 2FA on their own iPhone."},{"heading":"option-1-using-our-automated-login-flow","content":"This is the recommended flow when you already have the OnlyFans credentials and can enter the 2FA code on behalf of the creator.\nOur 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."},{"heading":"option-1-using-our-automated-login-flow","content":"Your credentials are securely stored in our database and are never shared with\nanyone (not even our engineers can see your credentials)."},{"heading":"option-1-using-our-automated-login-flow","content":"Steps to connect your OnlyFans account:"},{"heading":"option-1-using-our-automated-login-flow","content":"Go to the OnlyFans API Console -> Accounts"},{"heading":"option-1-using-our-automated-login-flow","content":"Click on the + Connect Account button"},{"heading":"option-1-using-our-automated-login-flow","content":"Enter name of the account (this will be used for your reference)"},{"heading":"option-1-using-our-automated-login-flow","content":"Enter your OnlyFans email and password"},{"heading":"option-1-using-our-automated-login-flow","content":"Choose Proxy Country — currently US and UK are available (we will automatically assign a dedicated mobile IP address for this account), or enter your own proxy details"},{"heading":"option-1-using-our-automated-login-flow","content":"type: warn"},{"heading":"option-1-using-our-automated-login-flow","content":"Other proxy countries (DE, FR, IT) have been temporarily removed due to OnlyFans restrictions."},{"heading":"option-1-using-our-automated-login-flow","content":"Click on the Add button"},{"heading":"option-1-using-our-automated-login-flow","content":"Your account will start connecting and you'll see the live progress of the login process."},{"heading":"option-1-using-our-automated-login-flow","content":"If you've 2FA enabled on your OnlyFans account, you'll be asked to enter the 2FA code."},{"heading":"option-1-using-our-automated-login-flow","content":"Done! ✅ You're now able to see the account details and start using your account with our API."},{"heading":"option-2-using-our-auth-iphone-app","content":"When to use Auth+: pick this option only if you (the OFAPI user) don't have easy access to the OnlyFans account's 2FA tokens, or if the creator's OnlyFans account has Face ID verification enabled. Otherwise, Option 1 is simpler."},{"heading":"option-2-using-our-auth-iphone-app","content":"title: 📱 Install the Auth+ app first"},{"heading":"option-2-using-our-auth-iphone-app","content":"Before starting a session, the creator should install the FansAPI Auth+ app on their iPhone via TestFlight:\napp.onlyfansapi.com/auth-plus-app"},{"heading":"option-2-using-our-auth-iphone-app","content":"If they don't already have TestFlight, install it from the App Store first: Get TestFlight. The phone-only video below also walks through this."},{"heading":"option-2-using-our-auth-iphone-app","content":"Auth+ is our iPhone app that lets creators sign in to their OnlyFans account directly from their device. It handles every 2FA method OnlyFans supports — App/SMS OTP as well as Face ID verification — without the creator leaving their phone."},{"heading":"option-2-using-our-auth-iphone-app","content":"You can start an Auth+ session in two ways: from the OnlyFans API Console (creator scans a QR code), or programmatically via the API (creator pastes an auth code)."},{"heading":"video-guides","content":"Follow one of the two walkthroughs below depending on your setup."},{"heading":"video-guides","content":"Desktop + phone flow"},{"heading":"video-guides","content":"Phone-only flow (includes TestFlight install)"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"Go to the OnlyFans API Console -> Accounts"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"Click on the + Connect Account button"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"Enter the name of the account (this will be used for your reference)"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"Click on Auth+"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"Click on the Add button"},{"heading":"step-1a--start-the-session-from-the-dashboard","content":"You'll be shown a QR code and an auth code — hand either to the creator for the next step."},{"heading":"step-1b--or-start-the-session-via-the-api","content":"Call POST /authenticate with auth_type set to mobile_app and a display_name for the account:"},{"heading":"step-1b--or-start-the-session-via-the-api","content":"Example response:"},{"heading":"step-1b--or-start-the-session-via-the-api","content":"The mobile_auth_session_deeplink opens the Auth+ app directly on the creator's iPhone with the session pre-filled. You can also hand them the auth code (fansapi_auth_abc123) to paste manually into the app."},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"These steps are the same whether the session was started from the Dashboard or the API."},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Install TestFlight from the App Store"},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Install the FansAPI Auth+ app via TestFlight: app.onlyfansapi.com/auth-plus-app"},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Open Auth+ and either scan the QR code (Dashboard flow) or paste the auth code (Dashboard or API flow)"},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Sign in with the OnlyFans email and password"},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Complete any 2FA step (App/SMS OTP or Face Authentication) directly inside the app"},{"heading":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Done! ✅ The account is now connected and ready to use with our API."},{"heading":"option-3-add-login-with-onlyfans-to-your-app","content":"If you want to embed a \"Connect with OnlyFans\" flow directly in your app UI, use the official auth package."},{"heading":"2-create-a-client-session-token","content":"Create a client session token (ofapi_cs_...) from your backend:"},{"heading":"2-create-a-client-session-token","content":"POST /client-sessions"},{"heading":"3-start-authentication-in-your-frontend","content":"This package handles the OTP / selfie authentication UI flow for you in an embedded modal."},{"heading":"3-start-authentication-in-your-frontend","content":"For the full authentication API and package reference, see: /auth."},{"heading":"option-4-connect-using-api-programmatic-flow","content":"Use this flow if you want to connect accounts from your backend or app UI instead of the dashboard."},{"heading":"option-4-connect-using-api-programmatic-flow","content":"Base URL for examples below: https://app.onlyfansapi.com/api"},{"heading":"1-start-authentication","content":"POST /authenticate"},{"heading":"1-start-authentication","content":"Example response:"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"GET /authenticate/{attempt_id}"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"Important fields:"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"state"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"progress"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.success"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.needs_otp"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.needs_face_otp"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.face_otp_verification_url"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.error_message"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"lastAttempt.error_code"},{"heading":"2-poll-status-until-completion-or-2fa-required","content":"When lastAttempt.needs_face_otp is true, use lastAttempt.face_otp_verification_url.\nThat URL is the OnlyFans selfie verification page that the creator must open and complete."},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"PUT /authenticate/{attempt_id}"},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"If selfie verification is required, submit:"},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"For the standard (v1) selfie verification, no external mobile app is required. The creator only needs to open\nthe face_otp_verification_url link in a regular browser on their phone or desktop\nand complete the verification steps there. Alternatively, they can complete it through our Auth+ app."},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"type: warn"},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"title: v2 Face Authentication requires Auth+"},{"heading":"3-submit-2fa-code-sms-or-otp-app","content":"If the creator's OnlyFans account has OnlyFans' v2 Face Authentication system enabled, the Dashboard and API flows (without Auth+) CANNOT complete sign-in.\nYou MUST use our Auth+ iPhone app — it's the only flow that supports v2 Face Authentication."},{"heading":"4-optional-send-otp-verification-email-to-creator","content":"POST /authenticate/{attempt_id}/send-email-to-creator"},{"heading":"wrong-code-retry-phoneapp-otp","content":"If the submitted OTP is invalid, the attempt enters retry mode instead of failing permanently."},{"heading":"wrong-code-retry-phoneapp-otp","content":"Retry progress: wrong_2fa_code_retry"},{"heading":"wrong-code-retry-phoneapp-otp","content":"Definitive error code: WRONG_2FA"},{"heading":"wrong-code-retry-phoneapp-otp","content":"Re-submit a fresh code via PUT /authenticate/{attempt_id} (no restart needed)"},{"heading":"wrong-code-retry-phoneapp-otp","content":"Example poll response while retry is available:"},{"heading":"other-2fa-failure-cases","content":"lastAttempt.error_message is populated for terminal failures (for example timeout or upstream verification errors)."},{"heading":"other-2fa-failure-cases","content":"If you submit OTP when none is pending, API returns 400 with: No pending OTP verification."},{"heading":"other-2fa-failure-cases","content":"Recommended behavior:"},{"heading":"other-2fa-failure-cases","content":"Keep polling while completed_at is null."},{"heading":"other-2fa-failure-cases","content":"If lastAttempt.needs_face_otp is true, take lastAttempt.face_otp_verification_url, ask the creator to complete selfie verification in browser, then submit:"},{"heading":"other-2fa-failure-cases","content":"If state is needs-otp (phone OTP), prompt for SMS code and submit:"},{"heading":"other-2fa-failure-cases","content":"If state is needs-app-otp (authenticator app), prompt for app code and submit:"},{"heading":"other-2fa-failure-cases","content":"If progress is wrong_2fa_code_retry, prompt user for a new OTP and re-submit."},{"heading":"other-2fa-failure-cases","content":"If attempt is completed with failure, show error_message and start a new authentication attempt."},{"heading":"option-5-by-providing-curl-request","content":"This is the manual way to connect your OnlyFans account to our API."},{"heading":"option-5-by-providing-curl-request","content":"type: warn"},{"heading":"option-5-by-providing-curl-request","content":"We recommend to sign in and enter the cURL request from a incognito\nwindow. Please do NOT sign out account after you've connected it to our API,\njust close the incognito window."},{"heading":"option-5-by-providing-curl-request","content":"Honestly, it's easier to watch the video below and follow the steps."},{"heading":"what-does-face-otp-request-attempts-exhausted-mean","content":"When you connect an OnlyFans account that requires Face ID Authentication, you may run into the message \"Face OTP request attempts exhausted\". This happens because OnlyFans enforces a daily limit of 3 Face ID requests per day on the account."},{"heading":"how-attempts-get-used-up","content":"Every time the account is added to OnlyFans API, one Face ID attempt is used. We start a Face ID request by default when it's the only enabled 2FA method, so the attempt is consumed even if the Face ID verification was only started but never completed — a started-but-incomplete attempt still counts against the daily limit of 3."},{"heading":"how-the-limit-resets","content":"There are only two ways to reset the limit:"},{"heading":"how-the-limit-resets","content":"Complete Face ID before the attempts are exhausted, or"},{"heading":"how-the-limit-resets","content":"Wait 24 hours after exhaustion — the counter will then reset itself back to 3."},{"heading":"how-the-limit-resets","content":"type: warn"},{"heading":"how-the-limit-resets","content":"There is no way around Face ID attempt exhaustion. Once the 3 daily attempts are used up, you always have to wait 24 hours for the limit to reset. This is an OnlyFans-side restriction — neither you nor we can do anything to bypass or speed it up."}],"headings":[{"id":"why-do-you-need-to-connect-your-onlyfans-account","content":"Why do you need to connect your OnlyFans account?"},{"id":"option-1-using-our-automated-login-flow","content":"Option 1: Using our automated login flow"},{"id":"option-2-using-our-auth-iphone-app","content":"Option 2: Using our Auth+ iPhone app"},{"id":"video-guides","content":"Video guides"},{"id":"step-1a--start-the-session-from-the-dashboard","content":"Step 1a — Start the session from the Dashboard"},{"id":"step-1b--or-start-the-session-via-the-api","content":"Step 1b — Or start the session via the API"},{"id":"step-2--complete-the-sign-in-on-the-creators-iphone","content":"Step 2 — Complete the sign-in on the creator's iPhone"},{"id":"option-3-add-login-with-onlyfans-to-your-app","content":"Option 3: Add \"Login with OnlyFans\" to your app"},{"id":"1-install-package","content":"1) Install package"},{"id":"2-create-a-client-session-token","content":"2) Create a client session token"},{"id":"3-start-authentication-in-your-frontend","content":"3) Start authentication in your frontend"},{"id":"option-4-connect-using-api-programmatic-flow","content":"Option 4: Connect using API (programmatic flow)"},{"id":"1-start-authentication","content":"1) Start authentication"},{"id":"2-poll-status-until-completion-or-2fa-required","content":"2) Poll status until completion or 2FA required"},{"id":"3-submit-2fa-code-sms-or-otp-app","content":"3) Submit 2FA code (SMS or OTP app)"},{"id":"4-optional-send-otp-verification-email-to-creator","content":"4) Optional: send OTP verification email to creator"},{"id":"handling-failed-2fa-and-retry","content":"Handling failed 2FA and retry"},{"id":"wrong-code-retry-phoneapp-otp","content":"Wrong code retry (phone/app OTP)"},{"id":"other-2fa-failure-cases","content":"Other 2FA failure cases"},{"id":"option-5-by-providing-curl-request","content":"Option 5: By providing cURL request"},{"id":"what-does-face-otp-request-attempts-exhausted-mean","content":"What does \"Face OTP request attempts exhausted\" mean?"},{"id":"how-attempts-get-used-up","content":"How attempts get used up"},{"id":"how-the-limit-resets","content":"How the limit resets"}]}},{"_id":"/introduction/guides/creatortraffic-smart-links","title":"Connect CreatorTraffic to OnlyFans API Smart Links","description":"Connect your CreatorTraffic ad account to OnlyFans API Smart Links to automatically postback subscriber conversions and see which CreatorTraffic campaigns drive subscribers.","url":"/introduction/guides/creatortraffic-smart-links","structured":{"contents":[{"heading":"what-the-creatortraffic-integration-does","content":"CreatorTraffic is a traffic source for OnlyFans media buyers. This integration connects your CreatorTraffic ad account to OnlyFans API Smart Links so that every new subscriber you generate is reported straight back to CreatorTraffic for attribution."},{"heading":"what-the-creatortraffic-integration-does","content":"Why connect it? Once connected, OnlyFans API postbacks each subscriber conversion to CreatorTraffic server-side, matched to the click that drove it. You get a clear view of which CreatorTraffic campaigns actually generate subscribers, instead of optimizing blind on clicks. No JavaScript, nothing to install on OnlyFans, and only a single API token to set up."},{"heading":"open-your-creatortraffic-settings","content":"Go to ads.creatortraffic.com/settings and choose Settings from the sidebar."},{"heading":"generate-and-copy-your-api-token","content":"In API Access, click Generate API Token, then copy the token."},{"heading":"generate-and-copy-your-api-token","content":"type: warn"},{"heading":"generate-and-copy-your-api-token","content":"If the Generate API Token button is unavailable, ask your CreatorTraffic account manager to enable API access on your account."},{"heading":"connect-it-in-onlyfans-api","content":"Log into your OnlyFans API Dashboard, open Smart Links → Ad Platforms, click Add Platform, and select CreatorTraffic. Paste the token into the API Token field and click Create."},{"heading":"add-the-click-id-to-your-smart-link-url","content":"Copy your Smart Link and append CreatorTraffic's click-ID parameters to the ad's destination URL so each conversion can be matched back to the click that drove it:"},{"heading":"add-the-click-id-to-your-smart-link-url","content":"Replace YOUR_SMART_LINK_ID with the ID from your Smart Links dashboard. CreatorTraffic replaces {clickid} with the click's ID at click time, and Smart Links reads it from the ecid parameter and sends it back to CreatorTraffic with every conversion. Keep both ?ecid={clickid} and &utm_source=creatortraffic on the URL."},{"heading":"youre-done","content":"New subscribers attributed to that Smart Link are now postbacked to CreatorTraffic using the click ID. They'll show up against the matching campaign in your CreatorTraffic reports."}],"headings":[{"id":"what-the-creatortraffic-integration-does","content":"What the CreatorTraffic integration does"},{"id":"watch-the-walkthrough","content":"Watch the walkthrough"},{"id":"step-by-step-setup","content":"Step-by-step setup"},{"id":"open-your-creatortraffic-settings","content":"Open your CreatorTraffic settings"},{"id":"generate-and-copy-your-api-token","content":"Generate and copy your API token"},{"id":"connect-it-in-onlyfans-api","content":"Connect it in OnlyFans API"},{"id":"add-the-click-id-to-your-smart-link-url","content":"Add the click ID to your Smart Link URL"},{"id":"youre-done","content":"You're done"}]}},{"_id":"/introduction/guides/develop-with-ai-agents","title":"Develop with AI Agents","description":"Use AI agents with OnlyFans API documentation resources and the official onlyfansapi-skill.","url":"/introduction/guides/develop-with-ai-agents","structured":{"contents":[{"heading":"not-sure-where-to-start-toc","content":"llms.txt, llms-full.txt, per-page .mdx URLs, and the OpenAPI schema."},{"heading":"not-sure-where-to-start-toc","content":"One-click install for Cursor, VS Code, Claude, ChatGPT, and any other MCP client."},{"heading":"not-sure-where-to-start-toc","content":"Drop-in skill from skills.sh that teaches your agent the API surface."},{"heading":"not-sure-where-to-start-toc","content":"Small prompt tweaks that produce dramatically better agent output."},{"heading":"ai-ready-docs-resources","content":"When building with AI agents, point them to these resources first:"},{"heading":"ai-ready-docs-resources","content":"docs.onlyfansapi.com/llms.txt - canonical AI-friendly docs entrypoint"},{"heading":"ai-ready-docs-resources","content":"docs.onlyfansapi.com/llms-full.txt - complete LLM-friendly docs (also used for backward compatibility)"},{"heading":"ai-ready-docs-resources","content":"API Reference - interactive endpoint docs by category"},{"heading":"ai-ready-docs-resources","content":"OpenAPI schema - machine-readable API spec"},{"heading":"per-page-mdx-urls","content":"For individual guides or API endpoints, just append .mdx to the page URL and feed that directly to the AI agent."},{"heading":"per-page-mdx-urls","content":"Examples:"},{"heading":"per-page-mdx-urls","content":"https://docs.onlyfansapi.com/introduction/guides/develop-with-ai-agents.mdx"},{"heading":"per-page-mdx-urls","content":"https://docs.onlyfansapi.com/api-reference/account/list-accounts.mdx"},{"heading":"per-page-mdx-urls","content":"https://docs.onlyfansapi.com/api-reference/chats/list-chats.mdx"},{"heading":"connect-our-docs-via-mcp","content":"We host a remote Model Context Protocol server at:"},{"heading":"connect-our-docs-via-mcp","content":"Hook it into Claude, Cursor, VS Code, ChatGPT, or any other MCP-compatible client and your agent gets three tools that query these docs directly — no copy/paste, always up to date:"},{"heading":"connect-our-docs-via-mcp","content":"search_docs(query, limit?) — full-text search across the docs (Algolia)."},{"heading":"connect-our-docs-via-mcp","content":"get_doc_page(path) — raw Markdown for a single page (path or full URL)."},{"heading":"connect-our-docs-via-mcp","content":"get_overview() — the entire docs as one Markdown document (llms.txt)."},{"heading":"connect-our-docs-via-mcp","content":"The MCP server is public, read-only, and requires no API key. It only exposes content already published at docs.onlyfansapi.com."},{"heading":"cursor","content":"→ Add to Cursor (one click)"},{"heading":"cursor","content":"Or manually: Settings → MCP → Add new server, type HTTP, URL https://docs.onlyfansapi.com/api/mcp."},{"heading":"vs-code-github-copilot","content":"→ Add to VS Code (one click)"},{"heading":"vs-code-github-copilot","content":"Or manually: open the Command Palette → MCP: Add Server → HTTP → URL https://docs.onlyfansapi.com/api/mcp."},{"heading":"claude-desktop","content":"Open Settings → Connectors → Add custom connector and paste the URL:"},{"heading":"claude-desktop","content":"Alternatively, add this entry to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\\Claude\\claude_desktop_config.json (Windows) and restart the app:"},{"heading":"claudeai-web","content":"In Claude.ai: Settings → Connectors → Add custom connector → URL https://docs.onlyfansapi.com/api/mcp. Requires a paid plan that supports custom connectors."},{"heading":"chatgpt","content":"In ChatGPT: Settings → Connectors → Create → paste https://docs.onlyfansapi.com/api/mcp. Custom connectors are available on plans that include MCP support (Pro / Business / Enterprise at the time of writing)."},{"heading":"other-mcp-clients","content":"Any client that speaks Streamable HTTP MCP works — point it at https://docs.onlyfansapi.com/api/mcp. For stdio-only clients, bridge with mcp-remote:"},{"heading":"install-onlyfansapi-skill-from-skillssh","content":"Skill page:\nskills.sh/onlyfansapi/skill/onlyfansapi-skill"},{"heading":"install-onlyfansapi-skill-from-skillssh","content":"Install command shown on the skill page:"},{"heading":"install-onlyfansapi-skill-from-skillssh","content":"Restart your agent/CLI session after installation so the new skill is loaded."},{"heading":"configure-your-api-key","content":"The skill expects ONLYFANSAPI_API_KEY in your environment:"},{"heading":"configure-your-api-key","content":"Get your key from:\napp.onlyfansapi.com/api-keys"},{"heading":"configure-your-api-key","content":"Quick auth check:"},{"heading":"prompting-tips-for-better-agent-output","content":"Ask the agent to read llms.txt or llms-full.txt before generating calls."},{"heading":"prompting-tips-for-better-agent-output","content":"Include exact date ranges and timezone when requesting analytics."},{"heading":"prompting-tips-for-better-agent-output","content":"Ask for tables with totals when comparing multiple accounts."},{"heading":"prompting-tips-for-better-agent-output","content":"Ask the agent to show endpoint path + params before execution if you want to review requests first."}],"headings":[{"id":"not-sure-where-to-start-toc","content":"Not sure where to start? [!toc]"},{"id":"ai-ready-docs-resources","content":"AI-ready docs resources"},{"id":"per-page-mdx-urls","content":"Per-page .mdx URLs"},{"id":"connect-our-docs-via-mcp","content":"Connect our docs via MCP"},{"id":"cursor","content":"Cursor"},{"id":"vs-code-github-copilot","content":"VS Code (GitHub Copilot)"},{"id":"claude-desktop","content":"Claude Desktop"},{"id":"claudeai-web","content":"Claude.ai (web)"},{"id":"chatgpt","content":"ChatGPT"},{"id":"other-mcp-clients","content":"Other MCP clients"},{"id":"install-onlyfansapi-skill-from-skillssh","content":"Install onlyfansapi-skill from skills.sh"},{"id":"configure-your-api-key","content":"Configure your API key"},{"id":"prompting-tips-for-better-agent-output","content":"Prompting tips for better agent output"}]}},{"_id":"/introduction/guides/downloading-media","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.","url":"/introduction/guides/downloading-media","structured":{"contents":[{"content":"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."},{"heading":"download-media-from-onlyfans-cdn","content":"The full media download endpoint documentation can be found\nhere."},{"heading":"download-media-from-onlyfans-cdn","content":"Media can be downloaded by calling GET https://app.onlyfansapi.com/api/{account}/media/download/{ONLYFANS_CDN_URL}."},{"heading":"download-media-from-onlyfans-cdn","content":"The {ONLYFANS_CDN_URL} parameter should be a URL from any OnlyFans CDN subdomain (i.e. anything matching https://cdn*.onlyfans.com/*, such as cdn2.onlyfans.com, cdn3.onlyfans.com, etc.). A typical URL looks like 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."},{"heading":"download-media-from-onlyfans-cdn","content":"The endpoint streams the media file directly as a binary response, forwarding the upstream Content-Type from the OnlyFans CDN (e.g. image/jpeg, video/mp4, audio/mpeg). Save the response bytes to disk or process them as needed. There's no intermediate URL or re-hosted copy."},{"heading":"download-media-from-onlyfans-cdn","content":"title: Detecting file type"},{"heading":"download-media-from-onlyfans-cdn","content":"type: info"},{"heading":"download-media-from-onlyfans-cdn","content":"Signed CDN URLs often carry query parameters (e.g. ?Tag=…&Signature=…) and may not have a clean file extension. Inspect the response's Content-Type header to determine how to handle the file rather than parsing the URL."},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"Downloading the full Media Vault one CDN URL at a time is slow and rate-limited. For bulk use cases, use our Data Exports feature instead, which packages your entire Media Vault (every photo, video, and audio file) into a single ZIP file you can download once it's ready."},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"This is the recommended approach for:"},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"AI / LoRA training datasets: Get every asset in one archive instead of stitching together thousands of individual downloads. See Download Media and Chats for LLM and LoRA Training for a worked example."},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"Backups and platform migration: Snapshot the full vault for disaster recovery or before switching platforms. See Complete Data Backup and Migration."},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"Bulk content repurposing: Pull your full media library at original quality for use elsewhere."},{"heading":"-bulk-downloads-export-your-entire-media-vault","content":"You can kick off a Media export from the Data Exports dashboard (no code) or programmatically via the Create Data Export API. Big vaults may take several hours to package; you can close the browser and come back later to download the result."},{"heading":"migrating-from-the-deprecated-scrape-endpoint","content":"The previous POST /api/{account}/media/scrape endpoint is deprecated. If you have an existing integration built against it, here's what changes when you switch to the new download endpoint:"},{"heading":"migrating-from-the-deprecated-scrape-endpoint","content":"Response shape: The deprecated endpoint re-hosted the file on the OnlyFans API CDN and returned a URL. The new endpoint streams the file binary directly in the response, so you'll need to save the bytes (not a URL) on your side."},{"heading":"migrating-from-the-deprecated-scrape-endpoint","content":"File size limit: The new endpoint has no file size limit. The deprecated endpoint capped uploads at 500MB."},{"heading":"migrating-from-the-deprecated-scrape-endpoint","content":"Input format: The new endpoint accepts a CDN URL only. Vault Media IDs (which the deprecated endpoint accepted) are not supported here."}],"headings":[{"id":"download-media-from-onlyfans-cdn","content":"Download media from OnlyFans CDN"},{"id":"-bulk-downloads-export-your-entire-media-vault","content":"🚀 Bulk downloads: export your entire Media Vault"},{"id":"migrating-from-the-deprecated-scrape-endpoint","content":"Migrating from the deprecated scrape endpoint"}]}},{"_id":"/introduction/guides/meta-pixel-smart-links","title":"Connect your Meta Pixel to OnlyFans API Smart Links","description":"Send every OnlyFans subscription, purchase, and message event straight to your Meta (Facebook) Pixel with server-side postbacks. No JavaScript, nothing to install on OnlyFans.","url":"/introduction/guides/meta-pixel-smart-links","structured":{"contents":[{"heading":"what-is-a-meta-pixel","content":"A Meta Pixel (now called a dataset in Events Manager) is Meta's conversion tracking tool for Facebook and Instagram ads. It tells Meta's ad platform when someone takes a valuable action, like subscribing or making a purchase, after clicking your ad. This data is what Meta's algorithm uses to find more people who are likely to convert, which lowers your cost per subscriber over time."},{"heading":"what-is-a-meta-pixel","content":"Why connect it to Smart Links? OnlyFans doesn't support Meta's pixel natively, and there's no way to install tracking code on OnlyFans pages. Smart Links bridge the gap by tracking everything server-side through Meta's Conversions API: every click, subscription, tip, and purchase is sent back to your Meta Pixel automatically. No JavaScript, nothing to install on OnlyFans."},{"heading":"what-is-a-meta-pixel","content":"What you'll need"},{"heading":"what-is-a-meta-pixel","content":"An active OnlyFans API account with Smart Links enabled"},{"heading":"what-is-a-meta-pixel","content":"A Meta Business account with access to Events Manager"},{"heading":"what-is-a-meta-pixel","content":"Your Meta Pixel ID and a Conversions API access token (we'll get both below)"},{"heading":"why-this-matters-for-meta","content":"Most OnlyFans media buyers run Meta Ads, but Meta's pixel can't see what happens on OnlyFans: subscriptions, tips, PPV purchases, messages. Without conversion data flowing back, Meta optimizes for clicks, not buyers, and your cost-per-sub stays high."},{"heading":"why-this-matters-for-meta","content":"Without conversion data, Meta optimizes for link clicks and landing-page views. You pay for traffic that doesn't subscribe."},{"heading":"why-this-matters-for-meta","content":"With Smart Links + your Meta Pixel, every subscription and transaction is sent to Meta via the server-side Conversions API. Meta learns which clicks become paying fans and finds more people like them."},{"heading":"why-this-matters-for-meta","content":"Meta's browser pixel is JavaScript that loads in the fan's browser, which makes it vulnerable to ad blockers, iOS tracking restrictions, cross-device loss, and redirect drop-off. Smart Links postbacks bypass all of that: our servers talk directly to Meta's Conversions API, so events can't be blocked or dropped."},{"heading":"why-this-matters-for-meta","content":"type: info"},{"heading":"why-this-matters-for-meta","content":"This guide is the Meta-specific setup. For how Smart Links work under the hood, including attribution rules, the conversion window, lifetime revenue attribution, and postback variables, see the Smart Links guide."},{"heading":"find-your-meta-pixel-id","content":"In Meta Events Manager, open the All Tools menu and select Events Manager."},{"heading":"find-your-meta-pixel-id","content":"In Events Manager, open Data Sets and select your dataset. Your Pixel ID (also called the Dataset ID) is shown next to the dataset name. Copy it, then open the Settings tab to grab the access token next."},{"heading":"find-your-meta-pixel-id","content":"type: info"},{"heading":"find-your-meta-pixel-id","content":"If you manage multiple businesses or clients, make sure you've selected the correct Business and Pixel/Dataset before copying the ID and generating the token below."},{"heading":"generate-a-conversions-api-access-token","content":"Meta's server-side Conversions API needs an access token in addition to the Pixel ID. This is how Smart Links authenticate when sending events to Meta."},{"heading":"generate-a-conversions-api-access-token","content":"With your dataset selected, open the Settings tab, scroll to the Conversions API section, and click Generate access token."},{"heading":"generate-a-conversions-api-access-token","content":"type: warn"},{"heading":"generate-a-conversions-api-access-token","content":"Copy the access token and keep it safe, and treat it like a password. Make sure the correct Pixel/Dataset is selected before generating, or the token won't match the Pixel ID you copied."},{"heading":"create-or-open-a-smart-link","content":"Log into your OnlyFans API Dashboard and open Smart Links in the left sidebar. Click Create Smart Link (or open an existing one) and fill in:"},{"heading":"create-or-open-a-smart-link","content":"Account: the OnlyFans account you're running ads for"},{"heading":"create-or-open-a-smart-link","content":"Smart Link Name: something descriptive, e.g. your Meta campaign name"},{"heading":"create-or-open-a-smart-link","content":"Offer Type: Free Trial or Tracking Link"},{"heading":"add-your-meta-pixel","content":"Open Smart Links → Ad Platforms and click Add Platform (you can also pick platforms inline from the Ad Platforms selector when you create or edit a Smart Link). In the Add Ad Platform dialog:"},{"heading":"add-your-meta-pixel","content":"Set Platform to Meta Ads"},{"heading":"add-your-meta-pixel","content":"Paste your Pixel ID from Step 1"},{"heading":"add-your-meta-pixel","content":"Paste your Conversions API access token from Step 2 into the Access Token field"},{"heading":"add-your-meta-pixel","content":"Review the Event Configuration. The defaults are sensible (see Events sent to Meta below)"},{"heading":"add-your-meta-pixel","content":"Click Create"},{"heading":"attach-the-pixel-to-your-smart-link","content":"If you added the platform from the Ad Platforms page rather than inline, attach it when you create or edit a Smart Link using the Ad Platforms selector. You can connect more than one platform to a single link. Once selected, it shows as 1 Platform (or more)."},{"heading":"send-a-test-event","content":"In Meta Events Manager, open your dataset's Test Events tab and copy the test event code."},{"heading":"send-a-test-event","content":"Back in the OnlyFans API Dashboard, open the Send Test Event dialog on your pixel, pick an Event, paste the Test Event Code, and send it. Then check the Test Events tab in Meta, where your event should appear within a few minutes."},{"heading":"send-a-test-event","content":"Events sent with a test event code don't affect your live data. They're only for verifying the connection. The Test Event Code is required for Meta."},{"heading":"use-the-smart-link-in-your-meta-ad","content":"In Meta Ads Manager, set your ad's Website URL to your Smart Link:"},{"heading":"use-the-smart-link-in-your-meta-ad","content":"Replace YOUR_SMART_LINK_ID with the ID from your Smart Links dashboard. Meta automatically appends its click ID (fbclid) to the destination URL, and Smart Links reads it straight from the fbclid parameter to attribute conversions to your Meta Pixel. There's no macro to add for pixel tracking."},{"heading":"use-the-smart-link-in-your-meta-ad","content":"The optional ?ecid={{ad.id}} parameter passes Meta's Ad ID as your external click ID so you can match conversions back to specific ads in your own reporting. Swap in {{campaign.id}}, {{adset.id}}, or any other Meta dynamic parameter for the level of granularity you need."},{"heading":"verify-conversions-are-flowing","content":"Once your ads are live:"},{"heading":"verify-conversions-are-flowing","content":"Smart Links dashboard: you should see clicks, subscribers, and revenue"},{"heading":"verify-conversions-are-flowing","content":"Meta Events Manager: conversion events appearing on your pixel (check the Overview and Test Events tabs)"},{"heading":"verify-conversions-are-flowing","content":"Meta Ads Manager: the campaign's Results column filling in with tracked conversions"},{"heading":"events-sent-to-meta","content":"Smart Links can send the following events to your Meta Pixel. Each one maps to a Meta event in the Event Configuration section when you add the pixel. These are the defaults, and every event is configurable (map it to any Meta standard event, a custom event, or turn it off)."},{"heading":"events-sent-to-meta","content":"Smart Link event"},{"heading":"events-sent-to-meta","content":"When it fires"},{"heading":"events-sent-to-meta","content":"Meta event (default)"},{"heading":"events-sent-to-meta","content":"Click"},{"heading":"events-sent-to-meta","content":"Fan clicks the Smart Link and is redirected to OnlyFans"},{"heading":"events-sent-to-meta","content":"ViewContent"},{"heading":"events-sent-to-meta","content":"New Subscriber"},{"heading":"events-sent-to-meta","content":"Fan subscribes through the Smart Link"},{"heading":"events-sent-to-meta","content":"Subscribe"},{"heading":"events-sent-to-meta","content":"First Purchase"},{"heading":"events-sent-to-meta","content":"Fan's first non-subscription transaction (tip, PPV, etc.)"},{"heading":"events-sent-to-meta","content":"Purchase"},{"heading":"events-sent-to-meta","content":"Repeat Purchase"},{"heading":"events-sent-to-meta","content":"Any transaction after the first"},{"heading":"events-sent-to-meta","content":"Purchase"},{"heading":"events-sent-to-meta","content":"Message Received from Fan"},{"heading":"events-sent-to-meta","content":"Fan sends a message after converting"},{"heading":"events-sent-to-meta","content":"Not sent by default"},{"heading":"events-sent-to-meta","content":"Fan Sent 3+ Messages"},{"heading":"events-sent-to-meta","content":"Fan reaches their 3rd inbound message"},{"heading":"events-sent-to-meta","content":"Lead"},{"heading":"events-sent-to-meta","content":"type: info"},{"heading":"events-sent-to-meta","content":"For subscriber and purchase events, Smart Links also sends the conversion value and currency when available, so Meta can optimize toward your highest-value fans, not just any conversion. The Fan Sent 3+ Messages event maps to Lead by default, and our top agencies optimize Meta around this high-signal event for the lowest cost-per-sub."},{"heading":"custom-event-mapping","content":"The Event Configuration lets you map each Smart Link event to any Meta standard event, a custom event, or turn it off—so if the defaults don't match how you've set up your pixel, remap them."},{"heading":"custom-event-mapping","content":"For example, to send CompleteRegistration instead of Subscribe: open the pixel's Event Configuration, find New Subscriber, and set its Meta event to CompleteRegistration. Pick a custom event if you'd rather send an event name of your own."},{"heading":"which-event-should-i-optimize-for","content":"This is the question most media buyers ask, and the answer changes as your campaign matures:"},{"heading":"which-event-should-i-optimize-for","content":"Starting out / building data: optimize for Subscribe (new_subscriber). You get the most volume, which trains Meta's algorithm faster."},{"heading":"which-event-should-i-optimize-for","content":"Improving subscriber quality / ROI: switch to Purchase (new_transaction) so Meta optimizes toward people who actually spend, not just anyone who subscribes."},{"heading":"which-event-should-i-optimize-for","content":"Advanced / highest signal: optimize for Lead (fan_sent_3_messages). It's the highest-value signal and what our top agencies use for the lowest cost-per-sub."},{"heading":"which-event-should-i-optimize-for","content":"See the events table above for which Smart Link event maps to which Meta event by default."},{"heading":"understanding-event-match-quality-emq","content":"Event Match Quality (EMQ) is Meta's measure of how confidently it can match an event to a real person. The higher the score, the better Meta can attribute and optimize."},{"heading":"understanding-event-match-quality-emq","content":"What Smart Links sends with each event: the Meta click ID (fbc, derived from the fbclid on the click), fbp, a hashed external_id (your ecid external click ID), the fan's IP address and user agent, and coarse location (country, city, state, postal code). These are strong signals for click-based attribution."},{"heading":"understanding-event-match-quality-emq","content":"Typical range: Smart Link events usually score in the mid range—around 4-7 on Meta's Event Match Quality scale. Click-based attribution stays reliable even at a moderate score."},{"heading":"understanding-event-match-quality-emq","content":"Why not higher? The highest scores require personal identifiers like email, phone, or name. Smart Links doesn't collect or send fan email, phone, or name by design, so it relies on click and device signals—which are enough for accurate attribution."},{"heading":"troubleshooting","content":"Problem"},{"heading":"troubleshooting","content":"Fix"},{"heading":"troubleshooting","content":"No events showing in Meta"},{"heading":"troubleshooting","content":"Double-check you pasted both the Pixel ID and the Conversions API access token, and that the token was generated for the same Pixel/Dataset as the ID."},{"heading":"troubleshooting","content":"Test event never appears"},{"heading":"troubleshooting","content":"A Test Event Code is required for Meta. Copy it from your dataset's Test Events tab and paste it into the Send Test Event dialog. Allow a few minutes."},{"heading":"troubleshooting","content":"Events arrive but the campaign isn't optimizing"},{"heading":"troubleshooting","content":"Set your ad set's optimization goal to the matching conversion event (e.g. Purchase or Subscribe)."},{"heading":"troubleshooting","content":"Meta shows the pixel as inactive"},{"heading":"troubleshooting","content":"Send a test event from the Smart Link settings to wake it up, then check the Overview tab."},{"heading":"troubleshooting","content":"Which domain do I whitelist for the Conversions API?"},{"heading":"troubleshooting","content":"None. Events go server-side directly to Meta's Conversions API—there's no browser request to allowlist. The only domain fans interact with is trk.of-traffic.com (the redirect)."},{"heading":"troubleshooting","content":"Conversions underreported from Instagram traffic"},{"heading":"troubleshooting","content":"Fans who open your link in the Instagram or Facebook in-app browser can lose attribution. Use a pre-lander that ejects to the device's native browser and forwards all query parameters. See the Smart Links troubleshooting for details."}],"headings":[{"id":"what-is-a-meta-pixel","content":"What is a Meta Pixel?"},{"id":"why-this-matters-for-meta","content":"Why this matters for Meta"},{"id":"step-by-step-setup","content":"Step-by-step setup"},{"id":"find-your-meta-pixel-id","content":"Find your Meta Pixel ID"},{"id":"generate-a-conversions-api-access-token","content":"Generate a Conversions API access token"},{"id":"create-or-open-a-smart-link","content":"Create or open a Smart Link"},{"id":"add-your-meta-pixel","content":"Add your Meta pixel"},{"id":"attach-the-pixel-to-your-smart-link","content":"Attach the pixel to your Smart Link"},{"id":"send-a-test-event","content":"Send a test event"},{"id":"use-the-smart-link-in-your-meta-ad","content":"Use the Smart Link in your Meta ad"},{"id":"verify-conversions-are-flowing","content":"Verify conversions are flowing"},{"id":"events-sent-to-meta","content":"Events sent to Meta"},{"id":"custom-event-mapping","content":"Custom event mapping"},{"id":"which-event-should-i-optimize-for","content":"Which event should I optimize for?"},{"id":"understanding-event-match-quality-emq","content":"Understanding Event Match Quality (EMQ)"},{"id":"troubleshooting","content":"Troubleshooting"}]}},{"_id":"/introduction/guides/onlyfans-meta-pixel-smart-links","title":"Meta Pixel-Like Revenue Tracking for OnlyFans Media Buyers","description":"Track fans and revenue generated from your media buying campaigns based on Country, Creative, UTM, Click ID, or anything else. Integrate directly with Meta Pixel or set up your own Postbacks. 10x your media buying volume from most accurate revenue attribution in the space.","url":"/introduction/guides/onlyfans-meta-pixel-smart-links","structured":{"contents":[{"heading":"pixel-perfect-smart-links","content":"Imagine you're running Meta Ads for a creator and you need to know which ad creative, which ad set, or which campaign is actually making money. Traditional pixels can miss events, get blocked by ad blockers, or lose data when users switch devices. Smart Links solve all of that with server-side tracking that never fails."},{"heading":"pixel-perfect-smart-links","content":"Think of a Smart Link as your one-stop tracking URL. You use it in your ads, and it automatically tracks everything: who clicked, who subscribed, and every dollar they spend—forever."},{"heading":"pixel-perfect-smart-links","content":"Here's what a Smart Link looks like:"},{"heading":"pixel-perfect-smart-links","content":"When someone clicks this link, here's what happens behind the scenes:"},{"heading":"pixel-perfect-smart-links","content":"We record the click instantly (no JavaScript needed)"},{"heading":"pixel-perfect-smart-links","content":"We create a unique connection between that click and the fan"},{"heading":"pixel-perfect-smart-links","content":"We track every subscription and transaction that fan makes"},{"heading":"pixel-perfect-smart-links","content":"We send you postbacks in real-time so you can optimize your campaigns"},{"heading":"pixel-perfect-smart-links","content":"The best part? No pixels, no JavaScript, no lost events. It all happens server-side, so it's impossible to block or miss."},{"heading":"who-this-is-for","content":"Media buyers who are tired of guessing which ads are profitable. Whether you're running Meta Ads, Google Ads, native traffic, push notifications, or adult traffic—Smart Links give you the accuracy you need to scale confidently."},{"heading":"who-this-is-for","content":"Agencies managing multiple creators and dozens of campaigns. You need to know which creator's campaigns are performing, which traffic sources convert best, and where to double down your ad spend."},{"heading":"who-this-is-for","content":"Developers and BI teams who need clean, reliable data. Smart Links provide deterministic attribution that you can trust for reporting, optimization, and building custom dashboards."},{"heading":"who-this-is-for","content":"Do I have Smart Links? Smart Links is a paid add-on—see pricing for details. Once it's enabled for your team, you can create Smart Links for any OnlyFans account connected to your team. Tracking Links work with any account, including free ($0 subscription) creator pages; Free Trial links require an account with a paid subscription price."},{"heading":"how-smart-links-work-in-plain-english","content":"Let's walk through a real scenario:"},{"heading":"how-smart-links-work-in-plain-english","content":"SELECT AGENCY is running Meta Ads for a creator named Madison. They create a Smart Link and use it as the destination URL in their Meta Ads campaign."},{"heading":"how-smart-links-work-in-plain-english","content":"A user named John sees SELECT AGENCY's ad on Facebook and clicks it"},{"heading":"how-smart-links-work-in-plain-english","content":"John gets redirected through trk.of-traffic.com (this happens in 50-80ms—so fast he won't even notice)"},{"heading":"how-smart-links-work-in-plain-english","content":"OnlyFans API generates a unique subscription link just for John (this could be a free trial or paid subscription, depending on the creator's settings)"},{"heading":"how-smart-links-work-in-plain-english","content":"John subscribes to Madison's page and starts spending money on the creator"},{"heading":"how-smart-links-work-in-plain-english","content":"Every transaction gets tracked and sent to SELECT AGENCY via postbacks, so they know exactly which ad brought in John and how much he's worth"},{"heading":"how-smart-links-work-in-plain-english","content":"Real-world performance:"},{"heading":"how-smart-links-work-in-plain-english","content":"Redirect happens in 50-80ms (faster than most people can blink)"},{"heading":"how-smart-links-work-in-plain-english","content":"99.98% uptime means it works when you need it"},{"heading":"how-smart-links-work-in-plain-english","content":"No JavaScript means it works even when ad blockers are active"},{"heading":"smart-link-url-structure","content":"Here's the basic format:"},{"heading":"smart-link-url-structure","content":"You can replace the {{EXTERNAL_CLICK_ID}} parameter with any external click ID you want to track. This could be from Meta, Google Ads, or your own tracking system."},{"heading":"real-example","content":"Let's say SELECT AGENCY has a creator called Madison who wants to track her Meta Ads campaign. They create a Smart Link in the dashboard and get this ID: 01KE2JN9RBPAZNYSXKMYHR4JP2"},{"heading":"real-example","content":"In Meta Ads, they set up their campaign to pass the click ID as a parameter. Their final tracking URL looks like:"},{"heading":"real-example","content":"When a user clicks the ad, Meta's system automatically replaces {{ad.id}} with the Ad ID from their platform, so SELECT AGENCY can match conversions back to specific ads in Meta's dashboard."},{"heading":"parameters","content":"Parameter"},{"heading":"parameters","content":"Required"},{"heading":"parameters","content":"Description"},{"heading":"parameters","content":"SMART_LINK_ID"},{"heading":"parameters","content":"✅"},{"heading":"parameters","content":"Your unique Smart Link ID. Find it in the Smart Links dashboard after you create one"},{"heading":"parameters","content":"ecid"},{"heading":"parameters","content":"❌"},{"heading":"parameters","content":"Any external click ID you want to track. This could be from Meta, Google Ads, or your own tracking system"},{"heading":"click-deduplication--fraud-prevention","content":"The problem: Some users (or bots) might click your ad multiple times, inflating your click numbers and making it look like you're getting more traffic than you actually are."},{"heading":"click-deduplication--fraud-prevention","content":"The solution: Smart Links use browser fingerprinting to detect and prevent double-clicks. Each legitimate click gets a globally unique click_id that you can use to track that specific user's journey."},{"heading":"click-deduplication--fraud-prevention","content":"Real example: If John accidentally double-clicks SELECT AGENCY's ad, we'll only count it as one click. But if John clicks, then his friend Mike clicks from a different device, we'll count both as separate clicks."},{"heading":"conversion-window","content":"How it works: When someone clicks your Smart Link, they have 6 hours to subscribe. If they subscribe within that window, the conversion is attributed to your click."},{"heading":"conversion-window","content":"Why this matters: This prevents old clicks from getting credit for new subscribers. If someone clicked your ad last week but only subscribes today after seeing a different ad, the attribution goes to the most recent click."},{"heading":"conversion-window","content":"Real scenario: John clicks SELECT AGENCY's ad at 2:00 PM. He browses around, checks out the creator's social media, and finally subscribes at 5:30 PM. That conversion is attributed to that ad click. But if John waits until the next day (more than 6 hours later), the attribution window has closed."},{"heading":"click--fan-binding","content":"Once a fan is bound to a click, they stay bound unless something significant changes:"},{"heading":"click--fan-binding","content":"They switch to a different browser or device"},{"heading":"click--fan-binding","content":"The ?ecid= parameter changes"},{"heading":"click--fan-binding","content":"What this means: If John subscribes after clicking your Smart Link, all of his future spending is attributed to that original click—even if he comes back days or weeks later."},{"heading":"multiple-smart-links-who-gets-credit","content":"The rule: Attribution always goes to the most recently clicked Smart Link."},{"heading":"multiple-smart-links-who-gets-credit","content":"Real-world scenario:"},{"heading":"multiple-smart-links-who-gets-credit","content":"Monday: John clicks SELECT AGENCY's Smart Link A (Meta Ads campaign)"},{"heading":"multiple-smart-links-who-gets-credit","content":"John subscribes → attributed through the Smart Link A"},{"heading":"multiple-smart-links-who-gets-credit","content":"John spends $50 over the next two weeks → all attributed through the Smart Link A"},{"heading":"multiple-smart-links-who-gets-credit","content":"Two weeks later: John clicks SELECT AGENCY's Smart Link B (Google Ads campaign)"},{"heading":"multiple-smart-links-who-gets-credit","content":"From that moment forward, all of John's spending is attributed through the Smart Link B"},{"heading":"multiple-smart-links-who-gets-credit","content":"Smart Links are creator-scoped, meaning attribution rules only apply within the same creator's account. If John clicks a Smart Link for Creator A (Madison), then later clicks a Smart Link for Creator B (Sarah), each creator's attribution is tracked separately—clicking Creator B's link doesn't affect attribution for Creator A."},{"heading":"lifetime-revenue-attribution-the-game-changer","content":"This is where Smart Links really shine. Once a fan subscribes through your Smart Link, every dollar they spend gets attributed to your original click—forever."},{"heading":"real-example-timeline","content":"Let's follow John's journey:"},{"heading":"real-example-timeline","content":"Why this matters: SELECT AGENCY can see that their Meta Ads campaign (Smart Link A) generated $45 in revenue from John, even though he only subscribed once. This gives them the true lifetime value (LTV) of their ad spend, not just the initial subscription."},{"heading":"events--postbacks-getting-your-data","content":"Smart Links send you real-time notifications when important things happen. You choose which of these conversion types to fire postbacks for when you set up your Smart Link:"},{"heading":"events--postbacks-getting-your-data","content":"Conversion Type"},{"heading":"events--postbacks-getting-your-data","content":"Slug"},{"heading":"events--postbacks-getting-your-data","content":"When It Fires"},{"heading":"events--postbacks-getting-your-data","content":"New subscriber"},{"heading":"events--postbacks-getting-your-data","content":"new_subscriber"},{"heading":"events--postbacks-getting-your-data","content":"A fan subscribed through this Smart Link"},{"heading":"events--postbacks-getting-your-data","content":"New transaction"},{"heading":"events--postbacks-getting-your-data","content":"new_transaction"},{"heading":"events--postbacks-getting-your-data","content":"A fan who subscribed through this Smart Link spent money (tip, PPV, renewal, etc.)"},{"heading":"events--postbacks-getting-your-data","content":"Message received"},{"heading":"events--postbacks-getting-your-data","content":"message_received"},{"heading":"events--postbacks-getting-your-data","content":"A fan sent an inbound message after converting through this Smart Link"},{"heading":"events--postbacks-getting-your-data","content":"Fan sent 3 messages"},{"heading":"events--postbacks-getting-your-data","content":"fan_sent_3_messages"},{"heading":"events--postbacks-getting-your-data","content":"Sent once when the fan sends their 3rd inbound message after converting through this Smart Link"},{"heading":"events--postbacks-getting-your-data","content":"How postbacks work:"},{"heading":"events--postbacks-getting-your-data","content":"They're GET requests (simple URL calls)"},{"heading":"events--postbacks-getting-your-data","content":"They're fire-and-forget (we send them, but don't wait for a response)"},{"heading":"events--postbacks-getting-your-data","content":"They might arrive out of order (so make sure your system can handle that)"},{"heading":"events--postbacks-getting-your-data","content":"Each event has a globally unique click_id so you can match it to the original click"},{"heading":"when-does-data-update","content":"New subscribers: near real-time. A new subscriber is usually detected within 30 seconds to a few minutes of subscribing."},{"heading":"when-does-data-update","content":"Tips, PPV, renewals, and other transactions: typically within minutes, though they can occasionally take a little longer. The revenue in your dashboard refreshes periodically."},{"heading":"when-does-data-update","content":"Historical data: we can only show data from the day a link was first seen on OnlyFans API—usually the day you connected the account. There's no lifetime history from before that point."},{"heading":"when-does-data-update","content":"Forcing a refresh: there's no button or endpoint to force a refresh for a specific link. Data updates automatically on the schedule above."},{"heading":"setting-up-postbacks-real-examples","content":"Example 1: Meta Pixel Integration"},{"heading":"setting-up-postbacks-real-examples","content":"SELECT AGENCY wants to send conversions back to Meta so they can optimize their campaigns. They set up a postback URL like this:"},{"heading":"setting-up-postbacks-real-examples","content":"When someone subscribes, Meta gets notified with the exact revenue amount, and SELECT AGENCY can see it in their Meta Ads dashboard."},{"heading":"setting-up-postbacks-real-examples","content":"Example 2: Custom Tracking System"},{"heading":"setting-up-postbacks-real-examples","content":"Mike runs his own tracking system and wants to log all conversions. He sets up a postback URL:"},{"heading":"setting-up-postbacks-real-examples","content":"His system receives the data and stores it in his database for reporting."},{"heading":"setting-up-postbacks-real-examples","content":"Example 3: Slack Notifications"},{"heading":"setting-up-postbacks-real-examples","content":"An agency wants to get notified in Slack when big conversions happen. They set up:"},{"heading":"setting-up-postbacks-real-examples","content":"Now they get instant notifications when subscribers convert."},{"heading":"available-postback-variables","content":"You can use these variables in your postback URL to get the data you need:"},{"heading":"creator-information","content":"Variable"},{"heading":"creator-information","content":"Description"},{"heading":"creator-information","content":"Example"},{"heading":"creator-information","content":"{ofapi_account_id}"},{"heading":"creator-information","content":"The Creator's OnlyFans API Account ID"},{"heading":"creator-information","content":"acct_XXXXXXXXXXXXXXXXXXXXX"},{"heading":"creator-information","content":"{creator_onlyfans_id}"},{"heading":"creator-information","content":"The Creator's OnlyFans User ID"},{"heading":"creator-information","content":"1234567890"},{"heading":"creator-information","content":"{creator_onlyfans_username}"},{"heading":"creator-information","content":"The Creator's OnlyFans Username"},{"heading":"creator-information","content":"madison420ivy"},{"heading":"creator-information","content":"{creator_onlyfans_name}"},{"heading":"creator-information","content":"The Creator's Profile Name"},{"heading":"creator-information","content":"Madison Ivy"},{"heading":"smart-link-information","content":"Variable"},{"heading":"smart-link-information","content":"Description"},{"heading":"smart-link-information","content":"Example"},{"heading":"smart-link-information","content":"{smart_link_id}"},{"heading":"smart-link-information","content":"The Smart Link ID"},{"heading":"smart-link-information","content":"01KE2JN9RBPAZNYSXKMYHR4JP2"},{"heading":"smart-link-information","content":"{smart_link_name}"},{"heading":"smart-link-information","content":"The Smart Link Name (you set this when creating the link)"},{"heading":"smart-link-information","content":"Meta Ads / Madison / Creative A"},{"heading":"conversion-details","content":"Variable"},{"heading":"conversion-details","content":"Description"},{"heading":"conversion-details","content":"Example"},{"heading":"conversion-details","content":"{conversion_type}"},{"heading":"conversion-details","content":"The type of conversion"},{"heading":"conversion-details","content":"new_subscriber, new_transaction, message_received, or fan_sent_3_messages"},{"heading":"conversion-details","content":"{click_id}"},{"heading":"conversion-details","content":"The unique click ID from when they first clicked"},{"heading":"conversion-details","content":"01ke2ndttgbvnmaxegbyhr9z3v"},{"heading":"conversion-details","content":"{external_click_id}"},{"heading":"conversion-details","content":"The external click ID you passed in the URL (via ?ecid=)"},{"heading":"conversion-details","content":"meta-click-12345 or google-ads-67890"},{"heading":"conversion-details","content":"{conversion_at}"},{"heading":"conversion-details","content":"When the conversion happened (UTC)"},{"heading":"conversion-details","content":"2026-01-04T04:40:40+00:00"},{"heading":"conversion-details","content":"{amount_gross}"},{"heading":"conversion-details","content":"The total amount before OnlyFans takes their cut"},{"heading":"conversion-details","content":"10.00 (for a $10 subscription)"},{"heading":"conversion-details","content":"{amount_net}"},{"heading":"conversion-details","content":"The amount after OnlyFans takes their 20% cut"},{"heading":"conversion-details","content":"8.00 (your actual revenue)"},{"heading":"fan-information","content":"Variable"},{"heading":"fan-information","content":"Description"},{"heading":"fan-information","content":"Example"},{"heading":"fan-information","content":"{fan_onlyfans_id}"},{"heading":"fan-information","content":"The Fan's OnlyFans User ID"},{"heading":"fan-information","content":"999999999"},{"heading":"fan-information","content":"{fan_onlyfans_username}"},{"heading":"fan-information","content":"The Fan's OnlyFans Username"},{"heading":"fan-information","content":"johndoe123"},{"heading":"fan-information","content":"{fan_onlyfans_name}"},{"heading":"fan-information","content":"The Fan's Profile Name"},{"heading":"fan-information","content":"John Doe"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"Variable"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"Description"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"Example"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"{transaction_type}"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"What kind of transaction it was"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"new_subscription, recurring_subscription, tip, post, message, stream, or other"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"{transaction_description}"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"A description of the transaction"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"Payment for message from <a href=\"https://onlyfans.com/u999999999\">John Doe</a>"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"{transaction_status}"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"The current status of the transaction"},{"heading":"transaction-details-only-for-new_transaction-events-️","content":"loading, done, pending_return, or undo"},{"heading":"financial-details-the-money-stuff","content":"Currency: All amounts are in USD"},{"heading":"financial-details-the-money-stuff","content":"Precision: All amounts are rounded to 2 decimal places"},{"heading":"financial-details-the-money-stuff","content":"Understanding Gross vs Net:"},{"heading":"financial-details-the-money-stuff","content":"{amount_gross} = The total amount the fan paid (before OnlyFans takes their cut)"},{"heading":"financial-details-the-money-stuff","content":"{amount_net} = The amount the creator actually receives (after OnlyFans takes their 20% cut)"},{"heading":"financial-details-the-money-stuff","content":"Real example:"},{"heading":"financial-details-the-money-stuff","content":"John subscribes for $10/month"},{"heading":"financial-details-the-money-stuff","content":"{amount_gross} = 10.00"},{"heading":"financial-details-the-money-stuff","content":"{amount_net} = 8.00 (OnlyFans keeps $2, creator gets $8)"},{"heading":"financial-details-the-money-stuff","content":"Why this matters: When you're calculating ROI, you probably want to use {amount_net} since that's what the creator actually earns. But if you're tracking total customer value, {amount_gross} shows the full amount the fan spent."},{"heading":"dashboard--reporting-see-your-results","content":"The Smart Links dashboard gives you everything you need to understand your campaign performance:"},{"heading":"dashboard--reporting-see-your-results","content":"Key Metrics:"},{"heading":"dashboard--reporting-see-your-results","content":"Clicks - How many people clicked your link"},{"heading":"dashboard--reporting-see-your-results","content":"Subscribers - How many of those clicks converted to subscribers"},{"heading":"dashboard--reporting-see-your-results","content":"Revenue - Total revenue generated (you can toggle between gross and net)"},{"heading":"dashboard--reporting-see-your-results","content":"CR % - Conversion rate (subscribers ÷ clicks)"},{"heading":"dashboard--reporting-see-your-results","content":"ARPS - Average Revenue Per Subscriber"},{"heading":"dashboard--reporting-see-your-results","content":"Revenue defaults to gross (the total amount the fan paid). Toggle to net to see the creator's earnings after the OnlyFans 20% platform fee."},{"heading":"dashboard--reporting-see-your-results","content":"Reports:"},{"heading":"dashboard--reporting-see-your-results","content":"Clicks Report - See when clicks happened with a time-series chart and detailed table"},{"heading":"dashboard--reporting-see-your-results","content":"Conversions Report - See when conversions happened with revenue breakdowns"},{"heading":"dashboard--reporting-see-your-results","content":"Real use case: SELECT AGENCY runs three different ad creatives and wants to know which one is most profitable. They create three Smart Links (one for each creative) and compare them in the dashboard. They can see that Creative A has a 3.2% conversion rate and $45 ARPS, while Creative B has a 2.1% conversion rate and $32 ARPS. They double down on Creative A."},{"heading":"use-case-1-tracking-multiple-ad-creatives","content":"The problem: You're testing 5 different ad creatives and need to know which one converts best."},{"heading":"use-case-1-tracking-multiple-ad-creatives","content":"The solution: Create 5 Smart Links (one for each creative) and use them as destination URLs in your ad platform. Compare conversion rates and revenue in the dashboard."},{"heading":"use-case-2-tracking-by-traffic-source","content":"The problem: You're running ads on Meta, Google, and native networks. Which source is most profitable?"},{"heading":"use-case-2-tracking-by-traffic-source","content":"The solution: Create separate Smart Links for each traffic source. Name them clearly (e.g., \"Meta Ads\", \"Google Ads\", \"Native - TrafficJunky\") so you can easily compare in reports."},{"heading":"use-case-3-tracking-by-country-or-campaign","content":"The problem: You want to know if your US campaigns perform better than your UK campaigns."},{"heading":"use-case-3-tracking-by-country-or-campaign","content":"The solution: Create Smart Links with descriptive names like \"Meta Ads - US\" and \"Meta Ads - UK\". Use the ?ecid= parameter to pass additional data like campaign ID or ad set ID from your ad platform."},{"heading":"use-case-4-agency-reporting","content":"The problem: You manage 10 creators and need to show each one which campaigns are working."},{"heading":"use-case-4-agency-reporting","content":"The solution: Create Smart Links with creator names in them (e.g., \"Meta Ads - Madison\", \"Meta Ads - Sarah\"). Use the dashboard filters to show each creator their specific performance."},{"heading":"use-case-5-smart-links-with-landing-pages","content":"The problem: You send traffic to a landing page with a call-to-action button first, instead of straight to OnlyFans, but you still want full attribution. The flow is Ad → Landing Page → CTA button → OnlyFans."},{"heading":"use-case-5-smart-links-with-landing-pages","content":"The solution: Use your Smart Link URL as the href on your CTA button. The redirect happens in 50-80ms, so visitors won't notice the extra hop. To preserve attribution, make sure your landing page forwards its incoming query parameters (fbclid, ecid, utm_*, etc.) through to the Smart Link URL—otherwise the click data is lost at the landing page."},{"heading":"use-case-5-smart-links-with-landing-pages","content":"If your traffic comes from Instagram or another in-app browser, see Troubleshooting for an important note on pre-landers."},{"heading":"sending-to-multiple-ad-platforms","content":"You're not limited to one pixel per Smart Link. You can attach more than one ad platform to a single Smart Link, so one link fires events to several pixels at once."},{"heading":"sending-to-multiple-ad-platforms","content":"How it works: Add each platform on the Ad Platforms page (Add Platform), then attach the ones you want to a Smart Link using the Ad Platforms selector when you create or edit it. The selector shows how many are attached—1 Platform, 2 Platforms, and so on."},{"heading":"sending-to-multiple-ad-platforms","content":"Common setups:"},{"heading":"sending-to-multiple-ad-platforms","content":"Two Meta Pixels on one link (e.g. an agency pixel and a client pixel)"},{"heading":"sending-to-multiple-ad-platforms","content":"Meta + TikTok on the same link, so both platforms get conversion data from the same traffic"},{"heading":"sending-to-multiple-ad-platforms","content":"For per-platform setup, see the Meta Pixel guide."},{"heading":"auto-add-subscribers-to-a-list","content":"Smart Links can automatically add new subscribers to one of your OnlyFans lists, so you can segment ad-driven fans for targeted mass messages and campaigns."},{"heading":"auto-add-subscribers-to-a-list","content":"How it works: When you create or edit a Smart Link, use the optional Add New Subscribers to List setting to pick an existing OnlyFans list (or create a new one on the spot). Any fan who subscribes through that link is added to the selected list automatically."},{"heading":"auto-add-subscribers-to-a-list","content":"Good to know:"},{"heading":"auto-add-subscribers-to-a-list","content":"It applies to new subscribers only—not tips, PPV purchases, or messages."},{"heading":"auto-add-subscribers-to-a-list","content":"You can only choose lists that OnlyFans allows adding fans to, and the connected account needs an active session for the fan to be added."},{"heading":"troubleshooting","content":"Conversions look underreported? Here are the most common causes, roughly in order of how often they come up:"},{"heading":"troubleshooting","content":"The fan opened your link in an in-app browser (Instagram, X, etc.)—this is the #1 cause. Links tapped inside Instagram's or X's in-app browser can break attribution. Use a pre-lander that ejects the in-app browser into the device's native browser and forwards all query parameters to your Smart Link—for example link.me, linkscale.to, juicy.bio, or a custom one. If a fan lands on link.me/username?fbclid=123456&utm_source=instagram, the pre-lander must forward those to trk.of-traffic.com/go/XXXX?fbclid=123456&utm_source=instagram so attribution is preserved."},{"heading":"troubleshooting","content":"The 6-hour attribution window expired. The fan clicked but didn't subscribe until more than 6 hours later, so the click no longer gets credit."},{"heading":"troubleshooting","content":"The account needs re-authentication. If the connected account's session is dead, the Smart Link can't generate inventory (subscription links), so there's nothing to attribute."},{"heading":"troubleshooting","content":"The fan switched browser or device between clicking and subscribing."},{"heading":"troubleshooting","content":"Multiple Smart Links: credit always goes to the most recently clicked link."},{"heading":"troubleshooting","content":"Custom domains aren't supported. The tracking domain is trk.of-traffic.com only."},{"heading":"summary","content":"Smart Links give you server-side, pixel-perfect attribution that you can actually trust. No more guessing which ads are profitable, no more lost conversions, no more incomplete data. Just clean, accurate tracking that helps you scale your media buying with confidence."},{"heading":"summary","content":"Whether you're a solo media buyer or an agency managing dozens of campaigns, Smart Links provide the accuracy you need to make data-driven decisions and maximize your ROI."}],"headings":[{"id":"pixel-perfect-smart-links","content":"Pixel-Perfect Smart Links"},{"id":"who-this-is-for","content":"Who This Is For"},{"id":"how-smart-links-work-in-plain-english","content":"How Smart Links Work (In Plain English)"},{"id":"smart-link-url-structure","content":"Smart Link URL Structure"},{"id":"real-example","content":"Real Example"},{"id":"parameters","content":"Parameters"},{"id":"attribution-rules-what-you-need-to-know","content":"Attribution Rules (What You Need to Know)"},{"id":"click-deduplication--fraud-prevention","content":"Click Deduplication & Fraud Prevention"},{"id":"conversion-window","content":"Conversion Window"},{"id":"click--fan-binding","content":"Click → Fan Binding"},{"id":"multiple-smart-links-who-gets-credit","content":"Multiple Smart Links: Who Gets Credit?"},{"id":"lifetime-revenue-attribution-the-game-changer","content":"Lifetime Revenue Attribution (The Game Changer)"},{"id":"real-example-timeline","content":"Real Example Timeline"},{"id":"events--postbacks-getting-your-data","content":"Events & Postbacks (Getting Your Data)"},{"id":"when-does-data-update","content":"When Does Data Update?"},{"id":"setting-up-postbacks-real-examples","content":"Setting Up Postbacks: Real Examples"},{"id":"available-postback-variables","content":"Available Postback Variables"},{"id":"creator-information","content":"Creator Information"},{"id":"smart-link-information","content":"Smart Link Information"},{"id":"conversion-details","content":"Conversion Details"},{"id":"fan-information","content":"Fan Information"},{"id":"transaction-details-only-for-new_transaction-events-️","content":"Transaction Details (only for new_transaction events) ⚠️"},{"id":"financial-details-the-money-stuff","content":"Financial Details (The Money Stuff)"},{"id":"dashboard--reporting-see-your-results","content":"Dashboard & Reporting (See Your Results)"},{"id":"common-use-cases","content":"Common Use Cases"},{"id":"use-case-1-tracking-multiple-ad-creatives","content":"Use Case 1: Tracking Multiple Ad Creatives"},{"id":"use-case-2-tracking-by-traffic-source","content":"Use Case 2: Tracking by Traffic Source"},{"id":"use-case-3-tracking-by-country-or-campaign","content":"Use Case 3: Tracking by Country or Campaign"},{"id":"use-case-4-agency-reporting","content":"Use Case 4: Agency Reporting"},{"id":"use-case-5-smart-links-with-landing-pages","content":"Use Case 5: Smart Links with Landing Pages"},{"id":"sending-to-multiple-ad-platforms","content":"Sending to Multiple Ad Platforms"},{"id":"auto-add-subscribers-to-a-list","content":"Auto-Add Subscribers to a List"},{"id":"troubleshooting","content":"Troubleshooting"},{"id":"summary","content":"Summary"}]}},{"_id":"/introduction/guides/snapchat-pixel-smart-links","title":"Connect your Snapchat Pixel to OnlyFans API Smart Links","description":"Send every OnlyFans subscription, purchase, and message event straight to your Snapchat Pixel with server-side postbacks. No JavaScript, nothing to install on OnlyFans.","url":"/introduction/guides/snapchat-pixel-smart-links","structured":{"contents":[{"heading":"what-is-a-snapchat-pixel","content":"A Snapchat Pixel is Snapchat's conversion tracking tool. It tells Snapchat's ad platform when someone takes a valuable action, like subscribing or making a purchase, after seeing or swiping up on your Snap ad. This data is what Snapchat's algorithm uses to find more users who are likely to convert, which lowers your cost per subscriber over time."},{"heading":"what-is-a-snapchat-pixel","content":"Why connect it to Smart Links? OnlyFans doesn't support Snapchat's pixel natively, and there's no way to install tracking code on OnlyFans pages. Smart Links bridge the gap by tracking everything server-side: every click, subscription, tip, and purchase is sent back to your Snapchat Pixel automatically. No JavaScript, nothing to install on OnlyFans."},{"heading":"what-is-a-snapchat-pixel","content":"What you'll need"},{"heading":"what-is-a-snapchat-pixel","content":"An active OnlyFans API account with Smart Links enabled"},{"heading":"what-is-a-snapchat-pixel","content":"A Snapchat Ads account with Business Manager access (you must be an Organization Admin to generate the API token)"},{"heading":"what-is-a-snapchat-pixel","content":"Your Snap Pixel ID and a Conversions API token (we'll get both below)"},{"heading":"why-this-matters-for-snapchat","content":"Snapchat is a strong traffic source for OnlyFans media buyers, especially for younger demographics and creative formats like Stories ads and AR Lenses. But like every platform, Snapchat's algorithm only optimizes well when it has conversion data."},{"heading":"why-this-matters-for-snapchat","content":"Without conversion data, Snapchat optimizes for swipe-ups (clicks), not subscribers. You pay for traffic that doesn't convert."},{"heading":"why-this-matters-for-snapchat","content":"With Smart Links + your Snapchat Pixel, every subscription and transaction is sent to Snapchat via server-side postbacks. Snapchat learns which swipe-ups become paying fans and finds more of them."},{"heading":"why-this-matters-for-snapchat","content":"Snapchat's native pixel is browser-based JavaScript, which makes it vulnerable to ad blockers, cross-device loss, and redirect drop-off. Smart Links postbacks bypass all of that: our servers talk directly to Snapchat's Conversions API, so events can't be blocked or dropped."},{"heading":"why-this-matters-for-snapchat","content":"type: info"},{"heading":"why-this-matters-for-snapchat","content":"This guide is the Snapchat-specific setup. For how Smart Links work under the hood, including attribution rules, the conversion window, lifetime revenue attribution, and postback variables, see the Smart Links guide."},{"heading":"find-your-snap-pixel-id","content":"In Snapchat Ads Manager, open the top menu and go to Assets → Pixels (Snapchat also lists pixel activity under Events Manager)."},{"heading":"find-your-snap-pixel-id","content":"On the Pixels page, open your pixel, or click Create Pixel, name it, and open it."},{"heading":"find-your-snap-pixel-id","content":"Your Pixel ID is shown right below the pixel's name. Copy it."},{"heading":"generate-a-conversions-api-token","content":"Snapchat's server-side Conversions API needs an access token in addition to the Pixel ID. This is how Smart Links authenticate when sending events to Snapchat."},{"heading":"generate-a-conversions-api-token","content":"In the sidebar, open Business Details, scroll to Conversions API Tokens, and click Generate Token (or copy an existing one)."},{"heading":"generate-a-conversions-api-token","content":"type: warn"},{"heading":"generate-a-conversions-api-token","content":"You must be an Organization Admin to generate this token. Copy it somewhere safe and treat it like a password. Store it on a secure backend, and never share it client-side."},{"heading":"create-or-open-a-smart-link","content":"Log into your OnlyFans API Dashboard and open Smart Links in the left sidebar. Click Create Smart Link (or open an existing one) and fill in:"},{"heading":"create-or-open-a-smart-link","content":"Account: the OnlyFans account you're running ads for"},{"heading":"create-or-open-a-smart-link","content":"Smart Link Name: something descriptive, e.g. your Snapchat campaign name"},{"heading":"create-or-open-a-smart-link","content":"Offer Type: Free Trial or Tracking Link"},{"heading":"add-your-snapchat-pixel","content":"On the Smart Link, open the Connect your ad platforms panel and click Add connection (you can also manage pixels from Smart Links → Ad Platforms). Then:"},{"heading":"add-your-snapchat-pixel","content":"Set Platform to Snapchat Ads"},{"heading":"add-your-snapchat-pixel","content":"Paste your Pixel ID from Step 1"},{"heading":"add-your-snapchat-pixel","content":"Paste your Conversions API token into the Access Token field (from Step 2)"},{"heading":"add-your-snapchat-pixel","content":"Review the Event Configuration. The defaults are sensible (see Events sent to Snapchat below)"},{"heading":"add-your-snapchat-pixel","content":"Click Create"},{"heading":"attach-the-pixel-to-your-smart-link","content":"If you created the pixel from the Ad Platforms page rather than inline, attach it to the Smart Link using the Ad Platforms selector on the Smart Link. You can connect more than one pixel to a single link."},{"heading":"send-a-test-event","content":"Open the Send Test Event dialog on your pixel, pick an Event, and send it. Snapchat doesn't use a test event code. The event goes to Snapchat's validation endpoint and appears in Snapchat Events Manager under your pixel's Test Events tab within a few minutes."},{"heading":"use-the-smart-link-in-your-snapchat-ad","content":"In Snapchat Ads Manager, set your ad's Website URL / Attachment URL to your Smart Link:"},{"heading":"use-the-smart-link-in-your-snapchat-ad","content":"Replace YOUR_SMART_LINK_ID with the ID from your Smart Links dashboard. When a Snapchatter swipes up, Snapchat automatically appends its click ID (ScCid) to the URL, and Smart Links captures it for attribution. There's no macro to add."},{"heading":"verify-conversions-are-flowing","content":"Once your ads are live:"},{"heading":"verify-conversions-are-flowing","content":"Smart Links dashboard: you should see clicks, subscribers, and revenue"},{"heading":"verify-conversions-are-flowing","content":"Snapchat Events Manager: conversion events appearing on your pixel"},{"heading":"verify-conversions-are-flowing","content":"Snapchat Ads Manager: your campaign's results filling in with tracked conversions"},{"heading":"events-sent-to-snapchat","content":"Smart Links can send the following events to your Snapchat Pixel. Each one maps to a Snapchat event in the Event Configuration section when you add the pixel. These are the defaults, and every event is configurable (map it to any Snapchat standard event, a custom event, or turn it off)."},{"heading":"events-sent-to-snapchat","content":"Smart Link event"},{"heading":"events-sent-to-snapchat","content":"When it fires"},{"heading":"events-sent-to-snapchat","content":"Snapchat event (default)"},{"heading":"events-sent-to-snapchat","content":"Click"},{"heading":"events-sent-to-snapchat","content":"Fan clicks the Smart Link and is redirected to OnlyFans"},{"heading":"events-sent-to-snapchat","content":"VIEW_CONTENT"},{"heading":"events-sent-to-snapchat","content":"New Subscriber"},{"heading":"events-sent-to-snapchat","content":"Fan subscribes through the Smart Link"},{"heading":"events-sent-to-snapchat","content":"SIGN_UP"},{"heading":"events-sent-to-snapchat","content":"First Purchase"},{"heading":"events-sent-to-snapchat","content":"Fan's first non-subscription transaction (tip, PPV, etc.)"},{"heading":"events-sent-to-snapchat","content":"PURCHASE"},{"heading":"events-sent-to-snapchat","content":"Repeat Purchase"},{"heading":"events-sent-to-snapchat","content":"Any transaction after the first"},{"heading":"events-sent-to-snapchat","content":"PURCHASE"},{"heading":"events-sent-to-snapchat","content":"Message Received from Fan"},{"heading":"events-sent-to-snapchat","content":"Fan sends a message after converting"},{"heading":"events-sent-to-snapchat","content":"Not sent by default"},{"heading":"events-sent-to-snapchat","content":"Fan Sent 3+ Messages"},{"heading":"events-sent-to-snapchat","content":"Fan reaches their 3rd inbound message"},{"heading":"events-sent-to-snapchat","content":"LEVEL_COMPLETE"},{"heading":"events-sent-to-snapchat","content":"type: info"},{"heading":"events-sent-to-snapchat","content":"For subscriber and purchase events, Smart Links also sends the conversion value and currency when available, so Snapchat can optimize toward your highest-value fans, not just any conversion."},{"heading":"troubleshooting","content":"Problem"},{"heading":"troubleshooting","content":"Fix"},{"heading":"troubleshooting","content":"No events showing in Snapchat"},{"heading":"troubleshooting","content":"Double-check you pasted both the Pixel ID and the Conversions API token, and that the token was generated by an Organization Admin."},{"heading":"troubleshooting","content":"Pixel shows invalid right after creating your business account"},{"heading":"troubleshooting","content":"Snapchat can take up to a day to activate a brand-new pixel, so wait and try again."},{"heading":"troubleshooting","content":"Test event never appears"},{"heading":"troubleshooting","content":"Snapchat doesn't use a test event code. Just send the test event and check your pixel's Test Events tab in Events Manager. Allow a few minutes."},{"heading":"troubleshooting","content":"Events arrive but the campaign isn't optimizing"},{"heading":"troubleshooting","content":"Set your campaign's optimization goal to the matching conversion event (e.g. PURCHASE or SIGN_UP)."}],"headings":[{"id":"what-is-a-snapchat-pixel","content":"What is a Snapchat Pixel?"},{"id":"why-this-matters-for-snapchat","content":"Why this matters for Snapchat"},{"id":"step-by-step-setup","content":"Step-by-step setup"},{"id":"find-your-snap-pixel-id","content":"Find your Snap Pixel ID"},{"id":"generate-a-conversions-api-token","content":"Generate a Conversions API token"},{"id":"create-or-open-a-smart-link","content":"Create or open a Smart Link"},{"id":"add-your-snapchat-pixel","content":"Add your Snapchat pixel"},{"id":"attach-the-pixel-to-your-smart-link","content":"Attach the pixel to your Smart Link"},{"id":"send-a-test-event","content":"Send a test event"},{"id":"use-the-smart-link-in-your-snapchat-ad","content":"Use the Smart Link in your Snapchat ad"},{"id":"verify-conversions-are-flowing","content":"Verify conversions are flowing"},{"id":"events-sent-to-snapchat","content":"Events sent to Snapchat"},{"id":"troubleshooting","content":"Troubleshooting"}]}},{"_id":"/introduction/guides/text-formatting","title":"Text formatting","description":"Learn how to format text in your posts and chat messages.","url":"/introduction/guides/text-formatting","structured":{"contents":[{"heading":"best-practices","content":"Generally, all text should be contained within one singular <p> tag. Example:"},{"heading":"new-lines","content":"To create a new line, you can use the <br> tag. Example:"},{"heading":"new-lines","content":"Which will render as:"},{"heading":"new-lines","content":"Hi there! This is a message containing normal textThis is a new line!"},{"heading":"text-sizes","content":"OnlyFans has the following text size options:"},{"heading":"text-sizes","content":"Largest"},{"heading":"text-sizes","content":"Large"},{"heading":"text-sizes","content":"Default"},{"heading":"text-sizes","content":"Small"},{"heading":"text-sizes","content":"Smallest"},{"heading":"text-sizes","content":"You can use them as follows:"},{"heading":"smallest","content":"To create the smallest text, you can use the <span class=\"m-editor-fs__sm\"> tag. Example:"},{"heading":"small","content":"To create a small text, you can use the <span class=\"m-editor-fs__s\"> tag. Example:"},{"heading":"large","content":"To create a large text, you can use the <span class=\"m-editor-fs__l\"> tag. Example:"},{"heading":"largest","content":"To create the largest text, you can use the <span class=\"m-editor-fs__lg\"> tag. Example:"},{"heading":"text-styles","content":"When using text styles like bold or italic, make sure that you wrap the text in a <span class=\"m-editor-fs__default\"> tag. Example:"},{"heading":"bold","content":"To create bold text, you can use the <strong> tag. Example:"},{"heading":"italic","content":"To create italic text, you can use the <em> tag. Example:"},{"heading":"text-colors","content":"OnlyFans has three possible colors for text:"},{"heading":"text-colors","content":"Gray (#8a96a3)"},{"heading":"text-colors","content":"Blue 1 (#00aff0)"},{"heading":"text-colors","content":"Blue 2 (#1b98e0)"},{"heading":"text-colors","content":"You can use them as follows:"},{"heading":"gray","content":"To create gray text, you can use the <span class=\"m-editor-fs__default m-editor-fc__gray\"> tag. Example:"},{"heading":"blue-1","content":"To create blue 1 text, you can use the <span class=\"m-editor-fs__default m-editor-fc__blue-1\"> tag. Example:"},{"heading":"blue-2","content":"To create blue 2 text, you can use the <span class=\"m-editor-fs__default m-editor-fc__blue-2\"> tag. Example:"}],"headings":[{"id":"best-practices","content":"Best practices"},{"id":"new-lines","content":"New lines"},{"id":"text-sizes","content":"Text sizes"},{"id":"smallest","content":"Smallest"},{"id":"small","content":"Small"},{"id":"large","content":"Large"},{"id":"largest","content":"Largest"},{"id":"text-styles","content":"Text styles"},{"id":"bold","content":"Bold"},{"id":"italic","content":"Italic"},{"id":"text-colors","content":"Text colors"},{"id":"gray","content":"Gray"},{"id":"blue-1","content":"Blue 1"},{"id":"blue-2","content":"Blue 2"}]}},{"_id":"/introduction/guides/tiktok-pixel-smart-links","title":"Connect your TikTok Pixel to OnlyFans API Smart Links","description":"Send every OnlyFans subscription, purchase, and message event straight to your TikTok Pixel with server-side postbacks. No JavaScript, nothing to install on OnlyFans.","url":"/introduction/guides/tiktok-pixel-smart-links","structured":{"contents":[{"heading":"what-is-a-tiktok-pixel","content":"A TikTok Pixel is TikTok's conversion tracking tool. It tells TikTok's ad platform when someone takes a valuable action, like subscribing or making a purchase, after clicking your TikTok ad. This data is what TikTok's algorithm uses to find more users who are likely to convert, which lowers your cost per subscriber over time."},{"heading":"what-is-a-tiktok-pixel","content":"Why connect it to Smart Links? OnlyFans doesn't support TikTok's pixel natively, and there's no way to install tracking code on OnlyFans pages. Smart Links bridge the gap by tracking everything server-side: every click, subscription, tip, and purchase is sent back to your TikTok Pixel automatically. No JavaScript, nothing to install on OnlyFans."},{"heading":"what-is-a-tiktok-pixel","content":"What you'll need"},{"heading":"what-is-a-tiktok-pixel","content":"An active OnlyFans API account with Smart Links enabled"},{"heading":"what-is-a-tiktok-pixel","content":"A TikTok Ads Manager account"},{"heading":"what-is-a-tiktok-pixel","content":"Your TikTok Pixel ID and an Events API Access Token (we'll generate both below)"},{"heading":"why-this-matters-for-tiktok","content":"TikTok is one of the highest-volume traffic sources for OnlyFans media buyers, and its algorithm is exceptional at finding the right audience. That only works when it has conversion data to optimize against."},{"heading":"why-this-matters-for-tiktok","content":"Without conversion data, TikTok optimizes for video views or clicks. You get cheap traffic that doesn't convert, and cost-per-sub stays unpredictable."},{"heading":"why-this-matters-for-tiktok","content":"With Smart Links + your TikTok Pixel, every subscription and transaction is sent to TikTok via server-side postbacks. TikTok learns which users actually subscribe and spend, then serves your ads to people who look like your best fans."},{"heading":"why-this-matters-for-tiktok","content":"TikTok's native pixel is browser-based JavaScript, which makes it vulnerable to ad blockers (especially on mobile, where most TikTok users browse), cross-device loss, and cookie restrictions. Smart Links postbacks bypass all of that: our servers talk directly to TikTok's servers, so events can't be blocked or dropped."},{"heading":"why-this-matters-for-tiktok","content":"type: info"},{"heading":"why-this-matters-for-tiktok","content":"This guide is the TikTok-specific setup. For how Smart Links work under the hood, including attribution rules, the conversion window, lifetime revenue attribution, and postback variables, see the Smart Links guide."},{"heading":"find-your-tiktok-pixel-id","content":"In TikTok Ads Manager, open Tools in the top navigation and click Events (under Management)."},{"heading":"find-your-tiktok-pixel-id","content":"type: info"},{"heading":"find-your-tiktok-pixel-id","content":"Depending on your account, TikTok may label this area Tools → Events or Assets → Events → Web Events. Both lead to the same Events Manager."},{"heading":"find-your-tiktok-pixel-id","content":"In Events Manager, click Get started, choose Web as your data source, and click Next."},{"heading":"find-your-tiktok-pixel-id","content":"Give your pixel a name, select TikTok Pixel as the connection method, and continue. Once created, your pixel's ID is shown at the top of its Overview tab. Copy it."},{"heading":"generate-an-access-token","content":"TikTok's server-side Events API needs an Access Token in addition to the Pixel ID. This is how Smart Links authenticate when sending events to TikTok."},{"heading":"generate-an-access-token","content":"On your pixel, open the Settings tab, scroll to Events API → Access Token Generation, and click Generate Access Token."},{"heading":"generate-an-access-token","content":"type: warn"},{"heading":"generate-an-access-token","content":"Copy the access token immediately and keep it safe. TikTok only shows it once. If you lose it, generate a new one."},{"heading":"create-or-open-a-smart-link","content":"Log into your OnlyFans API Dashboard and open Smart Links in the left sidebar. Click Create Smart Link (or open an existing one) and fill in:"},{"heading":"create-or-open-a-smart-link","content":"Account: the OnlyFans account you're running ads for"},{"heading":"create-or-open-a-smart-link","content":"Smart Link Name: something descriptive, e.g. your TikTok campaign name"},{"heading":"create-or-open-a-smart-link","content":"Offer Type: Free Trial or Tracking Link"},{"heading":"add-your-tiktok-pixel","content":"On the Smart Link, open the Connect your ad platforms panel and click Add connection (you can also manage pixels from Smart Links → Ad Platforms). Then:"},{"heading":"add-your-tiktok-pixel","content":"Set Platform to TikTok Ads"},{"heading":"add-your-tiktok-pixel","content":"Paste your Pixel ID from Step 1"},{"heading":"add-your-tiktok-pixel","content":"Paste your Access Token from Step 2"},{"heading":"add-your-tiktok-pixel","content":"Review the Event Configuration. The defaults are sensible (see Events sent to TikTok below)"},{"heading":"add-your-tiktok-pixel","content":"Click Create"},{"heading":"attach-the-pixel-to-your-smart-link","content":"If you created the pixel from the Ad Platforms page rather than inline, attach it to the Smart Link using the Ad Platforms selector on the Smart Link. You can connect more than one pixel to a single link."},{"heading":"send-a-test-event","content":"In TikTok Ads Manager, open your pixel's Test Events tab and copy the test event code."},{"heading":"send-a-test-event","content":"Back in the OnlyFans API Dashboard, open the Send Test Event dialog on your pixel, pick an Event, paste the Test Event Code, and send it. Then check the Test Events tab in TikTok, where your event should appear within a few minutes."},{"heading":"send-a-test-event","content":"Events sent with a test event code don't affect your live data. They're only for verifying the connection. The Test Event Code is required for TikTok."},{"heading":"use-the-smart-link-in-your-tiktok-ad","content":"In TikTok Ads Manager, set your ad's Destination URL to your Smart Link, appending TikTok's click-ID macro so conversions can be matched back to the click:"},{"heading":"use-the-smart-link-in-your-tiktok-ad","content":"Replace YOUR_SMART_LINK_ID with the ID from your Smart Links dashboard. TikTok replaces __CLICKID__ with the click's ttclid at click time, and Smart Links reads it straight from the ttclid parameter and sends it back to TikTok with every conversion. Keep ?ttclid=__CLICKID__ on the URL, since that's the parameter Smart Links uses for TikTok attribution."},{"heading":"verify-conversions-are-flowing","content":"Once your ads are live:"},{"heading":"verify-conversions-are-flowing","content":"Smart Links dashboard: you should see clicks, subscribers, and revenue"},{"heading":"verify-conversions-are-flowing","content":"TikTok Events Manager: conversion events appearing on your pixel"},{"heading":"verify-conversions-are-flowing","content":"TikTok Ads Manager: the campaign's Conversions column filling in"},{"heading":"events-sent-to-tiktok","content":"Smart Links can send the following events to your TikTok Pixel. Each one maps to a TikTok event in the Event Configuration section when you add the pixel. These are the defaults, and every event is configurable (map it to any TikTok standard event, a custom event, or turn it off)."},{"heading":"events-sent-to-tiktok","content":"Smart Link event"},{"heading":"events-sent-to-tiktok","content":"When it fires"},{"heading":"events-sent-to-tiktok","content":"TikTok event (default)"},{"heading":"events-sent-to-tiktok","content":"Click"},{"heading":"events-sent-to-tiktok","content":"Fan clicks the Smart Link and is redirected to OnlyFans"},{"heading":"events-sent-to-tiktok","content":"ViewContent"},{"heading":"events-sent-to-tiktok","content":"New Subscriber"},{"heading":"events-sent-to-tiktok","content":"Fan subscribes through the Smart Link"},{"heading":"events-sent-to-tiktok","content":"Subscribe"},{"heading":"events-sent-to-tiktok","content":"First Purchase"},{"heading":"events-sent-to-tiktok","content":"Fan's first non-subscription transaction (tip, PPV, etc.)"},{"heading":"events-sent-to-tiktok","content":"CompletePayment"},{"heading":"events-sent-to-tiktok","content":"Repeat Purchase"},{"heading":"events-sent-to-tiktok","content":"Any transaction after the first"},{"heading":"events-sent-to-tiktok","content":"CompletePayment"},{"heading":"events-sent-to-tiktok","content":"Message Received from Fan"},{"heading":"events-sent-to-tiktok","content":"Fan sends a message after converting"},{"heading":"events-sent-to-tiktok","content":"Not sent by default"},{"heading":"events-sent-to-tiktok","content":"Fan Sent 3+ Messages"},{"heading":"events-sent-to-tiktok","content":"Fan reaches their 3rd inbound message"},{"heading":"events-sent-to-tiktok","content":"Not sent by default"},{"heading":"events-sent-to-tiktok","content":"type: info"},{"heading":"events-sent-to-tiktok","content":"For subscriber and purchase events, Smart Links also sends the conversion value and currency when available, so TikTok can optimize toward your highest-value fans, not just any conversion."},{"heading":"troubleshooting","content":"Problem"},{"heading":"troubleshooting","content":"Fix"},{"heading":"troubleshooting","content":"No events showing in TikTok"},{"heading":"troubleshooting","content":"Double-check you pasted both the Pixel ID and the Access Token. TikTok's server-side Events API needs both to authenticate."},{"heading":"troubleshooting","content":"Test event never appears"},{"heading":"troubleshooting","content":"A Test Event Code is required for TikTok. Copy it from your pixel's Test Events tab and paste it into the Send Test Event dialog. Allow a few minutes."},{"heading":"troubleshooting","content":"Events arrive but the campaign isn't optimizing"},{"heading":"troubleshooting","content":"Set your ad group's optimization goal to the matching conversion event (e.g. CompletePayment or Subscribe)."},{"heading":"troubleshooting","content":"High traffic but low conversions"},{"heading":"troubleshooting","content":"TikTok traffic is high-volume. Give the pixel 50+ conversions before judging so the algorithm has enough data to learn from."}],"headings":[{"id":"what-is-a-tiktok-pixel","content":"What is a TikTok Pixel?"},{"id":"why-this-matters-for-tiktok","content":"Why this matters for TikTok"},{"id":"step-by-step-setup","content":"Step-by-step setup"},{"id":"find-your-tiktok-pixel-id","content":"Find your TikTok Pixel ID"},{"id":"generate-an-access-token","content":"Generate an Access Token"},{"id":"create-or-open-a-smart-link","content":"Create or open a Smart Link"},{"id":"add-your-tiktok-pixel","content":"Add your TikTok pixel"},{"id":"attach-the-pixel-to-your-smart-link","content":"Attach the pixel to your Smart Link"},{"id":"send-a-test-event","content":"Send a test event"},{"id":"use-the-smart-link-in-your-tiktok-ad","content":"Use the Smart Link in your TikTok ad"},{"id":"verify-conversions-are-flowing","content":"Verify conversions are flowing"},{"id":"events-sent-to-tiktok","content":"Events sent to TikTok"},{"id":"troubleshooting","content":"Troubleshooting"}]}},{"_id":"/introduction/guides/uploading-media","title":"Uploading media","description":"Learn how to upload photos/videos, and include them in your posts or messages.","url":"/introduction/guides/uploading-media","structured":{"contents":[{"content":"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."},{"heading":"prepare-the-relevant-photo-video-or-audio","content":"If you want to use a new photo or video, you may upload it to our API."},{"heading":"prepare-the-relevant-photo-video-or-audio","content":"Alternatively, if you want to use a photo or video from your Vault, you may reference its ID directly in the relevant endpoints."},{"heading":"upload-your-photo-or-video-to-our-api","content":"The full media upload endpoint documentation can be found\nhere."},{"heading":"upload-your-photo-or-video-to-our-api","content":"Submit a POST request to our https://app.onlyfansapi.com/api/{account}/media/upload endpoint. You can upload media in one of two ways:"},{"heading":"upload-your-photo-or-video-to-our-api","content":"File upload — send the file directly as a multipart form upload using the file field."},{"heading":"upload-your-photo-or-video-to-our-api","content":"URL upload — provide a file_url field containing an HTTPS URL pointing to the media file. Our server will download it and upload it to the OnlyFans CDN on your behalf. This is useful when the media already exists at a remote URL and you want to avoid downloading it locally first."},{"heading":"upload-your-photo-or-video-to-our-api","content":"type: warn"},{"heading":"upload-your-photo-or-video-to-our-api","content":"You must provide exactly one of file or file_url — not both, and not neither. Providing both or neither will result in a 422 validation error."},{"heading":"upload-your-photo-or-video-to-our-api","content":"The maximum file size for file (direct upload) is 100 MB - this is limited by Cloudflare. The maximum file size for file_url (Remote URL upload) is 1 GB. Need higher limits? Contact us for enterprise options via Telegram or email."},{"heading":"option-2-upload-from-a-url","content":"If your media is already hosted at a remote URL, you can pass it via file_url instead of uploading the file directly:"},{"heading":"option-2-upload-from-a-url","content":"If the upload was successful, the response will be something as follows:"},{"heading":"option-2-upload-from-a-url","content":"You may use the prefixed_id (e.g., ofapi_media_123) in our relevant endpoints to include this media file."},{"heading":"option-2-upload-from-a-url","content":"type: warn"},{"heading":"option-2-upload-from-a-url","content":"Important!"},{"heading":"option-2-upload-from-a-url","content":"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."},{"heading":"option-2-upload-from-a-url","content":"type: warn"},{"heading":"option-2-upload-from-a-url","content":"Important for files over 50 MB!"},{"heading":"option-2-upload-from-a-url","content":"We STRONGLY recommend uploading large files (either from file_url or file) to use the async=true body parameter."},{"heading":"option-2-upload-from-a-url","content":"This will result in a much faster and more reliable upload process as we handle the uploading in the background."},{"heading":"option-2-upload-from-a-url","content":"Please refer to docs for:"},{"heading":"option-2-upload-from-a-url","content":"Upload Media to OnlyFans CDN"},{"heading":"option-2-upload-from-a-url","content":"Upload Media to OnlyFans Vault"},{"heading":"option-2-upload-from-a-url","content":"Get Upload Status (Polling)"},{"heading":"validation-rules","content":"Scenario"},{"heading":"validation-rules","content":"Result"},{"heading":"validation-rules","content":"file provided, no file_url"},{"heading":"validation-rules","content":"Valid"},{"heading":"validation-rules","content":"file_url provided, no file"},{"heading":"validation-rules","content":"Valid"},{"heading":"validation-rules","content":"Both provided"},{"heading":"validation-rules","content":"422 error"},{"heading":"validation-rules","content":"Neither provided"},{"heading":"validation-rules","content":"422 error"},{"heading":"validation-rules","content":"File in file exceeds 100 MB (limited by Cloudflare)"},{"heading":"validation-rules","content":"422 error"},{"heading":"validation-rules","content":"File in file_url exceeds 1 GB"},{"heading":"validation-rules","content":"422 error"},{"heading":"code-examples","content":"This tutorial walks through uploading images, videos, or audio into your OnlyFans vault with the API, then sending a chat message with that media attached. Vault uploads use POST https://app.onlyfansapi.com/api/{account}/media/vault with multipart/form-data: send either a file part or a file_url part (exactly one), and optionally async for background processing. See Upload Media to Vault for full payloads and responses."},{"heading":"code-examples","content":"The snippets below are Node.js (TypeScript) using global fetch (Node 18+). Install form-data for multipart vault uploads (npm install form-data). Streaming multipart bodies require duplex: \"half\" on the fetch options (shown in the examples). For TypeScript, add npm install -D @types/node."},{"heading":"direct-multipart-upload","content":"The maximum size for direct multipart file uploads is 100 MB, enforced by Cloudflare. For larger files, use file_url and/or async=true (see below)."},{"heading":"direct-multipart-upload","content":"Synchronous vault upload returns 200 with the new vault item under data (use data.id as the vault media ID)."},{"heading":"upload-from-a-remote-url-then-send-a-chat-message","content":"After a synchronous vault upload, the vault media ID is data.id. Attach it with Send Message using mediaFiles."},{"heading":"recommended-upload-asynchronously-then-poll-until-complete-then-message","content":"type: warn"},{"heading":"recommended-upload-asynchronously-then-poll-until-complete-then-message","content":"For files over ~50 MB, prefer async=true: the upload runs in the background and you poll for completion instead of holding one long HTTP request that might timeout. See Get Upload Status for statuses (pending, processing, completed, failed)."},{"heading":"recommended-upload-asynchronously-then-poll-until-complete-then-message","content":"With async=true, the API responds with 202 and a polling_url. Poll that URL (no extra credits) until status is completed or failed. On success, use prefixed_id (ofapi_media_…) and/or media.id in mediaFiles."},{"heading":"including-your-media-in-a-new-post","content":"The full send post endpoint documentation can be found\nhere."},{"heading":"including-your-media-in-a-new-post","content":"Once you have retrieved the correct media IDs (either from the upload response, or from your Vault), you can include them in your post:"},{"heading":"including-your-media-in-a-chat-message","content":"The full send chat message endpoint documentation can be found\nhere."},{"heading":"including-your-media-in-a-chat-message","content":"Once you have retrieved the correct media IDs (either from the upload response, or from your Vault), you can include them in your message:"},{"heading":"media-file-array-options","content":"You can include two different types of IDs in the mediaFiles array:"},{"heading":"media-file-array-options","content":"An OnlyFans API ID starting with ofapi_media_. This needs to be the prefixed_id of the media file we just uploaded."},{"heading":"media-file-array-options","content":"type: warn"},{"heading":"media-file-array-options","content":"Important! The ofapi_media_ ID from a media file upload can only be used once."},{"heading":"media-file-array-options","content":"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."},{"heading":"media-file-array-options","content":"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 endpoint to retrieve this ID."}],"headings":[{"id":"prepare-the-relevant-photo-video-or-audio","content":"Prepare the relevant photo, video or audio"},{"id":"upload-your-photo-or-video-to-our-api","content":"Upload your photo or video to our API"},{"id":"option-1-upload-a-file-directly","content":"Option 1: Upload a file directly"},{"id":"option-2-upload-from-a-url","content":"Option 2: Upload from a URL"},{"id":"validation-rules","content":"Validation rules"},{"id":"code-examples","content":"Code examples"},{"id":"direct-multipart-upload","content":"Direct multipart upload"},{"id":"upload-from-a-remote-url-then-send-a-chat-message","content":"Upload from a remote URL, then send a chat message"},{"id":"recommended-upload-asynchronously-then-poll-until-complete-then-message","content":"(Recommended) Upload asynchronously, then poll until complete, then message"},{"id":"including-your-media-in-a-new-post","content":"Including your media in a new post"},{"id":"including-your-media-in-a-chat-message","content":"Including your media in a chat message"},{"id":"media-file-array-options","content":"Media file array options"},{"id":"demo-video","content":"Demo video"}]}},{"_id":"/api-reference/fansly","title":"Fansly API Overview","description":"Our Fansly API is currently in closed beta, with a public launch coming soon.","url":"/api-reference/fansly","structured":{"contents":[{"heading":"what-to-expect","content":"We're bringing the same developer experience you know from our OnlyFans API to Fansly: consistent authentication, predictable responses, and broad coverage across messaging, fans, media, and more."},{"heading":"what-to-expect","content":"Browse the endpoints in the sidebar to preview what's coming. Keep in mind that during closed beta:"},{"heading":"what-to-expect","content":"Endpoints may be added, changed, or removed without notice."},{"heading":"what-to-expect","content":"Access is currently limited to approved beta participants."},{"heading":"want-early-access","content":"We're onboarding a limited number of partners during the closed beta."},{"heading":"want-early-access","content":"Reach out and let us know about your use case."}],"headings":[{"id":"what-to-expect","content":"What to expect"},{"id":"want-early-access","content":"Want early access?"}]},"tag":"fansly"},{"_id":"/auth/examples/nextjs-prisma","title":"Next.js & Prisma","description":"Learn how to integrate @onlyfansapi/auth into a Next.js application with Prisma for persistent account storage.","url":"/auth/examples/nextjs-prisma","structured":{"contents":[{"heading":"overview","content":"This guide walks you through building a complete account management dashboard that:"},{"heading":"overview","content":"Authenticates OnlyFans accounts using @onlyfansapi/auth"},{"heading":"overview","content":"Stores account data in a PostgreSQL database via Prisma"},{"heading":"overview","content":"Provides a UI to view and manage connected accounts"},{"heading":"overview","content":"title: Example Repository"},{"heading":"overview","content":"The complete source code is available at auth-example-nextjs-prisma."},{"heading":"prerequisites","content":"Before starting, ensure you have:"},{"heading":"prerequisites","content":"Node.js 18+ or Bun installed"},{"heading":"prerequisites","content":"A PostgreSQL database"},{"heading":"prerequisites","content":"An OnlyFans API key from app.onlyfansapi.com/api-keys"},{"heading":"step-1-create-a-nextjs-project","content":"Create a new Next.js project with TypeScript and Tailwind CSS:"},{"heading":"step-2-install-dependencies","content":"Install the required packages:"},{"heading":"step-3-set-up-prisma","content":"Initialize Prisma with PostgreSQL:"},{"heading":"step-3-set-up-prisma","content":"Update your prisma/schema.prisma to define the Account model:"},{"heading":"step-3-set-up-prisma","content":"Create the Prisma client singleton in lib/prisma.ts:"},{"heading":"step-4-configure-environment-variables","content":"Create a .env file with your credentials:"},{"heading":"step-4-configure-environment-variables","content":"title: Security Note"},{"heading":"step-4-configure-environment-variables","content":"type: warn"},{"heading":"step-4-configure-environment-variables","content":"The OFAPI_API_KEY should never be exposed to the client. We'll create a server-side endpoint to generate client session tokens."},{"heading":"step-5-create-the-client-session-api-route","content":"Create app/api/client-session/route.ts to securely generate client session tokens:"},{"heading":"step-5-create-the-client-session-api-route","content":"This endpoint calls the Create Client Session API to generate a temporary token for authentication."},{"heading":"step-6-create-the-accounts-api-routes","content":"Create app/api/accounts/route.ts for listing and creating accounts:"},{"heading":"step-6-create-the-accounts-api-routes","content":"Create app/api/accounts/[id]/route.ts for deleting accounts:"},{"heading":"step-7-build-the-dashboard-ui","content":"Create a dashboard page in app/page.tsx that uses the auth package:"},{"heading":"step-8-initialize-the-database","content":"Generate the Prisma client and push the schema to your database:"},{"heading":"step-9-run-the-application","content":"Start the development server:"},{"heading":"step-9-run-the-application","content":"Open http://localhost:3000 to see your dashboard."},{"heading":"authentication-flow-summary","content":"User initiates auth: Clicks \"Add Account\" and enters a display name"},{"heading":"authentication-flow-summary","content":"Backend creates session: Server calls OnlyFans API to create a client session token"},{"heading":"authentication-flow-summary","content":"Auth popup opens: startOnlyFansAuthentication() opens a secure popup"},{"heading":"authentication-flow-summary","content":"User authenticates: User logs into their OnlyFans account"},{"heading":"authentication-flow-summary","content":"Callback fires: onSuccess receives account data"},{"heading":"authentication-flow-summary","content":"Account saved: Backend stores account in database via Prisma"},{"heading":"keep-api-keys-server-side","content":"Never expose your OFAPI_API_KEY to the client. Always create client session tokens via a server-side API route."},{"heading":"handle-duplicate-accounts","content":"Check for existing accounts before creating:"},{"heading":"store-display-names","content":"The displayName field helps users identify accounts in your dashboard:"},{"heading":"typescript-support","content":"The auth package includes full TypeScript definitions:"},{"heading":"next-steps","content":"Add webhooks: Listen for account events via Webhooks"},{"heading":"next-steps","content":"Explore the API: Use account credentials for API calls"},{"heading":"next-steps","content":"View example repo: See the complete implementation at auth-example-nextjs-prisma"},{"heading":"related-resources","content":"Installation Guide"},{"heading":"related-resources","content":"Quick Start"},{"heading":"related-resources","content":"Create Client Session API"},{"heading":"related-resources","content":"API Reference"}],"headings":[{"id":"overview","content":"Overview"},{"id":"prerequisites","content":"Prerequisites"},{"id":"step-1-create-a-nextjs-project","content":"Step 1: Create a Next.js Project"},{"id":"step-2-install-dependencies","content":"Step 2: Install Dependencies"},{"id":"step-3-set-up-prisma","content":"Step 3: Set Up Prisma"},{"id":"step-4-configure-environment-variables","content":"Step 4: Configure Environment Variables"},{"id":"step-5-create-the-client-session-api-route","content":"Step 5: Create the Client Session API Route"},{"id":"step-6-create-the-accounts-api-routes","content":"Step 6: Create the Accounts API Routes"},{"id":"step-7-build-the-dashboard-ui","content":"Step 7: Build the Dashboard UI"},{"id":"step-8-initialize-the-database","content":"Step 8: Initialize the Database"},{"id":"step-9-run-the-application","content":"Step 9: Run the Application"},{"id":"authentication-flow-summary","content":"Authentication Flow Summary"},{"id":"best-practices","content":"Best Practices"},{"id":"keep-api-keys-server-side","content":"Keep API Keys Server-Side"},{"id":"handle-duplicate-accounts","content":"Handle Duplicate Accounts"},{"id":"store-display-names","content":"Store Display Names"},{"id":"typescript-support","content":"TypeScript Support"},{"id":"next-steps","content":"Next Steps"},{"id":"related-resources","content":"Related Resources"}]}},{"_id":"/api-reference/analytics-financial/get-profitability-history","title":"Get Profitability History","url":"/api-reference/analytics-financial/get-profitability-history","structured":{"contents":[{"content":"Get historical profitability data for a specific account over multiple months."},{"content":"Get historical profitability data for a specific account over multiple months."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/analytics-financial/get-profitability","title":"Get Profitability","url":"/api-reference/analytics-financial/get-profitability","structured":{"contents":[{"content":"Calculate profitability for creators including revenue, costs, commissions, and margins for a specific month."},{"content":"Calculate profitability for creators including revenue, costs, commissions, and margins for a specific month."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/analytics-financial/get-revenue-forecast","title":"Get Revenue Forecast","url":"/api-reference/analytics-financial/get-revenue-forecast","structured":{"contents":[{"content":"Generate revenue or churn forecasts using statistical models (Moving Average, Linear Regression, ARIMA, SARIMA)."},{"content":"Generate revenue or churn forecasts using statistical models (Moving Average, Linear Regression, ARIMA, SARIMA)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/analytics-financial/get-transaction-summary","title":"Get Transaction Summary","url":"/api-reference/analytics-financial/get-transaction-summary","structured":{"contents":[{"content":"Get transaction summary including counts for succeeded, refunded, and disputed transactions, plus gross, net, and fee totals."},{"content":"Get transaction summary including counts for succeeded, refunded, and disputed transactions, plus gross, net, and fee totals."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/analytics-financial/get-transactions-by-type","title":"Get Transactions By Type","url":"/api-reference/analytics-financial/get-transactions-by-type","structured":{"contents":[{"content":"Get transaction totals grouped by transaction type (subscriptions, tips, messages, etc.)."},{"content":"Get transaction totals grouped by transaction type (subscriptions, tips, messages, etc.)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/account/disconnect-account","title":"Disconnect Account","url":"/api-reference/account/disconnect-account","structured":{"contents":[{"content":"Disconnect an OnlyFans account."},{"content":"Disconnect an OnlyFans account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/account/get-current-account","title":"Get Current Account","url":"/api-reference/account/get-current-account","structured":{"contents":[{"content":"Get OnlyFans Profile details for the currently used Account"},{"content":"Get OnlyFans Profile details for the currently used Account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/account/get-model-start-date","title":"Get Model Start Date","url":"/api-reference/account/get-model-start-date","structured":{"contents":[{"content":"Get the start date of the model (the date+time monetization was enabled)"},{"content":"Get the start date of the model (the date+time monetization was enabled)"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/account/get-top-percentage","title":"Get Top Percentage","url":"/api-reference/account/get-top-percentage","structured":{"contents":[{"content":"Get the top percentage of the model (e.g., top 0.02% of all creators)"},{"content":"Get the top percentage of the model (e.g., top 0.02% of all creators)"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/account/list-accounts","title":"List Accounts","url":"/api-reference/account/list-accounts","structured":{"contents":[{"content":"List all connected OnlyFans accounts."},{"content":"List all connected OnlyFans accounts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/analytics-summary/get-earnings-overview","title":"Get Earnings Overview","url":"/api-reference/analytics-summary/get-earnings-overview","structured":{"contents":[{"content":"Get earnings overview by category for selected accounts within a date range. Returns total earnings, subscriptions, posts, messages, tips, streams, and content stats."},{"content":"Get earnings overview by category for selected accounts within a date range. Returns total earnings, subscriptions, posts, messages, tips, streams, and content stats."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/analytics-summary/get-historical-performance","title":"Get Historical Performance","url":"/api-reference/analytics-summary/get-historical-performance","structured":{"contents":[{"content":"Get historical earnings chart data for the team. Returns monthly aggregated revenue data for the specified time range."},{"content":"Get historical earnings chart data for the team. Returns monthly aggregated revenue data for the specified time range."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/analytics-summary/get-period-comparison","title":"Get Period Comparison","url":"/api-reference/analytics-summary/get-period-comparison","structured":{"contents":[{"content":"Compare two time periods to analyze performance changes. Returns summary, breakdown, and chart data for the comparison."},{"content":"Compare two time periods to analyze performance changes. Returns summary, breakdown, and chart data for the comparison."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/api-keys/whoami","title":"Whoami","url":"/api-reference/api-keys/whoami","structured":{"contents":[{"content":"Get details about the currently used API Key & the relevant Team"},{"content":"Get details about the currently used API Key & the relevant Team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/blocked-restricted-users/list-blocked-users","title":"List Blocked Users","url":"/api-reference/blocked-restricted-users/list-blocked-users","structured":{"contents":[{"content":"Get a paginated list of users the account has blocked. Optionally search with `query`."},{"content":"Get a paginated list of users the account has blocked. Optionally search with query."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/blocked-restricted-users/list-restricted-users","title":"List Restricted Users","url":"/api-reference/blocked-restricted-users/list-restricted-users","structured":{"contents":[{"content":"Get a paginated list of users the account has restricted. Optionally search with `query`."},{"content":"Get a paginated list of users the account has restricted. Optionally search with query."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/get-account-country-details","title":"Get Account Country Details","url":"/api-reference/banking/get-account-country-details","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/get-bank-payout-details","title":"Get Bank Payout Details","url":"/api-reference/banking/get-bank-payout-details","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/get-dac7form-details","title":"Get DAC7 Form Details","url":"/api-reference/banking/get-dac7form-details","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/get-legal-and-tax-status","title":"Get Legal and Tax Status","url":"/api-reference/banking/get-legal-and-tax-status","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/get-legal-form-details","title":"Get Legal Form Details","url":"/api-reference/banking/get-legal-form-details","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/list-available-payout-systems","title":"List Available Payout Systems","url":"/api-reference/banking/list-available-payout-systems","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/banking/list-countries","title":"List Countries","url":"/api-reference/banking/list-countries","structured":{"contents":[{"content":"List countries, their internal OnlyFans IDs, and their payment & tax information."},{"content":"List countries, their internal OnlyFans IDs, and their payment & tax information."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chargebacks/calculate-chargeback-ratio","title":"Calculate Chargeback Ratio","url":"/api-reference/chargebacks/calculate-chargeback-ratio","structured":{"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%."},{"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%."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chargebacks/list-chargeback-statistics","title":"List Chargeback Statistics","url":"/api-reference/chargebacks/list-chargeback-statistics","structured":{"contents":[{"content":"List chargeback counts & amounts per hour, day or month."},{"content":"List chargeback counts & amounts per hour, day or month."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chargebacks/list-chargebacks","title":"List Chargebacks","url":"/api-reference/chargebacks/list-chargebacks","structured":{"contents":[{"content":"Retrieve a list of chargebacks within a specified date range. Possible statuses are `loading`, `done`, `undo`."},{"content":"Retrieve a list of chargebacks within a specified date range. Possible statuses are loading, done, undo."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/client-sessions/create-client-session","title":"Create Client Session","url":"/api-reference/client-sessions/create-client-session","structured":{"contents":[{"content":"Create Client Session Token for later use in embedded auth components - eg. via @onlyfansapi/auth npm package."},{"content":"Create Client Session Token for later use in embedded auth components - eg. via @onlyfansapi/auth npm package."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chat-messages/attach-tags-release-forms-to-message","title":"Attach Tags (Release Forms) to Message","url":"/api-reference/chat-messages/attach-tags-release-forms-to-message","structured":{"contents":[{"content":"Attach Tags (Release Forms) to a message that has already been sent. Please note, that this is a \"sync\" operation - for example, if you provide empty `rfTag` it will remove all existing tags already attached to the message."},{"content":"Attach Tags (Release Forms) to a message that has already been sent. Please note, that this is a \"sync\" operation - for example, if you provide empty rfTag it will remove all existing tags already attached to the message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chat-messages/delete-message","title":"Delete Message","url":"/api-reference/chat-messages/delete-message","structured":{"contents":[{"content":"Delete a message from a chat. Please note that ONLY messages sent less than 24 hours ago can be deleted."},{"content":"Delete a message from a chat. Please note that ONLY messages sent less than 24 hours ago can be deleted."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/chat-messages/get-specific-chat-message","title":"Get Specific Chat Message","url":"/api-reference/chat-messages/get-specific-chat-message","structured":{"contents":[{"content":"Get a single chat message by its ID. Returns a 404 if the message does not exist in the chat."},{"content":"Get a single chat message by its ID. Returns a 404 if the message does not exist in the chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chat-messages/like-message","title":"Like Message","url":"/api-reference/chat-messages/like-message","structured":{"contents":[{"content":"Like a chat message."},{"content":"Like a chat message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chat-messages/list-chat-messages","title":"List Chat Messages","url":"/api-reference/chat-messages/list-chat-messages","structured":{"contents":[{"content":"Get messages from a specific chat."},{"content":"Get messages from a specific chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chat-messages/pin-message","title":"Pin Message","url":"/api-reference/chat-messages/pin-message","structured":{"contents":[{"content":"Pin a message from a chat."},{"content":"Pin a message from a chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chat-messages/search-chat-messages","title":"Search Chat Messages","url":"/api-reference/chat-messages/search-chat-messages","structured":{"contents":[{"content":"Search messages in a specific chat. Returns a list of message IDs matching the search query."},{"content":"Search messages in a specific chat. Returns a list of message IDs matching the search query."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chat-messages/send-message","title":"Send Message","url":"/api-reference/chat-messages/send-message","structured":{"contents":[{"content":"Send a new message to a chat."},{"content":"Send a new message to a chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chat-messages/unlike-message","title":"Unlike Message","url":"/api-reference/chat-messages/unlike-message","structured":{"contents":[{"content":"Unlike a chat message."},{"content":"Unlike a chat message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/chat-messages/unpin-message","title":"Unpin Message","url":"/api-reference/chat-messages/unpin-message","structured":{"contents":[{"content":"Unpin a message from a chat."},{"content":"Unpin a message from a chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/chats/delete-chat","title":"Delete Chat","url":"/api-reference/chats/delete-chat","structured":{"contents":[{"content":"Delete a specific chat."},{"content":"Delete a specific chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/chats/hide-chat","title":"Hide Chat","url":"/api-reference/chats/hide-chat","structured":{"contents":[{"content":"Hide a specific chat from the chat list. To unhide this chat, send a new message to the user."},{"content":"Hide a specific chat from the chat list. To unhide this chat, send a new message to the user."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/list-chat-media-gallery","title":"List Chat Media (Gallery)","url":"/api-reference/chats/list-chat-media-gallery","structured":{"contents":[{"content":"List media files shared in a specific chat."},{"content":"List media files shared in a specific chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chats/list-chats","title":"List Chats","url":"/api-reference/chats/list-chats","structured":{"contents":[{"content":"Get the list of chats for an Account."},{"content":"Get the list of chats for an Account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/chats/mark-all-chats-as-read","title":"Mark All Chats as Read","url":"/api-reference/chats/mark-all-chats-as-read","structured":{"contents":[{"content":"Mark all chats as read."},{"content":"Mark all chats as read."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/mark-chat-as-read","title":"Mark Chat as Read","url":"/api-reference/chats/mark-chat-as-read","structured":{"contents":[{"content":"Mark a specific chat as read. Alternative to List Chat Messages endpoint, if you just want to mark the chat as read without fetching messages."},{"content":"Mark a specific chat as read. Alternative to List Chat Messages endpoint, if you just want to mark the chat as read without fetching messages."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/mark-chat-as-unread","title":"Mark Chat as Unread","url":"/api-reference/chats/mark-chat-as-unread","structured":{"contents":[{"content":"Mark a specific chat as unread."},{"content":"Mark a specific chat as unread."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/mute-chat-notifications","title":"Mute Chat Notifications","url":"/api-reference/chats/mute-chat-notifications","structured":{"contents":[{"content":"Mute notifications for a specific chat."},{"content":"Mute notifications for a specific chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/start-typing-indicator","title":"Start Typing Indicator","url":"/api-reference/chats/start-typing-indicator","structured":{"contents":[{"content":"Calling this endpoint will show the target fan a \"Model is typing...\" note in the chat for ~4 seconds. Duplicate calls for the same account and chat are coalesced during that window."},{"content":"Calling this endpoint will show the target fan a \"Model is typing...\" note in the chat for ~4 seconds. Duplicate calls for the same account and chat are coalesced during that window."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/chats/unmute-chat-notifications","title":"Unmute Chat Notifications","url":"/api-reference/chats/unmute-chat-notifications","structured":{"contents":[{"content":"Unmute notifications for a specific chat."},{"content":"Unmute notifications for a specific chat."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/connect-onlyfans-account/poll-authentication-status","title":"Poll Authentication Status","url":"/api-reference/connect-onlyfans-account/poll-authentication-status","structured":{"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. For `mobile_app` auth, the response includes `mobile_auth_session_deeplink` while the session is pending."},{"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. For mobile_app auth, the response includes mobile_auth_session_deeplink while the session is pending."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/connect-onlyfans-account/re-authenticate-account","title":"Re-authenticate Account","url":"/api-reference/connect-onlyfans-account/re-authenticate-account","structured":{"contents":[{"content":"Trigger account reauthentication without the need to submit email & password again."},{"content":"Trigger account reauthentication without the need to submit email & password again."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/connect-onlyfans-account/send2fae-mail-to-creator","title":"Send 2FA E-mail to Creator","url":"/api-reference/connect-onlyfans-account/send2fae-mail-to-creator","structured":{"contents":[{"content":"Send 2FA verification e-mail to the creator's email so they can verify login on their device without your input. The e-mail will be sent to the e-mail address used for signing into OnlyFans."},{"content":"Send 2FA verification e-mail to the creator's email so they can verify login on their device without your input. The e-mail will be sent to the e-mail address used for signing into OnlyFans."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/connect-onlyfans-account/start-authentication","title":"Start Authentication","url":"/api-reference/connect-onlyfans-account/start-authentication","structured":{"contents":[{"content":"Start the authentication process for a new account. Supports three methods: email/password (default), cookies & headers (raw_data), or FansAPI Auth+ mobile app (mobile_app). For email/password, our systems will bypass Captcha and ask you for 2FA if required. For raw_data, provide session cookies directly for instant authentication. For mobile_app, the response includes a `mobile_auth_session_deeplink` that the creator opens on their phone (or scans as a QR code) to complete authentication via the FansAPI Auth+ mobile app. All credentials are stored securely and encrypted at rest."},{"content":"Start the authentication process for a new account. Supports three methods: email/password (default), cookies & headers (raw_data), or FansAPI Auth+ mobile app (mobile_app). For email/password, our systems will bypass Captcha and ask you for 2FA if required. For raw_data, provide session cookies directly for instant authentication. For mobile_app, the response includes a mobile_auth_session_deeplink that the creator opens on their phone (or scans as a QR code) to complete authentication via the FansAPI Auth+ mobile app. All credentials are stored securely and encrypted at rest."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/connect-onlyfans-account/submit2fa","title":"Submit 2FA","url":"/api-reference/connect-onlyfans-account/submit2fa","structured":{"contents":[{"content":"Submit the 2FA code, or Selfie Verification status, for the authentication process."},{"content":"Submit the 2FA code, or Selfie Verification status, for the authentication process."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/connect-onlyfans-account/update-authentication-credentials","title":"Update Authentication Credentials","url":"/api-reference/connect-onlyfans-account/update-authentication-credentials","structured":{"contents":[{"content":"Replace the authentication credentials of an existing connected account and trigger a re-authentication. Supports the same three methods as Start Authentication: email/password (default), cookies & headers (raw_data), or FansAPI Auth+ mobile app (mobile_app). You can also switch an account from one method to another (e.g. from email_password to raw_data). The new credentials are stored securely and encrypted at rest, and re-authentication is started immediately regardless of the account's current session state — running workflows are stopped and API requests return 503 until re-authentication completes. For mobile_app, the response includes a `mobile_auth_session_deeplink` that the creator opens on their phone to complete authentication."},{"content":"Replace the authentication credentials of an existing connected account and trigger a re-authentication. Supports the same three methods as Start Authentication: email/password (default), cookies & headers (raw_data), or FansAPI Auth+ mobile app (mobile_app). You can also switch an account from one method to another (e.g. from email_password to raw_data). The new credentials are stored securely and encrypted at rest, and re-authentication is started immediately regardless of the account's current session state — running workflows are stopped and API requests return 503 until re-authentication completes. For mobile_app, the response includes a mobile_auth_session_deeplink that the creator opens on their phone to complete authentication."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/data-exports/cancel-data-export","title":"Cancel Data Export","url":"/api-reference/data-exports/cancel-data-export","structured":{"contents":[{"content":"Cancel a running data export. Only exports with status `pending` or `in_progress` can be cancelled."},{"content":"Cancel a running data export. Only exports with status pending or in_progress can be cancelled."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/data-exports/create-data-export","title":"Create Data Export","url":"/api-reference/data-exports/create-data-export","structured":{"contents":[{"content":"Create a new data export request. This will calculate the required credits and prepare the export for starting."},{"content":"Create a new data export request. This will calculate the required credits and prepare the export for starting."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/data-exports/get-data-export-status","title":"Get Data Export Status","url":"/api-reference/data-exports/get-data-export-status","structured":{"contents":[{"content":"Get the current status and progress of a data export"},{"content":"Get the current status and progress of a data export"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/data-exports/list-data-exports","title":"List Data Exports","url":"/api-reference/data-exports/list-data-exports","structured":{"contents":[{"content":"Get a paginated list of data exports for the team"},{"content":"Get a paginated list of data exports for the team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/data-exports/retry-failed-data-export","title":"Retry Failed Data Export","url":"/api-reference/data-exports/retry-failed-data-export","structured":{"contents":[{"content":"Create a new data export with the same parameters as a failed export and automatically start it."},{"content":"Create a new data export with the same parameters as a failed export and automatically start it."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/data-exports/start-data-export","title":"Start Data Export","url":"/api-reference/data-exports/start-data-export","structured":{"contents":[{"content":"Start processing a data export that has completed credit calculation. This will begin the actual export process and charge credits."},{"content":"Start processing a data export that has completed credit calculation. This will begin the actual export process and charge credits."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/engagement-messages/direct-messages-chart","title":"Direct Messages Chart","url":"/api-reference/engagement-messages/direct-messages-chart","structured":{"contents":[{"content":"Get engagement chart metrics for direct messages: sent count and purchase amount over time."},{"content":"Get engagement chart metrics for direct messages: sent count and purchase amount over time."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/engagement-messages/direct-messages","title":"Direct Messages","url":"/api-reference/engagement-messages/direct-messages","structured":{"contents":[{"content":"List sent direct messages with engagement stats (sent, viewed, purchased, etc.)."},{"content":"List sent direct messages with engagement stats (sent, viewed, purchased, etc.)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/engagement-messages/mass-messages-chart","title":"Mass Messages Chart","url":"/api-reference/engagement-messages/mass-messages-chart","structured":{"contents":[{"content":"Get engagement chart metrics for mass messages: sent count and purchase amount over time."},{"content":"Get engagement chart metrics for mass messages: sent count and purchase amount over time."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/engagement-messages/mass-messages","title":"Mass Messages","url":"/api-reference/engagement-messages/mass-messages","structured":{"contents":[{"content":"List sent mass messages with engagement stats (sent, viewed, purchased, etc.)."},{"content":"List sent mass messages with engagement stats (sent, viewed, purchased, etc.)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/engagement-messages/message-buyers","title":"Message Buyers","url":"/api-reference/engagement-messages/message-buyers","structured":{"contents":[{"content":"List buyers for a specific message."},{"content":"List buyers for a specific message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/engagement-messages/top-message","title":"Top Message","url":"/api-reference/engagement-messages/top-message","structured":{"contents":[{"content":"Get the top performing message by purchases in the selected timeframe."},{"content":"Get the top performing message by purchases in the selected timeframe."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans-ai-summary/generate-fan-summary","title":"Generate Fan Summary","url":"/api-reference/fans-ai-summary/generate-fan-summary","structured":{"contents":[{"content":"Queue generation or regeneration of an AI profile summary for a fan. Costs 200 credits (charged on completion). Use the GET endpoint to poll for results. To regenerate an existing summary, pass `regenerate: true`."},{"content":"Queue generation or regeneration of an AI profile summary for a fan. Costs 200 credits (charged on completion). Use the GET endpoint to poll for results. To regenerate an existing summary, pass regenerate: true."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/fans-ai-summary/get-fan-summary","title":"Get Fan Summary","url":"/api-reference/fans-ai-summary/get-fan-summary","structured":{"contents":[{"content":"Retrieve the AI profile summary for a fan. Poll this endpoint after triggering a generation to check for completion."},{"content":"Retrieve the AI profile summary for a fan. Poll this endpoint after triggering a generation to check for completion."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/clear-fan-notes","title":"Clear Fan Notes","url":"/api-reference/fans/clear-fan-notes","structured":{"contents":[{"content":"Clear notes for a specific fan."},{"content":"Clear notes for a specific fan."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fans/create-edit-fan-notes","title":"Create/Edit Fan Notes","url":"/api-reference/fans/create-edit-fan-notes","structured":{"contents":[{"content":"Create or edit notes for a specific fan."},{"content":"Create or edit notes for a specific fan."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fans/get-fan-notes","title":"Get Fan Notes","url":"/api-reference/fans/get-fan-notes","structured":{"contents":[{"content":"Retrieve notes for a specific fan."},{"content":"Retrieve notes for a specific fan."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/get-subscription-history","title":"Get Subscription History","url":"/api-reference/fans/get-subscription-history","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/list-active-fans","title":"List Active Fans","url":"/api-reference/fans/list-active-fans","structured":{"contents":[{"content":"Get a paginated list of fans for an Account. Newest fans are first."},{"content":"Get a paginated list of fans for an Account. Newest fans are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/list-all-fans","title":"List All Fans","url":"/api-reference/fans/list-all-fans","structured":{"contents":[{"content":"Get a paginated list of fans for an Account. Newest fans are first."},{"content":"Get a paginated list of fans for an Account. Newest fans are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/list-expired-fans","title":"List Expired Fans","url":"/api-reference/fans/list-expired-fans","structured":{"contents":[{"content":"Get a paginated list of expired fans for an Account. Newest fans are first."},{"content":"Get a paginated list of expired fans for an Account. Newest fans are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/list-latest-fans","title":"List Latest Fans","url":"/api-reference/fans/list-latest-fans","structured":{"contents":[{"content":"Get a paginated list fans, filterable by total, only new subscribers, or only renewals. Newest fans are first."},{"content":"Get a paginated list fans, filterable by total, only new subscribers, or only renewals. Newest fans are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/list-top-fans","title":"List Top Fans","url":"/api-reference/fans/list-top-fans","structured":{"contents":[{"content":"Get a list of top fans sorted by spending. Filterable by total, subscriptions, tips, messages, posts, or streams."},{"content":"Get a list of top fans sorted by spending. Filterable by total, subscriptions, tips, messages, posts, or streams."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/fans/set-fans-custom-name","title":"Set Fan's Custom Name","url":"/api-reference/fans/set-fans-custom-name","structured":{"contents":[{"content":"Change the Fan's Custom Name shown in OnlyFans"},{"content":"Change the Fan's Custom Name shown in OnlyFans"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/giphy/list-trending-gi-fs","title":"List Trending GIFs","url":"/api-reference/giphy/list-trending-gi-fs","structured":{"contents":[{"content":"Get trending GIFs from the OnlyFans Giphy proxy. Use the returned `id` as the `giphyId` body param when sending a chat or mass message."},{"content":"Get trending GIFs from the OnlyFans Giphy proxy. Use the returned id as the giphyId body param when sending a chat or mass message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/giphy/search-gi-fs","title":"Search GIFs","url":"/api-reference/giphy/search-gi-fs","structured":{"contents":[{"content":"Search GIFs from the OnlyFans Giphy proxy. Use the returned `id` as the `giphyId` body param when sending a chat or mass message."},{"content":"Search GIFs from the OnlyFans Giphy proxy. Use the returned id as the giphyId body param when sending a chat or mass message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/following/list-active-followings","title":"List Active Followings","url":"/api-reference/following/list-active-followings","structured":{"contents":[{"content":"Get a paginated list of followings for an Account. Newest followings are first."},{"content":"Get a paginated list of followings for an Account. Newest followings are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/following/list-all-followings","title":"List All Followings","url":"/api-reference/following/list-all-followings","structured":{"contents":[{"content":"Get a paginated list of followings for an Account. Newest followings are first."},{"content":"Get a paginated list of followings for an Account. Newest followings are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/following/list-expired-followings","title":"List Expired Followings","url":"/api-reference/following/list-expired-followings","structured":{"contents":[{"content":"Get a paginated list of expired followings for an Account. Newest followings are first."},{"content":"Get a paginated list of expired followings for an Account. Newest followings are first."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/link-tags/list-all-link-tags","title":"List All Link Tags","url":"/api-reference/link-tags/list-all-link-tags","structured":{"contents":[{"content":"Get all existing tags that have been used on free trial links, tracking links, and/or Smart Links for this account. This is a free endpoint."},{"content":"Get all existing tags that have been used on free trial links, tracking links, and/or Smart Links for this account. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/add-free-trial-link-tags","title":"Add Free Trial Link Tags","url":"/api-reference/free-trial-links/add-free-trial-link-tags","structured":{"contents":[{"content":"Add tags to a specific free trial link. Existing tags are preserved. This is a free endpoint."},{"content":"Add tags to a specific free trial link. Existing tags are preserved. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/free-trial-links/create-free-trial-link","title":"Create Free Trial Link","url":"/api-reference/free-trial-links/create-free-trial-link","structured":{"contents":[{"content":"Create a new free trial link for the account"},{"content":"Create a new free trial link for the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/free-trial-links/delete-free-trial-link","title":"Delete Free Trial Link","url":"/api-reference/free-trial-links/delete-free-trial-link","structured":{"contents":[{"content":"Delete a free trial link by its ID"},{"content":"Delete a free trial link by its ID"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/free-trial-links/get-free-trial-link-cohort-arps","title":"Get Free Trial Link Cohort ARPS","url":"/api-reference/free-trial-links/get-free-trial-link-cohort-arps","structured":{"contents":[{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Free Trial Link"},{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Free Trial Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/get-free-trial-link-stats","title":"Get Free Trial Link Stats","url":"/api-reference/free-trial-links/get-free-trial-link-stats","structured":{"contents":[{"content":"Get dashboard-style summary plus daily and monthly metrics for a specific Free Trial Link"},{"content":"Get dashboard-style summary plus daily and monthly metrics for a specific Free Trial Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/get-free-trial-link","title":"Get Free Trial Link","url":"/api-reference/free-trial-links/get-free-trial-link","structured":{"contents":[{"content":"Get individual Free Trial Link details and it's revenue data"},{"content":"Get individual Free Trial Link details and it's revenue data"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links","title":"Introduction","description":"Get started with our Free Trial Links API","url":"/api-reference/free-trial-links","structured":{"contents":[{"content":"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."},{"heading":"a-note-on-our-calculation-logic-toc","content":"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."},{"heading":"a-note-on-our-calculation-logic-toc","content":"We only track the fan’s spending during the period through which they have been subscribed."}],"headings":[{"id":"a-note-on-our-calculation-logic-toc","content":"A note on our calculation logic [!toc]"}]},"tag":"onlyfans"},{"_id":"/api-reference/free-trial-links/list-free-trial-link-spenders","title":"List Free Trial Link Spenders","url":"/api-reference/free-trial-links/list-free-trial-link-spenders","structured":{"contents":[{"content":"Only available if we already scraped subscribers and calculated revenue per fan"},{"content":"Only available if we already scraped subscribers and calculated revenue per fan"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/list-free-trial-link-subscribers","title":"List Free Trial Link Subscribers","url":"/api-reference/free-trial-links/list-free-trial-link-subscribers","structured":{"contents":[{"content":"Get list of subscribers who joined through a Free Trial Link"},{"content":"Get list of subscribers who joined through a Free Trial Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/list-free-trial-link-tags","title":"List Free Trial Link Tags","url":"/api-reference/free-trial-links/list-free-trial-link-tags","structured":{"contents":[{"content":"Get tags for a specific free trial link. This is a free endpoint."},{"content":"Get tags for a specific free trial link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/list-free-trial-links","title":"List Free Trial Links","url":"/api-reference/free-trial-links/list-free-trial-links","structured":{"contents":[{"content":"List all free trial links for the account, including the details and statistics"},{"content":"List all free trial links for the account, including the details and statistics"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/free-trial-links/remove-free-trial-link-tags","title":"Remove Free Trial Link Tags","url":"/api-reference/free-trial-links/remove-free-trial-link-tags","structured":{"contents":[{"content":"Remove tags from a specific free trial link. This is a free endpoint."},{"content":"Remove tags from a specific free trial link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/mass-messaging/get-mass-message-overview","title":"Get Mass Message Overview","url":"/api-reference/mass-messaging/get-mass-message-overview","structured":{"contents":[{"content":"Get an overview of mass messages, showing the send count and view count."},{"content":"Get an overview of mass messages, showing the send count and view count."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/mass-messaging/get-mass-message","title":"Get Mass Message","url":"/api-reference/mass-messaging/get-mass-message","structured":{"contents":[{"content":"Get the content of a mass message."},{"content":"Get the content of a mass message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/mass-messaging/list-mass-message-queue","title":"List Mass Message Queue","url":"/api-reference/mass-messaging/list-mass-message-queue","structured":{"contents":[{"content":"List the pending or recently sent mass messages in the message queue."},{"content":"List the pending or recently sent mass messages in the message queue."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/mass-messaging/send-mass-message","title":"Send Mass Message","url":"/api-reference/mass-messaging/send-mass-message","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/mass-messaging/unsend-delete-mass-message","title":"Unsend/Delete Mass Message","url":"/api-reference/mass-messaging/unsend-delete-mass-message","structured":{"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."},{"content":"Unsend a recently sent mass message, or delete a scheduled/saved message. When unsending, purchased content will continue to be able to viewable."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/mass-messaging/update-mass-message","title":"Update Mass Message","url":"/api-reference/mass-messaging/update-mass-message","structured":{"contents":[{"content":"Update a mass message."},{"content":"Update a mass message."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/media/deprecated-scrape-media-from-the-only-fans-cdn","title":"[Deprecated] Scrape media from the OnlyFans CDN","url":"/api-reference/media/deprecated-scrape-media-from-the-only-fans-cdn","structured":{"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**"},{"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"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/media/download-media-from-the-only-fans-cdn","title":"Download Media from the OnlyFans CDN","url":"/api-reference/media/download-media-from-the-only-fans-cdn","structured":{"contents":[{"content":"Downloads a file directly from a `https://cdn*.onlyfans.com/*` URL. When the file is already cached on our CDN, this endpoint returns a `302` redirect to a `https://cdn.fansapi.com/*` URL. Most HTTP clients follow redirects automatically (`curl` requires `-L`). Otherwise, the file is redirected to `dl.fansapi.com`, which streams it through the account proxy and reports billing back to the API."},{"content":"Downloads a file directly from a https://cdn*.onlyfans.com/* URL. When the file is already cached on our CDN, this endpoint returns a 302 redirect to a https://cdn.fansapi.com/* URL. Most HTTP clients follow redirects automatically (curl requires -L). Otherwise, the file is redirected to dl.fansapi.com, which streams it through the account proxy and reports billing back to the API."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/media/get-upload-status","title":"Get Upload Status","url":"/api-reference/media/get-upload-status","structured":{"contents":[{"content":"Check the status of a media upload. Poll this endpoint until status is `completed` or `failed`. This endpoint is free and does not cost any credits.\n\n**Possible statuses:**\n- `pending` — Upload is queued\n- `processing` — Download/upload in progress\n- `completed` — Upload finished, `media` and `credits_used` are included\n- `failed` — Upload failed, `error` is included"},{"content":"Check the status of a media upload. Poll this endpoint until status is completed or failed. This endpoint is free and does not cost any credits."},{"content":"Possible statuses:"},{"content":"pending — Upload is queued"},{"content":"processing — Download/upload in progress"},{"content":"completed — Upload finished, media and credits_used are included"},{"content":"failed — Upload failed, error is included"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/media/upload-media-to-the-only-fans-cdn","title":"Upload media to the OnlyFans CDN","url":"/api-reference/media/upload-media-to-the-only-fans-cdn","structured":{"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. You must provide either `file` or `file_url`."},{"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. You must provide either file or file_url."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/media-vault/delete-vault-media","title":"Delete Vault Media","url":"/api-reference/media-vault/delete-vault-media","structured":{"contents":[{"content":"Delete one or multiple media from your vault."},{"content":"Delete one or multiple media from your vault."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/media-vault/get-vault-media","title":"Get Vault Media","url":"/api-reference/media-vault/get-vault-media","structured":{"contents":[{"content":"Retrieve details about a specific media item in your vault."},{"content":"Retrieve details about a specific media item in your vault."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/media-vault/list-vault-media","title":"List Vault Media","url":"/api-reference/media-vault/list-vault-media","structured":{"contents":[{"content":"List media items stored in your vault. See how many likes and how much tips did they get."},{"content":"List media items stored in your vault. See how many likes and how much tips did they get."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/media-vault/upload-media-to-vault","title":"Upload Media to Vault","url":"/api-reference/media-vault/upload-media-to-vault","structured":{"contents":[{"content":"Upload a media file directly to your vault."},{"content":"Upload a media file directly to your vault."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/media-vault-lists/add-media-to-list","title":"Add Media To List","url":"/api-reference/media-vault-lists/add-media-to-list","structured":{"contents":[{"content":"Add one or multiple media to a list."},{"content":"Add one or multiple media to a list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/media-vault-lists/create-vault-list","title":"Create Vault List","url":"/api-reference/media-vault-lists/create-vault-list","structured":{"contents":[{"content":"Create a new Vault list."},{"content":"Create a new Vault list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/media-vault-lists/delete-vault-list","title":"Delete Vault List","url":"/api-reference/media-vault-lists/delete-vault-list","structured":{"contents":[{"content":"Delete a Vault list."},{"content":"Delete a Vault list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/media-vault-lists/list-vault-lists","title":"List Vault Lists","url":"/api-reference/media-vault-lists/list-vault-lists","structured":{"contents":[{"content":"List your Vault lists (categories)."},{"content":"List your Vault lists (categories)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/media-vault-lists/remove-media-from-list","title":"Remove Media From List","url":"/api-reference/media-vault-lists/remove-media-from-list","structured":{"contents":[{"content":"Remove one or multiple media from a list."},{"content":"Remove one or multiple media from a list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/media-vault-lists/rename-vault-list","title":"Rename Vault List","url":"/api-reference/media-vault-lists/rename-vault-list","structured":{"contents":[{"content":"Rename a Vault list."},{"content":"Rename a Vault list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/media-vault-lists/show-vault-list","title":"Show Vault List","url":"/api-reference/media-vault-lists/show-vault-list","structured":{"contents":[{"content":"Show a Vault list."},{"content":"Show a Vault list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/notifications/get-notification-counts","title":"Get Notification Counts","url":"/api-reference/notifications/get-notification-counts","structured":{"contents":[{"content":"Get a quick overview of all unread notification types"},{"content":"Get a quick overview of all unread notification types"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/notifications/get-notification-tabs-order","title":"Get Notification Tabs Order","url":"/api-reference/notifications/get-notification-tabs-order","structured":{"contents":[{"content":"Get the order of an account's notification tabs as displayed on the OnlyFans notifications page"},{"content":"Get the order of an account's notification tabs as displayed on the OnlyFans notifications page"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/notifications/list-notifications","title":"List Notifications","url":"/api-reference/notifications/list-notifications","structured":{"contents":[{"content":"List all notifications for the account"},{"content":"List all notifications for the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/notifications/mark-all-notifications-as-read","title":"Mark All Notifications As Read","url":"/api-reference/notifications/mark-all-notifications-as-read","structured":{"contents":[{"content":"Mark all notifications of this account as read"},{"content":"Mark all notifications of this account as read"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/notifications/search-users-in-notifications","title":"Search Users In Notifications","url":"/api-reference/notifications/search-users-in-notifications","structured":{"contents":[{"content":"Search users that have appeared in your notifications"},{"content":"Search users that have appeared in your notifications"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/notifications/update-notification-tabs-order","title":"Update Notification Tabs Order","url":"/api-reference/notifications/update-notification-tabs-order","structured":{"contents":[{"content":"Update the order of an account's notification tabs as displayed on the OnlyFans notifications page"},{"content":"Update the order of an account's notification tabs as displayed on the OnlyFans notifications page"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/payouts/get-account-balances","title":"Get Account Balances","url":"/api-reference/payouts/get-account-balances","structured":{"contents":[{"content":"Get the current available and pending balances for the account."},{"content":"Get the current available and pending balances for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/payouts/get-earning-statistics","title":"Get Earning Statistics","url":"/api-reference/payouts/get-earning-statistics","structured":{"contents":[{"content":"Get total and monthly time-series earning statistics for the account."},{"content":"Get total and monthly time-series earning statistics for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/payouts/get-eligibility","title":"Get Eligibility","url":"/api-reference/payouts/get-eligibility","structured":{"contents":[{"content":"Get the eligibility details for receiving payouts."},{"content":"Get the eligibility details for receiving payouts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/payouts/list-payout-requests","title":"List Payout Requests","url":"/api-reference/payouts/list-payout-requests","structured":{"contents":[{"content":"List all payout requests for the account."},{"content":"List all payout requests for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/payouts/request-manual-withdrawal","title":"Request Manual Withdrawal","url":"/api-reference/payouts/request-manual-withdrawal","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/payouts/update-payout-frequency","title":"Update Payout Frequency","url":"/api-reference/payouts/update-payout-frequency","structured":{"contents":[{"content":"Update the payout frequency for the account (Manual, Weekly or Monthly)."},{"content":"Update the payout frequency for the account (Manual, Weekly or Monthly)."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/post-comments/create-post-comment","title":"Create Post Comment","url":"/api-reference/post-comments/create-post-comment","structured":{"contents":[{"content":"Create a comment on one of your posts."},{"content":"Create a comment on one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/post-comments/delete-post-comment","title":"Delete Post Comment","url":"/api-reference/post-comments/delete-post-comment","structured":{"contents":[{"content":"Delete a comment on one of your posts."},{"content":"Delete a comment on one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/post-comments/like-post-comment","title":"Like Post Comment","url":"/api-reference/post-comments/like-post-comment","structured":{"contents":[{"content":"Like a comment on one of your posts."},{"content":"Like a comment on one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/post-comments/list-post-comments","title":"List Post Comments","url":"/api-reference/post-comments/list-post-comments","structured":{"contents":[{"content":"Get comments from one of your posts."},{"content":"Get comments from one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/post-comments/pin-post-comment","title":"Pin Post Comment","url":"/api-reference/post-comments/pin-post-comment","structured":{"contents":[{"content":"Pin a comment on one of your posts."},{"content":"Pin a comment on one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/post-comments/unlike-post-comment","title":"Unlike Post Comment","url":"/api-reference/post-comments/unlike-post-comment","structured":{"contents":[{"content":"Unlike a comment on one of your posts."},{"content":"Unlike a comment on one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/post-comments/unpin-post-comment","title":"Unpin Post Comment","url":"/api-reference/post-comments/unpin-post-comment","structured":{"contents":[{"content":"Unpin a comment from one of your posts."},{"content":"Unpin a comment from one of your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/posts/archive-post","title":"Archive Post","url":"/api-reference/posts/archive-post","structured":{"contents":[{"content":"Archive a post from your account. Also can be used to move posts between the Regular and Private Archive."},{"content":"Archive a post from your account. Also can be used to move posts between the Regular and Private Archive."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/posts/delete-post","title":"Delete Post","url":"/api-reference/posts/delete-post","structured":{"contents":[{"content":"Delete a post from your account."},{"content":"Delete a post from your account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/posts/get-post","title":"Get Post","url":"/api-reference/posts/get-post","structured":{"contents":[{"content":"Retrieve details of a post from your account."},{"content":"Retrieve details of a post from your account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/posts/list-posts","title":"List Posts","url":"/api-reference/posts/list-posts","structured":{"contents":[{"content":"Get posts from your OnlyFans account."},{"content":"Get posts from your OnlyFans account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/posts/pin-unpin-post","title":"Pin/Unpin Post","url":"/api-reference/posts/pin-unpin-post","structured":{"contents":[{"content":"Pin or unpin a post to your account."},{"content":"Pin or unpin a post to your account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/posts/send-post","title":"Send Post","url":"/api-reference/posts/send-post","structured":{"contents":[{"content":"Compose and send a new post to your OnlyFans account."},{"content":"Compose and send a new post to your OnlyFans account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/posts/show-post-statistics","title":"Show Post Statistics","url":"/api-reference/posts/show-post-statistics","structured":{"contents":[{"content":"Show the statistics of a post like purchases, views, likes, tips and more."},{"content":"Show the statistics of a post like purchases, views, likes, tips and more."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/posts/unarchive-post","title":"Unarchive Post","url":"/api-reference/posts/unarchive-post","structured":{"contents":[{"content":"Unarchive a post from your account."},{"content":"Unarchive a post from your account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/posts/update-post","title":"Update Post","url":"/api-reference/posts/update-post","structured":{"contents":[{"content":"Update a posted, queued, or \"saved for later\" post."},{"content":"Update a posted, queued, or \"saved for later\" post."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/promotions/create-promotion","title":"Create Promotion","url":"/api-reference/promotions/create-promotion","structured":{"contents":[{"content":"Create a new promotion for the account."},{"content":"Create a new promotion for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/promotions/delete-promotion","title":"Delete Promotion","url":"/api-reference/promotions/delete-promotion","structured":{"contents":[{"content":"Delete a promotion for the account."},{"content":"Delete a promotion for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/promotions/list-promotions","title":"List Promotions","url":"/api-reference/promotions/list-promotions","structured":{"contents":[{"content":"List all promotions for the account."},{"content":"List all promotions for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/promotions/stop-promotion","title":"Stop Promotion","url":"/api-reference/promotions/stop-promotion","structured":{"contents":[{"content":"Stop an active promotion for the account."},{"content":"Stop an active promotion for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/post-labels/create-label","title":"Create Label","url":"/api-reference/post-labels/create-label","structured":{"contents":[{"content":"Create a new post label."},{"content":"Create a new post label."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/post-labels/list-labels","title":"List Labels","url":"/api-reference/post-labels/list-labels","structured":{"contents":[{"content":"List the labels that you can use to organize your posts."},{"content":"List the labels that you can use to organize your posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/queue/count-queue-items","title":"Count Queue Items","url":"/api-reference/queue/count-queue-items","structured":{"contents":[{"content":"Count posts and messages in the queue."},{"content":"Count posts and messages in the queue."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/queue/list-queue-items","title":"List Queue Items","url":"/api-reference/queue/list-queue-items","structured":{"contents":[{"content":"List posts and messages in the queue."},{"content":"List posts and messages in the queue."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/queue/publish-queue-item","title":"Publish Queue Item","url":"/api-reference/queue/publish-queue-item","structured":{"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."},{"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."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/public-profiles/get-profile-details","title":"Get Profile Details","url":"/api-reference/public-profiles/get-profile-details","structured":{"contents":[{"content":"Get profile details by username."},{"content":"Get profile details by username."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/public-profiles/search-profiles","title":"Search Profiles","url":"/api-reference/public-profiles/search-profiles","structured":{"contents":[{"content":"Full-text search for profiles with filters for pricing, free trials, location, media count and more."},{"content":"Full-text search for profiles with filters for pricing, free trials, location, media count and more."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/release-forms/create-invitation-link","title":"Create Invitation Link","url":"/api-reference/release-forms/create-invitation-link","structured":{"contents":[{"content":"Create a new invitation link for release forms."},{"content":"Create a new invitation link for release forms."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/release-forms/create-release-form","title":"Create Release Form","url":"/api-reference/release-forms/create-release-form","structured":{"contents":[{"content":"Create a new release form link."},{"content":"Create a new release form link."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/release-forms/hide-unhide-release-form","title":"Hide / Unhide Release Form","url":"/api-reference/release-forms/hide-unhide-release-form","structured":{"contents":[{"content":"Toggle the visibility of a release form. Returns the new `isHidden` state."},{"content":"Toggle the visibility of a release form. Returns the new isHidden state."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/release-forms/list-mentions","title":"List Mentions","url":"/api-reference/release-forms/list-mentions","structured":{"contents":[{"content":"Get a paginated list of mentions: posts where other creators have tagged or mentioned the account in a release form. Pagination is infinite-scroll: follow `_pagination.next_page` (which advances both `offset` and the `fromId` cursor) until it is `null`."},{"content":"Get a paginated list of mentions: posts where other creators have tagged or mentioned the account in a release form. Pagination is infinite-scroll: follow _pagination.next_page (which advances both offset and the fromId cursor) until it is null."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/release-forms/list-release-forms","title":"List Release Forms","url":"/api-reference/release-forms/list-release-forms","structured":{"contents":[{"content":"Get a paginated list of release forms for the account. Use `offset` and `limit` for pagination, following `_pagination.next_page` until it is `null`. Optionally filter with `filter`, sort with `sort`/`sortDirection`, or search by `name`."},{"content":"Get a paginated list of release forms for the account. Use offset and limit for pagination, following _pagination.next_page until it is null. Optionally filter with filter, sort with sort/sortDirection, or search by name."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/release-forms/list-taggable-users","title":"List Taggable Users","url":"/api-reference/release-forms/list-taggable-users","structured":{"contents":[{"content":"Get a paginated list of users that can be tagged in release forms. These are verified creators who have signed release forms to appear in your content. Use `offset` and `limit` for pagination, following `_pagination.next_page` until it is `null`."},{"content":"Get a paginated list of users that can be tagged in release forms. These are verified creators who have signed release forms to appear in your content. Use offset and limit for pagination, following _pagination.next_page until it is null."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/release-forms/rename-release-form","title":"Rename Release Form","url":"/api-reference/release-forms/rename-release-form","structured":{"contents":[{"content":"Rename a release form."},{"content":"Rename a release form."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/saved-for-later-messages/disable-automatic-messaging","title":"Disable Automatic Messaging","url":"/api-reference/saved-for-later-messages/disable-automatic-messaging","structured":{"contents":[{"content":"Disable automatic messaging of Saved For Later messages."},{"content":"Disable automatic messaging of Saved For Later messages."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/saved-for-later-messages/enable-update-automatic-messaging","title":"Enable/Update Automatic Messaging","url":"/api-reference/saved-for-later-messages/enable-update-automatic-messaging","structured":{"contents":[{"content":"Enable or update automatic messaging of Saved For Later messages."},{"content":"Enable or update automatic messaging of Saved For Later messages."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/saved-for-later-messages/get-message-settings","title":"Get Message Settings","url":"/api-reference/saved-for-later-messages/get-message-settings","structured":{"contents":[{"content":"Get the Saved For Later message settings."},{"content":"Get the Saved For Later message settings."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/saved-for-later-messages/list-saved-for-later-messages","title":"List Saved For Later Messages","url":"/api-reference/saved-for-later-messages/list-saved-for-later-messages","structured":{"contents":[{"content":"List all messages that are marked as \"Save For Later\"."},{"content":"List all messages that are marked as \"Save For Later\"."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/saved-for-later-posts/disable-automatic-posting","title":"Disable Automatic Posting","url":"/api-reference/saved-for-later-posts/disable-automatic-posting","structured":{"contents":[{"content":"Disable automatic posting of Saved For Later posts."},{"content":"Disable automatic posting of Saved For Later posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/saved-for-later-posts/enable-update-automatic-posting","title":"Enable/Update Automatic Posting","url":"/api-reference/saved-for-later-posts/enable-update-automatic-posting","structured":{"contents":[{"content":"Enable or update automatic posting of Saved For Later posts."},{"content":"Enable or update automatic posting of Saved For Later posts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/saved-for-later-posts/get-post-settings","title":"Get Post Settings","url":"/api-reference/saved-for-later-posts/get-post-settings","structured":{"contents":[{"content":"Get the Saved For Later post settings."},{"content":"Get the Saved For Later post settings."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/saved-for-later-posts/list-saved-for-later-posts","title":"List Saved For Later Posts","url":"/api-reference/saved-for-later-posts/list-saved-for-later-posts","structured":{"contents":[{"content":"List all posts that are marked as \"Save For Later\"."},{"content":"List all posts that are marked as \"Save For Later\"."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/shared-free-trial-links/add-shared-free-trial-link-tags","title":"Add Shared Free Trial Link Tags","url":"/api-reference/shared-free-trial-links/add-shared-free-trial-link-tags","structured":{"contents":[{"content":"Add tags to a shared Free Trial Link. Existing tags are preserved. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."},{"content":"Add tags to a shared Free Trial Link. Existing tags are preserved. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/shared-free-trial-links/list-shared-free-trial-link-tags","title":"List Shared Free Trial Link Tags","url":"/api-reference/shared-free-trial-links/list-shared-free-trial-link-tags","structured":{"contents":[{"content":"Get tags for a specific shared Free Trial Link. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."},{"content":"Get tags for a specific shared Free Trial Link. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/shared-free-trial-links/list-shared-free-trial-links","title":"List Shared Free Trial Links","url":"/api-reference/shared-free-trial-links/list-shared-free-trial-links","structured":{"contents":[{"content":"List all Free Trial Links shared with the account by other OF creators. Calls OnlyFans live and syncs to our cache."},{"content":"List all Free Trial Links shared with the account by other OF creators. Calls OnlyFans live and syncs to our cache."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/shared-free-trial-links/remove-shared-free-trial-link-tags","title":"Remove Shared Free Trial Link Tags","url":"/api-reference/shared-free-trial-links/remove-shared-free-trial-link-tags","structured":{"contents":[{"content":"Remove tags from a shared Free Trial Link. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."},{"content":"Remove tags from a shared Free Trial Link. Tag namespace is shared with owned Free Trial Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/shared-free-trial-links/revoke-shared-free-trial-link-access","title":"Revoke Shared Free Trial Link Access","url":"/api-reference/shared-free-trial-links/revoke-shared-free-trial-link-access","structured":{"contents":[{"content":"Revoke the account's access to a shared Free Trial Link. Calls OnlyFans `DELETE /trials/share-access`, then removes the local cache row. The owner keeps the link."},{"content":"Revoke the account's access to a shared Free Trial Link. Calls OnlyFans DELETE /trials/share-access, then removes the local cache row. The owner keeps the link."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/settings/add-social-media-button","title":"Add Social Media Button","url":"/api-reference/settings/add-social-media-button","structured":{"contents":[{"content":"Adds a new social media button to the account"},{"content":"Adds a new social media button to the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/settings/check-username-availability","title":"Check Username Availability","url":"/api-reference/settings/check-username-availability","structured":{"contents":[{"content":"Check if a username is taken. Returns `false` if the username is available, `true` if it is already taken."},{"content":"Check if a username is taken. Returns false if the username is available, true if it is already taken."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/settings/delete-social-media-button","title":"Delete Social Media Button","url":"/api-reference/settings/delete-social-media-button","structured":{"contents":[{"content":"Deletes a social media button from the account"},{"content":"Deletes a social media button from the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/settings/enable-disable-drm","title":"Enable/Disable DRM","url":"/api-reference/settings/enable-disable-drm","structured":{"contents":[{"content":"Enable or disable DRM protection for media. DRM Protection helps to protect video content from being copied or downloaded. After you enable it, DRM Protection will be applied to uploads after that date. DRM Protection may limit the ability of fans using older devices to view this video content."},{"content":"Enable or disable DRM protection for media. DRM Protection helps to protect video content from being copied or downloaded. After you enable it, DRM Protection will be applied to uploads after that date. DRM Protection may limit the ability of fans using older devices to view this video content."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/settings/enable-disable-welcome-message","title":"Enable/Disable Welcome Message","url":"/api-reference/settings/enable-disable-welcome-message","structured":{"contents":[{"content":"Enable or disable the automatic welcome message that is sent when someone subscribes."},{"content":"Enable or disable the automatic welcome message that is sent when someone subscribes."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/settings/get-blocked-countries","title":"Get Blocked Countries","url":"/api-reference/settings/get-blocked-countries","structured":{"contents":[{"content":"Returns the countries blocked from viewing the account."},{"content":"Returns the countries blocked from viewing the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/settings/get-drm-status","title":"Get DRM Status","url":"/api-reference/settings/get-drm-status","structured":{"contents":[{"content":"Returns whether DRM protection is enabled for media. DRM Protection helps to protect video content from being copied or downloaded. DRM Protection may limit the ability of fans using older devices to view this video content."},{"content":"Returns whether DRM protection is enabled for media. DRM Protection helps to protect video content from being copied or downloaded. DRM Protection may limit the ability of fans using older devices to view this video content."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/settings/get-settings","title":"Get Settings","url":"/api-reference/settings/get-settings","structured":{"contents":[{"content":"Returns the account settings"},{"content":"Returns the account settings"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/settings/get-welcome-message","title":"Get Welcome Message","url":"/api-reference/settings/get-welcome-message","structured":{"contents":[{"content":"Get the current automatic welcome message template that is sent when someone subscribes."},{"content":"Get the current automatic welcome message template that is sent when someone subscribes."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/settings/list-social-media-buttons","title":"List Social Media Buttons","url":"/api-reference/settings/list-social-media-buttons","structured":{"contents":[{"content":"Returns the list of social media buttons for the account"},{"content":"Returns the list of social media buttons for the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/settings/reorder-social-media-buttons","title":"Reorder Social Media Buttons","url":"/api-reference/settings/reorder-social-media-buttons","structured":{"contents":[{"content":"Changes the order of social media buttons for the account"},{"content":"Changes the order of social media buttons for the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/settings/update-blocked-countries","title":"Update Blocked Countries","url":"/api-reference/settings/update-blocked-countries","structured":{"contents":[{"content":"Updates the countries blocked from viewing the account."},{"content":"Updates the countries blocked from viewing the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/settings/update-profile","title":"Update Profile","url":"/api-reference/settings/update-profile","structured":{"contents":[{"content":"Updates the account profile. **Only include the fields you want to update.** To make a field empty, set it to `null`."},{"content":"Updates the account profile. Only include the fields you want to update. To make a field empty, set it to null."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/settings/update-social-media-button","title":"Update Social Media Button","url":"/api-reference/settings/update-social-media-button","structured":{"contents":[{"content":"Updates a social media button from the account"},{"content":"Updates a social media button from the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/settings/update-subscription-price","title":"Update Subscription Price","url":"/api-reference/settings/update-subscription-price","structured":{"contents":[{"content":"Update the account subscription price. Send `0` or `\"free\"` to make the account free. ⚠️ WARNING! OnlyFans limits updating the subscription price to max. 3 times per day."},{"content":"Update the account subscription price. Send 0 or \"free\" to make the account free. ⚠️ WARNING! OnlyFans limits updating the subscription price to max. 3 times per day."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/settings/update-welcome-message","title":"Update Welcome Message","url":"/api-reference/settings/update-welcome-message","structured":{"contents":[{"content":"Update the automatic welcome message template that is sent when someone subscribes."},{"content":"Update the automatic welcome message template that is sent when someone subscribes."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/shared-tracking-links/add-shared-tracking-link-tags","title":"Add Shared Tracking Link Tags","url":"/api-reference/shared-tracking-links/add-shared-tracking-link-tags","structured":{"contents":[{"content":"Add tags to a shared Tracking Link. Existing tags are preserved. Tag namespace is shared with owned Tracking Links. This is a free endpoint."},{"content":"Add tags to a shared Tracking Link. Existing tags are preserved. Tag namespace is shared with owned Tracking Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/shared-tracking-links/list-shared-tracking-link-tags","title":"List Shared Tracking Link Tags","url":"/api-reference/shared-tracking-links/list-shared-tracking-link-tags","structured":{"contents":[{"content":"Get tags for a specific shared Tracking Link. Tag namespace is shared with owned Tracking Links. This is a free endpoint."},{"content":"Get tags for a specific shared Tracking Link. Tag namespace is shared with owned Tracking Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/shared-tracking-links/list-shared-tracking-links","title":"List Shared Tracking Links","url":"/api-reference/shared-tracking-links/list-shared-tracking-links","structured":{"contents":[{"content":"List all Tracking Links (campaigns) shared with the account by other OF creators. Calls OnlyFans live and syncs to our cache."},{"content":"List all Tracking Links (campaigns) shared with the account by other OF creators. Calls OnlyFans live and syncs to our cache."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/shared-tracking-links/remove-shared-tracking-link-tags","title":"Remove Shared Tracking Link Tags","url":"/api-reference/shared-tracking-links/remove-shared-tracking-link-tags","structured":{"contents":[{"content":"Remove tags from a shared Tracking Link. Tag namespace is shared with owned Tracking Links. This is a free endpoint."},{"content":"Remove tags from a shared Tracking Link. Tag namespace is shared with owned Tracking Links. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/shared-tracking-links/revoke-shared-tracking-link-access","title":"Revoke Shared Tracking Link Access","url":"/api-reference/shared-tracking-links/revoke-shared-tracking-link-access","structured":{"contents":[{"content":"Revoke the account's access to a shared Tracking Link (campaign). Calls OnlyFans `DELETE /campaigns/share-access`, then removes the local cache row. The owner keeps the link."},{"content":"Revoke the account's access to a shared Tracking Link (campaign). Calls OnlyFans DELETE /campaigns/share-access, then removes the local cache row. The owner keeps the link."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/smart-link-postbacks/create-smart-link-postback","title":"Create Smart Link Postback","url":"/api-reference/smart-link-postbacks/create-smart-link-postback","structured":{"contents":[{"content":"Create a postback that fires for selected Smart Link conversion types"},{"content":"Create a postback that fires for selected Smart Link conversion types"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/smart-link-postbacks/delete-smart-link-postback","title":"Delete Smart Link Postback","url":"/api-reference/smart-link-postbacks/delete-smart-link-postback","structured":{"contents":[{"content":"Delete a Smart Link postback"},{"content":"Delete a Smart Link postback"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/smart-link-postbacks/list-smart-link-postbacks","title":"List Smart Link Postbacks","url":"/api-reference/smart-link-postbacks/list-smart-link-postbacks","structured":{"contents":[{"content":"List all Smart Link postbacks configured for your Team"},{"content":"List all Smart Link postbacks configured for your Team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-link-postbacks/show-smart-link-postback","title":"Show Smart Link Postback","url":"/api-reference/smart-link-postbacks/show-smart-link-postback","structured":{"contents":[{"content":"Retrieve a Smart Link postback by ID"},{"content":"Retrieve a Smart Link postback by ID"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-link-postbacks/update-smart-link-postback","title":"Update Smart Link Postback","url":"/api-reference/smart-link-postbacks/update-smart-link-postback","structured":{"contents":[{"content":"Update a Smart Link postback configuration"},{"content":"Update a Smart Link postback configuration"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/stored-shared-free-trial-links/list-stored-shared-free-trial-links","title":"List Stored Shared Free Trial Links","url":"/api-reference/stored-shared-free-trial-links/list-stored-shared-free-trial-links","structured":{"contents":[{"content":"List all shared Free Trial Links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."},{"content":"List all shared Free Trial Links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stored-free-trial-links/list-stored-free-trial-links","title":"List Stored Free Trial Links","url":"/api-reference/stored-free-trial-links/list-stored-free-trial-links","structured":{"contents":[{"content":"List all stored free trial links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."},{"content":"List all stored free trial links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/calculate-total-transactions","title":"Calculate Total Transactions","url":"/api-reference/statistics/calculate-total-transactions","structured":{"contents":[{"content":"Calculate the total transactions and amounts."},{"content":"Calculate the total transactions and amounts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/get-earnings","title":"Get Earnings","url":"/api-reference/statistics/get-earnings","structured":{"contents":[{"content":"Get the earnings for a given period."},{"content":"Get the earnings for a given period."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/get-profile-visitors","title":"Get Profile Visitors","url":"/api-reference/statistics/get-profile-visitors","structured":{"contents":[{"content":"Get the number of profile visitors for a given period."},{"content":"Get the number of profile visitors for a given period."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/get-subscriber-metrics","title":"Get Subscriber Metrics","url":"/api-reference/statistics/get-subscriber-metrics","structured":{"contents":[{"content":"Get subscriber metrics including total, new, renewed, paid, and free subscriptions for a specified timeframe. `unknown_subscriptions` indicates deleted fan accounts."},{"content":"Get subscriber metrics including total, new, renewed, paid, and free subscriptions for a specified timeframe. unknown_subscriptions indicates deleted fan accounts."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/get-subscriber-statistics","title":"Get Subscriber Statistics","url":"/api-reference/statistics/get-subscriber-statistics","structured":{"contents":[{"content":"Get subscriber and earning statistics for an account for a specified timeframe. Optionally, filter by all, renews, or new subscribers."},{"content":"Get subscriber and earning statistics for an account for a specified timeframe. Optionally, filter by all, renews, or new subscribers."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/statistics/statistics-overview","title":"Statistics Overview","url":"/api-reference/statistics/statistics-overview","structured":{"contents":[{"content":"Get an overview of statistics for fans, visitors, posts, or general."},{"content":"Get an overview of statistics for fans, visitors, posts, or general."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stored-shared-tracking-links/list-stored-shared-tracking-links","title":"List Stored Shared Tracking Links","url":"/api-reference/stored-shared-tracking-links/list-stored-shared-tracking-links","structured":{"contents":[{"content":"List all shared Tracking Links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."},{"content":"List all shared Tracking Links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stories/add-to-story","title":"Add to Story","url":"/api-reference/stories/add-to-story","structured":{"contents":[{"content":"Post a new media or vault file to your story."},{"content":"Post a new media or vault file to your story."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/stories/delete-story","title":"Delete Story","url":"/api-reference/stories/delete-story","structured":{"contents":[{"content":"Delete a specific story by its ID."},{"content":"Delete a specific story by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/stories/get-story-stats","title":"Get Story Stats","url":"/api-reference/stories/get-story-stats","structured":{"contents":[{"content":"Retrieve viewer count, likes count, comments count, and tips statistics for a specific story by its ID."},{"content":"Retrieve viewer count, likes count, comments count, and tips statistics for a specific story by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stories/list-active-stories","title":"List Active Stories","url":"/api-reference/stories/list-active-stories","structured":{"contents":[{"content":"Retrieve a list of your currently active stories."},{"content":"Retrieve a list of your currently active stories."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stories/list-story-archive","title":"List Story Archive","url":"/api-reference/stories/list-story-archive","structured":{"contents":[{"content":"Retrieve a list of your archived stories."},{"content":"Retrieve a list of your archived stories."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stories/list-story-viewers","title":"List Story Viewers","url":"/api-reference/stories/list-story-viewers","structured":{"contents":[{"content":"Retrieve the list of viewers for a specific story by its ID."},{"content":"Retrieve the list of viewers for a specific story by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stories/mark-story-as-watched","title":"Mark Story as Watched","url":"/api-reference/stories/mark-story-as-watched","structured":{"contents":[{"content":"Mark a specific story as watched by its ID."},{"content":"Mark a specific story as watched by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/stories/show-story","title":"Show Story","url":"/api-reference/stories/show-story","structured":{"contents":[{"content":"Retrieve details of a specific story by its ID."},{"content":"Retrieve details of a specific story by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/stored-tracking-links/list-stored-tracking-links","title":"List Stored Tracking Links","url":"/api-reference/stored-tracking-links/list-stored-tracking-links","structured":{"contents":[{"content":"List all stored tracking links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."},{"content":"List all stored tracking links from the OnlyFansAPI Cache. This is a free endpoint that does not call the OnlyFans API."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/add-smart-link-tags","title":"Add Smart Link Tags","url":"/api-reference/smart-links/add-smart-link-tags","structured":{"contents":[{"content":"Add tags to a specific Smart Link. Existing tags are preserved. This is a free endpoint."},{"content":"Add tags to a specific Smart Link. Existing tags are preserved. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/smart-links/create-smart-link","title":"Create Smart Link","url":"/api-reference/smart-links/create-smart-link","structured":{"contents":[{"content":"Create a new Smart Link for the account. Smart Links are pooled Free Trial or Tracking links that rotate inventory automatically."},{"content":"Create a new Smart Link for the account. Smart Links are pooled Free Trial or Tracking links that rotate inventory automatically."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/smart-links/delete-smart-link","title":"Delete Smart Link","url":"/api-reference/smart-links/delete-smart-link","structured":{"contents":[{"content":"Delete a Smart Link by its ID"},{"content":"Delete a Smart Link by its ID"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/smart-links/get-smart-link-cohort-arps","title":"Get Smart Link Cohort ARPS","url":"/api-reference/smart-links/get-smart-link-cohort-arps","structured":{"contents":[{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Smart Link"},{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Smart Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/get-smart-link-stats","title":"Get Smart Link Stats","url":"/api-reference/smart-links/get-smart-link-stats","structured":{"contents":[{"content":"Get dashboard-style summary plus daily and monthly metrics for a specific Smart Link on the current team"},{"content":"Get dashboard-style summary plus daily and monthly metrics for a specific Smart Link on the current team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/get-smart-link","title":"Get Smart Link","url":"/api-reference/smart-links/get-smart-link","structured":{"contents":[{"content":"Get a specific Smart Link by its ID"},{"content":"Get a specific Smart Link by its ID"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-link-clicks","title":"List Smart Link Clicks","url":"/api-reference/smart-links/list-smart-link-clicks","structured":{"contents":[{"content":"Query smart link clicks in a date range with optional bot/duplicate filtering"},{"content":"Query smart link clicks in a date range with optional bot/duplicate filtering"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-link-conversions","title":"List Smart Link Conversions","url":"/api-reference/smart-links/list-smart-link-conversions","structured":{"contents":[{"content":"Query smart link conversions in a date range with optional bot/duplicate and conversion type filtering"},{"content":"Query smart link conversions in a date range with optional bot/duplicate and conversion type filtering"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-link-fans","title":"List Smart Link Fans","url":"/api-reference/smart-links/list-smart-link-fans","structured":{"contents":[{"content":"Query attributed Smart Link fans with aggregate fan metrics and subscriber attribution metadata"},{"content":"Query attributed Smart Link fans with aggregate fan metrics and subscriber attribution metadata"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-link-spenders","title":"List Smart Link Spenders","url":"/api-reference/smart-links/list-smart-link-spenders","structured":{"contents":[{"content":"Compatibility endpoint returning fans with attributed spend through a Smart Link"},{"content":"Compatibility endpoint returning fans with attributed spend through a Smart Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-link-tags","title":"List Smart Link Tags","url":"/api-reference/smart-links/list-smart-link-tags","structured":{"contents":[{"content":"Get tags for a specific Smart Link. This is a free endpoint."},{"content":"Get tags for a specific Smart Link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/list-smart-links","title":"List Smart Links","url":"/api-reference/smart-links/list-smart-links","structured":{"contents":[{"content":"List all Smart Links"},{"content":"List all Smart Links"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/smart-links/remove-smart-link-tags","title":"Remove Smart Link Tags","url":"/api-reference/smart-links/remove-smart-link-tags","structured":{"contents":[{"content":"Remove tags from a specific Smart Link. This is a free endpoint."},{"content":"Remove tags from a specific Smart Link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/subscription-bundles/create-bundle","title":"Create Bundle","url":"/api-reference/subscription-bundles/create-bundle","structured":{"contents":[{"content":"Create a new bundle for the account."},{"content":"Create a new bundle for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/subscription-bundles/delete-bundle","title":"Delete Bundle","url":"/api-reference/subscription-bundles/delete-bundle","structured":{"contents":[{"content":"Delete a bundle for the account."},{"content":"Delete a bundle for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/subscription-bundles/list-bundles","title":"List Bundles","url":"/api-reference/subscription-bundles/list-bundles","structured":{"contents":[{"content":"List all bundles for the account."},{"content":"List all bundles for the account."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/add-tracking-link-tags","title":"Add Tracking Link Tags","url":"/api-reference/tracking-links/add-tracking-link-tags","structured":{"contents":[{"content":"Add tags to a specific tracking link. Existing tags are preserved. This is a free endpoint."},{"content":"Add tags to a specific tracking link. Existing tags are preserved. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/tracking-links/create-tracking-link","title":"Create Tracking Link","url":"/api-reference/tracking-links/create-tracking-link","structured":{"contents":[{"content":"Create a new Tracking Link for the account"},{"content":"Create a new Tracking Link for the account"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/tracking-links/delete-tracking-link","title":"Delete Tracking Link","url":"/api-reference/tracking-links/delete-tracking-link","structured":{"contents":[{"content":"Delete a Tracking Link"},{"content":"Delete a Tracking Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/tracking-links/get-tracking-link-cohort-arps","title":"Get Tracking Link Cohort ARPS","url":"/api-reference/tracking-links/get-tracking-link-cohort-arps","structured":{"contents":[{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Tracking Link"},{"content":"Get per-link time-to-profit cohort ARPS windows for a specific Tracking Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/get-tracking-link-stats","title":"Get Tracking Link Stats","url":"/api-reference/tracking-links/get-tracking-link-stats","structured":{"contents":[{"content":"\n          Get dashboard-style summary plus daily and monthly metrics for a specific Tracking Link.\n          <Callout title='Important information'>\n            - `daily_metrics` returns **incremental per-day values**, not cumulative totals.\n            - Cumulative totals are available in the `summary` section.\n            - Historical daily data is only available from when we began recording daily link stats.\n            - Daily data can only be tracked from the date the account was connected to OnlyFans API; earlier periods are not available.\n          </Callout>"},{"content":"Get dashboard-style summary plus daily and monthly metrics for a specific Tracking Link."},{"content":"title: Important information"},{"content":"daily_metrics returns incremental per-day values, not cumulative totals."},{"content":"Cumulative totals are available in the summary section."},{"content":"Historical daily data is only available from when we began recording daily link stats."},{"content":"Daily data can only be tracked from the date the account was connected to OnlyFans API; earlier periods are not available."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/get-tracking-link","title":"Get Tracking Link","url":"/api-reference/tracking-links/get-tracking-link","structured":{"contents":[{"content":"Get individual Tracking Link details and it's revenue data"},{"content":"Get individual Tracking Link details and it's revenue data"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links","title":"Introduction","description":"Get started with our Tracking Links API","url":"/api-reference/tracking-links","structured":{"contents":[{"content":"Through our API, you are able to create and manage tracking links, as well as retrieve advanced analytics on their performance, spenders and subscribers."},{"heading":"a-note-on-our-calculation-logic-toc","content":"We take link stacking into account (e.g., multiple tracking links stacked on top of each other) and divide the revenue equally between them."},{"heading":"a-note-on-our-calculation-logic-toc","content":"We only track the fan’s spending during the period through which they have been subscribed."}],"headings":[{"id":"a-note-on-our-calculation-logic-toc","content":"A note on our calculation logic [!toc]"}]},"tag":"onlyfans"},{"_id":"/api-reference/tracking-links/list-tracking-link-spenders","title":"List Tracking Link Spenders","url":"/api-reference/tracking-links/list-tracking-link-spenders","structured":{"contents":[{"content":"Get list of spenders who made purchases through a Tracking Link"},{"content":"Get list of spenders who made purchases through a Tracking Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/list-tracking-link-subscribers","title":"List Tracking Link Subscribers","url":"/api-reference/tracking-links/list-tracking-link-subscribers","structured":{"contents":[{"content":"Get list of subscribers who joined through a Tracking Link"},{"content":"Get list of subscribers who joined through a Tracking Link"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/list-tracking-link-tags","title":"List Tracking Link Tags","url":"/api-reference/tracking-links/list-tracking-link-tags","structured":{"contents":[{"content":"Get tags for a specific tracking link. This is a free endpoint."},{"content":"Get tags for a specific tracking link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/list-tracking-links","title":"List Tracking Links","url":"/api-reference/tracking-links/list-tracking-links","structured":{"contents":[{"content":"List all tracking links for the account and revenue data"},{"content":"List all tracking links for the account and revenue data"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/tracking-links/remove-tracking-link-tags","title":"Remove Tracking Link Tags","url":"/api-reference/tracking-links/remove-tracking-link-tags","structured":{"contents":[{"content":"Remove tags from a specific tracking link. This is a free endpoint."},{"content":"Remove tags from a specific tracking link. This is a free endpoint."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/transactions/list-transactions","title":"List Transactions","url":"/api-reference/transactions/list-transactions","structured":{"contents":[{"content":"Get a paginated list of transactions for an Account. Newest transactions are first. You can filter by transaction type and tips source."},{"content":"Get a paginated list of transactions for an Account. Newest transactions are first. You can filter by transaction type and tips source."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/story-highlights/add-story-to-highlight","title":"Add Story to Highlight","url":"/api-reference/story-highlights/add-story-to-highlight","structured":{"contents":[{"content":"Add a specific story to a story highlight."},{"content":"Add a specific story to a story highlight."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PATCH"}},{"_id":"/api-reference/story-highlights/create-story-highlight","title":"Create Story Highlight","url":"/api-reference/story-highlights/create-story-highlight","structured":{"contents":[{"content":"Create a new story highlight."},{"content":"Create a new story highlight."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/story-highlights/delete-story-highlight","title":"Delete Story Highlight","url":"/api-reference/story-highlights/delete-story-highlight","structured":{"contents":[{"content":"Delete a specific story highlight by its ID."},{"content":"Delete a specific story highlight by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/story-highlights/list-story-highlights","title":"List Story Highlights","url":"/api-reference/story-highlights/list-story-highlights","structured":{"contents":[{"content":"Retrieve a list of your story highlights."},{"content":"Retrieve a list of your story highlights."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/story-highlights/remove-story-from-highlight","title":"Remove Story from Highlight","url":"/api-reference/story-highlights/remove-story-from-highlight","structured":{"contents":[{"content":"Remove a specific story from a story highlight."},{"content":"Remove a specific story from a story highlight."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/story-highlights/show-story-highlight","title":"Show Story Highlight","url":"/api-reference/story-highlights/show-story-highlight","structured":{"contents":[{"content":"Retrieve details of a specific story highlight by its ID."},{"content":"Retrieve details of a specific story highlight by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/story-highlights/update-story-highlight","title":"Update Story Highlight","url":"/api-reference/story-highlights/update-story-highlight","structured":{"contents":[{"content":"Update the details of a specific story highlight by its ID."},{"content":"Update the details of a specific story highlight by its ID."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/webhooks/create-webhook","title":"Create Webhook","url":"/api-reference/webhooks/create-webhook","structured":{"contents":[{"content":"Create a new webhook for your Team"},{"content":"Create a new webhook for your Team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/webhooks/delete-webhook","title":"Delete Webhook","url":"/api-reference/webhooks/delete-webhook","structured":{"contents":[{"content":"Delete an existing webhook"},{"content":"Delete an existing webhook"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/webhooks/list-available-events","title":"List Available Events","url":"/api-reference/webhooks/list-available-events","structured":{"contents":[{"content":"Retrieve a list of all available webhook event types"},{"content":"Retrieve a list of all available webhook event types"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/webhooks/list-webhooks","title":"List Webhooks","url":"/api-reference/webhooks/list-webhooks","structured":{"contents":[{"content":"Retrieve a list of webhooks for your Team"},{"content":"Retrieve a list of webhooks for your Team"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/webhooks/show-webhook","title":"Show Webhook","url":"/api-reference/webhooks/show-webhook","structured":{"contents":[{"content":"Retrieve details about a specific webhook"},{"content":"Retrieve details about a specific webhook"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/webhooks/update-webhook","title":"Update Webhook","url":"/api-reference/webhooks/update-webhook","structured":{"contents":[{"content":"Update an existing webhook"},{"content":"Update an existing webhook"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/users/block-user","title":"Block User","url":"/api-reference/users/block-user","structured":{"contents":[{"content":"Block user from accessing your profile."},{"content":"Block user from accessing your profile."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/users/get-user-details","title":"Get User Details","url":"/api-reference/users/get-user-details","structured":{"contents":[{"content":"Get OnlyFans Profile details for a given username. User details are retrieved using the current `{account}` so fields like `subscribedOnData` which include potential subscription details will be included."},{"content":"Get OnlyFans Profile details for a given username. User details are retrieved using the current {account} so fields like subscribedOnData which include potential subscription details will be included."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/users/mass-list-user-details","title":"Mass-List User Details","url":"/api-reference/users/mass-list-user-details","structured":{"contents":[{"content":"Save on credits by getting up to 10 user details with a single request. User details are retrieved using the current `{account}` so fields like `subscribedOnData` which include potential subscription details will be included."},{"content":"Save on credits by getting up to 10 user details with a single request. User details are retrieved using the current {account} so fields like subscribedOnData which include potential subscription details will be included."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/users/restrict-user","title":"Restrict User","url":"/api-reference/users/restrict-user","structured":{"contents":[{"content":"Restrict a user. You will not see messages or comments from this them."},{"content":"Restrict a user. You will not see messages or comments from this them."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/users/subscribe-to-user","title":"Subscribe to User","url":"/api-reference/users/subscribe-to-user","structured":{"contents":[{"content":"Subscribe to a user's profile."},{"content":"Subscribe to a user's profile."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/users/unblock-user","title":"Unblock User","url":"/api-reference/users/unblock-user","structured":{"contents":[{"content":"Unblock a previously blocked user."},{"content":"Unblock a previously blocked user."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/users/unrestrict-user","title":"Unrestrict User","url":"/api-reference/users/unrestrict-user","structured":{"contents":[{"content":"Unrestrict a previously restricted user. You will start seeing messages and comments from them again."},{"content":"Unrestrict a previously restricted user. You will start seeing messages and comments from them again."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/users/unsubscribe-from-user","title":"Unsubscribe from User","url":"/api-reference/users/unsubscribe-from-user","structured":{"contents":[{"content":"Unsubscribe from a user's profile."},{"content":"Unsubscribe from a user's profile."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/integrations/make/example-scenarios","title":"Example scenarios","description":"We've prepared a few common example scenarios for you. Please choose one of the following to get started:","url":"/integrations/make/example-scenarios","structured":{"contents":[{"content":"Learn how to easily synchronize Tracking Link Data from your OnlyFans accounts to Airtable."},{"content":"Learn how to easily synchronize Transaction Data from your OnlyFans accounts to Airtable."}],"headings":[]}},{"_id":"/integrations/make/example-scenarios/tracking-links-airtable","title":"[Airtable] Tracking links","description":"Learn how to easily synchronize Tracking Link Data from your OnlyFans accounts to Airtable.","url":"/integrations/make/example-scenarios/tracking-links-airtable","structured":{"contents":[{"content":"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."},{"heading":"create-a-base-on-airtable","content":"Go to Airtable and create a base. You can name it \"OnlyFans API\", or anything else that will help you identify it later."},{"heading":"create-a-table-within-your-base","content":"Within the base, create a table named \"Tracking links\". Give the table the following fields:"},{"heading":"create-a-table-within-your-base","content":"ID (primary) - Single line text"},{"heading":"create-a-table-within-your-base","content":"Campaign code - Single line text"},{"heading":"create-a-table-within-your-base","content":"Campaign URL - URL"},{"heading":"create-a-table-within-your-base","content":"Clicks count - Number"},{"heading":"create-a-table-within-your-base","content":"Subscriber count - Number"},{"heading":"create-a-table-within-your-base","content":"Total revenue - Currency"},{"heading":"create-a-table-within-your-base","content":"Your table should now look like this:"},{"heading":"add-our-list-accounts-module","content":"If you don't see this module, make sure to click on \"Show more\"."},{"heading":"add-our-list-tracking-links-module","content":"After adding \"List Tracking Links\" module, you will be asked to provide an \"Account ID\".\nSimply 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\"."},{"heading":"add-the-airtable-create-a-record-module","content":"If you don't see this module, make sure to click on \"Show more\"."},{"heading":"map-the-fields","content":"Now, let's map the OnlyFans API module fields to your Airtable's table fields. Make sure to click on \"Save\".\nIf you've done it correctly, your scenario should look like this:"},{"heading":"finally-schedule-and-run-the-scenario","content":"You can set a schedule time, and then run it manually with the \"Run once\" button to see if everything works correctly."},{"heading":"finally-schedule-and-run-the-scenario","content":"If it does, you will see the tracking link data of all your accounts appear in your Airtable table, like so:"},{"heading":"finally-schedule-and-run-the-scenario","content":"title: That's it!"},{"heading":"finally-schedule-and-run-the-scenario","content":"The tracking link data of all of your connected OnlyFans accounts will now automatically be updated in Airtable."},{"heading":"finally-schedule-and-run-the-scenario","content":"Of course, you can further customize this scenario for a more advanced setup."}],"headings":[{"id":"create-a-base-on-airtable","content":"Create a base on Airtable"},{"id":"create-a-table-within-your-base","content":"Create a table within your base"},{"id":"add-our-list-accounts-module","content":"Add our \"List Accounts\" module"},{"id":"add-our-list-tracking-links-module","content":"Add our \"List Tracking Links\" module"},{"id":"add-the-airtable-create-a-record-module","content":"Add the Airtable \"Create a Record\" module"},{"id":"connect-your-airtable-account-and-select-the-correct-base-and-table","content":"Connect your Airtable account, and select the correct Base and Table"},{"id":"map-the-fields","content":"Map the fields"},{"id":"finally-schedule-and-run-the-scenario","content":"Finally, schedule and run the scenario!"}]}},{"_id":"/integrations/make/example-scenarios/transaction-data-airtable","title":"[Airtable] Tracking links","description":"Learn how to easily synchronize Transaction Data from your OnlyFans accounts to Airtable.","url":"/integrations/make/example-scenarios/transaction-data-airtable","structured":{"contents":[{"content":"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."},{"heading":"create-a-base-on-airtable","content":"Go to Airtable and create a base. You can name it \"OnlyFans API\", or anything else that will help you identify it later."},{"heading":"create-a-table-within-your-base","content":"Within the base, create a table named \"Transaction data\". Give the table the following fields:"},{"heading":"create-a-table-within-your-base","content":"Transaction ID (primary) - Single line text"},{"heading":"create-a-table-within-your-base","content":"Account name - Single line text"},{"heading":"create-a-table-within-your-base","content":"Amount - Currency"},{"heading":"create-a-table-within-your-base","content":"Net amount - Currency"},{"heading":"create-a-table-within-your-base","content":"Your table should now look like this:"},{"heading":"add-our-list-transactions-module","content":"You will be asked to provide an \"Account ID\".\nSimply click on the field, and drag the \"ID\" from the left card into the field. Afterwards, choose a start date like \"-30 days\"."},{"heading":"add-our-list-transactions-module","content":"Afterwards, make sure to click on \"Save\"."},{"heading":"add-the-airtable-create-a-record-module","content":"If you don't see this module, make sure to click on \"Show more\"."},{"heading":"map-the-fields","content":"Now, let's map the OnlyFans API module fields to your Airtable's table fields. Make sure to click on \"Save\".\nIf you've done it correctly, your scenario should look like this:"},{"heading":"finally-schedule-and-run-the-scenario","content":"You can set a schedule time, and then run it manually with the \"Run once\" button to see if everything works correctly."},{"heading":"finally-schedule-and-run-the-scenario","content":"If it does, you will see the tracking link data of all your accounts appear in your Airtable table, like so:"},{"heading":"finally-schedule-and-run-the-scenario","content":"title: That's it!"},{"heading":"finally-schedule-and-run-the-scenario","content":"The transaction data of all of your connected OnlyFans accounts will now automatically be updated in Airtable."},{"heading":"finally-schedule-and-run-the-scenario","content":"Of course, you can further customize this scenario for a more advanced setup."}],"headings":[{"id":"create-a-base-on-airtable","content":"Create a base on Airtable"},{"id":"create-a-table-within-your-base","content":"Create a table within your base"},{"id":"add-our-list-accounts-module","content":"Add our \"List Accounts\" module"},{"id":"add-our-list-transactions-module","content":"Add our \"List Transactions\" module"},{"id":"add-the-airtable-create-a-record-module","content":"Add the Airtable \"Create a Record\" module"},{"id":"connect-your-airtable-account-and-select-the-correct-base-and-table","content":"Connect your Airtable account, and select the correct Base and Table"},{"id":"map-the-fields","content":"Map the fields"},{"id":"finally-schedule-and-run-the-scenario","content":"Finally, schedule and run the scenario!"}]}},{"_id":"/api-reference/user-list-collections/add-users-to-user-list","title":"Add Users to User List","url":"/api-reference/user-list-collections/add-users-to-user-list","structured":{"contents":[{"content":"Add multiple Users To OnlyFans User List"},{"content":"Add multiple Users To OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/user-list-collections/clear-user-list","title":"Clear User List","url":"/api-reference/user-list-collections/clear-user-list","structured":{"contents":[{"content":"Remove all users from a OnlyFans User List"},{"content":"Remove all users from a OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/user-list-collections/create-user-list","title":"Create User List","url":"/api-reference/user-list-collections/create-user-list","structured":{"contents":[{"content":"Create a OnlyFans User List"},{"content":"Create a OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/user-list-collections/delete-user-list","title":"Delete User List","url":"/api-reference/user-list-collections/delete-user-list","structured":{"contents":[{"content":"Delete a OnlyFans User List"},{"content":"Delete a OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/user-list-collections/get-user-list","title":"Get User List","url":"/api-reference/user-list-collections/get-user-list","structured":{"contents":[{"content":"Get a user list"},{"content":"Get a user list"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/user-list-collections/list-pinned-users-in-user-list","title":"List Pinned Users in User List","url":"/api-reference/user-list-collections/list-pinned-users-in-user-list","structured":{"contents":[{"content":"Get pinned users from an OnlyFans User List."},{"content":"Get pinned users from an OnlyFans User List."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/user-list-collections/list-user-list-users","title":"List User List Users","url":"/api-reference/user-list-collections/list-user-list-users","structured":{"contents":[{"content":"Get all users in a OnlyFans User List"},{"content":"Get all users in a OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/user-list-collections/list-user-lists","title":"List User Lists","url":"/api-reference/user-list-collections/list-user-lists","structured":{"contents":[{"content":"Get a list of OnlyFans Collections - User Lists"},{"content":"Get a list of OnlyFans Collections - User Lists"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"GET"}},{"_id":"/api-reference/user-list-collections/pin-unpin-user-in-user-list","title":"Pin/Unpin User in User List","url":"/api-reference/user-list-collections/pin-unpin-user-in-user-list","structured":{"contents":[{"content":"Pin a user in any OnlyFans user list."},{"content":"Pin a user in any OnlyFans user list."}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"POST"}},{"_id":"/api-reference/user-list-collections/remove-user-from-a-user-list","title":"Remove User from a User List","url":"/api-reference/user-list-collections/remove-user-from-a-user-list","structured":{"contents":[{"content":"Remove User from OnlyFans User List"},{"content":"Remove User from OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/user-list-collections/update-user-list","title":"Update User List","url":"/api-reference/user-list-collections/update-user-list","structured":{"contents":[{"content":"Update a OnlyFans User List"},{"content":"Update a OnlyFans User List"}],"headings":[]},"tag":"onlyfans","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/account/disconnect-account","title":"Disconnect Account","url":"/api-reference/fansly/account/disconnect-account","structured":{"contents":[{"content":"Disconnect a Fansly account."},{"content":"Disconnect a Fansly account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/account/list-accounts","title":"List Accounts","url":"/api-reference/fansly/account/list-accounts","structured":{"contents":[{"content":"List all connected Fansly accounts."},{"content":"List all connected Fansly accounts."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/chat-messages/acknowledge-chat-messages","title":"Acknowledge Chat Messages","url":"/api-reference/fansly/chat-messages/acknowledge-chat-messages","structured":{"contents":[{"content":"Acknowledge one or more messages. Type 1 = delivered, 2 = read, 3 = read and delivered, 4 = unread. Up to 25 message IDs may be sent per request."},{"content":"Acknowledge one or more messages. Type 1 = delivered, 2 = read, 3 = read and delivered, 4 = unread. Up to 25 message IDs may be sent per request."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chat-messages/add-reaction-to-chat-message","title":"Add Reaction to Chat Message","url":"/api-reference/fansly/chat-messages/add-reaction-to-chat-message","structured":{"contents":[{"content":"Add an emoji reaction to a chat message. Multiple reaction types can coexist on a single message."},{"content":"Add an emoji reaction to a chat message. Multiple reaction types can coexist on a single message."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chat-messages/delete-chat-message","title":"Delete Chat Message","url":"/api-reference/fansly/chat-messages/delete-chat-message","structured":{"contents":[{"content":"Delete one of your own messages from a chat (messaging group)."},{"content":"Delete one of your own messages from a chat (messaging group)."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/chat-messages/list-chat-messages","title":"List Chat Messages","url":"/api-reference/fansly/chat-messages/list-chat-messages","structured":{"contents":[{"content":"Get the messages for a specific chat. The response also includes aggregated content referenced from the messages — `accountMedia`, `accountMediaBundles`, `tips`, `tipGoals`, `accountMediaOrders`, `stories`, `storyOrders`."},{"content":"Get the messages for a specific chat. The response also includes aggregated content referenced from the messages — accountMedia, accountMediaBundles, tips, tipGoals, accountMediaOrders, stories, storyOrders."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/chat-messages/remove-reaction-from-chat-message","title":"Remove Reaction from Chat Message","url":"/api-reference/fansly/chat-messages/remove-reaction-from-chat-message","structured":{"contents":[{"content":"Remove a previously-added emoji reaction from a chat message."},{"content":"Remove a previously-added emoji reaction from a chat message."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/chat-messages/send-chat-message","title":"Send Chat Message","url":"/api-reference/fansly/chat-messages/send-chat-message","structured":{"contents":[{"content":"Send a new message to a chat (messaging group). Provide `text`, one or more media IDs in `mediaFiles`, or both. Media must first be uploaded via the Upload Media endpoint (use the returned `fansly_media_` ID)."},{"content":"Send a new message to a chat (messaging group). Provide text, one or more media IDs in mediaFiles, or both. Media must first be uploaded via the Upload Media endpoint (use the returned fansly_media_ ID)."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/create-chat","title":"Create Chat","url":"/api-reference/fansly/chats/create-chat","structured":{"contents":[{"content":"Start a new chat (messaging group) with a Fansly user. Returns the created chat, including its `id` to use with the message endpoints. If a chat with this user already exists, Fansly returns the existing one."},{"content":"Start a new chat (messaging group) with a Fansly user. Returns the created chat, including its id to use with the message endpoints. If a chat with this user already exists, Fansly returns the existing one."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/disable-chat-read-receipts","title":"Disable Chat Read Receipts","url":"/api-reference/fansly/chats/disable-chat-read-receipts","structured":{"contents":[{"content":"Disable sending read receipts for a specific Fansly chat."},{"content":"Disable sending read receipts for a specific Fansly chat."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/enable-chat-read-receipts","title":"Enable Chat Read Receipts","url":"/api-reference/fansly/chats/enable-chat-read-receipts","structured":{"contents":[{"content":"Enable sending read receipts for a specific Fansly chat."},{"content":"Enable sending read receipts for a specific Fansly chat."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/hide-chat","title":"Hide Chat","url":"/api-reference/fansly/chats/hide-chat","structured":{"contents":[{"content":"Hide a specific chat from the Fansly chat list."},{"content":"Hide a specific chat from the Fansly chat list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/list-chats","title":"List Chats","url":"/api-reference/fansly/chats/list-chats","structured":{"contents":[{"content":"Get the list of chats (messaging groups) for a Fansly Account."},{"content":"Get the list of chats (messaging groups) for a Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/chats/mark-all-chats-as-read","title":"Mark All Chats as Read","url":"/api-reference/fansly/chats/mark-all-chats-as-read","structured":{"contents":[{"content":"Mark all chats as read for the Fansly Account."},{"content":"Mark all chats as read for the Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/chats/show-chat","title":"Show Chat","url":"/api-reference/fansly/chats/show-chat","structured":{"contents":[{"content":"Get the details of a specific chat (messaging group): members, permission flags, last message preview, and DM permissions."},{"content":"Get the details of a specific chat (messaging group): members, permission flags, last message preview, and DM permissions."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/chats/start-typing-indicator","title":"Start Typing Indicator","url":"/api-reference/fansly/chats/start-typing-indicator","structured":{"contents":[{"content":"Calling this endpoint will show the target fan a \"Model is typing...\" note in the chat for ~3 seconds. If you want to continue showing the indicator, call this endpoint multiple times. Free - no credits charged."},{"content":"Calling this endpoint will show the target fan a \"Model is typing...\" note in the chat for ~3 seconds. If you want to continue showing the indicator, call this endpoint multiple times. Free - no credits charged."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/connect-fansly-account/poll-authentication-status","title":"Poll Authentication Status","url":"/api-reference/fansly/connect-fansly-account/poll-authentication-status","structured":{"contents":[{"content":"Poll the status of a Fansly authentication process. When verification is required, `needs_code` is `true` and `twofa_type` indicates whether the code comes from the creator's email (`2`) or authenticator app (`0`). Submit the code via the Submit 2FA endpoint."},{"content":"Poll the status of a Fansly authentication process. When verification is required, needs_code is true and twofa_type indicates whether the code comes from the creator's email (2) or authenticator app (0). Submit the code via the Submit 2FA endpoint."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/connect-fansly-account/re-authenticate-account","title":"Re-authenticate Account","url":"/api-reference/fansly/connect-fansly-account/re-authenticate-account","structured":{"contents":[{"content":"Trigger re-authentication for an existing Fansly account without re-submitting the username & password. Uses the credentials stored when the account was first connected."},{"content":"Trigger re-authentication for an existing Fansly account without re-submitting the username & password. Uses the credentials stored when the account was first connected."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/connect-fansly-account/start-authentication","title":"Start Authentication","url":"/api-reference/fansly/connect-fansly-account/start-authentication","structured":{"contents":[{"content":"Start the authentication process for a new Fansly account using the account's username (or email) and password. If Fansly requires verification, the response status will indicate a pending challenge — either an emailed code (new IP) or an authenticator-app code — which you submit via the Submit 2FA endpoint. Credentials are stored securely and encrypted at rest."},{"content":"Start the authentication process for a new Fansly account using the account's username (or email) and password. If Fansly requires verification, the response status will indicate a pending challenge — either an emailed code (new IP) or an authenticator-app code — which you submit via the Submit 2FA endpoint. Credentials are stored securely and encrypted at rest."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/connect-fansly-account/submit2fa","title":"Submit 2FA","url":"/api-reference/fansly/connect-fansly-account/submit2fa","structured":{"contents":[{"content":"Submit the verification code for a pending Fansly challenge (emailed new-IP code or authenticator-app code). If the code is invalid the challenge remains in place so you can retry."},{"content":"Submit the verification code for a pending Fansly challenge (emailed new-IP code or authenticator-app code). If the code is invalid the challenge remains in place so you can retry."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/earnings/get-earnings-stats","title":"Get Earnings Stats","url":"/api-reference/fansly/earnings/get-earnings-stats","structured":{"contents":[{"content":"Get earnings aggregated by transaction type over a date range."},{"content":"Get earnings aggregated by transaction type over a date range."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/earnings/get-pending-earnings","title":"Get Pending Earnings","url":"/api-reference/fansly/earnings/get-pending-earnings","structured":{"contents":[{"content":"Get the current pending balance. Funds are pending for 7 days from the day they are received and unlock on a rolling basis."},{"content":"Get the current pending balance. Funds are pending for 7 days from the day they are received and unlock on a rolling basis."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/earnings/list-monthly-earnings","title":"List Monthly Earnings","url":"/api-reference/fansly/earnings/list-monthly-earnings","structured":{"contents":[{"content":"Get monthly earnings (\"Statements\" in the Fansly Creator Dashboard). The first entry is a rolling 30-day summary, followed by per-calendar-month totals with gross/net revenue and top-performer percentile."},{"content":"Get monthly earnings (\"Statements\" in the Fansly Creator Dashboard). The first entry is a rolling 30-day summary, followed by per-calendar-month totals with gross/net revenue and top-performer percentile."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/earnings/list-payout-requests","title":"List Payout Requests","url":"/api-reference/fansly/earnings/list-payout-requests","structured":{"contents":[{"content":"Get the list of submitted payout requests with amount, status, and timestamps."},{"content":"Get the list of submitted payout requests with amount, status, and timestamps."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/earnings/list-wallet-transactions","title":"List Wallet Transactions","url":"/api-reference/fansly/earnings/list-wallet-transactions","structured":{"contents":[{"content":"Get the transaction ledger (\"Wallet History\" in the Fansly Creator Dashboard) — every earnings event with running balance and timestamps."},{"content":"Get the transaction ledger (\"Wallet History\" in the Fansly Creator Dashboard) — every earnings event with running balance and timestamps."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/earnings/list-wallets","title":"List Wallets","url":"/api-reference/fansly/earnings/list-wallets","structured":{"contents":[{"content":"Get all wallets for the Fansly Account. Type 1 is the standard wallet; type 2 is \"Available for Payout\" (always present for creators)."},{"content":"Get all wallets for the Fansly Account. Type 1 is the standard wallet; type 2 is \"Available for Payout\" (always present for creators)."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/lists/add-users-to-list","title":"Add Users to List","url":"/api-reference/fansly/lists/add-users-to-list","structured":{"contents":[{"content":"Add one or more users/subscribers to a list."},{"content":"Add one or more users/subscribers to a list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/lists/create-list","title":"Create List","url":"/api-reference/fansly/lists/create-list","structured":{"contents":[{"content":"Create a new subscriber/fan list."},{"content":"Create a new subscriber/fan list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/lists/delete-list","title":"Delete List","url":"/api-reference/fansly/lists/delete-list","structured":{"contents":[{"content":"Delete a list."},{"content":"Delete a list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/lists/list-items-in-list","title":"List Items in List","url":"/api-reference/fansly/lists/list-items-in-list","structured":{"contents":[{"content":"Get the items (users/subscribers) in a list."},{"content":"Get the items (users/subscribers) in a list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/lists/list-lists","title":"List Lists","url":"/api-reference/fansly/lists/list-lists","structured":{"contents":[{"content":"Get all subscriber/fan lists configured on the Fansly Account."},{"content":"Get all subscriber/fan lists configured on the Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/lists/remove-user-from-list","title":"Remove User from List","url":"/api-reference/fansly/lists/remove-user-from-list","structured":{"contents":[{"content":"Remove a user/subscriber from a list."},{"content":"Remove a user/subscriber from a list."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/lists/remove-users-from-list","title":"Remove Users from List","url":"/api-reference/fansly/lists/remove-users-from-list","structured":{"contents":[{"content":"Remove one or more users/subscribers from a list in a single request."},{"content":"Remove one or more users/subscribers from a list in a single request."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/lists/reorder-lists","title":"Reorder Lists","url":"/api-reference/fansly/lists/reorder-lists","structured":{"contents":[{"content":"Move a list from one position to another. Positions are zero-based, matching the Fansly Dashboard order."},{"content":"Move a list from one position to another. Positions are zero-based, matching the Fansly Dashboard order."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/lists/update-list","title":"Update List","url":"/api-reference/fansly/lists/update-list","structured":{"contents":[{"content":"Update an existing list's label (and optionally type). To reorder lists, use the **Reorder Lists** endpoint."},{"content":"Update an existing list's label (and optionally type). To reorder lists, use the Reorder Lists endpoint."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/media/get-account-media","title":"Get Account Media","url":"/api-reference/fansly/media/get-account-media","structured":{"contents":[{"content":"Fetch one or more registered accountMedia by ID (e.g. an `id` returned when attaching media to a message). Each item includes the full `media` object with variants and CDN `locations`. For video, poll this until `media.status` is `1` (transcode complete) — the playable variants and `locations` populate once processing finishes. Pass a single ID or a comma-separated list; bulk requests still cost one API credit."},{"content":"Fetch one or more registered accountMedia by ID (e.g. an id returned when attaching media to a message). Each item includes the full media object with variants and CDN locations. For video, poll this until media.status is 1 (transcode complete) — the playable variants and locations populate once processing finishes. Pass a single ID or a comma-separated list; bulk requests still cost one API credit."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/media/get-upload-status","title":"Get Upload Status","url":"/api-reference/fansly/media/get-upload-status","structured":{"contents":[{"content":"Check the status of an async Fansly media upload. Poll until status is `completed` or `failed`. This endpoint is free and does not cost any credits.\n\n**Possible statuses:**\n- `pending` — Upload is queued\n- `processing` — Upload in progress\n- `completed` — Upload finished, `media_id` and `media` are included\n- `failed` — Upload failed, `error` is included"},{"content":"Check the status of an async Fansly media upload. Poll until status is completed or failed. This endpoint is free and does not cost any credits."},{"content":"Possible statuses:"},{"content":"pending — Upload is queued"},{"content":"processing — Upload in progress"},{"content":"completed — Upload finished, media_id and media are included"},{"content":"failed — Upload failed, error is included"}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/media/upload-media","title":"Upload Media","url":"/api-reference/fansly/media/upload-media","structured":{"contents":[{"content":"Upload a file to Fansly and receive a reusable `fansly_media_` ID that can be attached to chat messages (and, later, posts). Provide either `file` or `file_url`. Credits are charged per megabyte uploaded."},{"content":"Upload a file to Fansly and receive a reusable fansly_media_ ID that can be attached to chat messages (and, later, posts). Provide either file or file_url. Credits are charged per megabyte uploaded."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/followers/list-followers","title":"List Followers","url":"/api-reference/fansly/followers/list-followers","structured":{"contents":[{"content":"Get the list of followers for a Fansly Account. Followers are accounts that have followed (but not necessarily subscribed to) the creator."},{"content":"Get the list of followers for a Fansly Account. Followers are accounts that have followed (but not necessarily subscribed to) the creator."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/profile-statistics/get-insights","title":"Get Insights","url":"/api-reference/fansly/profile-statistics/get-insights","structured":{"contents":[{"content":"Get viewer engagement insights for the Fansly Account — views, interaction time, unique viewers, and video stats — bucketed by the granularity of the chosen range."},{"content":"Get viewer engagement insights for the Fansly Account — views, interaction time, unique viewers, and video stats — bucketed by the granularity of the chosen range."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/subscribers/list-subscribers","title":"List Subscribers","url":"/api-reference/fansly/subscribers/list-subscribers","structured":{"contents":[{"content":"Get the list of subscribers for a Fansly Account, including their subscription tier, price, billing cycle, and lifecycle timestamps."},{"content":"Get the list of subscribers for a Fansly Account, including their subscription tier, price, billing cycle, and lifecycle timestamps."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/subscribers/list-subscription-tiers","title":"List Subscription Tiers","url":"/api-reference/fansly/subscribers/list-subscription-tiers","structured":{"contents":[{"content":"Get all subscription tiers configured on the Fansly Account, including pricing plans and benefits. Tier IDs from this endpoint can be used as the `subscription_tier_id` filter on the **List Subscribers** endpoint."},{"content":"Get all subscription tiers configured on the Fansly Account, including pricing plans and benefits. Tier IDs from this endpoint can be used as the subscription_tier_id filter on the List Subscribers endpoint."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/top-supporters/get-top-supporter-breakdown","title":"Get Top Supporter Breakdown","url":"/api-reference/fansly/top-supporters/get-top-supporter-breakdown","structured":{"contents":[{"content":"Get earnings broken down by transaction type for a specific supporter, showing how they contributed revenue within a date range."},{"content":"Get earnings broken down by transaction type for a specific supporter, showing how they contributed revenue within a date range."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/top-supporters/list-top-supporters","title":"List Top Supporters","url":"/api-reference/fansly/top-supporters/list-top-supporters","structured":{"contents":[{"content":"Get supporters ranked by total revenue contribution within a date range, with gross/net totals."},{"content":"Get supporters ranked by total revenue contribution within a date range, with gross/net totals."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/subscription-discounts/create-subscription-discount","title":"Create Subscription Discount","url":"/api-reference/fansly/subscription-discounts/create-subscription-discount","structured":{"contents":[{"content":"Create a new subscription discount (gift link)."},{"content":"Create a new subscription discount (gift link)."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/subscription-discounts/disable-subscription-discount","title":"Disable Subscription Discount","url":"/api-reference/fansly/subscription-discounts/disable-subscription-discount","structured":{"contents":[{"content":"Disable (deactivate) a subscription discount. It can be re-enabled later with the **Enable Subscription Discount** endpoint."},{"content":"Disable (deactivate) a subscription discount. It can be re-enabled later with the Enable Subscription Discount endpoint."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/subscription-discounts/enable-subscription-discount","title":"Enable Subscription Discount","url":"/api-reference/fansly/subscription-discounts/enable-subscription-discount","structured":{"contents":[{"content":"Re-enable a previously disabled subscription discount."},{"content":"Re-enable a previously disabled subscription discount."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/subscription-discounts/list-subscription-discounts","title":"List Subscription Discounts","url":"/api-reference/fansly/subscription-discounts/list-subscription-discounts","structured":{"contents":[{"content":"Get all subscription discounts (gift links) configured on the Fansly Account."},{"content":"Get all subscription discounts (gift links) configured on the Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/subscription-discounts/update-subscription-discount","title":"Update Subscription Discount","url":"/api-reference/fansly/subscription-discounts/update-subscription-discount","structured":{"contents":[{"content":"Update an existing subscription discount (gift link). Same body and validation as **Create Subscription Discount**."},{"content":"Update an existing subscription discount (gift link). Same body and validation as Create Subscription Discount."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/tracking-links/create-tracking-link","title":"Create Tracking Link","url":"/api-reference/fansly/tracking-links/create-tracking-link","structured":{"contents":[{"content":"Create a new tracking link."},{"content":"Create a new tracking link."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/tracking-links/delete-tracking-link","title":"Delete Tracking Link","url":"/api-reference/fansly/tracking-links/delete-tracking-link","structured":{"contents":[{"content":"Delete a tracking link."},{"content":"Delete a tracking link."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/tracking-links/get-tracking-link-revenue-stats","title":"Get Tracking Link Revenue Stats","url":"/api-reference/fansly/tracking-links/get-tracking-link-revenue-stats","structured":{"contents":[{"content":"Get daily revenue (gross + net) for a tracking link over a date range."},{"content":"Get daily revenue (gross + net) for a tracking link over a date range."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/tracking-links/get-tracking-link-stats","title":"Get Tracking Link Stats","url":"/api-reference/fansly/tracking-links/get-tracking-link-stats","structured":{"contents":[{"content":"Get daily engagement metrics (clicks, claims, follows, subscriptions) for a tracking link over a date range."},{"content":"Get daily engagement metrics (clicks, claims, follows, subscriptions) for a tracking link over a date range."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/tracking-links/list-tracking-links","title":"List Tracking Links","url":"/api-reference/fansly/tracking-links/list-tracking-links","structured":{"contents":[{"content":"Get all tracking links for the Fansly Account, with aggregate counts for clicks, claims, follows, subscriptions, and revenue totals."},{"content":"Get all tracking links for the Fansly Account, with aggregate counts for clicks, claims, follows, subscriptions, and revenue totals."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/tracking-links/update-tracking-link","title":"Update Tracking Link","url":"/api-reference/fansly/tracking-links/update-tracking-link","structured":{"contents":[{"content":"Update an existing tracking link's label and description."},{"content":"Update an existing tracking link's label and description."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/users/block-user","title":"Block User","url":"/api-reference/fansly/users/block-user","structured":{"contents":[{"content":"Block a Fansly user for the authenticated Fansly Account."},{"content":"Block a Fansly user for the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/users/create-user-note","title":"Create User Note","url":"/api-reference/fansly/users/create-user-note","structured":{"contents":[{"content":"Create a Fansly note for a user."},{"content":"Create a Fansly note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/users/delete-user-custom-name","title":"Delete User Custom Name","url":"/api-reference/fansly/users/delete-user-custom-name","structured":{"contents":[{"content":"Delete an existing Fansly custom-name note for a user."},{"content":"Delete an existing Fansly custom-name note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/users/delete-user-note","title":"Delete User Note","url":"/api-reference/fansly/users/delete-user-note","structured":{"contents":[{"content":"Delete an existing Fansly note for a user."},{"content":"Delete an existing Fansly note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/users/edit-user-custom-name","title":"Edit User Custom Name","url":"/api-reference/fansly/users/edit-user-custom-name","structured":{"contents":[{"content":"Edit an existing Fansly custom-name note for a user."},{"content":"Edit an existing Fansly custom-name note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/users/edit-user-note","title":"Edit User Note","url":"/api-reference/fansly/users/edit-user-note","structured":{"contents":[{"content":"Edit an existing Fansly note for a user."},{"content":"Edit an existing Fansly note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"PUT"}},{"_id":"/api-reference/fansly/users/follow-user","title":"Follow User","url":"/api-reference/fansly/users/follow-user","structured":{"contents":[{"content":"Follow a Fansly user from the authenticated Fansly Account."},{"content":"Follow a Fansly user from the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/users/get-user-details","title":"Get User Details","url":"/api-reference/fansly/users/get-user-details","structured":{"contents":[{"content":"Get Fansly profile details for one or more usernames. Pass a single username or a comma-separated list to fetch multiple profiles in a single call — bulk requests still only cost one API credit."},{"content":"Get Fansly profile details for one or more usernames. Pass a single username or a comma-separated list to fetch multiple profiles in a single call — bulk requests still only cost one API credit."}],"headings":[]},"tag":"fansly","extra_data":{"method":"GET"}},{"_id":"/api-reference/fansly/users/mute-user","title":"Mute User","url":"/api-reference/fansly/users/mute-user","structured":{"contents":[{"content":"Mute a Fansly user for the authenticated Fansly Account."},{"content":"Mute a Fansly user for the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/users/set-user-custom-name","title":"Set User Custom Name","url":"/api-reference/fansly/users/set-user-custom-name","structured":{"contents":[{"content":"Create a Fansly custom-name note for a user."},{"content":"Create a Fansly custom-name note for a user."}],"headings":[]},"tag":"fansly","extra_data":{"method":"POST"}},{"_id":"/api-reference/fansly/users/unblock-user","title":"Unblock User","url":"/api-reference/fansly/users/unblock-user","structured":{"contents":[{"content":"Unblock a Fansly user for the authenticated Fansly Account."},{"content":"Unblock a Fansly user for the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/users/unfollow-user","title":"Unfollow User","url":"/api-reference/fansly/users/unfollow-user","structured":{"contents":[{"content":"Unfollow a Fansly user from the authenticated Fansly Account."},{"content":"Unfollow a Fansly user from the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}},{"_id":"/api-reference/fansly/users/unmute-user","title":"Unmute User","url":"/api-reference/fansly/users/unmute-user","structured":{"contents":[{"content":"Unmute a Fansly user for the authenticated Fansly Account."},{"content":"Unmute a Fansly user for the authenticated Fansly Account."}],"headings":[]},"tag":"fansly","extra_data":{"method":"DELETE"}}]