API 接口文档
概述
SNSTracker API 允许您通过编程方式管理监控动态和频道。您可以创建动态(视频、帖子等)和频道(账号、个人资料),刷新它们以获取最新数据,并通过 webhook 接收实时通知。
认证
所有 API 请求都需要使用 API 密钥进行认证。请在 X-API-Key 请求头中包含您的 API 密钥。
如何获取 API 密钥:
- 登录 SNSTracker
- 进入 设置 → API 密钥
- 创建新的 API 密钥或使用现有的密钥
- 复制 API 密钥(创建时只会显示一次)
API 接口
1. 创建动态
通过提交动态 URL(视频、帖子等)来创建监控动态。
POST /api/v1/feeds请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
],
"collectionId": "coll_abc123xyz"
}参数说明:
urls(必需):要监控的动态 URL 数组。每次请求最多 200 个 URL。collectionId(可选):动态将被添加到的集合 ID。如果未提供,将使用您团队的默认集合。
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@user/video/1234567890",
"platform": "tiktok",
"feedId": "feed_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/p/ABC123/",
"platform": "instagram",
"feedId": "feed_def456uvw",
"success": true
}
],
"errors": [],
"message": "Feeds created successfully. Data will be updated shortly."
}
}响应字段说明:
success: 成功创建的动态数量failed: 创建失败的动态数量total: 提供的 URL 总数results: 每个 URL 的结果数组index: 在请求数组中的索引(从 0 开始)url: 验证并标准化后的 URLplatform: 检测到的平台(tiktok、instagram、youtube 等)feedId: 创建的动态的唯一标识符success: 动态是否创建成功skipped: (可选)是否因为已存在而跳过resumed: (可选)是否恢复了已停止的动态error: (可选)如果创建失败,错误消息
errors: 失败 URL 的错误数组
请求示例
curl -X POST https://snstracker.com/api/v1/feeds \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@user/video/1234567890"
]
}'2. 刷新动态
立即刷新现有动态以获取最新数据。只有状态为"待处理"或"追踪中"的动态可以被刷新。
POST /api/v1/feeds/refresh请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"feedIds": ["feed_abc123xyz", "feed_def456uvw"]
}参数说明:
feedIds(必需):要刷新的动态 ID 数组
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"feedIds": ["feed_abc123xyz", "feed_def456uvw"],
"total": 2,
"message": "Successfully refreshed 2 feed(s)"
}
}响应字段说明:
success: 刷新操作是否成功feedIds: 被刷新的动态 ID 数组total: 刷新的动态数量message: 成功消息
请求示例
curl -X POST https://snstracker.com/api/v1/feeds/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"feedIds": ["feed_abc123xyz"]
}'3. 创建频道
通过提交频道 URL(账号个人资料等)来创建监控频道。
渠道计费说明:小红书渠道任务已从默认频道任务价格中单独拆分计价,当前仍为每次成功请求 10 积分。
POST /api/v1/channels请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"urls": [
"https://www.tiktok.com/@username",
"https://www.instagram.com/username/"
],
"collectionId": "coll_abc123xyz"
}参数说明:
urls(必需):要监控的频道 URL 数组。每次请求最多 200 个 URL。collectionId(可选):频道将被添加到的集合 ID。如果未提供,将使用您团队的默认集合。
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@username",
"platform": "tiktok",
"channelId": "channel_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/username/",
"platform": "instagram",
"channelId": "channel_def456uvw",
"success": true
}
],
"errors": [],
"message": "Channels created successfully. Data will be updated shortly."
}
}响应字段说明:
success: 成功创建的频道数量failed: 创建失败的频道数量total: 提供的 URL 总数results: 每个 URL 的结果数组index: 在请求数组中的索引(从 0 开始)url: 验证并标准化后的 URLplatform: 检测到的平台(tiktok、instagram、youtube 等)channelId: 创建的频道的唯一标识符success: 频道是否创建成功skipped: (可选)是否因为已存在而跳过resumed: (可选)是否恢复了已停止的频道error: (可选)如果创建失败,错误消息
errors: 失败 URL 的错误数组
请求示例
curl -X POST https://snstracker.com/api/v1/channels \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@username"
]
}'4. 刷新频道
立即刷新现有频道以获取最新数据。只有状态为"待处理"或"追踪中"的频道可以被刷新。
渠道计费说明:小红书渠道任务已从默认频道任务价格中单独拆分计价,当前仍为每次成功请求 10 积分。
POST /api/v1/channels/refresh请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"channelIds": ["channel_abc123xyz", "channel_def456uvw"]
}参数说明:
channelIds(必需):要刷新的频道 ID 数组
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"channelIds": ["channel_abc123xyz", "channel_def456uvw"],
"total": 2,
"message": "Successfully refreshed 2 channel(s)"
}
}响应字段说明:
success: 刷新操作是否成功channelIds: 被刷新的频道 ID 数组total: 刷新的频道数量message: 成功消息
请求示例
curl -X POST https://snstracker.com/api/v1/channels/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"channelIds": ["channel_abc123xyz"]
}'5. 同步动态
直接从 scrapy 服务同步动态数据。此接口会立即获取最新的动态数据,并在同步成功后扣除积分。同一团队的所有成员、API Key 和所有同步接口共享一个并发上限:入门版或无有效订阅为 1,标准版为 5,高级版为 10。
⚠️ 重要提示: 此同步接口是独立的,不会与 Web 平台集成。同步操作将:
- 不会在 Web 仪表板中创建或更新动态记录
- 不会出现在您的动态列表或集合中
- 不会触发 webhook 或通知
- 仅在 API 响应中直接返回获取的数据
此接口设计用于通过 API 进行一次性数据检索。要创建在 Web 平台中显示的持久监控动态,请使用创建动态接口。
POST /api/v1/feeds/sync请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"url": "https://www.tiktok.com/@user/video/1234567890"
}参数说明:
url(必需):要同步的动态 URL。必须是有效的非空字符串。
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@user/video/1234567890",
"feedInfo": {
"feed_id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"url": "https://www.tiktok.com/@user/video/1234567890",
"views": 1000000,
"likes": 200000,
"comments": 1000,
"shares": 2000,
"bookmarks": 200,
"engagement": 512000,
"description": "视频描述",
"hash_tags": ["标签1", "标签2"],
"publish_at": 1234567890
}
}
}响应字段说明:
success: 同步操作是否成功url: 已同步的动态 URLfeedInfo: 完整的动态信息,包括指标、描述、标签等
错误响应:
429 Too Many Requests: 团队共享并发量已满,请求不会排队。400 Bad Request: 积分不足或 URL 无效
请求示例
curl -X POST https://snstracker.com/api/v1/feeds/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/1234567890"
}'6. 同步频道
直接从 scrapy 服务同步频道数据。此接口会立即获取最新的频道数据,并在同步成功后扣除积分。同一团队的所有成员、API Key 和所有同步接口共享一个并发上限:入门版或无有效订阅为 1,标准版为 5,高级版为 10。
渠道计费说明:小红书渠道任务已从默认频道任务价格中单独拆分计价,当前仍为每次成功请求 10 积分。
⚠️ 重要提示: 此同步接口是独立的,不会与 Web 平台集成。同步操作将:
- 不会在 Web 仪表板中创建或更新频道记录
- 不会出现在您的频道列表或集合中
- 不会触发 webhook 或通知
- 仅在 API 响应中直接返回获取的数据
此接口设计用于通过 API 进行一次性数据检索。要创建在 Web 平台中显示的持久监控频道,请使用创建频道接口。
POST /api/v1/channels/sync请求
请求头:
X-API-Key: 您的 API 密钥(必需)Content-Type:application/json
请求体:
{
"url": "https://www.tiktok.com/@username"
}参数说明:
url(必需):要同步的频道 URL。必须是有效的非空字符串。
响应
成功响应 (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@username",
"channelInfo": {
"id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"username": "username",
"nickname": "用户名",
"description": "频道描述",
"followers": 1000000,
"followings": 2000,
"likes": 200000000,
"total_count": 1000,
"track_count": 1000,
"status": 1
}
}
}响应字段说明:
success: 同步操作是否成功url: 已同步的频道 URLchannelInfo: 完整的频道信息,包括指标、描述等
错误响应:
429 Too Many Requests: 团队共享并发量已满,请求不会排队。400 Bad Request: 积分不足或 URL 无效
请求示例
curl -X POST https://snstracker.com/api/v1/channels/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@username"
}'7. 同步频道内容(游标分页)
每次仅返回频道主页的一页内容。Instagram 和 Reels 每次最多返回 12 条,不自动翻页。instagram 返回 Posts(图片、视频和轮播帖子);reels 只返回 Reels 视频。
POST /api/v1/channels/feeds/sync
X-API-Key: your-api-key
Content-Type: application/json请求与翻页
{
"platform": "instagram",
"channel_name": "instagram"
}count可选,正整数,表示本页期望返回的条数,无默认值。数量限制依平台而定:Instagram 和 Reels 每次最多返回 12 条,实际返回可能更少。不填时使用平台默认页大小。一条轮播算一条帖子。- 不传
cursor获取第一页;下一次原样传回上次响应的next_cursor,并保持platform、channel_name不变。没有下一页时返回has_more=false、next_cursor=null;空页仍可能有下一页。
{
"platform": "instagram",
"channel_name": "instagram",
"cursor": "previous-next-cursor"
}每个成功返回的页面扣 10 积分,包括没有内容的空页;只有请求出错才不扣费;请求前需至少有 10 积分。每页请求与其他同步接口共用团队并发额度,不创建仪表板记录。
响应结构示例(reels、lunacut.edit、count=1,游标为占位符)
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"platform": "reels",
"channel_name": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"requested_count": 1,
"returned_count": 1,
"has_more": true,
"next_cursor": "cursor-from-response",
"items": [
{
"feed_id": "4009169989985582972",
"platform": 5,
"platform_name": "reels",
"type": "video",
"url": "https://www.instagram.com/reel/Dejbt1JPz98/",
"author_username": "lunacut.edit",
"publish_at": 1792150387,
"duration": 70.077,
"view_count": 310475
}
]
}
}platform 和 channel_name 为必填参数。channel_name 为用户名(不是昵称),支持前导 @,保留点号。requested_count 在省略 count 时为 null;returned_count 等于 items.length。未知统计值和时间为 null;Posts 可能缺失发布时间及轮播明细。items 使用现有内容字段,包括 video_url、image_urls、cover_url;示例仅展示部分字段。publish_at 为 Unix 秒,duration 为秒。保留上游顺序,不提供最热排序;建议按 feed_id 跨页去重。
items 中的播放量(view_count)、点赞数(like_count)、收藏数(bookmark_count)、评论数(comment_count)等指标,取决于平台及其主页列表接口提供的数据,并非每个平台都能获取全部指标。未获取到的指标返回 null,不代表数值为 0。
如需补查主页列表未提供的指标,需使用该条目的 url,单独调用 POST /api/v1/feeds/sync,请求体中的 url 填入该内容链接。详情查询按该接口的规则独立计费;结果仍以平台实际可提供的数据为准,不保证补齐全部指标。
HTTP 状态:400 参数或游标无效、初始积分不足;401 API Key 无效;402 结算时积分不足;403 团队禁用或频道不可访问;429 团队并发已满(Retry-After: 1);502 上游失败或页面异常;503 服务不可用;504 超时。
8. 获取主页额外信息
POST /api/v1/channels/about/sync目前仅支持 Instagram 和 Reels,输入与 /api/v1/channels/sync 相同,只需必填的 url。Instagram 使用 https://www.instagram.com/lunacut.edit/,Reels 使用 https://www.instagram.com/lunacut.edit/reels/。无需传 platform、count 或 cursor;不支持帖子链接和其他平台。
curl -X POST https://snstracker.com/api/v1/channels/about/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.instagram.com/lunacut.edit/"}'每次成功请求扣 80 积分,额外字段为空(null)也扣费;请求出错不扣费,请求前需至少有 80 积分。本接口与其他同步接口共享团队并发量:入门版或无有效订阅为 1、标准版为 5、高级版为 10。仅返回数据,不创建仪表板记录,也不发送 webhook。
以下为响应示例,字段是否可用取决于账号公开信息。
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.instagram.com/lunacut.edit/",
"channelAbout": {
"platform": 6,
"platform_name": "instagram",
"username": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"country": "Brazil",
"country_visible": true,
"date_joined": "2020-05",
"date_joined_text": "May 2020"
}
}
}country:账号公开显示的国家/地区,仅在 country_visible=true 时返回,不是实时 IP 位置。country_visible:是否公开地区,未知时为 null。date_joined:加入 Instagram 的年月,格式为 YYYY-MM,缺失或无法识别时为 null,不补造具体日期。date_joined_text:原始加入时间文本,缺失时为 null。不包含 Bio、粉丝数或曾用名。
错误:400 URL 无效、平台不支持或初始积分不足;401 API Key 无效;403 团队已禁用;402 结算时积分不足;429 团队共享并发量已满(Retry-After: 1);502 上游失败或响应异常;503 服务不可用;504 超时。
Webhook 集成
SNSTracker 支持 webhook 来接收实时通知,当监控的内容达到您配置的阈值时。您可以配置 webhook 来接收以下通知:
- 动态更新:当观看数、互动数(点赞 + 评论 + 分享)按您的阈值增加时
- 频道更新:当粉丝数、关注数或点赞数按您的阈值增加时
设置 Webhook
- 在集合设置中配置 webhook 目标
- 在集合配置中启用通知
- 设置阈值以监控您关心的指标
有关详细的 webhook 配置说明,请参考 Webhook 配置教程。
错误响应
所有接口可能返回以下错误响应:
401 未授权 - 缺少 API 密钥
{
"code": -1,
"message": "X-API-Key header is required"
}401 未授权 - 无效的 API 密钥
{
"code": -1,
"message": "Invalid API key"
}400 错误请求 - 无效输入
{
"code": -1,
"message": "Invalid request: urls must be an array"
}400 错误请求 - URL 数量过多(创建动态)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 错误请求 - URL 数量过多(创建频道)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 错误请求 - 积分不足
{
"code": -1,
"message": "Insufficient credits. Required: 10, Available: 5"
}429 Too Many Requests - 团队同步并发量
{
"code": -1,
"message": "Maximum concurrent sync requests (1) reached for this team. Currently active: 1. Wait for a request to complete, or contact official support to increase the limit."
}403 禁止访问 - 无效的集合
{
"code": -1,
"message": "Collection not found or does not belong to your team"
}404 未找到
{
"code": -1,
"message": "No feeds found"
}或
{
"code": -1,
"message": "No channels found"
}使用示例
Python 示例 - 创建动态
import requests
url = "https://snstracker.com/api/v1/feeds"
headers = {
"X-API-Key": "your-api-key-here",
"Content-Type": "application/json"
}
data = {
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
if result["code"] == 0:
print(f"成功创建 {result['data']['success']} 个动态")
for feed in result["data"]["results"]:
print(f" - {feed['url']}: {feed['feedId']}")
else:
print(f"错误: {result['message']}")JavaScript 示例 - 刷新动态
const response = await fetch('https://snstracker.com/api/v1/feeds/refresh', {
method: 'POST',
headers: {
'X-API-Key': 'your-api-key-here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
feedIds: ['feed_abc123xyz', 'feed_def456uvw'],
}),
});
const result = await response.json();
if (result.code === 0) {
console.log(`成功刷新 ${result.data.total} 个动态`);
result.data.feedIds.forEach((feedId) => {
console.log(` - ${feedId}`);
});
} else {
console.error(`错误: ${result.message}`);
}重要提示
-
URL 验证:所有 URL 在创建前都会自动验证。无效的 URL 将被拒绝。
-
重复项目:如果集合中已存在相同 URL 的项目:
- 如果它是活跃的,将被跳过(标记为
skipped: true) - 如果它已停止,将被恢复(标记为
resumed: true)
- 如果它是活跃的,将被跳过(标记为
-
数据采集:成功创建后,项目会被加入数据采集队列。数据将在创建后不久可用。
-
刷新状态:只有状态为"待处理"或"追踪中"的项目可以被刷新。其他状态的项目将被过滤。
-
积分:在发起请求之前,请确保您有足够的积分。同步操作在成功获取数据后会立即扣除积分。 小红书渠道任务单独计价,当前每次成功请求 10 积分。
/api/v1/channels/feeds/sync: 每个成功返回的页面扣 10 积分,包括没有内容的空页;只有请求出错才不扣费;请求前需至少有 10 积分。每页请求与其他同步接口共用团队并发额度,不创建仪表板记录。/api/v1/channels/about/sync: 每次成功请求扣 80 积分,额外字段为空(null)也扣费;请求出错不扣费,请求前需至少有 80 积分。本接口与其他同步接口共享团队并发量:入门版或无有效订阅为 1、标准版为 5、高级版为 10。仅返回数据,不创建仪表板记录,也不发送 webhook。 -
团队同步并发量 (
/api/v1/feeds/sync+/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync): 同一团队的所有成员、API Key 和所有同步接口共享一个并发上限:入门版或无有效订阅为 1,标准版为 5,高级版为 10。 额度随当前有效套餐自动变化;官方为团队单独配置时,以该配置为准。 如需提升团队并发量,请联系官方。 -
同步 vs 创建:同步接口(
/api/v1/feeds/sync、/api/v1/channels/sync和/api/v1/channels/feeds/sync+/api/v1/channels/about/sync)是独立的,不会与 Web 平台集成。它们仅在 API 响应中返回数据,不会在仪表板中创建记录。要创建在 Web 平台中显示的持久监控项目,请使用创建接口(/api/v1/feeds和/api/v1/channels)。 -
重试:收到 429 后,等待正在执行的请求完成,并遵循
Retry-After响应头进行退避重试;收到 503 表示服务暂时不可用,请稍后重试。 -
支持的平台:TikTok、Instagram、YouTube 和其他主要社交媒体平台。
故障排除
问题:"X-API-Key header is required"
解决方案:确保在请求中包含 X-API-Key 请求头。
问题:"Invalid API key"
解决方案:验证您的 API 密钥是否正确。您可以从设置 → API 密钥创建新的密钥。
问题:"Maximum URLs allowed per request"
解决方案:将您的 URL 分成多个请求。动态每次最多允许 200 个 URL,频道每次最多允许 5 个 URL。
问题:"No collection found"
解决方案:先在仪表板中创建一个集合,或指定一个现有的集合 ID。
问题:"Insufficient credits"
解决方案:购买更多积分或检查您的订阅计划。
问题:"No refreshable items found"
解决方案:只有状态为"待处理"或"追踪中"的项目可以被刷新。请检查您的项目状态。
问题:某些 URL 验证失败
解决方案:检查响应中的 errors 数组以获取具体的错误消息。确保 URL 来自支持的平台且可公开访问。