Manage content, chats, subscribers, and earnings on the Fanvue creator platform via OAuth 2.0 API.
与Fanvue创作者平台集成,管理聊天、帖子、订阅者、收益洞察和媒体内容。
设置以下环境变量:
bash
FANVUECLIENTID=yourclientid
FANVUECLIENTSECRET=yourclientsecret
FANVUEREDIRECTURI=https://your-app.com/callback
Fanvue使用带有PKCE的OAuth 2.0(代码交换证明密钥)。所有API请求需要:
根据你的需求请求以下作用域:
| 作用域 | 访问权限 |
|---|---|
| openid | OpenID Connect认证 |
| offline_access |
注意:某些端点(订阅者、洞察、收益)需要创作者账户,并且可能需要公开文档中未列出的额外作用域。
typescript
import { randomBytes, createHash } from crypto;
// 1. 生成PKCE参数
const codeVerifier = randomBytes(32).toString(base64url);
const codeChallenge = createHash(sha256)
.update(codeVerifier)
.digest(base64url);
// 2. 构建授权URL
const authUrl = new URL(https://auth.fanvue.com/oauth2/auth);
authUrl.searchParams.set(clientid, process.env.FANVUECLIENT_ID);
authUrl.searchParams.set(redirecturi, process.env.FANVUEREDIRECT_URI);
authUrl.searchParams.set(response_type, code);
authUrl.searchParams.set(scope, openid offline_access read:self read:chat write:chat read:post);
authUrl.searchParams.set(state, randomBytes(32).toString(hex));
authUrl.searchParams.set(code_challenge, codeChallenge);
authUrl.searchParams.set(codechallengemethod, S256);
// 将用户重定向到:authUrl.toString()
typescript
// 3. 交换授权码获取令牌
const tokenResponse = await fetch(https://auth.fanvue.com/oauth2/token, {
method: POST,
headers: { Content-Type: application/x-www-form-urlencoded },
body: new URLSearchParams({
granttype: authorizationcode,
clientid: process.env.FANVUECLIENT_ID,
clientsecret: process.env.FANVUECLIENT_SECRET,
code: authorizationCode,
redirecturi: process.env.FANVUEREDIRECT_URI,
code_verifier: codeVerifier,
}),
});
const tokens = await tokenResponse.json();
// tokens.accesstoken, tokens.refreshtoken
所有API请求发送到:https://api.fanvue.com
typescript
const headers = {
Authorization: Bearer ${accessToken},
X-Fanvue-API-Version: 2025-06-26,
Content-Type: application/json,
};
这些工作流专为AI代理自动化Fanvue创作者账户而设计。
基本的/media端点仅返回元数据。要获取实际可查看的URL,请使用variants查询参数:
typescript
// 步骤1:列出所有媒体
const list = await fetch(https://api.fanvue.com/media, { headers });
const { data } = await list.json();
// 步骤2:获取特定媒体项的签名URL
const media = await fetch(
https://api.fanvue.com/media/${uuid}?variants=main,thumbnail,blurred,
{ headers }
);
const { variants } = await media.json();
// variants = [
// { variantType: main, url: https://media.fanvue.com/private/... },
// { variantType: thumbnail, url: ... },
// { variantType: blurred, url: ... }
// ]
变体类型:
typescript
// 步骤1:从媒体库获取现有媒体UUID
const mediaIds = [media-uuid-1, media-uuid-2];
// 步骤2:创建帖子
const response = await fetch(https://api.fanvue.com/posts, {
method: POST,
headers,
body: JSON.stringify({
text: 查看我的新内容!🔥,
mediaIds,
audience: subscribers, // 或 followers-and-subscribers
// 可选:
price: null, // 设置为按次付费
publishAt: null, // 设置为定时发布
}),
});
受众选项:
| 值 | 谁可以看到 |
|---|---|
| subscribers | 仅付费订阅者 |
| followers-and-subscribers |
typescript
// 获取订阅者列表用于决策
const subs = await fetch(https://api.fanvue.com/creators/list-subscribers, { headers });
const { data: subscribers } = await subs.json();
// 获取高消费用户用于VIP定向
const vips = await fetch(https://api.fanvue.com/insights/get-top-spenders, { headers });
const { data: topSpenders } = await vips.json();
// 发送带媒体的个性化消息
await fetch(https://api.fanvue.com/chat-messages, {
method: POST,
headers,
body: JSON.stringify({
recipientUuid: subscribers[0].userUuid,
content: 感谢订阅!这里有一份给你的特别礼物💕,
mediaIds: [vault-media-uuid], // 从媒体库附加媒体
}),
});
// 或一次性发送给多个订阅者
await fetch(https://api.fanvue.com/chat-messages/mass, {
method: POST,
headers,
body: JSON.stringify({
recipientUuids: subscribers.map(s => s.userUuid),
content: 新独家内容已发布!🎉,
mediaIds: [vault-media-uuid],
}),
});
为实现有效自动化,收集以下上下文:
typescript
interface AutomationContext {
// 媒体库中的当前媒体
media: {
uuid: string;
name: string;
type: image | video;
description: string; // AI生成的标题
signedUrl: string; // 来自变体查询
}[];
// 受众数据
subscribers: {
uuid: string;
name: string;
subscribedAt: string;
tier: string;
}[];
// 互动信号
topSpenders: {
uuid: string;
totalSpent: number;
}[];
// 近期收益用于趋势分析
earnings: {
period: string;
total: number;
breakdown: { type: string; amount: number }[];
};
}
typescript
const response = await fetch(https://api.fanvue.com/users/me, { headers });
const user = await response.json();
typescript
const response = await fetch(https://api.fanvue.com/chats, { headers });
const { data, pagination } = await response.json();
typescript
const response = await fetch(https://api.fanvue.com/chat-messages, {
method: POST,
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 fanvue-1776372815 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 fanvue-1776372815 技能
skillhub install fanvue-1776372815
文件大小: 13.26 KB | 发布时间: 2026-4-17 13:51