OnlyFans API

Available Fanvue webhook events

A list of all available Fanvue webhook events that you can subscribe to.

All Fanvue events are prefixed with fanvue. so they never collide with the OnlyFans events or the Fansly events. Each relayed event is named after its Fanvue webhook topic with creator. replaced by fanvue., so Fanvue's creator.payment.succeeded arrives as fanvue.payment.succeeded.

We're enabling Fanvue team by team, and these events are only offered once it's on for your team. See the Fanvue API overview.

Payloads are Fanvue's, passed through

Fanvue events use the same envelope as the OnlyFans and Fansly events: an event name, the account_id of the connected account, and a platform-native payload:

Envelope
{
    "event": "fanvue.<category>.<name>",
    "account_id": "fanvue_acct_123",
    "payload": { }
}

Apart from the three account events, payload is the data object of Fanvue's webhook, forwarded unchanged. Nothing is renamed, reshaped or added to match our OnlyFans or Fansly events, so Fanvue's webhook reference is the field-level source of truth, and every event below links to its page there.

Fanvue's own id, type and timestamp envelope fields are not forwarded. Deduplicate on the X-OFAPI-Idempotency-Key header instead, as described in Delivery and retries.

Amounts in payload are integers in minor units of currency, as Fanvue sends them. For USD that is cents, so 1999 means $19.99.

Accounts

These three events are ours rather than Fanvue's, so their payload is our summary of the connected account instead of a Fanvue resource.

fanvue.account.connected

A Fanvue account was connected or reconnected.

Example payload
{
    "event": "fanvue.account.connected",
    "account_id": "fanvue_acct_123",
    "payload": {
        "id": "fanvue_acct_123",
        "fanvue_user_uuid": "3bbe6394-2830-4646-a8ba-4a0a05426947",
        "handle": "jane",
        "display_name": "Jane Doe",
        "avatar_url": null,
        "is_ai_creator": false,
        "roles": [
            "creator"
        ],
        "granted_scopes": [
            "openid",
            "offline_access",
            "offline",
            "read:self",
            "read:chat",
            "write:chat",
            "read:fan",
            "read:creator",
            "write:creator",
            "read:media",
            "write:media",
            "read:post",
            "write:post",
            "read:insights",
            "read:tracking_links",
            "write:tracking_links"
        ],
        "status": "active",
        "connected_at": "2026-09-22T11:26:38.000000Z"
    }
}

fanvue.account.disconnected

A Fanvue account was disconnected in the dashboard or with DELETE /api/fanvue/accounts/{fanvueAccount}. Further API calls for it return a 404, so stop polling it. If the creator is reconnected from the same team, the account comes back under the same fanvue_acct_ ID.

Example payload
{
    "event": "fanvue.account.disconnected",
    "account_id": "fanvue_acct_123",
    "payload": {
        "id": "fanvue_acct_123",
        "fanvue_user_uuid": "3bbe6394-2830-4646-a8ba-4a0a05426947",
        "handle": "jane",
        "display_name": "Jane Doe",
        "avatar_url": null,
        "is_ai_creator": false,
        "roles": [
            "creator"
        ],
        "granted_scopes": [
            "openid",
            "offline_access",
            "offline",
            "read:self",
            "read:chat",
            "write:chat",
            "read:fan",
            "read:creator",
            "write:creator",
            "read:media",
            "write:media",
            "read:post",
            "write:post",
            "read:insights",
            "read:tracking_links",
            "write:tracking_links"
        ],
        "status": "active",
        "connected_at": "2026-09-22T11:26:38.000000Z"
    }
}

fanvue.account.needs_reauth

Fanvue rejected the account's credentials, so API calls for it fail until you reconnect it in the dashboard. Its webhook events keep arriving meanwhile.

Example payload
{
    "event": "fanvue.account.needs_reauth",
    "account_id": "fanvue_acct_123",
    "payload": {
        "id": "fanvue_acct_123",
        "fanvue_user_uuid": "3bbe6394-2830-4646-a8ba-4a0a05426947",
        "handle": "jane",
        "display_name": "Jane Doe",
        "avatar_url": null,
        "is_ai_creator": false,
        "roles": [
            "creator"
        ],
        "granted_scopes": [
            "openid",
            "offline_access",
            "offline",
            "read:self",
            "read:chat",
            "write:chat",
            "read:fan",
            "read:creator",
            "write:creator",
            "read:media",
            "write:media",
            "read:post",
            "write:post",
            "read:insights",
            "read:tracking_links",
            "write:tracking_links"
        ],
        "status": "needs_reauth",
        "connected_at": "2026-09-22T11:26:38.000000Z"
    }
}

Payments

fanvue.payment.succeeded

A fan paid for a post, message, media or tip, or was charged for a new or renewing subscription.

Fanvue reference: Payments

Example payload
{
    "event": "fanvue.payment.succeeded",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "payment",
        "id": "FV-12345",
        "status": "succeeded",
        "source": "message",
        "billing_reason": "one_time",
        "gross": 1999,
        "net": 1799,
        "fees": {
            "fanvue_fee": 200,
            "transaction_fee": 0
        },
        "currency": "USD",
        "paid_in_full": true,
        "client_reference_id": null,
        "transaction_id": null,
        "post_uuid": null,
        "message_uuid": "2f7c5e8a-6d36-4e3a-98d9-9f1b3b0a1a10",
        "message_type": "SINGLE_RECIPIENT",
        "tip_context": null,
        "created_at": "2026-06-09T08:39:33.139Z",
        "paid_at": "2026-06-09T08:39:33.139Z",
        "subscription": null,
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {},
        "tracking": {
            "link_url": "https://fanvue.com/creator-handle?fvc=summer-campaign",
            "metadata": {
                "campaign": "summer",
                "source": "x"
            }
        }
    }
}

fanvue.reward.created

You earned a referral or affiliate commission.

Fanvue reference: Payments

Example payload
{
    "event": "fanvue.reward.created",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "reward",
        "id": "FVR-4455",
        "amount": 500,
        "currency": "USD",
        "source_payment_id": "FV-12345",
        "referred_creator": {
            "uuid": "referred-creator-uuid"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "created_at": "2026-06-09T08:45:00.000Z",
        "metadata": {}
    }
}

fanvue.reward.reversed

A referral or affiliate commission was clawed back because its sale was refunded or charged back. It carries the same id as the fanvue.reward.created it reverses.

Fanvue reference: Payments

Example payload
{
    "event": "fanvue.reward.reversed",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "reward",
        "id": "FVR-4455",
        "amount": 500,
        "currency": "USD",
        "source_payment_id": "FV-12345",
        "referred_creator": {
            "uuid": "referred-creator-uuid"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "created_at": "2026-06-09T08:45:00.000Z",
        "metadata": {}
    }
}

Refunds & disputes

fanvue.refund.created

A payment was refunded in full. amount equals the original gross.

Fanvue reference: Refunds and disputes

Example payload
{
    "event": "fanvue.refund.created",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "refund",
        "id": "FVC-12345",
        "payment_id": "FV-12345",
        "amount": 1999,
        "currency": "USD",
        "reason": null,
        "full_amount": true,
        "created_at": "2026-06-09T08:40:00.000Z",
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        }
    }
}

fanvue.dispute.flagged

An early chargeback warning was raised on a payment, before any formal dispute.

Fanvue reference: Refunds and disputes

Example payload
{
    "event": "fanvue.dispute.flagged",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "dispute",
        "id": "dp_abc123",
        "status": "warning",
        "amount": 1999,
        "currency": "USD",
        "reason": "fraudulent",
        "created_at": "2026-06-09T08:41:00.000Z",
        "payment": {
            "id": "FV-12345",
            "transaction_id": "txn_abc",
            "purchaser": {
                "uuid": "fan-uuid",
                "email": null,
                "handle": "janed",
                "display_name": "Jane D"
            }
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        }
    }
}

fanvue.dispute.created

A formal chargeback dispute was opened on a payment.

Fanvue reference: Refunds and disputes

Example payload
{
    "event": "fanvue.dispute.created",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "dispute",
        "id": "dp_abc123",
        "status": "open",
        "amount": 1999,
        "currency": "USD",
        "reason": "fraudulent",
        "created_at": "2026-06-09T08:41:00.000Z",
        "payment": {
            "id": "FV-12345",
            "transaction_id": "txn_abc",
            "purchaser": {
                "uuid": "fan-uuid",
                "email": null,
                "handle": "janed",
                "display_name": "Jane D"
            }
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        }
    }
}

Subscriptions

fanvue.subscription.activated

A subscription became active because a new fan subscribed or a lapsed fan resubscribed. The charge arrives separately as fanvue.payment.succeeded.

Fanvue reference: Subscriptions

Example payload
{
    "event": "fanvue.subscription.activated",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "subscription",
        "id": "FV-12345",
        "status": "active",
        "cancel_at_period_end": false,
        "auto_renew": true,
        "price": 999,
        "expires_at": "2026-07-09T08:39:33.139Z",
        "current_period_start": "2026-06-09T08:39:33.139Z",
        "renew_date": "2026-07-09T08:39:33.139Z",
        "renew_price": 999,
        "created_at": "2026-06-09T08:39:33.139Z",
        "deactivation_reason": null,
        "client_reference_id": "crm-contact-8821",
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        },
        "tracking": {
            "link_url": "https://fanvue.com/creator-handle?fvc=spring-promo",
            "metadata": {
                "campaign": "spring-promo",
                "source": "x"
            }
        }
    }
}

fanvue.subscription.renewed

A subscription rolled into a new billing period without lapsing. The charge arrives separately as fanvue.payment.succeeded.

Fanvue reference: Subscriptions

Example payload
{
    "event": "fanvue.subscription.renewed",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "subscription",
        "id": "FV-12345",
        "status": "active",
        "cancel_at_period_end": false,
        "auto_renew": true,
        "price": 999,
        "expires_at": "2026-08-09T08:39:33.139Z",
        "current_period_start": "2026-07-09T08:39:33.139Z",
        "renew_date": "2026-08-09T08:39:33.139Z",
        "renew_price": 999,
        "created_at": "2026-06-09T08:39:33.139Z",
        "deactivation_reason": null,
        "client_reference_id": "crm-contact-8821",
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        },
        "tracking": null
    }
}

fanvue.subscription.deactivated

A subscription ended and the fan lost access. deactivation_reason says why.

Fanvue reference: Subscriptions

Example payload
{
    "event": "fanvue.subscription.deactivated",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "subscription",
        "id": null,
        "status": "expired",
        "cancel_at_period_end": false,
        "auto_renew": true,
        "price": 999,
        "expires_at": "2026-07-09T08:39:33.139Z",
        "current_period_start": "2026-06-09T08:39:33.139Z",
        "renew_date": null,
        "renew_price": null,
        "created_at": "2026-06-09T08:39:33.139Z",
        "deactivation_reason": "not_renewed",
        "client_reference_id": "crm-contact-8821",
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        },
        "tracking": null
    }
}

fanvue.subscription.cancel_at_period_end_changed

A fan turned auto-renew off or back on. Access continues until expires_at.

Fanvue reference: Subscriptions

Example payload
{
    "event": "fanvue.subscription.cancel_at_period_end_changed",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "subscription",
        "id": null,
        "status": "active",
        "cancel_at_period_end": true,
        "auto_renew": false,
        "price": 999,
        "expires_at": "2026-07-09T08:39:33.139Z",
        "current_period_start": "2026-06-09T08:39:33.139Z",
        "renew_date": null,
        "renew_price": null,
        "created_at": "2026-06-09T08:39:33.139Z",
        "deactivation_reason": "subscriber_requested",
        "client_reference_id": "crm-contact-8821",
        "purchaser": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {
            "campaign": "spring-promo"
        },
        "tracking": null
    }
}

Messages & chats

fanvue.message.received

A fan sent you a message.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.received",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "message",
        "uuid": "2f7c5e8a-6d36-4e3a-98d9-9f1b3b0a1a10",
        "sender": "fan",
        "created_at": "2026-06-09T08:39:33.139Z",
        "deleted_at": null,
        "text": "Hey! Loved your latest post 😍",
        "message_type": "SINGLE_RECIPIENT",
        "is_muted": false,
        "media_uuids": [
            "b8c47a91-3f2d-4a55-b7e8-1c9d2e4f5a6b",
            "c1d58b02-4e3e-4b66-c8f9-2d0e3f5a6b7c"
        ],
        "price": 300,
        "is_automated": false,
        "unread_messages_count": 3,
        "creator": {
            "uuid": "creator-uuid"
        },
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed",
            "avatar_url": "https://cdn.fanvue.com/avatars/example.jpg"
        },
        "metadata": {}
    }
}

fanvue.message.sent

You sent a message to a fan from any app or tool. Mass messages arrive as fanvue.message.mass_sent instead.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.sent",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "message",
        "uuid": "9b1c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
        "sender": "creator",
        "created_at": "2026-06-09T08:41:02.114Z",
        "deleted_at": null,
        "message_type": "SINGLE_RECIPIENT",
        "text": "Thanks for subscribing! 💕",
        "media_uuids": [
            "b8c47a91-3f2d-4a55-b7e8-1c9d2e4f5a6b"
        ],
        "unread_messages_count": 0,
        "creator": {
            "uuid": "creator-uuid"
        },
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "metadata": {}
    }
}

fanvue.message.mass_sent

You sent a mass message. One event per send, not per recipient.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.mass_sent",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "mass_message",
        "uuid": "7c1e9d24-8a3f-4b52-9d61-0f2a3b4c5d6e",
        "sender": "creator",
        "created_at": "2026-06-09T10:12:05.402Z",
        "message_type": "BROADCAST",
        "text": "Hey {{handle}}, new set just dropped 💕",
        "media_uuids": [
            "b8c47a91-3f2d-4a55-b7e8-1c9d2e4f5a6b"
        ],
        "price": 900,
        "recipient_count": 30142,
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

fanvue.message.read

You read a fan's messages.

High volume

This fires every time you read a conversation that had unread messages. Only subscribe if you mirror read state.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.read",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "fan_message_read",
        "read_messages_count": 3,
        "unread_messages_count": 0,
        "read_at": "2026-06-09T08:39:32.884Z",
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

fanvue.message.read_by_fan

A fan read your messages.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.read_by_fan",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "creator_message_read",
        "read_messages_count": 3,
        "read_at": "2026-06-09T08:44:10.502Z",
        "fan": {
            "uuid": "fan-uuid"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

fanvue.message.deleted

A single chat message was unsent. The payload carries no message content.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.deleted",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "message",
        "uuid": "9b1c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
        "sender": "creator",
        "created_at": null,
        "deleted_at": "2026-06-09T09:15:44.000Z",
        "creator": {
            "uuid": "creator-uuid"
        },
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "metadata": {}
    }
}

fanvue.message.reaction

A reaction was added to a chat message. sender says whether you or the fan reacted.

Fanvue reference: Messages

Example payload
{
    "event": "fanvue.message.reaction",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "reaction",
        "sender": "fan",
        "message_uuid": "2f7c5e8a-6d36-4e3a-98d9-9f1b3b0a1a10",
        "emoji": "❤️",
        "actor": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "created_at": "2026-06-09T08:39:33.139Z",
        "metadata": {}
    }
}

fanvue.chat.marked_unread

You marked a conversation unread. No message's read state changes.

Fanvue reference: Chat state

Example payload
{
    "event": "fanvue.chat.marked_unread",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "chat_unread_marker",
        "marked_at": "2026-06-09T08:52:17.106Z",
        "unread_messages_count": 0,
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "display_name": "Jane D",
            "handle": "janed"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

Followers

fanvue.follow.created

A fan followed your account.

Fanvue reference: Engagement

Example payload
{
    "event": "fanvue.follow.created",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "follow",
        "id": null,
        "created_at": "2026-06-09T08:39:33.139Z",
        "follower": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {},
        "tracking": {
            "link_url": "https://fanvue.com/creator-handle?fvc=summer-campaign",
            "metadata": {
                "campaign": "summer",
                "source": "x"
            }
        }
    }
}

Posts

fanvue.post.liked

A fan liked one of your posts.

High volume

Popular accounts can receive these continuously. Only subscribe if you actually process them, and make sure your endpoint can keep up.

Fanvue reference: Engagement

Example payload
{
    "event": "fanvue.post.liked",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "post",
        "id": null,
        "post_uuid": "217d5dc9-cae0-4c09-b643-2e3aa498587a",
        "comment_text": null,
        "actor": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "created_at": "2026-06-09T08:39:33.139Z",
        "metadata": {}
    }
}

fanvue.post.commented

A fan commented on one of your posts.

Fanvue reference: Engagement

Example payload
{
    "event": "fanvue.post.commented",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "post",
        "id": "c0mment-uuid",
        "post_uuid": "217d5dc9-cae0-4c09-b643-2e3aa498587a",
        "comment_text": "Love this!",
        "actor": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "created_at": "2026-06-09T08:39:33.139Z",
        "metadata": {}
    }
}

Fans

fanvue.fan.status_changed

You muted or unmuted a fan.

Fanvue reference: Fan status

Example payload
{
    "event": "fanvue.fan.status_changed",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "fan_status",
        "change_type": "mute",
        "state": "muted",
        "changed_at": "2026-06-09T08:39:33.139Z",
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

fanvue.fan.presence_changed

A fan came online or went offline.

High volume

Fanvue sends one event per fan per online or offline transition. Only subscribe if you track presence, and compare changed_at with the state you already hold, because a retried event can arrive after the one that replaced it.

Fanvue reference: Fan status

Example payload
{
    "event": "fanvue.fan.presence_changed",
    "account_id": "fanvue_acct_123",
    "payload": {
        "object": "fan_status",
        "change_type": "presence",
        "state": "online",
        "changed_at": "2026-06-09T08:39:33.139Z",
        "fan": {
            "uuid": "fan-uuid",
            "email": null,
            "handle": "janed",
            "display_name": "Jane D"
        },
        "creator": {
            "uuid": "creator-uuid"
        },
        "metadata": {}
    }
}

On this page