MiniMax-M3
MiniMax 原生多模态编程模型,支持 1M 上下文。
本页内容
MiniMax-M3快速开始#
- 创建 API Key
在控制台 我的 Key 创建通用 API Key(明文只显示一次),并确认账户余额充足。
- 设置环境变量
export TOKENTOSEA_API_KEY="sk-relay_…",示例从环境变量读取密钥。 - 发送请求
以下为 Chat Completions · JSON 示例;其他接口见全部调用示例。
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/chat/completions \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_tokens": 1024,
"thinking": {
"type": "disabled"
}
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"messages": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_tokens": 1024,
"thinking": {"type": "disabled"},
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/chat/completions",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
messages: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_tokens: 1024,
thinking: { type: 'disabled' },
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/chat/completions`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');能力与接口#
文本生成
下表只列出已在该型号上完成验收的接口、响应方式与输入类型;其他组合会返回 422(如 endpoint_not_verified、response_mode_not_verified、input_modality_not_verified)。
| 接口 | JSON | SSE 流式 | WebSocket | 已验证输入 |
|---|---|---|---|---|
Chat Completions/v1/chat/completions | 支持 | 支持 | 不支持 | 文本 |
Messages/v1/messages | 支持 | 支持 | 不支持 | 文本 |
Responses/v1/responses | 支持 | 支持 | 不支持 | 文本 |
价格#
官方价格以人民币(CNY)公布,核对日期 2026-10-19。TokenToSea 按官方价格计费、不加价;调用从账户余额(美元)扣除,人民币价格按请求受理时冻结的汇率换算为美元,金额保留 6 位小数并向上取整。
| 适用条件 | 输入 token每百万 token | 输出 token每百万 token | 缓存命中 token每百万 token |
|---|---|---|---|
| 标准服务 默认 | ¥2.1 | ¥8.4 | ¥0.42 |
| 优先服务(service_tier = priority) | ¥3.15 | ¥12.6 | ¥0.63 |
每次请求先按可能的最高用量预留金额,完成后按供应商返回的实际用量结算并退回差额。计费方式详见计费与结算。
官方价格来源
限制#
| 项目 | 取值 | 说明 |
|---|---|---|
| 上下文窗口 | 1,000,000 token | 厂商文档 |
| 单次输入上限 | 128,000 token | 平台校验,超出返回错误 |
| 输出长度参数上限 | 524,288 token | 平台校验 max_tokens 等参数;实际可输出长度以模型为准 |
| 默认输出长度 | 4,096 token | 请求未指定输出长度参数时自动填入 |
响应方式:JSON、SSE 流式。
- 同一账户最多同时进行 8 个已预留或执行中的调用(平台规则)。
- JSON 请求体不超过 48 MB;multipart 上传仅 1 个
file,不超过 25 MB。
全部调用示例#
每个示例都包含 cURL、Python 与 Node.js 三种写法,发送完全相同的请求体,并用同一个 Idempotency-Key 查询结果。
Chat Completions · JSON#
POST /v1/chat/completions 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/chat/completions \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_tokens": 1024,
"thinking": {
"type": "disabled"
}
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"messages": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_tokens": 1024,
"thinking": {"type": "disabled"},
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/chat/completions",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
messages: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_tokens: 1024,
thinking: { type: 'disabled' },
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/chat/completions`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');Chat Completions · SSE 流式#
POST /v1/chat/completions 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl -N https://api.tokentosea.com/v1/chat/completions \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_tokens": 1024,
"thinking": {
"type": "disabled"
},
"stream": true
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"messages": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_tokens": 1024,
"thinking": {"type": "disabled"},
"stream": True,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
def events(response):
"""逐行读取 SSE,返回每个 data 帧解析后的 JSON。"""
for raw in response.iter_lines():
line = raw.decode("utf-8")
if line.startswith("data:") and line[5:].strip() not in ("", "[DONE]"):
yield json.loads(line[5:])
try:
with requests.post(
f"{API_BASE}/v1/chat/completions",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
stream=True,
timeout=1300,
) as response:
print(response.status_code, response.headers.get("X-Request-Id"))
if not response.headers.get("Content-Type", "").startswith("text/event-stream"):
show(response.json()) # 错误信息或异步受理信封
else:
for event in events(response):
# 思考模型的推理过程在 delta.reasoning_content 中
for choice in event.get("choices") or []:
print((choice.get("delta") or {}).get("content") or "", end="", flush=True)
if event.get("usage"):
print("\nusage:", event["usage"])
if event.get("error"):
print("\n错误:", event["error"])
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
messages: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_tokens: 1024,
thinking: { type: 'disabled' },
stream: true,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
// 逐行读取 SSE,返回每个 data 帧解析后的 JSON。
async function* events(response) {
const decoder = new TextDecoder();
let buffer = '';
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
const data = line.startsWith('data:') ? line.slice(5).trim() : '';
if (data && data !== '[DONE]') yield JSON.parse(data);
}
}
}
try {
const response = await fetch(`${API_BASE}/v1/chat/completions`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
if (!(response.headers.get('content-type') ?? '').startsWith('text/event-stream')) {
show(await response.json()); // 错误信息或异步受理信封
} else {
for await (const event of events(response)) {
// 思考模型的推理过程在 delta.reasoning_content 中
for (const choice of event.choices ?? []) process.stdout.write(choice.delta?.content ?? '');
if (event.usage) console.log('\nusage:', event.usage);
if (event.error) console.error('\n错误:', event.error);
}
}
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');Messages · JSON#
POST /v1/messages 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/messages \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_tokens": 1024,
"thinking": {
"type": "disabled"
}
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"messages": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_tokens": 1024,
"thinking": {"type": "disabled"},
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/messages",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
messages: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_tokens: 1024,
thinking: { type: 'disabled' },
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/messages`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');Messages · SSE 流式#
POST /v1/messages 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl -N https://api.tokentosea.com/v1/messages \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_tokens": 1024,
"thinking": {
"type": "disabled"
},
"stream": true
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"messages": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_tokens": 1024,
"thinking": {"type": "disabled"},
"stream": True,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
def events(response):
"""逐行读取 SSE,返回每个 data 帧解析后的 JSON。"""
for raw in response.iter_lines():
line = raw.decode("utf-8")
if line.startswith("data:") and line[5:].strip() not in ("", "[DONE]"):
yield json.loads(line[5:])
try:
with requests.post(
f"{API_BASE}/v1/messages",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
stream=True,
timeout=1300,
) as response:
print(response.status_code, response.headers.get("X-Request-Id"))
if not response.headers.get("Content-Type", "").startswith("text/event-stream"):
show(response.json()) # 错误信息或异步受理信封
else:
for event in events(response):
if event.get("type") == "content_block_delta":
print(event["delta"].get("text", ""), end="", flush=True)
elif event.get("type") == "message_delta":
print("\nusage:", event.get("usage"))
elif event.get("error"):
print("\n错误:", event["error"])
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
messages: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_tokens: 1024,
thinking: { type: 'disabled' },
stream: true,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
// 逐行读取 SSE,返回每个 data 帧解析后的 JSON。
async function* events(response) {
const decoder = new TextDecoder();
let buffer = '';
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
const data = line.startsWith('data:') ? line.slice(5).trim() : '';
if (data && data !== '[DONE]') yield JSON.parse(data);
}
}
}
try {
const response = await fetch(`${API_BASE}/v1/messages`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
if (!(response.headers.get('content-type') ?? '').startsWith('text/event-stream')) {
show(await response.json()); // 错误信息或异步受理信封
} else {
for await (const event of events(response)) {
if (event.type === 'content_block_delta') process.stdout.write(event.delta?.text ?? '');
else if (event.type === 'message_delta') console.log('\nusage:', event.usage);
else if (event.error) console.error('\n错误:', event.error);
}
}
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');Responses · JSON#
POST /v1/responses 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/responses \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"thinking": {
"type": "disabled"
},
"input": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_output_tokens": 1024,
"store": false
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"thinking": {"type": "disabled"},
"input": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_output_tokens": 1024,
"store": False,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/responses",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
thinking: { type: 'disabled' },
input: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_output_tokens: 1024,
store: false,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/responses`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');Responses · SSE 流式#
POST /v1/responses 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl -N https://api.tokentosea.com/v1/responses \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"thinking": {
"type": "disabled"
},
"input": [
{
"role": "user",
"content": "请简短介绍一下你能帮助我完成什么。"
}
],
"max_output_tokens": 1024,
"store": false,
"stream": true
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "MiniMax-M3",
"thinking": {"type": "disabled"},
"input": [{"role": "user", "content": "请简短介绍一下你能帮助我完成什么。"}],
"max_output_tokens": 1024,
"store": False,
"stream": True,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
def events(response):
"""逐行读取 SSE,返回每个 data 帧解析后的 JSON。"""
for raw in response.iter_lines():
line = raw.decode("utf-8")
if line.startswith("data:") and line[5:].strip() not in ("", "[DONE]"):
yield json.loads(line[5:])
try:
with requests.post(
f"{API_BASE}/v1/responses",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
stream=True,
timeout=1300,
) as response:
print(response.status_code, response.headers.get("X-Request-Id"))
if not response.headers.get("Content-Type", "").startswith("text/event-stream"):
show(response.json()) # 错误信息或异步受理信封
else:
for event in events(response):
if event.get("type") == "response.output_text.delta":
print(event.get("delta", ""), end="", flush=True)
elif event.get("type") == "response.completed":
print("\nusage:", event["response"].get("usage"))
elif event.get("error"):
print("\n错误:", event["error"])
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
print("结果:", result.get("status"), "结算:", result.get("billing_status"), result.get("error") or "")// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'MiniMax-M3',
thinking: { type: 'disabled' },
input: [{ role: 'user', content: '请简短介绍一下你能帮助我完成什么。' }],
max_output_tokens: 1024,
store: false,
stream: true,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
// 逐行读取 SSE,返回每个 data 帧解析后的 JSON。
async function* events(response) {
const decoder = new TextDecoder();
let buffer = '';
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
const data = line.startsWith('data:') ? line.slice(5).trim() : '';
if (data && data !== '[DONE]') yield JSON.parse(data);
}
}
}
try {
const response = await fetch(`${API_BASE}/v1/responses`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
if (!(response.headers.get('content-type') ?? '').startsWith('text/event-stream')) {
show(await response.json()); // 错误信息或异步受理信封
} else {
for await (const event of events(response)) {
if (event.type === 'response.output_text.delta') process.stdout.write(event.delta ?? '');
else if (event.type === 'response.completed') console.log('\nusage:', event.response?.usage);
else if (event.error) console.error('\n错误:', event.error);
}
}
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
console.log('结果:', result.status, '结算:', result.billing_status, result.error ?? '');相关文档#
在控制台测试#
登录后可在 模型测试 页面直接调用 MiniMax-M3,查看返回结果、token 用量与实际扣费。网页调用同样从账户余额扣费。