---
title: "Media"
description: "下载 TikTok 帖子的文件，以 base64 编码：视频返回 MP4，图文帖子返回其中一张图片。"
---

```http
GET | POST /v1/tiktok/media
```

参数可以用 `GET` 的查询字符串发送，也可以用 `POST` 的 JSON 请求体发送，两者等价。

## 传入内容

| 传入 | 读取内容 | 说明 |
|---|---|---|
| `post` | 视频的 MP4，或图文帖子中的一张图片 | 用 `index` 选择第几张，从 1 开始，默认为 1 |

每次调用只传一个来源。所有标识符也都接受页面 URL。

## 参数

| Parameter | Type | Required | Notes |
|---|---|---|---|
| `index` | integer 1–100 |  | Photo posts: which picture, 1-based (default 1). |
| `post` | string |  | The post whose file to download: numeric id or URL. A video gives its MP4, a photo post one picture. |

## 请求

```bash tab="cURL"
curl "https://gateway.apinoa.com/v1/tiktok/media?post=7698770783367171359" \
  -H "x-api-key: $APINOA_API_KEY"
```

```js tab="JavaScript"
const params = new URLSearchParams({ post: "7698770783367171359" });
const res = await fetch(`https://gateway.apinoa.com/v1/tiktok/media?${params}`, {
  headers: { "x-api-key": process.env.APINOA_API_KEY },
});
const { success, data, error } = await res.json();
```

```python tab="Python"
import os

import requests

res = requests.get(
    "https://gateway.apinoa.com/v1/tiktok/media",
    params={"post": "7698770783367171359"},
    headers={"x-api-key": os.environ["APINOA_API_KEY"]},
)
body = res.json()
```

## 响应

在 `data` 中返回媒体文件。真实响应的节选：数组只保留前几项，长文本已截断。

```json
{
  "success": true,
  "data": {
    "platform": "tiktok",
    "postId": "7698770783367171359",
    "contentType": "video/mp4",
    "bytes": 22592237,
    "encoding": "base64",
    "data": "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAVYbbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AABnMkAAQAAAQAAAAAAAAAAAAAAAAEAAAA…"
  }
}
```

对于图文帖子，用 `index` 选择要下载的图片，响应中还会带上 `index` 和帖子的图片总数 `count`。`?post=7681723633164717325&index=2` 的响应如下：

```json
{
  "success": true,
  "data": {
    "platform": "tiktok",
    "postId": "7681723633164717325",
    "contentType": "image/jpeg",
    "bytes": 198005,
    "encoding": "base64",
    "data": "/9j/4AAQSkZJRgABAQAASABIAAD/4QBMRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEOKADAAQAAAA…",
    "index": 2,
    "count": 2
  }
}
```

## 错误

| 状态 | 代码 | 含义 |
|---|---|---|
| 400 | `INVALID_PARAMS` | 参数缺失、未知或超出范围。消息中会指出是哪一个。 |
| 401 | `UNAUTHORIZED` | 缺少 `x-api-key` 请求头，或密钥已吊销或未知。 |
| 402 | `INSUFFICIENT_BALANCE` | 余额不足以支付本次调用。请在控制台充值。 |
| 404 | `NOT_FOUND` | 账号、帖子或分组不存在，或为私密、已删除、有年龄限制。 |
| 429 | `MARKETPLACE_SATURATED` | 并发调用过多。请等待 `Retry-After` 秒后重试。 |
| 502 | `UPSTREAM_ERROR` | 平台返回了无法使用的内容。请退避后重试。 |

全部错误代码见 [Errors](/docs/errors)。失败的调用不计费。

## 价格

**Price** $0.002 per call. [List price](https://apinoa.com/en/pricing); the rate steps down above 1,000 calls a day.

## 说明

- 响应为 `{postId, contentType, bytes, encoding: "base64", data}`，图文帖子另有 `index` 和 `count`。解码 `data` 即得到文件：视频是 MP4，图片则是图像文件，具体类型见 `contentType`（例如 `image/jpeg`）。
- `index` 超过最后一张图片时返回 `400 INVALID_PARAMS`，并注明该帖子的图片数。视频只有一个文件，因此 `index` 大于 1 时同样会被拒绝。
- 超过 64 MB 的文件返回 `400 VIDEO_TOO_LARGE`。每次调用计 2 个单位。
