BetterFans Link SDK — OnlyFans APIBetterFans Link SDK
API Reference

Posts

Create, update, delete, and query feed posts.

Post routes cover the full lifecycle of feed posts — creating, updating, deleting, and querying engagement data.

List posts

Retrieve posts for an account:

const [error, posts] = await account.request("GET /posts", {
  query: { limit: 20 },
})

if (!error) {
  for (const post of posts.list) {
    console.log(post.text, `👍 ${post.likesCount} ❤️ ${post.tipsAmount}`)
  }
}

Get a single post

const [error, post] = await account.request("GET /posts/:id", {
  pathParams: { id: "11111" },
})

if (!error) {
  console.log(post.text, post.media)
}

Create a post

const [error, post] = await account.request("POST /posts", {
  body: {
    text: markdownToHtml("New post!"),
    mediaFiles: [mediaId1, mediaId2],
  },
})

if (!error) {
  console.log("Created post:", post.id)
}

Update a post

const [error, post] = await account.request("PUT /posts/:id", {
  pathParams: { id: "11111" },
  body: {
    text: markdownToHtml("Updated caption"),
  },
})

Delete a post

const [error] = await account.request("DELETE /posts/:id", {
  pathParams: { id: "11111" },
})

Post analytics

Engagement chart

const [error, chart] = await account.request("GET /posts/chart", {
  query: { startDate: "2026-01-01", endDate: "2026-03-31" },
})

Top-performing posts

const [error, top] = await account.request("GET /posts/top", {
  query: { period: "month" },
})

if (!error) {
  for (const post of top.list) {
    console.log(post.text, `$${post.tipsAmount}`)
  }
}

Scheduled posts

List scheduled posts

const [error, schedules] = await account.request(
  "GET /schedules/posts",
  { query: { limit: 20 } },
)

Collect post stats

Trigger a stats collection for specific posts:

const [error] = await account.request("POST /posts/stats-collect", {
  body: { postIds: ["11111", "22222", "33333"] },
})

On this page