# Need to sell pay-per-views? The 2fans API has you covered A turnkey PPV API for chat CRMs: connect 2fans and send pay-per-view drops, tips and subscriptions in Telegram or any chat. Creators keep 85%, and approved apps earn 5% of the sales they bring in. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## The facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **White label** | Build your own chat, dashboards and sign-up. For creators you onboard, sign-in, terms and ID check pages and emails can carry your brand. Pay-per-view links and content stay on 2fans. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Buyers** | No account needed. They pay by card, Apple Pay or Google Pay and unlock instantly. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **Moderation** | Content moderation is automated and handled by 2fans infrastructure. API uploads use the same pipeline as the dashboard, so PENDING is a normal response. | | **Personal key** | Generate one in the dashboard once you’ve submitted the ID check, with no approval step. 60 requests a minute, 5,000 a day. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | | **API** | REST and JSON, with an OpenAPI 3.1 spec, llms.txt, Markdown docs and signed webhooks (webhooks need an approved app). | | **Testing** | No sandbox or test card. Test on a creator account you control with free drops (price: 0). | ## Built for - CRMs and chat tools for creators and agencies - Agencies and chat teams selling pay-per-view - Telegram, WhatsApp and DM sellers who need a paid link to send - Telegram channels with paying subscribers ## Not for - Taking payments for other businesses, your own products or anything not hosted on 2fans: buyers always pay on the 2fans checkout, and the content lives on 2fans - Selling credits for your own app or AI chat product - Gambling, physical goods or services ## Already integrated - [KVIQA](https://kviqa.com): a CRM for Telegram and WhatsApp sellers - [Telestars](https://telestars.io): a Telegram sales CRM - [CRMChat](https://crmchat.ai): a Telegram CRM and outreach platform ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` ## Start here 1. Sign up at [2fans.io](https://2fans.io/signup) and complete creator verification. 2. Upload at least one item to your vault, then generate a Personal key under Vault → API Connect. 3. Create a drop with [POST /drops](https://2fans.io/developers/guides/sell-a-drop). The response includes the pay-per-view link to send to a buyer. 4. Building for other people’s creators? [Apply for app access](https://2fans.io/developers/apply). ## Common questions - [PPV API for creator CRMs and agencies](https://2fans.dev/ppv-api-for-crms.md): A turnkey pay-per-view API for chat CRMs: send paid links and locked media from your inbox, act for many creators, get signed webhooks and earn 5% on sales through your links. - [Do I need a merchant account to add PPV to my CRM?](https://2fans.dev/do-i-need-a-merchant-account-for-ppv.md): Not if you’re adding pay-per-view for creators: integrate the 2fans API and be selling today, without waiting 6 to 12 months for your own contract. Your own products still need one. - [No processing history? Sell first, apply later](https://2fans.dev/no-processing-history.md): With no processing history, you can start selling PPV through 2fans and build real sales numbers before you apply for your own adult merchant account. - [Telegram Stars alternative for PPV](https://2fans.dev/telegram-stars-alternative.md): Stars pays developers about $0.013 per Star after a hold. For PPV and subscriptions, send a 2fans link in the chat instead: creators keep 85%, and the buyer pays on the web checkout. - [PPV links for WhatsApp, iMessage and SMS](https://2fans.dev/ppv-whatsapp-imessage-sms.md): A 2fans pay-per-view link is a normal URL, so it works in WhatsApp, iMessage, SMS and DMs. The buyer taps it, pays on the 2fans checkout and unlocks the content. - [White-label PPV API for creator CRMs](https://2fans.dev/white-label-ppv-api.md): Keep your CRM’s look: your chat, dashboards and sign-up, with your brand on creator pages and emails. PPV links, the checkout and the content stay on 2fans. - [PPV link API: create paid links with one call](https://2fans.dev/ppv-link-api.md): Create pay-per-view links with one API call. POST /drops returns a buyUrl; buyers need no account, and 18+ content is allowed. - [Telegram PPV links with card checkout](https://2fans.dev/telegram-ppv-links.md): Create a pay-per-view link with the 2fans API and send it in a Telegram chat: buyers need no account, they pay on the 2fans checkout, and your CRM gets told about the sale. - [Paid subscriptions for Telegram](https://2fans.dev/telegram-subscriptions.md): Sell weekly or monthly subscriptions in Telegram with the 2fans API: send a subscribe link in the chat, and webhooks tell your CRM or bot who is paying. - [Sell PPV on Telegram for less than OnlyFans’ 20%](https://2fans.dev/telegram-ppv-lower-fees.md): Sell pay-per-view content on Telegram with links at 15% per sale, compared with OnlyFans’ 20% and with what Telegram Stars pays out. - [Whop alternative for adult creators](https://2fans.dev/whop-alternative-adult-creators.md): Whop’s guidelines prohibit adult content. The 2fans API covers pay-per-view links, subscriptions, tips and creator payouts for 18+ creators. - [Add pay-per-view to a Next.js app](https://2fans.dev/nextjs-pay-per-view.md): Next.js route handlers to create a pay-per-view link with the 2fans API, send the buyer to it and verify the signed webhook when they pay. - [Creator payout options: crypto, bank transfer and Paxum](https://2fans.dev/creator-payout-options.md): How creators get paid through the 2fans API: funds land in a 2fans balance and can be requested as crypto, a bank transfer, to a card, or to Paxum. - [From nothing to a first pay-per-view link](https://2fans.dev/quickstart.md): The exact steps to a working 2fans API key and a first pay-per-view link: sign up, verify, upload, generate a key, then create a drop. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Contact: support@dropfans.io. --- # Start here Guides for the 2fans API: add pay-per-view drops, tips and subscriptions to your CRM, and see how moderation and payouts are handled. - [Quickstart](https://2fans.dev/docs/build/quickstart.md): Go from a new account to a pay-per-view link in six steps. Pick this if you want to see it work before anything else. - [Let your AI set it up](https://2fans.dev/docs/ai/agent-setup.md): A coding agent opens each page, you do the ID check, and it carries on from there. Pick this if you’re building with Claude Code, Codex or Cursor. - [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md): Give each fan a personal link and match every payment back to the chat. Pick this if you run a CRM, a bot or a team selling one-to-one. - [Connect other people’s creators](https://2fans.dev/docs/build/connect-creators.md): Get your app approved, send a connect link and earn 5% on sales through your links. Pick this if you’re building software for creators and agencies. - [White label 2fans](https://2fans.dev/docs/build/white-label.md): Your chat, dashboards and sign-up, with your brand on creator pages and emails. Pay-per-view links and content stay on 2fans. Pick this if your CRM should look like your own product. - [Sign creators up from your page](https://2fans.dev/docs/build/creator-signup.md): Create accounts by API and send creators straight to the ID check. Pick this if creators should never see a 2fans form. - [Earnings and payouts](https://2fans.dev/docs/build/payouts.md): Show balances and pay out by crypto, bank transfer, card or Paxum. Pick this if creators will manage their money inside your app. - [How it’s handled](https://2fans.dev/docs/handled/overview.md): Who runs checkout, moderation, ID checks, payouts, refunds and complaints. Pick this if you need to know what you’re responsible for before you commit. - [Compare](https://2fans.dev/vs.md): How 2fans differs from Whop, Fanvue, Fangate and OnlyFansAPI. Pick this if you’re still choosing a platform. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. --- # PPV API for creator CRMs and agencies If your CRM or agency tool needs to sell pay-per-views, connect the 2fans API instead of building a payment stack. It can act for many creators, create drops and send links, read earnings and receive signed webhooks, and an approved app earns 5% of sales through its links, for life. ## What a CRM can do - **Act for creators.** A creator generates a key for your app, or an agency's own key acts for every creator it manages. - **Sell.** Upload to the vault, create drops, and create tip and subscribe links. - **Follow sales.** Earnings, transactions, balances, and `drop.paid` and `drop.refunded` webhooks. - **Onboard creators.** `POST /accounts` creates a creator from your own sign-up page, and they go through the ID check. It's enabled per app on request. - **Run payouts.** The Payouts category starts switched off for new apps; ask us to enable it. It's the platform's official API, not a scraper. ## App access | | Personal key | Approved app | | --- | --- | --- | | Approval | None | A person reviews it, usually within a few business days | | Rate limit | 60 a minute, 5,000 a day | 300 a minute, 50,000 a day, per key | | Webhooks | No | Yes | | Commission | No | 5% of sales through your links, paid out of our fee | ## What your CRM earns No setup or monthly fee. You earn 5% of every sale through your links, for life, paid out of our fee and never taken from the creator. On $50,000 a month through your links, that's $2,500 a month. 2fans runs checkout, refunds and creator payouts, so there's no finance work on your side. ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Already integrated [KVIQA](https://kviqa.com), [Telestars](https://telestars.io) and [CRMChat](https://crmchat.ai) integrate this API. [Apply for app access](https://2fans.io/developers/apply) or read about [building a CRM dashboard](https://2fans.io/developers/guides/crm-dashboard). ## Common questions **Is there a turnkey PPV API for chat CRMs?** Yes. The 2fans API creates paid links from vault content, tells your CRM which fan paid through signed webhooks, and handles checkout, creator ID checks, moderation and payouts. **Does the fan pay inside the chat?** No. The fan taps the link in the chat and pays on the 2fans checkout with no account, then the content unlocks. **Can my Telegram bot take card payments directly?** Not for digital goods. Telegram requires Stars inside bots and Mini Apps. Send a 2fans link instead, so the fan pays on the web checkout. **Who handles refunds and chargebacks?** 2fans does. A reversed sale comes out of the creator’s earnings, your app loses the commission on that sale, and a drop.refunded webhook tells your CRM. Your CRM isn’t billed for it. **What does it cost?** The API is free to use. The fee is 15% of each sale, and an approved app earns 5% of sales through its links, paid out of that fee. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Do I need a merchant account to add PPV to my CRM? Not if what you’re adding is pay-per-view for creators. Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content, with no contract of your own. If you sell your own products on your own checkout, you do need one. ## Which one you need | Your use case | What you need | How long | | --- | --- | --- | | Creators in your CRM selling PPV, drops or subscriptions, with the content hosted on 2fans | The 2fans API, and no contract of your own | Today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days | | Your own products on your own checkout | Your own contract with an adult biller such as CCBill, Segpay or Verotel | They advertise days or weeks. In our experience, 6 to 12 months | | Other businesses' products, physical goods or gambling | Something other than 2fans | | ## What you accept in return - Buyers pay on the 2fans checkout, not on your domain. - Content has to be hosted on 2fans and pass moderation. - The fee is 15% of each sale, and an approved app earns 5% of that back on sales through its links. ## If you want your own contract later Starting here lets you build real sales numbers first. See [No processing history? Sell first, apply later](https://2fans.dev/no-processing-history.md). ## What to avoid Don't run your own products through anyone else's account, ours included. It's called factoring, and it can freeze your funds and get you blacklisted. 2fans only sells content hosted on 2fans, from creators who passed the ID check. ## Common questions **Do I need a merchant account to add PPV to my CRM?** Not if creators are selling content hosted on 2fans. Integrate the 2fans API and they sell through 2fans links. Your own products on your own checkout still need your own contract. **How long does it take compared with getting my own contract?** You can be selling today once the ID check and content are approved, and connecting other people’s creators takes an app review of a few business days. In our experience your own contract takes 6 to 12 months. **Can I use 2fans to take payments for my own products?** No. 2fans only sells content hosted on 2fans, from verified creators, on the 2fans checkout. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # No processing history? Sell first, apply later You can sell PPV through 2fans with no processing history, and build real sales numbers before you apply for your own account. Those sales aren’t processing history on an account of your own, so each provider decides what they count for. ## What selling first gets you - **Real numbers.** Sales and refund figures for each creator, from the API. - **Proof of demand.** You know which creators, prices and channels sell before you commit to anything. - **Time.** You're earning while you decide whether your own contract is worth it. In our experience it takes 6 to 12 months. ## What it doesn't do It isn't a track record on a merchant account in your name. Providers often ask for statements from an account like that, so ask each one what they'll accept. ## Applying with no history Some adult billers take new businesses: [Verotel's Basic plan](https://www.verotel.com/en/pricechart.html) lists no history requirement, while its Premium plan asks for six months of statements. Others ask for months of statements up front. ## What to avoid Don't run your own products through someone else's account to get started. It's called factoring, and it can freeze your funds and get you blacklisted. Through 2fans, creators sell their own content hosted on 2fans. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Telegram Stars alternative for PPV Inside a bot or Mini App, Telegram requires Stars for digital goods. Outside that, send a 2fans link in the chat: the buyer pays by card on the web checkout, the creator keeps 85%, and your CRM gets told about the sale. ## Compared | | Telegram Stars | 2fans link | | --- | --- | --- | | Where the buyer pays | Inside Telegram | On the 2fans web checkout | | What comes back | About $0.013 per Star, after a hold of up to 21 days | 85% of the list price, released 14 days after each sale | | What the buyer needs | Stars bought through Telegram | A card, Apple Pay or Google Pay, and no account | Sources: Telegram's [Stars docs](https://core.telegram.org/bots/payments-stars) and [developer terms](https://telegram.org/tos/bot-developers). ## Using both They can sit side by side: Stars for small in-chat purchases, the link for everything bigger. ## How CRMs use it The chatter sends the link in the conversation, the fan pays on the web checkout, and a `drop.paid` webhook names the fan's reference. [KVIQA](https://kviqa.com), [Telestars](https://telestars.io) and [CRMChat](https://crmchat.ai) integrate this API. The full guide is [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md). ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # PPV links for WhatsApp, iMessage and SMS A 2fans link is a normal URL, so your CRM can send it in WhatsApp, iMessage, SMS or any DM. The buyer taps it, pays on the 2fans checkout with no account, and your CRM gets told which fan paid. ## How it works 1. Create the drop once with the API. 2. Give each fan their own link with a reference: `https://www.dropfans.io/buy/{productId}?m={ref}`. 3. Your CRM or chatter sends it in the conversation. 4. The fan taps it, pays and unlocks the content. 5. The `drop.paid` webhook names the reference, so your CRM knows which chat to credit. ## Check each channel's rules 2fans runs the sale, not the channel. [WhatsApp's Business Messaging Policy](https://whatsappbusiness.com/policy/) restricts adult products and sexually explicit messages for businesses, and SMS carriers can filter adult content. Check how you send before you build on a channel. ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # White-label PPV API for creator CRMs Your CRM can look entirely like your own product. Chat, dashboards and sign-up are yours, and creator pages and emails can carry your brand. PPV links, the checkout and the content stay on 2fans. ## What you can make your own | Part | White label | | --- | --- | | Chat, CRM, dashboards and bots | Fully yours | | Sign-up, sign-in, terms and ID check pages | Your logo, name and colour, with a small "Powered by" line | | Notification emails | Your branding, or send them yourself from webhooks | | Creator onboarding | From your own page; the creator goes straight to the ID check | ## What stays on 2fans PPV links, the checkout pages, hosted content and moderation. If you need checkout on your own domain under your own brand, that takes your own contract. ## How to get it White label is set up per app, for the creators your app onboards. [Apply for app access](https://2fans.io/developers/apply), then ask us to turn it on. The steps are in [White label 2fans](https://2fans.dev/docs/build/white-label.md). ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # PPV link API: create paid links with one call One call creates a pay-per-view link: POST /drops with a name, a price and your vault items returns a buyUrl. Buyers need no account, and 18+ content is allowed. ## The calls you need | Call | What it does | | --- | --- | | `POST /drops` | Creates a drop from vault items and returns `productId` and `buyUrl` | | `GET /links` | Returns the profile, tip, subscribe and buy links for a creator | | `POST /links` | Creates a link for a drop, a fixed tip or a per-fan reference | | `POST /drops/check-status` | Reports which of up to 200 drops have sold | | `GET /earnings` | Reports earnings, leaving out refunds and chargebacks | Prices are free, or $5 to $750 in USD. A drop holds up to 10 vault items, and you can attach your own blurred JPEG previews. Paths sit under `https://www.dropfans.io/api/external/v1`. The [full reference](https://2fans.io/developers) and [OpenAPI spec](https://2fans.io/developers/openapi.json) have the details. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Telegram PPV links with card checkout Create a drop with the 2fans API and send its link in the chat. The buyer needs no account and pays on the 2fans checkout, and your CRM gets told about the sale. ## The link `https://www.dropfans.io/buy/{productId}?m={yourReference}` The chatter sends it in the conversation and the fan pays on the web checkout. The reference tells you which chat a sale belongs to. ## If you charge inside your own bot Telegram requires Stars for digital goods sold inside bots and Mini Apps, so don't wire card payments into a bot invoice or a Mini App. Stars pay developers about $0.013 per Star, after a hold of up to 21 days. See Telegram's [Stars docs](https://core.telegram.org/bots/payments-stars) and [developer terms](https://telegram.org/tos/bot-developers). ## Knowing a sale happened - **Approved apps:** the `drop.paid` webhook, with the `externalRef` you set. - **Personal keys:** poll `POST /drops/check-status` with up to 200 product ids. [KVIQA](https://kviqa.com), [Telestars](https://telestars.io) and [CRMChat](https://crmchat.ai) integrate this API. ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Paid subscriptions for Telegram Send a 2fans subscribe link in Telegram. The fan subscribes on the 2fans web checkout, and signed webhooks tell your CRM or bot when someone starts, renews, cancels or runs out. ## The link `https://www.dropfans.io/u/{username}?subscribe=1` `GET /links` returns it for each creator. Subscriptions run weekly or monthly. ## Following subscribers Webhooks need an [approved app](https://2fans.dev/docs/build/connect-creators.md). | Event | Fires when | | --- | --- | | `subscription.paid` | A first charge, a renewal, or a free trial starting. It names the subscriber, including `telegramUserId` when there is one | | `subscription.canceled` | Renewal is turned off; access continues until `accessUntil` | | `subscription.ended` | Access ends | ## Private Telegram channels The subscription is to the creator on 2fans. If you also give subscribers a private channel, your bot runs that part: add them on `subscription.paid` and remove them on `subscription.ended`. ## Commission A subscription started through an approved app's links earns the app 5%, including every renewal, paid out of our fee. ## Other tools Tribute also runs paid Telegram channels. Read its [content restrictions](https://wiki.tribute.tg/for-content-creators/content-restrictions) for what you sell. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Sell PPV on Telegram for less than OnlyFans’ 20% Send a 2fans link in the Telegram chat: the fee is 15% of each sale against OnlyFans’ 20%, buyers need no account, and the API tells your CRM which fan paid. ## On a $20 sale | | Creator gets | Notes | | --- | --- | --- | | 2fans | $17.00 | 15% fee; no buyer account needed | | OnlyFans | $16.00 | 20% fee; the fan has to be on OnlyFans | If your own bot or Mini App charges for digital goods, Telegram requires Stars, and developers receive about $0.013 per Star after a hold of up to 21 days. See Telegram's [Stars docs](https://core.telegram.org/bots/payments-stars) and [developer terms](https://telegram.org/tos/bot-developers). ## How chatters sell with it 1. Create the drop once with the API. 2. Send each fan their own link with a reference: `https://www.dropfans.io/buy/{productId}?m={ref}`. 3. The fan pays, with no account. 4. The `drop.paid` webhook names the reference, so your CRM knows which chat to credit. Full guide: [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md). [Telestars](https://telestars.io) and [CRMChat](https://crmchat.ai), both Telegram CRMs, integrate this API. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Whop alternative for adult creators Whop’s guidelines prohibit “pornographic content, sexually explicit material, or adult services”. 2fans covers the same core for 18+ creators: pay-per-view links, subscriptions, tips and payouts, all available through an API. ## What maps across | You want | On 2fans | | --- | --- | | Paid links | Drops, tip links and subscribe links, created with the API | | Selling inside chats | Links work anywhere a URL goes | | Creator payouts | [Crypto, bank transfer, card or Paxum](https://2fans.dev/creator-payout-options.md), released 14 days after each sale | | Earning on sales you bring | 5% commission on sales through your approved app's links, for life | ## What's different - Checkout always happens on 2fans, never on your domain. - Content has to live on 2fans and pass moderation. - 2fans sells digital content. It doesn't cover courses with community features, software licences or physical goods the way a general marketplace does. Source: [Whop community guidelines](https://whop.com/guidelines/). ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Add pay-per-view to a Next.js app A server route creates a drop and returns its link, you send the buyer there to pay on the 2fans checkout, and a signed webhook tells you when they’ve paid. Keep the key on the server. ## 1. Create the link Keep `DROPFANS_API_KEY` in your server environment. The items must already be in the creator's vault. ```ts // app/api/drop/route.ts export async function POST(req: Request) { const { name, price, vaultItemIds } = await req.json(); const res = await fetch('https://www.dropfans.io/api/external/v1/drops', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ name, price, vaultItemIds }), }); if (!res.ok) return Response.json(await res.json(), { status: res.status }); const { productId, buyUrl } = await res.json(); return Response.json({ productId, buyUrl }); } ``` Send the buyer to `buyUrl`. Add `?m=` to tie the sale to your own chat or user. ## 2. Verify the webhook Webhooks need an [approved app](https://2fans.dev/docs/build/connect-creators.md). Read the raw body before parsing it. ```ts // app/api/webhooks/2fans/route.ts import crypto from 'node:crypto'; function verify(rawBody: string, header: string, secret: string) { const parts = Object.fromEntries(header.split(',').map((p) => p.split('='))); const t = Number(parts.t); if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false; const expected = crypto.createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex'); const a = Buffer.from(expected); const b = Buffer.from(parts.v1 ?? ''); return a.length === b.length && crypto.timingSafeEqual(a, b); } export async function POST(req: Request) { const raw = await req.text(); const signature = req.headers.get('DropFans-Signature') ?? ''; if (!verify(raw, signature, process.env.TWOFANS_WEBHOOK_SECRET!)) { return new Response('Bad signature', { status: 400 }); } const event = JSON.parse(raw); if (event.type === 'drop.paid') { // Queue the work and dedupe on event.data.orderId. } return new Response('ok'); } ``` Answer within 5 seconds and do the work afterwards. Without an approved app, poll `POST /drops/check-status` instead. ## 3. Let your agent do it Give your coding agent [Let your AI set it up](https://2fans.dev/docs/ai/agent-setup.md). It opens each page, you handle the ID check, and it writes the rest. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Creator payout options: crypto, bank transfer and Paxum Earnings land as funds in the creator’s 2fans balance. From $20 they can request them as crypto, a bank transfer or to a card through a MassPay wallet, or to Paxum. All of these are included when you use the API. ## The options | Option | How it works | Set up through the API | | --- | --- | --- | | Crypto | Cash-out option in a MassPay wallet | `POST /payouts/masspay/profile` | | Bank transfer | Cash-out option in a MassPay wallet | `POST /payouts/masspay/profile` | | Card | Cash-out option in a MassPay wallet | `POST /payouts/masspay/profile` | | Paxum | To the creator's Paxum account | `POST /payouts/methods` | ## Timing Each sale is released at least 14 days after it's earned, so money becomes available every day once a creator is past their first two weeks. The creator requests a payout, and we review and send it. The full available balance goes out each time, with a $20 minimum. ## Does the creator have to visit 2fans? No, if your app has the Payouts category switched on. Your app can add the method and request the payout through the API. For a MassPay wallet, the creator opens MassPay's activation link once in a browser. With a personal key, they request payouts in the 2fans dashboard. See [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md). ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # From nothing to a first pay-per-view link Sign up, pass creator verification, upload to your vault and generate a Personal key. Then one POST /drops call returns a link you can send to a buyer. ## Steps 1. Sign up at [2fans.io](https://2fans.io/signup) and complete creator verification. 2. Upload at least one item to your vault. 3. Under **Vault → API Connect**, generate a key and pick **Other** to make it a Personal key. 4. Check the key: ```bash curl "https://www.dropfans.io/api/external/v1/me" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` 5. Find your vault item ids: ```bash curl "https://www.dropfans.io/api/external/v1/vault?limit=10" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` 6. Create the drop with the call below and send the `buyUrl` to a buyer. Use `"price": 0` to test, since there's no sandbox or test card. For agents: the full docs are at [llms.txt](https://2fans.io/developers/llms.txt) and [llms-full.txt](https://2fans.io/developers/llms-full.txt), and the contract is the [OpenAPI spec](https://2fans.io/developers/openapi.json). Follow [Make your first call](https://2fans.io/developers/get-started/first-call) and [Sell a drop](https://2fans.io/developers/guides/sell-a-drop) for the whole loop. ## Key facts | | | | --- | --- | | **How it works** | Your CRM creates a link and sends it in the chat. The buyer pays on the 2fans checkout and unlocks content hosted on 2fans. | | **Fee** | 15% of each sale; the creator keeps 85%. No monthly, setup or listing fee. | | **App commission** | Approved apps earn 5% of every sale made through their links, for life. It’s paid out of our fee, never taken from the creator. | | **Payouts** | Earnings land in the creator’s 2fans balance and are released 14 days after each sale. From $20, they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum. All of it is included with the API. | | **What you can sell** | Pay-per-view drops, weekly or monthly subscriptions, and tips, each with its own link you can send in Telegram or any chat. | | **Prices** | Free, or $5 to $750 per drop, in USD. A drop holds up to 10 items. | | **Content** | Photos, video, audio, PDFs and other digital media, including 18+ content and declared AI-generated content. | | **Creator checks** | Creators verify with an ID document, face match and liveness check. Uploads need an approved check. | | **App access** | For software other people’s creators connect to. A person reviews each application, usually within a few business days. 300 requests a minute and 50,000 a day, per key. | ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Links - [Apply for app access](https://2fans.io/developers/apply) - [API docs](https://2fans.io/developers) - [Docs index for LLMs](https://2fans.io/developers/llms.txt) - [OpenAPI spec](https://2fans.io/developers/openapi.json) Last updated 2026-11-02. Overview: https://2fans.dev/index.md. All pages: https://2fans.dev/llms.txt. --- # Quickstart: your first pay-per-view link Get a key, check it, pick content from the vault, create a drop and find out when it sells. A drop is a paid bundle of vault items with its own checkout page. This guide goes from a new account to a pay-per-view link you can send to a buyer. Prefer to let your AI do the typing? Use [AI setup](https://2fans.dev/docs/ai/agent-setup.md). ## 1. Get a key Sign up at [2fans.io](https://2fans.io/signup) and complete creator verification, since uploads need an approved ID check. Upload at least one item to your vault, then open **Vault → API Connect**, press **Generate new key** and pick **Other** to make a Personal key. There's no approval step. It starts with `dpfn_`. Keep it in an environment variable, and never paste it into a shared chat. Shell: ```bash export DROPFANS_API_KEY="dpfn_..." ``` ## 2. Check the key Call `GET /me`. If `username` is the account you expected, authentication works. `kycStatus` shows where the ID check stands, and `key.tier` shows which rate limit the key runs at. curl: ```bash curl "https://www.dropfans.io/api/external/v1/me" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/me', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); console.log(await res.json()); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/me", headers=HEADERS) print(res.json()["username"]) ``` Response: ```json { "id": "cmawq81x40001lb04xyz12abc", "username": "ava", "name": "Ava", "image": "https://cdn.dropfans.io/ava/avatar.jpg", "accountType": "CREATOR", "kycStatus": "approved", "key": { "name": "Personal", "app": null, "tier": "personal" } } ``` ## 3. Pick content from the vault `GET /vault` returns approved items by default. Pass `includePending=true` to see items still in review. Uploads take real minutes to clear, so poll instead of assuming they are ready. curl: ```bash curl "https://www.dropfans.io/api/external/v1/vault?limit=10" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/vault?limit=10', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); const { items } = await res.json(); const ids = items.slice(0, 3).map((i) => i.id); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/vault?limit=10", headers=HEADERS) ids = [i["id"] for i in res.json()["items"][:3]] ``` ## 4. Create the drop Price is in USD: `0` for free, otherwise $5 to $750. A drop takes up to 10 vault items. Use `0` while testing, because there is no sandbox or test card. A drop built from approved items is approved straight away. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/drops', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "name": "Beach set", "price": 15, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/drops", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "name": "Beach set", "price": 15, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }, ) print(res.json()) ``` Response: ```json { "productId": "...", "buyUrl": "https://www.dropfans.io/buy/...", "mediaCount": 2 } ``` ## 5. Send the link The `buyUrl` works anywhere a URL goes: a DM, a chat, a link in bio. Buyers need no account. To tell buyers apart, add your own reference to the link. See [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md). Link: ```text https://www.dropfans.io/buy/{productId}?m={yourReference} ``` ## 6. Find out it sold `POST /drops/check-status` takes up to 200 product ids and returns the ones that sold. Unsold ids are simply missing. A refunded sale still reports `paid: true` here, so use `GET /earnings` for money and approved-app [webhooks](https://2fans.dev/docs/build/webhooks.md) for instant updates. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops/check-status" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "productIds": [ "PRODUCT_ID" ] }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/drops/check-status', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "productIds": [ "PRODUCT_ID" ] }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/drops/check-status", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "productIds": [ "PRODUCT_ID" ] }, ) print(res.json()) ``` ## Next - [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md): Create one drop, give each fan a personal pay-per-view link and match every sale back to the right chat. - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. - [Connect other people’s creators](https://2fans.dev/docs/build/connect-creators.md): Get your app approved, send creators a connect link, then validate and store the key they give you. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Sell on Telegram and in chats Create one drop, give each fan a personal pay-per-view link and match every sale back to the right chat. One drop can be sold to any number of fans. Give each one a link with a reference of your choice, such as your id for the conversation. The paid order comes back carrying that reference. ## 1. Create the drop once One drop has one price, so create one drop per price. Keep the `productId`. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Friday set", "price": 25, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/drops', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "name": "Friday set", "price": 25, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/drops", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "name": "Friday set", "price": 25, "vaultItemIds": [ "VAULT_ITEM_A", "VAULT_ITEM_B" ] }, ) print(res.json()) ``` ## 2. Make one link per fan A reference is 1 to 32 characters of `A-Z a-z 0-9 _ -`. `GET /links` returns the right templates for each creator. The fan pays on the web checkout. Telegram requires Stars for digital goods sold inside bots and Mini Apps, so this is the link to send. Link: ```text https://www.dropfans.io/buy/{productId}?m={externalRef} ``` ## 3. Match the payment Approved apps get a `drop.paid` webhook, where `data.externalRef` says which fan paid. Use `data.orderId` as your idempotency key. Personal keys can poll `GET /orders?externalRef=…`. A fan can edit the link, so the reference is not proof of identity. For extra safety, compare `buyer.telegramUserId` with the chat you expect. Node: ```javascript // drop.paid handler (after verifying the signature) const { orderId, externalRef, productId, buyer } = event.data; if (await alreadyDelivered(orderId)) return; const chat = await findConversationByRef(externalRef); await deliverMedia(chat, productId); await markDelivered(orderId); ``` ## 4. Handle refunds Refunds and chargebacks arrive as `drop.refunded` with the same `orderId` and `externalRef`, plus a `reason` of `refund` or `chargeback`. Event: ```json { "type": "drop.refunded", "data": { "orderId": "...", "externalRef": "tg_48213377", "refundedAt": "2026-10-17T16:20:00.000Z", "reason": "chargeback" } } ``` ## Subscriptions Subscribe links work the same way. See [Paid subscriptions for Telegram](https://2fans.dev/telegram-subscriptions.md). ## Selling inside your own bot Don't wire card payments into a bot invoice or a Mini App. If your own bot or Mini App charges for digital goods itself, Telegram requires Stars. Developers receive about $0.013 per Star, after a hold of up to 21 days. See Telegram's [Stars docs](https://core.telegram.org/bots/payments-stars) and [developer terms](https://telegram.org/tos/bot-developers). ## Next - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. - [Refunds and chargebacks](https://2fans.dev/docs/handled/chargebacks.md): Who deals with disputes, what a reversal does to access and earnings, and the webhook events your app gets. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Connect other people’s creators Get your app approved, send creators a connect link, then validate and store the key they give you. For software that other people’s creators plug into, such as a CRM. Each creator generates a key for your app, and that key is the whole handshake. It never expires and there is nothing to refresh. ## 1. Apply for app access [Apply here](https://2fans.io/developers/apply). The form asks what the app does, which parts of the API it uses, how many creators you expect and how you store keys. A person reviews it, usually within a few business days. Once approved, your app appears in the key picker every creator sees. ## 2. Send your connect link It opens the picker with your app selected and survives login, so it works for creators who are signed out. The creator presses Generate, copies the key and pastes it into your app. Link: ```text https://www.dropfans.io/dashboard/vault?apiConnect=1&app= ``` ## 3. Validate the key Call `GET /me` right away and show the `username` back, so the creator sees they connected the right account. curl: ```bash curl "https://www.dropfans.io/api/external/v1/me" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/me', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); console.log(await res.json()); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/me", headers=HEADERS) print(res.json()["username"]) ``` ## 4. Store it safely Encrypt the key at rest. Never log it, send it to your frontend or echo it in an error message. If a creator revokes the key, every request returns `401`, so ask them to reconnect instead of retrying. If your app is suspended, requests return `403` with `app_suspended`, and the keys work again once it is reinstated. ## Agencies An agency can connect once per creator, or generate one key as the agency and act for every creator and AI persona it manages at `/api/external/v1/creators/{creatorId}/…`. ## Commission A drop bought, a tip sent or a subscription started through your app's links earns your app owner 5% of the sale for life, unless agreed otherwise. That includes every renewal. It's paid out of our platform fee, never taken from the creator. Links made with a personal key earn nothing, so always generate links with your app's key. ## Next - [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md): Approved apps can create creator accounts by API, send each creator through the ID check and start working with the returned key. - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Webhooks Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. Webhooks are per approved app. Events for every creator who holds a key for your app are sent to one https endpoint. ## 1. Set your endpoint Use a key your app owner holds. The first call returns the signing secret once, so store it. Leave `events` out to receive every event, including ones added later. curl: ```bash curl -X PUT "https://www.dropfans.io/api/external/v1/webhooks" \ -H "Authorization: Bearer $APP_OWNER_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://crm.example.com/hooks/2fans" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/webhooks', { method: 'PUT', headers: { Authorization: 'Bearer ' + process.env.APP_OWNER_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "url": "https://crm.example.com/hooks/2fans" }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.put( "https://www.dropfans.io/api/external/v1/webhooks", headers={"Authorization": f"Bearer {os.environ['APP_OWNER_KEY']}"}, json={ "url": "https://crm.example.com/hooks/2fans" }, ) print(res.json()) ``` ## 2. Verify the signature The `DropFans-Signature` header is `t=,v1=`, keyed with your `whsec_…` secret over `.`. Compute it on the raw bytes before parsing JSON, compare in constant time, and reject timestamps more than 5 minutes old. Node: ```javascript import crypto from 'node:crypto'; export function verify(rawBody, header, secret) { const parts = Object.fromEntries(header.split(',').map((p) => p.split('='))); const t = Number(parts.t); if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false; const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex'); const a = Buffer.from(expected); const b = Buffer.from(parts.v1 ?? ''); return a.length === b.length && crypto.timingSafeEqual(a, b); } ``` Python: ```python import hashlib, hmac, time def verify(raw_body: bytes, header: str, secret: str) -> bool: parts = dict(p.split("=", 1) for p in header.split(",")) t = int(parts.get("t", 0)) if not t or abs(time.time() - t) > 300: return False expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, parts.get("v1", "")) ``` ## 3. Answer fast, then do the work Answer any 2xx within 5 seconds and queue the work. Anything else is retried at about 1 min, 5 min, 15 min, 1 h, 3 h, then every 6 h, up to 8 attempts. Redirects are not followed. Events can arrive more than once and out of order, so dedupe on `DropFans-Event-Id`. ## 4. Test it `POST /webhooks/test` sends a `ping` event. `GET /webhooks` shows your last 20 deliveries with status codes and errors. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/webhooks/test" \ -H "Authorization: Bearer $APP_OWNER_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/webhooks/test', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.APP_OWNER_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({}), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/webhooks/test", headers={"Authorization": f"Bearer {os.environ['APP_OWNER_KEY']}"}, json={}, ) print(res.json()) ``` ## Events | Event | Fires when | | --- | --- | | `drop.paid` | A buyer completes checkout on a drop | | `drop.refunded` | A paid drop is refunded or charged back | | `tip.paid` / `tip.refunded` | A tip settles, or is refunded or charged back | | `subscription.paid` | A first charge, a renewal, or a free trial starting | | `subscription.canceled` | Renewal is turned off; access continues until `accessUntil` | | `subscription.ended` | Access ends | | `account.kyc_updated` | An account you created moves through the ID check | | `payout.requested`, `payout.processing`, `payout.paid`, `payout.failed` | A payout moves through its stages | | `ping` | You call `POST /webhooks/test` | ## Next - [Sell on Telegram and in chats](https://2fans.dev/docs/build/telegram.md): Create one drop, give each fan a personal pay-per-view link and match every sale back to the right chat. - [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md): Show earnings and balances in your product, set up crypto, bank or Paxum payouts, and request them through the API without sending creators to 2fans. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Sign creators up from your own page Approved apps can create creator accounts by API, send each creator through the ID check and start working with the returned key. The creator never fills in our sign-up form. Creator sign-up is enabled per app, so ask us to switch it on for yours. ## 1. Collect their details Your page collects the email, handle, display name, country of residence and subscription price. It also shows our Terms of Service, Privacy Policy and 2257 statement with an acceptance checkbox. ## 2. Create the account Call this from your server with a key your app owner holds, and pass the creator’s browser IP and user agent from the moment they accepted. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/accounts" \ -H "Authorization: Bearer $APP_OWNER_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "subscription": { "priceUsd": 9.99, "interval": "monthly" }, "legalAccepted": true, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/accounts', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.APP_OWNER_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "subscription": { "priceUsd": 9.99, "interval": "monthly" }, "legalAccepted": true, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/accounts", headers={"Authorization": f"Bearer {os.environ['APP_OWNER_KEY']}"}, json={ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "subscription": { "priceUsd": 9.99, "interval": "monthly" }, "legalAccepted": True, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }, ) print(res.json()) ``` ## 3. Keep what comes back `apiKey` is bound to your app and shown once. You can upload and create drops straight away, but drops stay unsellable until the ID check is approved. `kycUrl` is valid for 24 hours; get a fresh one with `POST /accounts/{id}/kyc-session`. ## 4. Send them through the ID check Redirect the creator to `kycUrl` in a full page or new tab, never an iframe. They come back to your `kycReturnUrl` with `?kyc=approved|declined|in_review`. Show the matching screen, but unlock nothing yet. ## 5. Wait for the decision The decision arrives as an `account.kyc_updated` webhook. With `kycStatus: "approved"` the account is active and can sell and get paid. Event data: ```json { "accountId": "...", "username": "valeria", "kycStatus": "approved", "sellerStatus": "..." } ``` ## Next - [Creator verification](https://2fans.dev/docs/handled/verification.md): How creators are verified: an ID document, face match and liveness check through Didit, with records kept by 2fans and status available in the API. - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # White label 2fans Put your CRM’s brand on the creator side: your chat, dashboards and sign-up, your brand on creator pages and emails, with pay-per-view links and content on 2fans. Creators can work entirely inside your product and never need to know a 2fans dashboard exists. Your interface can look however you want. Pay-per-view links and the content behind them stay on 2fans. ## 1. Get your app approved and ask for white label [Apply for app access](https://2fans.io/developers/apply), then ask us to set up white label. Branded pages and emails need your app's logo. Creator sign-up, payouts and chat are switched on per app, so ask for the ones you need at the same time. ## 2. Onboard creators from your own page Create the account from your server. If you pass the creator’s browser IP and user agent from when they accepted the terms, `kycUrl` goes straight to the ID check and back to your `kycReturnUrl`, so they never see a 2fans page. Full details are in [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md). curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/accounts" \ -H "Authorization: Bearer $APP_OWNER_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "legalAccepted": true, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/accounts', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.APP_OWNER_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "legalAccepted": true, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/accounts", headers={"Authorization": f"Bearer {os.environ['APP_OWNER_KEY']}"}, json={ "email": "valeria@example.com", "username": "valeria", "displayName": "Valeria", "residencyCountry": "SE", "legalAccepted": True, "acceptedFromIp": "203.0.113.7", "acceptedUserAgent": "Mozilla/5.0", "kycReturnUrl": "https://crm.example.com/onboarding/done" }, ) print(res.json()) ``` ## 3. Choose how creators get emails There are three modes. **2fans** sends its normal emails. **Your app** sends the same emails with your logo and name. **Webhooks** sends no notification email and gives you a `seller.notification` event instead, with the email already rendered in your branding so you can forward it. Security emails such as password resets always go by email. Node: ```javascript // After verifying the signature if (event.type === 'seller.notification') { const { kind, seller, email } = event.data; // kind: 'sale', 'payout_sent', 'kyc_approved'… await sendFromYourDomain(seller.email, email.subject, email.html, email.text); } ``` ## 4. Build your own interface Everything creators do can run through the API: upload and organise media, create drops, send links, read earnings and request payouts. [Build your own CRM dashboard](https://2fans.io/developers/guides/crm-dashboard) covers the numbers. Chat operations are in [API v1](https://2fans.io/developers/api-v1/overview) once chat is enabled for your app, so your chat interface can look and work however you want. ## 5. Send 2fans links When a fan buys, send them a 2fans link. They pay on the 2fans checkout and unlock the content hosted on 2fans. Use your app’s key to create links, so the sale counts towards your 5% commission. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/links" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "buy", "productId": "PRODUCT_ID", "externalRef": "tg_48213377" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/links', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "type": "buy", "productId": "PRODUCT_ID", "externalRef": "tg_48213377" }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/links", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "type": "buy", "productId": "PRODUCT_ID", "externalRef": "tg_48213377" }, ) print(res.json()) ``` ## What's yours and what stays on 2fans | Part | Who it belongs to | | --- | --- | | Chat, CRM, dashboards and bots | Yours; build them however you want | | Sign-up, sign-in, password, terms, consent and ID check pages | Your logo, name and colour, with a small "Powered by" line | | Notification emails | 2fans, your branding, or your own through webhooks | | Pay-per-view links and checkout pages | 2fans | | Hosted content | 2fans | | Payouts | Paid by 2fans; your app can run the whole flow. See [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md) | White label covers the creators your app onboarded. Creators who already have an account can connect through OAuth or a key instead, and they keep the standard 2fans pages. ## Next - [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md): Approved apps can create creator accounts by API, send each creator through the ID check and start working with the returned key. - [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md): Show earnings and balances in your product, set up crypto, bank or Paxum payouts, and request them through the API without sending creators to 2fans. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Earnings, balances and payouts Show earnings and balances in your product, set up crypto, bank or Paxum payouts, and request them through the API without sending creators to 2fans. Earnings and balance reads are on by default. Setting up methods and requesting payouts needs an app key with the Payouts category, which starts switched off, so ask us to enable it. A personal key can read payouts but not change them; those creators request payouts in the 2fans dashboard. All money is in USD cents. ## 1. Read earnings `startDate` and `endDate` are required. `stats.totalEarningsCents` is what the creator keeps, `stats.grossEarningsCents` is what buyers paid, and refunds and chargebacks are left out. curl: ```bash curl "https://www.dropfans.io/api/external/v1/earnings?startDate=2026-08-01&endDate=2026-08-19&tz=Europe/Stockholm" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/earnings?startDate=2026-08-01&endDate=2026-08-19&tz=Europe/Stockholm', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); const { stats, chart, transactions } = await res.json(); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/earnings?startDate=2026-08-01&endDate=2026-08-19&tz=Europe/Stockholm", headers=HEADERS) data = res.json() ``` ## 2. Read the balance `GET /balance` shows where the money sits: `pending` (in the release hold), `available` (payable), `processing` (in a payout run) and `paidOut` (lifetime). `GET /payouts/summary` adds the minimum, the payout method and whether a request would be accepted right now. curl: ```bash curl "https://www.dropfans.io/api/external/v1/payouts/summary" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/payouts/summary', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); console.log(await res.json()); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/payouts/summary", headers=HEADERS) print(res.json()) ``` ## 3. Add Paxum The email has to belong to an active Paxum account. `isDefault` makes it the method payouts go to. The account has to have passed the ID check. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/payouts/methods" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "PAXUM_P2P", "paxumEmail": "jane@example.com", "nickname": "Main Paxum", "isDefault": true }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/payouts/methods', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "type": "PAXUM_P2P", "paxumEmail": "jane@example.com", "nickname": "Main Paxum", "isDefault": true }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/payouts/methods", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "type": "PAXUM_P2P", "paxumEmail": "jane@example.com", "nickname": "Main Paxum", "isDefault": True }, ) print(res.json()) ``` ## 4. Or set up the wallet for crypto, bank and card Crypto, bank transfer and card are cash-out options inside a MassPay wallet, chosen by the creator when they cash out. Send the profile to create the wallet. `country` is a three-letter code, and `dateOfBirth` is optional. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/payouts/masspay/profile" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "accountType": "INDIVIDUAL", "firstName": "Jane", "lastName": "Doe", "email": "jane@example.com", "country": "SWE", "address1": "Storgatan 1", "city": "Stockholm", "stateProvince": "Stockholm County", "postalCode": "111 22" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/payouts/masspay/profile', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ "accountType": "INDIVIDUAL", "firstName": "Jane", "lastName": "Doe", "email": "jane@example.com", "country": "SWE", "address1": "Storgatan 1", "city": "Stockholm", "stateProvince": "Stockholm County", "postalCode": "111 22" }), }); console.log(await res.json()); ``` Python: ```python import os, requests res = requests.post( "https://www.dropfans.io/api/external/v1/payouts/masspay/profile", headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"}, json={ "accountType": "INDIVIDUAL", "firstName": "Jane", "lastName": "Doe", "email": "jane@example.com", "country": "SWE", "address1": "Storgatan 1", "city": "Stockholm", "stateProvince": "Stockholm County", "postalCode": "111 22" }, ) print(res.json()) ``` ## 5. Have the creator activate the wallet once This is the one step a person has to do. Before the first payout, the creator opens `activationUrl` once in a browser, which is a MassPay requirement. It’s a MassPay page, not 2fans. The link expires, so fetch it right before you show it and never store it. curl: ```bash curl "https://www.dropfans.io/api/external/v1/payouts/masspay/activation" \ -H "Authorization: Bearer $DROPFANS_API_KEY" ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/payouts/masspay/activation', { headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY }, }); console.log(await res.json()); ``` Python: ```python import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"} res = requests.get("https://www.dropfans.io/api/external/v1/payouts/masspay/activation", headers=HEADERS) print(res.json()) ``` Response: ```json { "provisioned": true, "activated": false, "activationUrl": "https://payee.masspay.io/activate/…" } ``` ## 6. Request the payout This requests the full available balance; partial payouts aren’t possible. The `Idempotency-Key` header is required, so a retry can’t pay twice. We review each request and send it, and `payout.*` webhooks report each stage. curl: ```bash curl -X POST "https://www.dropfans.io/api/external/v1/payouts/requests" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "note": "October" }' ``` Node: ```javascript const res = await fetch('https://www.dropfans.io/api/external/v1/payouts/requests', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.DROPFANS_API_KEY, 'Idempotency-Key': crypto.randomUUID(), 'Content-Type': 'application/json', }, body: JSON.stringify({ note: 'October' }), }); const { requests } = await res.json(); ``` Python: ```python import os, uuid, requests res = requests.post( "https://www.dropfans.io/api/external/v1/payouts/requests", headers={ "Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}", "Idempotency-Key": str(uuid.uuid4()), }, json={"note": "October"}, ) print(res.json()["requests"]) ``` ## Who can do what | | Personal key | App key with the Payouts category | | --- | --- | --- | | Read balances and history | Yes | Yes | | Add payout methods | No, use the dashboard | Yes | | Request a payout | No, use the dashboard | Yes | A payout request acts for the key's own account, so use the key made for that creator. An agency can read a managed creator's payouts but can't request a payout for them. ## Next - [How payouts work](https://2fans.dev/docs/handled/payouts.md): Earnings land in the creator’s 2fans balance. From $20 they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum, all included with the API. - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Who handles what What 2fans runs for you and what stays with your app: checkout, moderation, creator checks, payouts, refunds and complaints. You build the CRM and the selling. Buyers pay and content lives on 2fans, so checkout, payouts and the platform rules sit with us. Your app never sees card data. | Job | 2fans | Your app | | --- | --- | --- | | [Checkout](https://2fans.dev/docs/handled/checkout.md) | Hosts the checkout | Creates and sends the link | | [Moderation](https://2fans.dev/docs/handled/moderation.md) | Runs moderation and decides what goes live | Handles `PENDING` responses | | [Creator verification](https://2fans.dev/docs/handled/verification.md) | Runs the ID check and keeps the records | Sends creators to it, if you onboard them | | [Payouts](https://2fans.dev/docs/handled/payouts.md) | Holds earnings, reviews requests and sends crypto, bank, card or Paxum payouts | Can show balances, set up methods and request payouts | | [Refunds and chargebacks](https://2fans.dev/docs/handled/chargebacks.md) | Processes them and adjusts earnings | Reacts to `drop.refunded` and `tip.refunded` | | [Complaints and takedowns](https://2fans.dev/docs/handled/compliance.md) | Takes reports and removes content | Passes reports on to us | | [Fees](https://2fans.dev/docs/handled/fees.md) | Takes 15% of each sale | Earns 5% through its links, if approved | | Chat, CRM and dashboards | Provides the API | Yours to build however you want; see [White label 2fans](https://2fans.dev/docs/build/white-label.md) | | Key storage | Issues and revokes keys | Stores them encrypted, server-side | | Selling and support for your own product | | Yours | ## What this means for you Checkout always happens on 2fans, content has to live on 2fans, and our rules apply to everything sold. See [Do I need a merchant account to add PPV to my CRM?](https://2fans.dev/do-i-need-a-merchant-account-for-ppv.md) ## Next - [How moderation works](https://2fans.dev/docs/handled/moderation.md): Content moderation is automated and handled by 2fans infrastructure. What each status means, what the checks look for and how to build around them. - [How payouts work](https://2fans.dev/docs/handled/payouts.md): Earnings land in the creator’s 2fans balance. From $20 they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum, all included with the API. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # How buyers pay How buyers pay for a pay-per-view: a hosted 2fans checkout with cards, Apple Pay and Google Pay, no buyer account, charged in USD. ## What the buyer sees A buyer opens a link and pays on the hosted checkout. They don't need an account. - **Methods:** card, Apple Pay and Google Pay. Returning buyers can also use a saved card or prepaid credits. - **Currency:** charged in USD. Prices are set in USD. - **Statement:** the charge shows our name, not your app's or the creator's. The name is shown at checkout. - **Tax:** any buyer tax or add-on is charged on top of the price. - **Telegram:** a Telegram link opens the 2fans Mini App on the same hosted checkout. ## What your app does Your app creates the link and hands it over. It can't charge a fan directly, and it never sees card data. ## Limits A drop costs $5 to $750, or it can be free. [Fees](https://2fans.dev/docs/handled/fees.md) has the rest. ## Next - [Refunds and chargebacks](https://2fans.dev/docs/handled/chargebacks.md): Who deals with disputes, what a reversal does to access and earnings, and the webhook events your app gets. - [Quickstart: your first pay-per-view link](https://2fans.dev/docs/build/quickstart.md): Get a key, check it, pick content from the vault, create a drop and find out when it sells. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # How moderation works Content moderation is automated and handled by 2fans infrastructure. What each status means, what the checks look for and how to build around them. Content moderation is automated and handled by 2fans infrastructure, so you don’t have to build any of it. Everything created through the API uses the same pipeline as the dashboard, so treat `PENDING` as a normal response. ## Statuses `moderationStatus` on vault items, posts and drops is one of: | Status | Meaning | | --- | --- | | `PENDING` | Waiting for review. It isn't an error. | | `APPROVED` | Live and usable. | | `FLAGGED` | Held. It may still be approved. | | `REJECTED` | Held, and the creator is told. | A drop takes its status from its items: any rejected or flagged item wins, then any pending item, otherwise it's approved. The buy page won't sell a drop until it's approved. ## What the checks look for Automated checks look for AI generation, deepfakes, nudity, people and likely minors, and celebrity likeness. AI persona faces are compared with known creators. Text goes through a prohibited-word filter. A caught drop name returns `400` with `matchedWord`, and a caught post caption returns `422`. Profile images and banners always wait for review. ## Building around it - Poll `GET /vault?includePending=true` or `GET /posts/{id}` every 30 to 60 seconds while something is pending. - Video has to finish processing before moderation starts. `isReady: true` from `POST /vault/video-status` doesn't mean approved. - If a drop is rejected or flagged, tell the creator instead of retrying. ## Next - [Compliance and content rules](https://2fans.dev/docs/handled/compliance.md): Who is responsible for records, age checks, AI disclosure, reports and takedowns, and where the policies live. - [Creator verification](https://2fans.dev/docs/handled/verification.md): How creators are verified: an ID document, face match and liveness check through Didit, with records kept by 2fans and status available in the API. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Creator verification How creators are verified: an ID document, face match and liveness check through Didit, with records kept by 2fans and status available in the API. ## The check Creators verify through [Didit](https://didit.me) with an ID document, a face match and a liveness check. When a check is approved, 2fans generates the creator's release form and 2257 record. Uploads need an approved check. ## Following the status `GET /me` returns `kycStatus`: | Status | Meaning | | --- | --- | | `not_started` | No check yet | | `session_created` | Link opened, not finished | | `in_review` / `processing` | Being decided | | `approved` | Passed | | `rejected` | Failed; they can try again | | `covered_by_agency` | An AI persona covered by its operator's check | Accounts your app created also send an `account.kyc_updated` webhook. ## AI personas and agencies A persona has no ID check of its own. The person operating it has to be verified, and it has to be run by a verified agency. ## People in the content Other performers tagged on content do their own ID check and release form. A drop with a pending or rejected tag is hidden on the buy page. ## Onboarding from your own page Approved apps can create accounts and send creators straight to the check. See [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md). ## Next - [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md): Approved apps can create creator accounts by API, send each creator through the ID check and start working with the returned key. - [Compliance and content rules](https://2fans.dev/docs/handled/compliance.md): Who is responsible for records, age checks, AI disclosure, reports and takedowns, and where the policies live. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # How payouts work Earnings land in the creator’s 2fans balance. From $20 they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum, all included with the API. ## Payout options Earnings land as funds in the creator's 2fans balance. From there they can request them out in any of these ways, all included when you use the API: | Option | How it works | | --- | --- | | Crypto | Through a MassPay wallet | | Bank transfer | Through a MassPay wallet | | Card | Through a MassPay wallet | | Paxum | To the creator's Paxum account | ## From sale to payout 1. A sale's earnings go into `pending` for at least 14 days. The hold can be longer for a specific account. 2. Each sale is released on its own date, so money moves to `available` every day once a creator is past their first two weeks. 3. The creator requests a payout once at least $20 is available. The whole available balance is paid out, not part of it. 4. Our team reviews the request and sends it. ## Do creators have to go to 2fans? Not if your app runs it. With the Payouts category switched on, your app can add the payout method and request the payout through the API, so the creator stays in your product. For a MassPay wallet, they open MassPay's activation link once. Personal keys can only read payouts, so those creators use the 2fans dashboard. See [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md). ## What your app can do | Task | How | Access | | --- | --- | --- | | Show balances | `GET /balance` | On by default | | Show earnings | `GET /earnings` | On by default | | Show payout history | `GET /payouts`, `GET /payouts/summary` | On for personal keys; Payouts category for apps | | Add a payout method | `POST /payouts/methods`, `POST /payouts/masspay/profile` | Payouts category and an app key | | Request a payout | `POST /payouts/requests` with an `Idempotency-Key` header | Payouts category and an app key | | Follow progress | `payout.requested`, `payout.processing`, `payout.paid` and `payout.failed` webhooks | Approved apps | The Payouts category starts switched off for new apps, so ask us to enable it. An API payout request also needs an account that has passed the ID check. ## If a sale is reversed later Earnings that haven't been paid out simply drop out. If they've already been paid, they're recovered from later earnings, so a balance can go negative until those cover it. ## Paying your app If your app is approved, its 5% commission lands in the app owner's balance and is paid out the same way. ## Next - [Earnings, balances and payouts](https://2fans.dev/docs/build/payouts.md): Show earnings and balances in your product, set up crypto, bank or Paxum payouts, and request them through the API without sending creators to 2fans. - [Refunds and chargebacks](https://2fans.dev/docs/handled/chargebacks.md): Who deals with disputes, what a reversal does to access and earnings, and the webhook events your app gets. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Refunds and chargebacks Who deals with disputes, what a reversal does to access and earnings, and the webhook events your app gets. ## Who handles them Refunds are issued by our team, and chargebacks come to us, so your app doesn't deal with them. Your app can't issue refunds through the API. ## What a reversal does - The buyer loses access to what they bought. - The sale leaves the creator's earnings, and any commission on it goes too. - If those earnings were already paid out, they're recovered from later earnings. See [How payouts work](https://2fans.dev/docs/handled/payouts.md). ## Events your app gets | Event | When | Includes | | --- | --- | --- | | `drop.refunded` | A paid drop is refunded or charged back | The order, `refundedAt`, and `reason` of `refund` or `chargeback` | | `tip.refunded` | A paid tip is refunded or charged back | The tip, `refundedAt`, and `reason` | | `subscription.ended` | A subscription's access ends | `reason`, which can be `refunded` | ## Counting money correctly `POST /drops/check-status` still reports a refunded sale as paid, so use it for delivery only. `GET /earnings` leaves out refunds and chargebacks, so use that for money. ## Reducing disputes Show buyers what they're getting before they pay, and tell them what name will appear on their statement. [How buyers pay](https://2fans.dev/docs/handled/checkout.md) covers what the statement shows. Our [refund policy](https://terms.dropfans.io/refund) sets out when buyers get money back. ## Next - [How payouts work](https://2fans.dev/docs/handled/payouts.md): Earnings land in the creator’s 2fans balance. From $20 they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum, all included with the API. - [Webhooks](https://2fans.dev/docs/build/webhooks.md): Set one signed endpoint for your app and react to sales, refunds, subscriptions, payouts and ID-check results. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Compliance and content rules Who is responsible for records, age checks, AI disclosure, reports and takedowns, and where the policies live. Sales on 2fans run under our rules, and these are the parts that touch what you build. ## Records Approving a creator's ID check generates their release form and 2257 record. Staff decisions on reports and content are written to an audit log. ## Buyer age checks Visitors confirm they're 18 or over. In regions that require more, they're sent through an age check with Didit. Some countries are blocked. Your app doesn't run any of this; it happens on 2fans. ## AI content AI-generated content and AI personas are allowed when they're declared. AI accounts are flagged for moderators, who can remove undeclared AI content. ## Reports and takedowns Anyone can report content. A report goes to our moderation team, who decide what happens to it. If a report reaches your app, send it to `support@dropfans.io` instead of handling it yourself. ## Prohibited content Our [terms](https://terms.dropfans.io/terms) list what can't be sold. A prohibited-word list also blocks or flags text in names and captions. ## Policies - [Terms of service](https://terms.dropfans.io/terms) - [Refund policy](https://terms.dropfans.io/refund) - [DMCA](https://terms.dropfans.io/dmca) - [2257 statement](https://terms.dropfans.io/2257) - [AI content](https://terms.dropfans.io/ai-content) - [Complaints](https://terms.dropfans.io/complaints) - [API terms](https://2fans.io/developers/api-terms) ## What stays with you Store creator keys encrypted and server-side, don't pass them to a frontend, and follow the [API terms](https://2fans.io/developers/api-terms). If you collect creators' details on your own page, show our terms, privacy policy and 2257 statement with an acceptance checkbox, as in [Sign creators up from your own page](https://2fans.dev/docs/build/creator-signup.md). ## Next - [How moderation works](https://2fans.dev/docs/handled/moderation.md): Content moderation is automated and handled by 2fans infrastructure. What each status means, what the checks look for and how to build around them. - [Creator verification](https://2fans.dev/docs/handled/verification.md): How creators are verified: an ID document, face match and liveness check through Didit, with records kept by 2fans and status available in the API. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Fees and limits 15% of each sale with no monthly, setup or listing fee, a $5 to $750 price range, a $20 payout minimum and the API rate limits. ## Fees | | | | --- | --- | | Platform fee | 15% of each sale; the creator keeps 85% | | Monthly, setup or listing fee | None | | App commission | 5% of sales through an approved app's links, for life, paid out of our 15%. The creator's 85% stays the same. | | Buyer tax or add-on | Charged on top of the price | ## Limits | | | | --- | --- | | Price per drop | Free, or $5 to $750 | | Items per drop | Up to 10 | | Payout minimum | $20 | | Earnings hold | At least 14 days per sale | | Personal key | 60 requests a minute and 5,000 a day, shared across the creator's personal keys | | Approved app key | 300 requests a minute and 50,000 a day, per key; higher on request | Read the `X-RateLimit-*` headers instead of hardcoding these. On a `429`, wait for `Retry-After`. ## Next - [How payouts work](https://2fans.dev/docs/handled/payouts.md): Earnings land in the creator’s 2fans balance. From $20 they can request a payout as crypto, a bank transfer or to a card through MassPay, or to Paxum, all included with the API. - [Quickstart: your first pay-per-view link](https://2fans.dev/docs/build/quickstart.md): Get a key, check it, pick content from the vault, create a drop and find out when it sells. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Let your AI set it up A coding agent opens each page, you do the sign-up and ID check, and it continues with your key, your first drop and your app application. Paste this into Claude Code, Codex, Cursor or any agent that can run commands: ```text Set me up on the 2fans API (formerly Dropfans API). Read https://2fans.dev/docs/ai/agent-setup.md and follow it. Do every step you can yourself. When a step needs me, open the page in my browser, tell me exactly what to do there, and wait until I confirm. Never ask me to paste my API key into this chat. ``` The rest of this page is written for that agent. A person has to do the ID check, because it verifies their face and document. ## 1. Agent: open the sign-up page Open https://2fans.io/signup in the person's browser. Tell them to create an account, verify their email and go through onboarding, which ends with the ID check (a government ID and a live selfie). The dashboard opens once the check is submitted. Ask them to tell you when they reach it. macOS: ```bash open "https://2fans.io/signup" ``` Linux: ```bash xdg-open "https://2fans.io/signup" ``` Windows: ```bash start "" "https://2fans.io/signup" ``` ## 2. Agent: get the key without seeing it in chat Open the key screen and tell the person to press **Generate new key**, pick **Other** and copy the key. Then have them add it to a local env file that is in `.gitignore`. Never ask them to paste it into the conversation, and never print it. macOS: ```bash open "https://2fans.io/dashboard/vault?apiConnect=1" # The person runs this themselves, so the key stays out of the chat: printf "DROPFANS_API_KEY=" >> .env.local && pbpaste >> .env.local && echo >> .env.local grep -q "^.env.local$" .gitignore || echo ".env.local" >> .gitignore ``` ## 3. Agent: check the key and watch the ID check Read the key from the env file and call `GET /me`. Show the person the `username` so they can confirm it is the right account. On a `401`, ask them to generate the key again. The response also has `kycStatus`: `session_created`, `in_review`, `processing`, `approved` or `rejected`. Poll about once a minute until it says `approved`, because uploads are refused before that. You no longer need the person for this step. Shell: ```bash set -a; . ./.env.local; set +a curl -s "https://www.dropfans.io/api/external/v1/me" \ -H "Authorization: Bearer $DROPFANS_API_KEY" | grep -o '"kycStatus":"[a-z_]*"' ``` ## 4. Agent: build the integration Fetch the [quickstart](https://2fans.dev/docs/build/quickstart.md) and the [OpenAPI spec](https://2fans.io/developers/openapi.json), then write the code. Upload test media through the API, wait for it to clear moderation, and test with `"price": 0` drops. There is no sandbox or test card, so don't buy paid drops unless the person says so. ## 5. Agent: prepare the app application Only needed if other people's creators will connect, or if the app needs webhooks. Draft answers from what you built: app name, website, contact email, short description, what the app does, which API categories it uses, how many creators are expected, and how keys are stored. Then open the form at https://2fans.io/developers/apply and give the person the answers to submit. If you have a browser tool and the person is logged in, you may fill in the form for them, but let them press submit. Shell: ```bash open "https://2fans.io/developers/apply" ``` ## 6. Agent: finish after approval A person reviews the application, usually within a few business days, and the decision comes by email. After that, have the person generate a key for the app under Vault → API Connect, then set the webhook endpoint with [PUT /webhooks](https://2fans.dev/docs/build/webhooks.md). ## What only a person can do - Pass the ID check. - Press **Generate new key**. - Submit the app application. Everything else can run from the agent. ## Next - [Quickstart: your first pay-per-view link](https://2fans.dev/docs/build/quickstart.md): Get a key, check it, pick content from the vault, create a drop and find out when it sells. - [Files for agents](https://2fans.dev/docs/ai/machine-files.md): Every page here and in the API docs comes in Markdown, with llms.txt indexes and an OpenAPI 3.1 spec for agents and client generators. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # Files for agents Every page here and in the API docs comes in Markdown, with llms.txt indexes and an OpenAPI 3.1 spec for agents and client generators. ## On this site | What | Where | | --- | --- | | Index of every page | [/llms.txt](https://2fans.dev/llms.txt) | | Every page in one file | [/llms-full.txt](https://2fans.dev/llms-full.txt) | | Markdown copy of a page | Add `.md` to its URL, or send `Accept: text/markdown` | The Markdown copies include every step and every code sample. ## Full API reference on 2fans.io | What | Where | | --- | --- | | Docs index | [developers/llms.txt](https://2fans.io/developers/llms.txt) | | Complete docs | [developers/llms-full.txt](https://2fans.io/developers/llms-full.txt) | | OpenAPI 3.1 spec | [developers/openapi.json](https://2fans.io/developers/openapi.json) | ## Rules for agents writing integrations - **Auth:** send `Authorization: Bearer dpfn_…`. Keys start with `dpfn_` because 2fans was called Dropfans until October 2026. - **Base URL:** `https://www.dropfans.io/api/external/v1`. - **Money:** drop prices are in USD dollars; amounts in responses are in cents. - **Moderation:** `PENDING` is a normal response, not an error. Poll every 30 to 60 seconds. - **Word filter:** a caught drop name returns `400` with `matchedWord`. Rewrite it and retry once. - **Rate limits:** read the `X-RateLimit-*` headers. On `429`, wait for `Retry-After` and never retry in a loop. - **Retries:** `POST /drops` has no idempotency key, so check before you retry a failed create. Payout requests require an `Idempotency-Key` header. - **Secrets:** keep keys in the environment. Never log them, echo them or send them to a frontend. - **Refunds:** `check-status` still reports a refunded sale as paid. Use `GET /earnings` or `drop.refunded` for money. ## Next - [Let your AI set it up](https://2fans.dev/docs/ai/agent-setup.md): A coding agent opens each page, you do the sign-up and ID check, and it continues with your key, your first drop and your app application. - [Quickstart: your first pay-per-view link](https://2fans.dev/docs/build/quickstart.md): Get a key, check it, pick content from the vault, create a drop and find out when it sells. 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. Last updated 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # 2fans API compared Factual, sourced comparisons of the 2fans API with the creator platforms that CRMs and agencies ask about, including where each one is the better choice. - [2fans API vs Whop API](https://2fans.dev/vs/whop.md): Whop prohibits adult content and has a sandbox, SDKs and an MCP server. 2fans allows 18+ content and includes creator checks, moderation and payouts at 15%. - [2fans API vs Fangate](https://2fans.dev/vs/fangate.md): Fangate charges 12.5% + 0.25 on each side of a paid link and has no subscriptions. 2fans charges creators 15%, covers subscriptions and tips, and pays approved apps 5%. - [2fans API vs Fanvue API](https://2fans.dev/vs/fanvue.md): Fanvue Checkout Links cost 9.7% against our 15%, but need approval per creator. 2fans links work once a creator is verified and pay approved apps a 5% commission. - [2fans API vs OnlyFansAPI](https://2fans.dev/vs/onlyfansapi.md): OnlyFansAPI is an unofficial API for managing OnlyFans accounts. The 2fans API is official and sells pay-per-view through its own links. --- # 2fans API vs Whop API Whop’s rules prohibit adult content, so if you sell 18+ content the choice is made for you. For anything else, Whop is the fuller API: it costs much less per sale and has a sandbox, official SDKs and an MCP server. | | 2fans API | Whop API | | --- | --- | --- | | 18+ content | Yes, from verified creators | Prohibited | | Cost | 15% of each sale; no monthly, setup or listing fee | 2.7% + $0.30 on domestic cards; 6% + $0.30 with orchestration, billing and tax all on | | Creator payouts | Requested from $20 as crypto, bank transfer, card or Paxum | Connected accounts, revenue-share splits and API payouts | | API | REST, OpenAPI 3.1, bearer keys | REST, bearer keys | | Webhooks | HMAC-SHA256 signed; approved apps | Signed, Standard Webhooks | | SDKs | None published yet | npm @whop/sdk, PyPI whop-sdk, RubyGems whop_sdk | | Sandbox | None; test with free drops | Yes; no payouts, cards only | | MCP server | None yet | Docs and live-data servers | | Checkout | Hosted by 2fans | Hosted links or an embedded element | ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Where 2fans is the better fit - You sell 18+ content. Selling a prohibited product on Whop can mean termination and loss of funds. - You sell one-to-one in chats and need a per-fan reference on each link. - You want moderation run for you as well as checkout and payouts. ## Where Whop API is the better fit - Your product isn’t adult: memberships, courses, software or communities. - You want lower fees, a sandbox, official SDKs and an MCP server today. - You want checkout embedded on your own page. ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Sources - [Whop: what is not allowed](https://docs.whop.com/trust-and-safety/trust-safety-overview/what-is-not-allowed-on-whop.md) - [Whop fees](https://docs.whop.com/fees.md) - [Whop sandbox](https://docs.whop.com/developer/guides/sandbox.md) - [Whop AI and MCP](https://docs.whop.com/developer/guides/ai_and_mcp.md) Competitor details change, so check them before you decide. Last checked 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # 2fans API vs Fangate Both give a CRM paid links through an API, with checkout and delivery on the provider. Fangate takes less from the creator and lets you generate a key without an app review. 2fans also covers subscriptions and tips, and pays approved apps 5% of the sales they bring in. | | 2fans API | Fangate | | --- | --- | --- | | 18+ content | Yes, from verified creators | Its main use case | | Fee from the creator | 15% of each sale; no monthly, setup or listing fee | 12.5% + 0.25 per sale | | What the buyer pays | The list price plus a country add-on: 10% in most countries, the local rate in Europe | The list price plus 12.5% + 0.25 | | What you can sell | Drops, weekly or monthly subscriptions, and tips | Paid media links; no subscriptions, by design | | Earning as a builder | 5% of sales through your links, paid out of our fee | Not mentioned on its API or pricing pages; agencies agree a share of the creator’s net | | API access | A personal key once the ID check is submitted; an app review to connect other people’s creators | Key from the dashboard after you verify a free account | | Webhooks | HMAC-SHA256 signed; approved apps | HMAC-SHA256 signed; payment events | | Creator payouts | Requested from $20 as crypto, bank transfer, card or Paxum | Twice a month from $30; each sale available after 14 days | | Creator checks | ID, face match and liveness through Didit | Veriff | | Checkout | Hosted by 2fans | Hosted by Fangate | ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Where 2fans is the better fit - You want subscriptions and tips as well as paid links. - You build a CRM and want to earn on the sales you bring in. - You want a lower payout minimum: $20 against $30. ## Where Fangate is the better fit - You want a lower fee from the creator. - You want API keys with no app review. - You only sell one-off paid links. ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Sources - [Fangate pricing](https://fangate.app/pricing) - [Fangate API](https://fangate.app/api) - [Fangate docs](https://docs.fangate.app/getting-started/introduction.html) Competitor details change, so check them before you decide. Last checked 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # 2fans API vs Fanvue API Fanvue is the closest comparison. Its Checkout Links are cheaper at 9.7% on cards, and it already has an SDK and an MCP server, but checkout is by approval, with KYC and KYB, and each creator has to be enabled. On 2fans, links work once a creator is verified and their content is approved, and approved apps earn 5% of sales. | | 2fans API | Fanvue API | | --- | --- | --- | | 18+ content | Yes, from verified creators | Allowed on the platform; checkout needs written approval | | Cost | 15% of each sale; no monthly, setup or listing fee | Checkout Links 9.7% on cards, 15% on BNPL; platform sales 20% | | Getting checkout | Creator verification and approved content | By approval with KYC and KYB, enabled per creator | | Earning as a builder | 5% of sales through your links, paid out of our fee | App Store billing: developer 80%, Fanvue 20% | | API | REST, OpenAPI 3.1, bearer keys | REST, OpenAPI, OAuth 2.0 with PKCE | | Rate limit | 300 a minute per app key | 200 a minute per user | | Webhooks | HMAC-SHA256 signed; approved apps | HMAC-SHA256 signed | | SDK | None published yet | npm @fanvue/builder-sdk | | Sandbox | None; test with free drops | None | | MCP server | None yet | Yes | ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Where 2fans is the better fit - You build for creators and want a commission on every sale through your links. - You sell in chats and want per-fan references on Telegram and web links. - You don’t want each creator to apply for checkout. ## Where Fanvue API is the better fit - You can get approved and want the lower 9.7% on cards. - You want an SDK and MCP server today. - Your creators already earn on Fanvue. ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Sources - [Fanvue checkout seller terms](https://legal.fanvue.com/checkout-seller-terms) - [Fanvue creator earnings](https://legal.fanvue.com/creator-earnings-payouts) - [Fanvue checkout API](https://api.fanvue.com/docs/checkout/create.md) - [Fanvue MCP server](https://api.fanvue.com/docs/mcp-server.md) - [Fanvue rate limits](https://api.fanvue.com/docs/authentication/rate-limits.md) Competitor details change, so check them before you decide. Last checked 2026-11-02. All pages: https://2fans.dev/llms.txt. --- # 2fans API vs OnlyFansAPI They do different jobs. OnlyFansAPI is an independent, unofficial API for agencies managing OnlyFans accounts, and it doesn’t sell to fans itself. The 2fans API is run by the platform itself and sells pay-per-view through its own links. If your creators are on OnlyFans, you may want both. | | 2fans API | OnlyFansAPI | | --- | --- | --- | | What it is | The platform’s own API | An unofficial API, not affiliated with OnlyFans | | Sells to fans | Yes | No; it reads earnings from OnlyFans | | Platform risk | Allowed and supported | Its terms note that OnlyFans prohibits automated data tools, and account bans are your responsibility | | Cost | 15% of each sale; no monthly, setup or listing fee | Free plan, then $69 a month and up per plan | | Rate limit | 300 a minute per app key | 60 to 1,000 a minute by plan | | Webhooks | HMAC-SHA256 signed; approved apps | HMAC-SHA256, on paid plans | | SDKs | None published yet | npm, PyPI, PHP and Ruby | | MCP server | None yet | Yes | ## Do you need your own processing contract? **Adding pay-per-view for creators to your CRM: no.** Integrate the 2fans API and creators sell through 2fans links, on a checkout already set up for 18+ content. Providers advertise days or weeks for your own contract; in our experience it takes 6 to 12 months. Here you can be selling today, once the ID check and content are approved. Connecting other people's creators also takes an app review, usually a few business days. **Selling your own products on your own checkout: yes.** 2fans can't take payments for those. Adult billers such as CCBill, Segpay and Verotel are the usual route. **Want your own contract later?** Start here and you build real sales numbers first, with reports from the API. They aren't processing history on an account of your own, so each provider decides what they count for, but you'll apply knowing what sells. ## Where 2fans is the better fit - You want to sell through links without the fan being on OnlyFans. - You want an API the platform supports. - You want a lower fee than OnlyFans’ 20%. ## Where OnlyFansAPI is the better fit - Your creators earn on OnlyFans and you need to manage those accounts. - You want an SDK and MCP server today. ## Create a pay-per-view link ```bash curl -X POST "https://www.dropfans.io/api/external/v1/drops" \ -H "Authorization: Bearer $DROPFANS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Beach set", "price": 15, "vaultItemIds": ["VAULT_ITEM_A", "VAULT_ITEM_B"] }' ``` Response: ```json { "productId": "…", "buyUrl": "https://www.dropfans.io/buy/…", "mediaCount": 2 } ``` 2fans was called Dropfans until October 2026, so the API host is still www.dropfans.io and keys still start with dpfn_. ## Sources - [OnlyFansAPI llms.txt](https://onlyfansapi.com/llms.txt) - [OnlyFansAPI terms](https://onlyfansapi.com/terms-of-service) - [OnlyFansAPI pricing](https://onlyfansapi.com/pricing) - [OnlyFansAPI docs](https://docs.onlyfansapi.com/introduction) Competitor details change, so check them before you decide. Last checked 2026-11-02. All pages: https://2fans.dev/llms.txt.