每个生成内容的请求都从你的预付 USD 余额中支付。你还可以限制每个 API 密钥可以花费的金额。本页介绍如何读取余额和密钥的上限,以及请求因其中任何一项被拒绝时该怎么办。
这两个端点都需要通过 Authorization: Bearer 发送 API 密钥。详见认证。
读取余额
章节标题“读取余额”GET /v1/balance 返回你账户的余额。
curl "https://api.sakuranbo.ai/v1/balance" \ -H "Authorization: Bearer $SAKURANBO_API_KEY"const response = await fetch("https://api.sakuranbo.ai/v1/balance", { headers: { Authorization: `Bearer ${process.env.SAKURANBO_API_KEY}`, },});const data = await response.json();console.log(data);import os
import requests
response = requests.get( "https://api.sakuranbo.ai/v1/balance", headers={ "Authorization": f"Bearer {os.environ['SAKURANBO_API_KEY']}", },)print(response.json())响应包含以下字段:
| 名称 | 类型 |
|---|---|
object | string |
currency | string |
available_micro_usd | integer |
available_usd | string |
held_micro_usd | integer |
held_usd | string |
available_micro_usd和available_usd是新请求可以使用的金额。held_micro_usd和held_usd是运行中的请求已预留的金额。
每个金额都给出两次:一次是以 micro USD(1 USD = 1,000,000 micro USD)为单位的整数,另一次是以 USD 表示的十进制字符串。
预留
章节标题“预留”Sakuranbo AI 接受一个会产生费用的请求时,会预留一笔金额。预留的金额从 available 转入 held。请求结束时,会按实际费用扣费,差额回到 available。被取消或被拒绝的请求,或在模型生成任何输出之前就失败的请求,会收回全部预留,你不会被扣费。如果对话流在模型开始生成输出(包括推理输出)之后中断,该请求会计费,包括已经生成的输出,其余的预留回到 available。详见对话。
在极少数情况下,图像或视频任务会在 Sakuranbo AI 确认模型提供方是否已收到请求之前失败。此时任务会变为 failed,错误代码为 upstream_error。它的预留会一直留在 held 中,直到 Sakuranbo AI 确认该请求是否计费,不会自行回到 available。如果它一直留在 held 中,请联系支持团队并提供任务 ID。
由于有预留,在请求运行期间,available 可能低于你的总余额。新请求会按 available 检查。
限制密钥的支出
章节标题“限制密钥的支出”支出上限属于某一个 API 密钥。你在控制台的 API 密钥页面创建密钥时设置它。上限包含一个 USD 金额和一个周期。周期为 none, day, month 之一。
day:密钥在一个 UTC 自然日内可以花费的金额。计数器在 UTC 00:00 重新开始计算。month:一个 UTC 自然月的金额。计数器在每月 1 日 UTC 00:00 重新开始计算。none:密钥整个存续期间的累计金额。计数器永不重新开始。
没有上限的密钥可以花费到余额允许的数额,但仍会统计用量。你还可以给密钥设置到期日。使用已过期密钥的请求会返回 401。详见认证。
你在控制台的 Playground 中运行的请求不使用 API 密钥,因此不会计入任何密钥的上限。
读取密钥的上限
章节标题“读取密钥的上限”GET /v1/key 返回发送该请求的密钥,包括它的上限和用量。
curl "https://api.sakuranbo.ai/v1/key" \ -H "Authorization: Bearer $SAKURANBO_API_KEY"const response = await fetch("https://api.sakuranbo.ai/v1/key", { headers: { Authorization: `Bearer ${process.env.SAKURANBO_API_KEY}`, },});const data = await response.json();console.log(data);import os
import requests
response = requests.get( "https://api.sakuranbo.ai/v1/key", headers={ "Authorization": f"Bearer {os.environ['SAKURANBO_API_KEY']}", },)print(response.json())响应包含以下字段:
| 名称 | 类型 |
|---|---|
object | string |
id | string |
name | string |
last4 | string |
environment | string |
created_at | string |
expires_at | string | null |
limit | object | null |
usage | object |
limit在密钥没有上限时为null。否则它包含金额和周期。usage.used_micro_usd和usage.used_usd是运行中的请求已预留的金额,加上当前周期内已经扣除的金额。usage.remaining_micro_usd和usage.remaining_usd是在上限内还可以使用的剩余金额。密钥没有上限时它们为null。usage.resets_at是计数器重新开始计算的时间。周期为none时为null。
请求被拒绝时
章节标题“请求被拒绝时”请求在两种情况下会被以 402 拒绝。error.details.limit_source 用来区分这两种情况。
balance_insufficient(limit_source 为 balance):你的 available 余额低于该请求需要预留的金额。error.details 包含 requested_micro_usd、available_micro_usd 和 shortfall_micro_usd,以及以 USD 表示的同样三个金额 requested_usd、available_usd 和 shortfall_usd。请充值后重新发送请求。
key_limit_exceeded(limit_source 为 key):密钥的用量加上该请求需要预留的金额,超过了密钥的上限。恰好达到上限的请求会被接受。error.details 包含 period、resets_at、requested_micro_usd、limit_micro_usd 和 used_micro_usd,以及以 USD 表示的同样三个金额。如果两种情况同时适用,会先检查密钥的上限。
请注意以下几点:
- 预留会立即计入,因此即使请求的实际费用在上限之内,它也可能被拒绝。更小的请求(例如
max_tokens更低的对话请求)预留的金额更少。 - 被拒绝的请求不会扣费,也不会创建任务。
402响应没有Retry-After响应头。对于密钥的上限,请读取error.details.resets_at来了解计数器何时重新开始计算。如果它为null,说明上限针对密钥的整个存续期间,你需要改用上限更高的密钥。
低余额提醒
章节标题“低余额提醒”可用余额低于你选定的额度时,你可以收到 balance.low Webhook 事件。请在控制台的设置中设置这个额度。详见 Webhook。
MCP 服务器中的余额
章节标题“MCP 服务器中的余额”MCP 服务器提供工具 get_balance,读取的是同样的数据。详见 MCP 服务器。
错误
章节标题“错误”| 代码 | HTTP 状态码 | 类型 | 说明 |
|---|---|---|---|
unauthorized | 401 | authentication_error | API 密钥缺失、格式有误、未知、已被吊销或已过期。响应不会说明属于哪一种情况。 |
GET /v1/key 返回相同的错误代码。完整的错误代码列表请参阅错误。
所有价格均以 USD 计价,标价已包含我们的加价。