Skip to main content
V3 delivers events to destinations. A destination is one HTTPS URL in one environment with its own signing secret. Sandbox, Test, and Live never share a destination.

Destinations

Configure destinations in the dashboard under your External Integration.

Envelope

Every event shares one envelope. data depends on type.

Lifecycle events

One action sends one event. Changes to the whole authorization are authorization.*. Changes to one account are linked_account.*, sent to every authorization that includes that account. authorization.revoked reasons: linked_account.disconnected reasons:

Payloads

Payloads carry ids only. Fetch names, status, and scopes from GET /v3/linked-accounts.
A payload lists at most 100 account ids. Above that, the id lists are replaced by linked_account_ids_truncated: true and linked_account_count, and, while the authorization still works, linked_accounts_url: "/v3/linked-accounts". Fetch the list with that authorization’s access token. authorization.revoked never carries linked_accounts_url, because a revoked authorization cannot read its list.

Realtime events

Realtime events are translated OnlyFans activity for one linked account. Enable them per destination. They require the account to be connected. Payload schemas for each type are documented under Realtime OnlyFans Events. The data object is the same in V2 and V3; only the envelope differs. Realtime envelopes carry authorizationId and linkedAccountId like lifecycle envelopes.

Realtime over WebSocket

You can also receive Realtime events for one linked account over a WebSocket:
Each message has eventId, type, schemaVersion, order, receivedAt, environment, integrationId, linkedAccountId, test, and data. Lifecycle events are delivered by webhook only.

Verify deliveries

Deliveries use the Standard Webhooks scheme: webhook-id, webhook-timestamp, and webhook-signature headers, with the signature computed over ${webhook-id}.${webhook-timestamp}.${body} using the destination’s whsec_ secret. Any Standard Webhooks library works.
Node.js
Verify before parsing. Respond 2xx within 10 seconds; do work asynchronously. Failed deliveries are retried with backoff.

Idempotency and ordering

  • Deduplicate on eventId.
  • Apply events per linkedAccountId in order. Deliveries can arrive out of order after retries.
  • Treat lifecycle events as signals and read the current state from GET /v3/linked-accounts when you need names, status, or scopes.

Test deliveries

Send a test event from the destination page in the dashboard. Test deliveries carry "test": true and synthetic ids. Do not write them to production state.