# 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.