BetterFans Link SDK — OnlyFans APIBetterFans Link SDK
Getting Started

Why BetterFans Link SDK?

Why the BetterFans Link SDK — the infrastructure behind OFManager — is the standard OnlyFans API for building applications, chatbots, and agency tools at scale.

Building on top of OnlyFans is a long road. The BetterFans Link SDK — the only developer API for the OnlyFans platform — ships the complete, production-ready infrastructure stack so you don't have to build it yourself.

It is the infrastructure behind OFManager, the leading OnlyFans agency management platform managing hundreds of creator accounts. By using the BetterFans Link SDK, you build your application on top of the exact same proprietary, hardened OnlyFans API infrastructure that already processes millions of events per day.

Built for Agency Scale (Multi-Account)

If you manage 100 creators, managing individual connections and polling logic for every account is an architectural nightmare.

The BetterFans Link SDK's OnlyFans API solves this through its scoped client architecture:

const client = new OfApiClient({ apiKey })

// Get an isolated client for any managed account instantly
const creatorA = client.for("111111")
const creatorB = client.for("222222")

// A single WebSocket connection receives events for ALL 100 creators
const ws = new OfWsClient({ apiKey, wsToken })
ws.on("chat_message", (event) => {
  console.log(`Message on account ${event.accountId}`)
})

Core Capabilities, Not Just Wrappers

We don't just wrap HTTP calls; we collapse entire infrastructure layers into single methods through our Core Capabilities (Plugins).

For example, attaching a video to a message usually means orchestrating a whole staging and processing pipeline. With the BetterFans SDK Media plugin, it's a single call:

const result = await account.plugin.media.upload({ source: videoUrl })

await account.request("POST /chats/:id/messages", {
  body: {
    mediaFiles: result.kind === "existing" ? [result.mediaId] : [result.ref],
  },
})

100% Type Safety

We type every route string, query parameter, request body, and response field.

Instead of spending hours reading documentation to figure out what fields exist on a response object, your editor knows exactly what GET /users/me returns, and will throw a compile-time error if you typo a field name.

One docs page covers the entire API, because the types are the documentation.

On this page