---
title: "SNS API"
description: "通过同一组操作和同一个社交数据结构访问 Reddit、TikTok、YouTube、Instagram、Threads、LinkedIn 和 X。"
---

SNS API 通过**相同的八个操作和同一个数据结构**提供七个社交平台的数据。操作按其返回内容命名；传入的参数决定
读取什么。TikTok 创作者和 YouTube 频道都是 `profile`。subreddit 的帖子、话题标签下的视频和账号的 Reels
都是 `posts`。读取一个平台的代码也能读取所有平台。

```bash
curl "https://gateway.apinoa.com/v1/tiktok/posts?username=tiktok" -H "x-api-key: $APINOA_API_KEY"
curl "https://gateway.apinoa.com/v1/youtube/posts?username=@mkbhd&type=shorts" -H "x-api-key: $APINOA_API_KEY"
curl "https://gateway.apinoa.com/v1/reddit/posts?community=technology&sort=top" -H "x-api-key: $APINOA_API_KEY"
```

## 操作

| 操作 | 返回 | 根据传入内容读取什么 |
|---|---|---|
| `profile` | `Account` | 一个账号：`username`（或 `userId`） |
| `profiles` | `Page<Account>` | 账号：搜索结果（`query`），或某账号的粉丝/关注 |
| `post` | `Post` | 一条帖子：`id` |
| `posts` | `Page<Post>` | 帖子：某账号的（`username`）、搜索结果（`query`）、`hashtag`、`community`、`sound`、`location`、`company` 或 `playlist` 下的、与某条帖子相关的（`relatedTo`）——或什么都不传，读取平台的热门信息流 |
| `comments` | `Page<Comment>` | 某条 `post` 的评论、某条 `comment` 的回复，或某账号的评论 |
| `group` | `Group` | 一个社区、话题标签、音乐、地点或公司 |
| `groups` | `Page<Group>` | 按搜索查找的社区，或某账号的播放列表、精选快拍或社区 |
| `media` | 媒体文件 | 帖子的媒体文件 |

## 各平台支持的操作

| | profile | profiles | post | posts | comments | group | groups | media |
|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| [Reddit](/docs/api-reference/reddit) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| [TikTok](/docs/api-reference/tiktok) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [YouTube](/docs/api-reference/youtube) | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | |
| [Instagram](/docs/api-reference/instagram) | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | |
| [Threads](/docs/api-reference/threads) | ✓ | | ✓ | ✓ | ✓ | | | |
| [LinkedIn](/docs/api-reference/linkedin) | ✓ | | ✓ | ✓ | ✓ | ✓ | | |
| [X](/docs/api-reference/x) | ✓ | | ✓ | ✓ | | ✓ | | |

LinkedIn 还有 `job` 和 `jobs`，这是其他平台都没有的记录。每个平台的页面都准确列出了每个操作在该平台接受哪些输入。

## 输入

同一个名称在每个平台上含义都相同：

| 输入 | 含义 |
|---|---|
| `username` | 账号的用户名（带或不带 `@`、`u/`、`in/` 均可） |
| `userId` | 账号自身的 id（TikTok secUid、YouTube UC… id、X/Threads 数字 id）——在平台需要时可省去一次查询 |
| `id` | 操作返回的对象：帖子的 id 或 shortcode、职位的 id |
| `post`, `comment` | 要读取其评论的帖子（或评论） |
| `query` | 关键词；`prefix` 用于自动补全 |
| `hashtag` `community` `sound` `location` `company` `playlist` | 要读取其帖子（或详情）的分组 |
| `relatedTo` | 一条帖子；返回与之相关的帖子 |
| `type` | 选择某个来源的哪种列表：`reels`、`shorts`、`reposts`、`likes`、`followers`… |
| `sort` `period` `country` | 排序方式、时间范围，以及地区信息流的国家 |
| `include` | 附加在 `ext` 下的额外读取（Reddit 社区的 `rules`），按次计费 |
| `limit` | 每页条数（平台允许选择时） |
| `cursor` | 下一页 |

所有标识符也都接受页面 URL。凡是需要 id 的地方，都可以粘贴个人主页、帖子或社区链接。每次调用只传一个来源；
传两个（或在操作需要来源时一个都不传）会返回 `400 INVALID_PARAMS`，并列出可选项。

## 所有平台一致的部分

- **结构。** 每个操作返回四种类型之一——`Account`、`Post`、`Comment`、`Group`——或它们的 `Page`，详见
  [Response Schema](/docs/api-reference/sns/response-schema)。只有某个平台才有的内容（TikTok 音乐的
  music id、Reddit 帖子的得分）位于该对象的 `ext` 中。
- **分页。** 列表返回一个不透明的 `cursor`。获取下一页时，以单独的 `cursor` 调用同一操作——它携带了首次调用的
  全部请求内容。没有 `cursor` 表示没有下一页。
- **缺失不等于零。** 平台隐藏的计数会被省略，绝不会报告为 `0`。时间采用 ISO 8601 格式，UTC 时区。
- **价格。** 每单位 $0.001。大多数调用为一个单位；每个操作的页面会说明何时可能花费更多。

## 错误

与 API 其他部分相同的信封和代码——参见 [Errors](/docs/errors)。私密、已删除或受年龄限制的账号、帖子或社区
返回 `404 NOT_FOUND`；当平台以相同方式显示不存在的页面和被屏蔽的页面时，会返回错误而不是空结果。

## 参考

- [Response Schema](/docs/api-reference/sns/response-schema)：每个类型的每个字段
- [Errors](/docs/errors)：每个错误代码
