# 批量链接数据（batch_stats）

POST /v1/tools/batch_stats 运行批量链接数据：一个现成工具，返回一批帖子或主页链接现在的数字，以及哪些已经失效；最多 2,000 条，没有 AI 分析。目前可读 17 个平台，每条链接 1 积分起。带上 max_cost_credits，超出时会被免费拒绝，并返回报价。失效的链接不扣。

- 页面：https://socialtoai.com/zh/docs/tools/batch-stats/
- 最近更新：2026-10-17

- POST: `https://api.socialtoai.com/v1/tools/batch_stats`

想在网站上填写，或看看结果长什么样，打开[批量链接数据](https://socialtoai.com/zh/tools/batch-stats.md)。

## 请求

请求体是 JSON，放这个工具自己的输入。Key 和其他调用一样，放在 `Authorization` 请求头里。

| 名称 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `urls` | string[] | 是 | 1 到 2,000 条帖子或主页链接，可以混平台。 |
| `max_cost_credits` | integer | 否 | 这次最多花多少积分；超出则免费拒绝并返回报价。 |
| `confirm` | boolean | 否 | true：不论多少积分都直接运行。false：只返回计划和报价，不运行。不填：价格高的和要在后台运行的先返回报价，其余直接运行。 |

**cURL**

```
curl https://api.socialtoai.com/v1/tools/batch_stats \
  -H "Authorization: Bearer $SOCIALTOAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://x.com/NASA"]
  }'
```

**Python**

```
import os
import requests

response = requests.post(
    "https://api.socialtoai.com/v1/tools/batch_stats",
    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},
    json={
        "urls": ["https://x.com/NASA"],
    },
)
print(response.json())
```

## 每条链接的积分

每条链接算一行，按它所在平台的一次调用计。

| 平台 | 一条帖子链接 | 一条主页链接 |
| --- | --- | --- |
| TikTok | 2 | 2 |
| Instagram | 2 | 2 |
| X | 1 | 1 |
| Reddit | 2 | 2 |
| YouTube | 2 | 2 |
| Facebook | 2 | 2 |
| LinkedIn | 2 | 2 |
| Threads | 2 | 2 |
| Telegram | 2 | 2 |
| 小红书 | 12 | 12 |
| 抖音 | 2 | 2 |
| 微博 | 2 | 2 |
| 公众号 | 24 | 12 |
| B 站 | 2 | 2 |
| 知乎 | 2 | 2 |
| 快手 | 2 | 12 |
| 视频号 | 12 | 12 |

## 结果里有什么

| 部分 | 内容 |
| --- | --- |
| 每条链接一行 | 每条链接现在的数字。 |
| 失效的链接 | 已删除或认不出的链接。这些行不扣积分。 |
| 主要数字 | 有效链接的互动合计 |

## 先报价还是直接运行：confirm

同一个请求，要么直接运行，要么先返回报价。和工具输入放在一起的布尔参数 `confirm` 决定走哪一种：

| confirm | 返回什么 |
| --- | --- |
| `false` | 总是返回报价。免费：不占用、不取数、不扣积分。 |
| 不带 | 价格不超过 100 积分、并且能在这次请求里答完时，直接运行。超过这个数，或者计划要在后台运行（`quote.mode` 是 `background`）时，先返回报价。 |
| `true` | 直接运行，最多扣报价里写的积分。跑不了的运行会被免费拒绝（`not_supported`），不会用一份你没要的报价来代替。 |

运行的返回里带一个 `handle`：24 小时内可以凭它免费重读完整结果，细节见[结果与句柄](https://socialtoai.com/zh/docs/api/results.md)。带着同一个 `Idempotency-Key` 再发同样的请求，返回的是第一次运行的结果，不再扣费。

## 报价

报价是这一次请求的完整计划，以及运行它最多扣多少。报价本身不占用、不取数、不扣积分，`status` 是 `quote`。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `request_id` | string | 这次请求的编号。 |
| `schema_version` | "v1" | 返回格式的版本。 |
| `tool` | string | 报价对应的工具。 |
| `scale` | "small" \| "medium" \| "large" \| null | 报价对应的档位；按行计价的工具为 `null`。 |
| `status` | "quote" | `quote`：没有占用、没有取数、没有扣积分。 |
| `quote.credits` | integer | 这次运行最多扣多少积分。 |
| `quote.parts.data_first` | integer | 取数价格的前半段。 |
| `quote.parts.data_second` | integer | 取数价格的后半段。读到的不到计划的一半时不扣。 |
| `quote.parts.analysis` | integer | AI 分析的价格。交付的内容里至少九成分析成功才扣。 |
| `quote.mode` | "sync" \| "background" | `sync`：在这次请求里返回结果。`background`：先返回句柄，在后台分批运行。 |
| `quote.waves` | integer | 后台运行分几波；在请求里直接返回的为 1。 |
| `quote.estimated_seconds` | integer | 预计耗时（秒）。 |
| `quote.free_tier.runnable` | boolean | 还没买过积分的账户能不能跑。 |
| `quote.free_tier.reasons` | string[] | 不能跑时的原因：`cost`、`duration` 或 `paid_only`。 |
| `quote.plan` | array | 按运行顺序列出每一步：平台、动作、多少个目标和多少页，或多少批分析，以及这一步的积分。 |
| `quote.price_version` | string | 报价所依据的价格版本。 |
| `billing` | object | 和每个返回里的一样，见[积分与计费](https://socialtoai.com/zh/docs/credits-and-billing.md)。 |

## 运行怎么扣费

- **按行计价**：每条链接是一行，按它所在平台一次调用的积分算。
- **失效的行不扣**：已删除、认不出或被跳过的行不扣积分；有数字的行照扣，数字为零也一样。
- **先看到上限**：运行前先给出这批链接最多要多少积分，实际不会超过它。
- 已删除、认不出或被跳过的行不扣积分；有数字返回的行照扣，数字为零也一样。中途取消后，已完成的行照扣，没跑的行不扣。
- 那个平台上失败的行不扣积分，其他行不受影响。一批里失败的行超过三成时，不再继续跑后面的。

## 通过 MCP

MCP 工具是 `research`，调用时把 `tool` 设为 `batch_stats`。输入和积分都一样。[工具列表](https://socialtoai.com/zh/docs/mcp/tools.md) 里有你的 AI 拿到的描述。
