Skip to main content
Learn how to send messages to multiple users at once using smart lists and custom lists. This tutorial covers the two-step process: discovering your audience lists and sending targeted mass messages.

Overview

Mass messaging allows you to send a single message to many users efficiently. Instead of sending individual messages, you can target entire audience segments defined by:
  • Smart Lists: Pre-built audience segments (subscribers, followers, expired subscribers, etc.)
  • Custom Lists: User-created lists for custom audience targeting

The Two-Step Flow

Step 1: Discover Available Lists
  • Fetch smart lists to see pre-built audience segments
  • Fetch custom lists to see user-created segments
  • Optionally fetch members to preview recipients
Step 2: Send the Mass Message
  • Select lists to include (required)
  • Optionally select lists to exclude
  • Send with text, media, or pay-to-view content

Authentication Required

Mass messaging requires OAuth with these scopes:
  • write:chat - Permission to send messages
  • read:fan - Permission to read fan/subscriber data
See the OAuth Tutorial for setup instructions.

Prerequisites

  • OAuth authentication with required scopes (see note above)
  • Basic familiarity with REST APIs
  • Understanding of your Fanvue audience structure

Step 1: Discovering Your Lists

Before sending a mass message, you need to know which lists are available. There are two types:

Smart Lists (Pre-built Audiences)

Smart lists are automatically maintained audience segments based on user behavior and relationships.

Fetch All Smart Lists

Response:
Each entry’s uuid is one of the fixed identifiers below. The key is named uuid for backward compatibility, but the value is a fixed identifier string, never a real UUID. Available Smart List identifiers: These are a fixed, predefined set of lowercase string identifiers — not UUIDs, despite the uuid key above and the legacy smartListUuids field name used when sending a mass message:
  • subscribers - Users with an active subscription
  • auto_renewing - Subscribers whose subscription will auto-renew
  • non_renewing - Subscribers who have turned off auto-renew
  • followers - Users following you without an active subscription
  • free_trial_subscribers - Subscribers currently on a free trial
  • expired_subscribers - Users whose subscription has expired
  • spent_more_than_50 - Users who have spent more than $50
  • muted - Users you have muted
  • creators - Creators you have a chat with
Smart list identifiers are lowercase with underscores and come from the fixed set listed above. They are not UUIDs — do not build a UUID validator for smart list identifiers. Only customListUuids accepts real UUIDs.

Preview Smart List Members (Optional)

Response:

Custom Lists (User-created Audiences)

Custom lists are manually created segments for specific targeting.

Fetch All Custom Lists

Response:

Preview Custom List Members (Optional)

Response structure is the same as smart list members.

TypeScript Example: Fetching Lists

Step 2: Sending Mass Messages

Once you know your available lists, you can send a mass message to one or more lists.

Basic Mass Message Request

Response:

Request Schema

Smart list values are fixed identifier strings, not UUIDs. The field accepts a fixed, predefined set of lowercase string identifiers (the same field on excludedLists behaves identically). Do not generate, validate against, or expect UUID values here — sending a UUID will be rejected. Only customListUuids accepts real UUIDs (those returned by the custom-lists endpoint).The complete set of accepted smart list identifiers is:
  • subscribers — users with an active subscription
  • auto_renewing — subscribers whose subscription will auto-renew
  • non_renewing — subscribers who have turned off auto-renew
  • followers — users following you without an active subscription
  • free_trial_subscribers — subscribers currently on a free trial
  • expired_subscribers — users whose subscription has expired
  • spent_more_than_50 — users who have spent more than $50
  • muted — users you have muted
  • creators — creators you have a chat with
These are the only valid values; any other string is rejected.
smartListIds is the current field name. It replaced smartListUuids, which was misleading because the values were never UUIDs. smartListUuids is retained as a deprecated alias and is still accepted on includedLists and excludedLists, so existing integrations keep working — but new code should send smartListIds. If both are present, smartListIds wins. Responses echo both fields for backward compatibility; smartListUuids will be removed in a future API version.
Validation Rules:
  • Must provide either text or mediaUuids (or both)
  • At least one list must be included
  • If price is set, mediaUuids must be provided
  • Price must be in cents (e.g., 999 = $9.99) with a minimum of 200 (i.e., $2.00)
  • Smart list identifiers are lowercase (e.g., "subscribers", not "SUBSCRIBERS")

Practical Examples

Example 1: Send to All Subscribers

Example 2: Send to Multiple Lists

Target both active and expired subscribers:

Example 3: Send to Custom List with Exclusions

Send to VIP list but exclude users who already received a similar message:

Example 4: Send Pay-to-View Message with Media

Send a message with media that requires payment to unlock:
Price is specified in cents. In this example, 999 represents 9.99.Minimumpriceis200cents(9.99. Minimum price is 200 cents (2.00).

Example 5: Combine Smart and Custom Lists

Complete TypeScript Implementation

Here’s a full example combining list discovery and mass messaging:

Best Practices

1. Start Small

When testing, start with a small custom list or use the preview feature to understand your audience:

2. Handle Rate Limits

The mass messages endpoint has rate limits. Handle them gracefully:

3. Validate Before Sending

4. Track Send History

Store mass message results for analytics:

Troubleshooting

”At least one list must be provided”

Ensure you’re providing at least one list in includedLists:

“Smart list not found”

Smart list identifiers must be lowercase:

403 Forbidden Error

Verify you have the required OAuth scopes:
  • write:chat
  • read:fan
Check your OAuth configuration includes both scopes.

Empty recipientCount

If recipientCount is 0, the lists might be empty or exclusions removed all recipients:

Additional Resources