2fansAPI docs

White label 2fans

View as Markdown

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. 1Get your app approved and ask for white label

    Apply for app access, 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. 2Onboard 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.

    curl
    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
    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
    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. 3Choose 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
    // 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. 4Build 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 covers the numbers. Chat operations are in API v1 once chat is enabled for your app, so your chat interface can look and work however you want.

  5. 5Send 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
    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
    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
    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

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

Last updated 2026-11-02