LogoFansly API
Fansly Webhooks Guide: Real-Time Events Without Polling

Fansly Webhooks Guide: Real-Time Events Without Polling

By Anna

Question answered

How do Fansly webhooks work and how do I set them up?

TL;DR

  • Fansly webhooks push events to your server in real time — every message, sale, subscription, tip, post like, and account status change.
  • Webhooks cost 1 credit per 100 events vs. polling that burns thousands of credits per day, making them 100-1000x cheaper at scale.
  • Set up takes 5 minutes: register an endpoint URL, copy the signing secret, verify HMAC-SHA256 signatures, and react to events as they happen.
Webhooks are the difference between a scraper that breaks and a production system that scales. One credit per 100 events — there is no reason not to use them.
Anna, Editor, Fansly API

Key definitions

Webhook
An HTTP callback Fansly sends to your server the moment an event happens. The opposite of polling — you do not ask, the platform tells you.
HMAC-SHA256 signature
A cryptographic hash that proves a webhook came from Fansly and was not tampered with in transit. Verify before processing every delivery.
Idempotency key
A unique identifier on each webhook delivery. Use it to safely deduplicate retried events so the same payment is not credited twice.

Key data points

API requests & webhooks processed

150M+

Source

Companies using Fansly API

500+

Source

Developer/operations hours saved

220K+

Source

If your Fansly integration polls the API every minute to check for new messages, sales, or subscriptions, you are burning credits, adding latency, and missing events between polls. Fansly webhooks flip the model: every event in Fansly pushes to your server the moment it happens, with cryptographic signing, automatic retries, and a built-in idempotency contract for safe deduplication.

This guide covers what events fire webhooks, how to set them up in under five minutes, how to handle them safely in production, and the agency use cases that justify the switch from polling.

Why webhooks beat polling for Fansly

Polling looks innocent: a cron job that hits the Fansly API every minute to ask "anything new?" In reality it has three expensive problems:

  1. Cost — every poll consumes credits whether new events happened or not. A "every minute" poll across 20 creator accounts burns 28,800 calls/day. Webhooks for the same coverage cost a fraction.
  2. Latency — between polls, events sit in the platform waiting. A whale tip happens at 9:00:15; your scraper notices at 9:01:00. The 45-second gap is where chatter follow-up windows close.
  3. Reliability — polling races against rate limits. Webhook deliveries are queued by Fansly and retried until your server acknowledges them.

Webhooks remove all three. One event = one HTTP delivery = one credit per 100 events.

Fansly webhook event types

Every meaningful event on a connected Fansly account fires a webhook. Common ones:

Event Fires when
message.received A fan sends a DM to a creator
message.sent The creator sends a DM (via API or platform)
sale.completed A fan completes a purchase (PPV, tip, subscription)
subscription.created A fan subscribes for the first time
subscription.renewed A fan's subscription auto-renews
subscription.expired A fan's subscription ends
tip.received A fan sends a tip
post.liked A fan likes a post
typing.started A fan starts typing in a chat
account.status_changed A connected account changes state

The full list is visible in the dashboard once you register an endpoint. New events ship regularly without breaking existing handlers.

How to set up Fansly webhooks in 5 minutes

  1. Open the Fansly API dashboard — go to the Webhooks section
  2. Add an endpoint — paste your server URL (HTTPS only — Fansly does not deliver to HTTP)
  3. Pick events to subscribe to — start with message.received, sale.completed, subscription.renewed, and subscription.expired. Expand later.
  4. Copy the signing secret — store it in your environment as FANSLY_WEBHOOK_SECRET
  5. Test from the dashboard — Fansly fires a test event so you can verify your server accepts and responds 200
  6. Go live — toggle the endpoint to Active

That's it. Your server starts receiving events the moment they happen.

Verifying Fansly webhook signatures

Every delivery includes an X-Fansly-Signature header. Verify it before processing any payload — otherwise an attacker could forge fake events.

import { createHmac } from 'crypto'
 
function verifyWebhook(rawBody, signatureHeader, secret) {
  const expected = createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')
  return signatureHeader === expected
}
 
// In your handler:
if (!verifyWebhook(req.rawBody, req.headers['x-fansly-signature'], process.env.FANSLY_WEBHOOK_SECRET)) {
  return res.status(401).send('invalid signature')
}

Note the use of rawBody — you must hash the body before JSON parsing or middleware mutation. Most web frameworks have a raw-body mode you need to enable.

Handling Fansly webhook retries safely

Fansly retries any delivery that doesn't return a 2xx response, with exponential backoff. Your server may see the same event 2-5 times under flaky network conditions.

Deduplicate using the idempotency key on every event:

const seen = new Set() // use Redis or a database for multi-instance setups
 
async function handleWebhook(event) {
  if (seen.has(event.idempotencyKey)) {
    return // already processed, skip
  }
  seen.add(event.idempotencyKey)
  await processEvent(event) // safe to run business logic now
}

For low-volume use cases (< 10k events/day per server), an in-memory Set works. For production with multiple workers, store keys in Redis with a 24-hour TTL.

Agency use cases — what webhooks actually unlock

Webhooks are not a developer convenience. They are the foundation of every revenue-driving automation an agency runs.

Real-time whale alerts → catch tips in minutes

Subscribe to tip.received, filter for amounts ≥ $100, push to a Slack channel or chatter Telegram. Result: chatters reach out while the fan is still in the conversation, not the morning after when the opportunity is gone.

Welcome sequences → activate new subs in the first hour

Subscribe to subscription.created. Wait 1 hour. Send personalized welcome DM via the messaging API. Wait 24 hours. Follow up with PPV. Result: 3-5x higher first-week revenue per new sub vs. waiting for manual chatter outreach.

Churn winback → recover 15-25% of expired subs

Subscribe to subscription.expired. Wait 7 days. Send a personalized DM with a discount code from the Promotions endpoint and a tracking link. Result: thousands of dollars in recovered MRR from a workflow that runs itself.

Chatter routing → put the right person on the right fan

Subscribe to message.received. Pull fan spend tier from the Fans endpoint. Route high-LTV fans to senior chatters, new fans to onboarders, dormant fans to retention specialists. Result: every fan gets the right level of attention without manual triage.

Real-time revenue dashboards → finance stops asking

Subscribe to sale.completed and subscription.renewed. Stream to BigQuery, Snowflake, or a Google Sheet via n8n / Zapier / Make.com. Result: finance team sees revenue land in their dashboard within seconds, not at month-end reconciliation.

Compliance and content monitoring → catch problems before they escalate

Subscribe to message.received. Run text through a moderation classifier (OpenAI Moderation API, Perspective API, or your own model). Flag and route problem messages to ops. Result: account safety risk dropped, manual review hours eliminated.

Production tips for Fansly webhooks

  • Respond 200 fast. Acknowledge receipt, queue the event for async processing. Long synchronous handlers cause timeouts and trigger retries.
  • Log every delivery. Even with idempotency keys, keep a log of payload + response for audit and debugging. The dashboard has a Webhook Logs page that surfaces the Fansly-side view.
  • Test failure modes. Simulate slow database queries, third-party API outages, and storage failures. Your handler should never crash on a single bad event.
  • Use HTTPS with valid certs. Fansly does not deliver to HTTP endpoints or invalid TLS. Set up Let's Encrypt or AWS ACM if you don't already have it.
  • Watch the dashboard. The Webhook Logs page shows every delivery attempt, retry count, and final status. Set up an alert when failure rate exceeds 1% over a 5-minute window.

Pricing for Fansly webhooks

Webhook deliveries cost 1 credit per 100 events — typically 100-1000x cheaper than polling-equivalent coverage.

A creator account with high fan activity (5,000+ events/day across messages, likes, tips, subscriptions) costs ~50 credits/day in webhook deliveries. The same coverage with 1-minute polling would consume 1,440 calls/day at standard credit cost.

Plans and credit allowances:

  • Basic — $69/month: 20,000 credits, 1 account, full webhook access
  • Pro — $299/month: 100,000 credits, 5 accounts, full webhook access
  • Enterprise — 100+ accounts: dynamic pricing as low as $11.60 per account, custom credits

Webhooks are included on every paid plan — there is no premium tier required.

See the full pricing page for credit allowances and overage rates.

Frequently asked Fansly webhook questions

What is the difference between polling and Fansly webhooks? Polling means your server asks the Fansly API every minute (or every second) whether anything new happened. Webhooks mean Fansly tells your server the moment it happens. Webhooks are 100-1000x cheaper at scale, faster, and more reliable — there is no race condition where you miss events between polls.

Are Fansly webhooks reliable enough for production? Yes. Every delivery includes an HMAC-SHA256 signature for verification, an idempotency key for safe retries, and automatic exponential-backoff retry on failure. We have processed 150M+ events with delivery guarantees that match enterprise standards.

Which Fansly events fire webhooks? Messages received and sent, sales completed, subscriptions created, renewed, and expired, tips received, PPV purchased, post interactions, typing indicators, account status changes, and more. The full event list is available in the dashboard once you register an endpoint.

How do I handle Fansly webhook retries safely? Every webhook delivery includes a unique idempotency key. Store the keys you have already processed (in Redis, a database, or even an in-memory set for low-volume cases) and skip any duplicate. Failed deliveries retry with exponential backoff until they succeed or time out.

Can I use Fansly webhooks without writing code? Yes. n8n, Zapier, and Make.com all expose webhook trigger nodes. Paste the URL into the Fansly dashboard and your no-code workflow starts the moment the event fires — no server, no code, no infrastructure to maintain.

What changed in the June 2025 release

This guide reflects the June 2025 Fansly API release which introduced:

  • Production webhooks — real-time event delivery for messages, sales, subscriptions, tips, post interactions, typing indicators, and account state changes
  • Make.com integration — first no-code platform with full Fansly API coverage, prebuilt scenarios for transaction sync and link tracking
  • Media management endpoints — upload photos, videos, audio; organize vault media; create vault lists
  • Post management — schedule posts with labels, media, polls (regular and quizzes), fundraising targets, expiration dates
  • Advanced chat messaging — PPVs, media attachments, creator tags
  • Text formatting — bold, italic, color, and size in posts and messages

Follow @fanslyapi on Telegram for the latest updates.


Ready to switch from polling? Sign up free — first 10 credits included, no credit card required.

Questions? Reach out via email or Telegram.

FAQ

What is the difference between polling and Fansly webhooks?

Polling means your server asks the Fansly API every minute (or every second) whether anything new happened. Webhooks mean Fansly tells your server the moment it happens. Webhooks are 100-1000x cheaper at scale, faster, and more reliable — there is no race condition where you miss events between polls.

Are Fansly webhooks reliable enough for production?

Yes. Every delivery includes an HMAC-SHA256 signature for verification, an idempotency key for safe retries, and automatic exponential-backoff retry on failure. We have processed 150M+ events with delivery guarantees that match enterprise standards.

Which Fansly events fire webhooks?

Messages received and sent, sales completed, subscriptions created, renewed, and expired, tips received, PPV purchased, post interactions, typing indicators, account status changes, and more. The full event list is available in the dashboard once you register an endpoint.

How do I handle Fansly webhook retries safely?

Every webhook delivery includes a unique idempotency key. Store the keys you have already processed (in Redis, a database, or even an in-memory set for low-volume cases) and skip any duplicate. Failed deliveries retry with exponential backoff until they succeed or time out.

Can I use Fansly webhooks without writing code?

Yes. n8n, Zapier, and Make.com all expose webhook trigger nodes. Paste the URL into the Fansly dashboard and your no-code workflow starts the moment the event fires — no server, no code, no infrastructure to maintain.

Ready to start building on top of Fansly?

Start for free
Fansly Webhooks Guide: Real-Time Events Without Polling | Fansly API