Gemini API 快速入门:用 curl 和 Google GenAI SDK 发起首个请求
这份 Gemini API 快速入门带你在几分钟内跑通第一个可用请求:先对原生 generateContent 路由发一个 curl,再用官方 Google GenAI SDK(Python 或 JavaScript)完成同样的调用。只需改动 base URL 和密钥请求头——请求结构、流式输出和 usage 元数据与 Google 文档完全一致。
·
一个端点,原生 Gemini 协议
要通过 apiToken.sale 发起第一个 Gemini API 请求,完全保留 Google 官方协议,只改两个值:base URL 换成 https://router.apitoken.sale,密钥换成你的 apiToken.sale 密钥,通过 x-goog-api-key 请求头发送。每个请求和响应都保持原生 generateContent 结构,因此 Google 官方文档、SDK 示例以及你现有的 Gemini 代码都可以原样使用。
一个密钥、一份预付余额覆盖所有支持的提供商——Gemini 与 Claude、GPT、Kimi 并列可用。Gemini 用量按 Google 官方 token 费率计量,从余额扣费前先应用固定 50% 折扣。你这边不需要任何 Google Cloud 项目或计费账户。
创建密钥并查看你的模型目录
- 01免费注册 apiToken.sale 账号并打开控制台——无需审批,没有 waitlist。
- 02生成一个 API 密钥。它形如 sk-pool-…,对 Gemini、Claude、GPT 和 Kimi 同样有效。
- 03用银行卡或加密货币充值任意整数美元金额;预付余额永不过期。
- 04将密钥导出为 APITOKEN_API_KEY,然后列出你的密钥实际可调用的模型:
curl https://router.apitoken.sale/v1beta/models \ -H "x-goog-api-key: $APITOKEN_API_KEY"
从返回结果中挑一个显式的 model ID。gemini-3.6-flash 是首次文本调用的合适默认;客户端库内置的默认模型可能不在网关目录中,而路由器只服务它列出的 ID。
首个请求:用 curl 调用 generateContent
curl https://router.apitoken.sale/v1beta/models/gemini-3.6-flash:generateContent \
-H "x-goog-api-key: $APITOKEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"parts":[{"text":"Reply with exactly: connected"}]}]}'响应是标准的 Google 结构:读取 candidates[0].content.parts 并拼接其中的文本部分。同一份 JSON 还带有 usageMetadata,包含 prompt、candidate 和 total 的 token 计数,因此 token 与成本统计代码从第一次调用起就能工作。
发送大提示词之前,可以在同一模型路径上调用 :countTokens。它只返回 token 计数、不生成任何内容——在花钱生成之前免费估算输入量。
用 streamGenerateContent 流式输出 token
curl "https://router.apitoken.sale/v1beta/models/gemini-3.6-flash:streamGenerateContent?alt=sse" \
-H "x-goog-api-key: $APITOKEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"parts":[{"text":"Count from one to five"}]}]}'?alt=sse 查询参数把响应切换为 server-sent events:每个事件是同一 candidate 结构中的一个增量 chunk,最后一个事件携带汇总的 usageMetadata。在 SDK 中,同一路由对应 Python 的 generate_content_stream 和 JavaScript 的 generateContentStream。
凡是面向用户的输出都用流式,让首批 token 立即渲染。对于只关心最终文本的批处理任务,普通的 generateContent 更易于解析和重试。
官方 SDK:Python 和 JavaScript
import os
from google import genai
from google.genai import types
client = genai.Client(
api_key=os.environ["APITOKEN_API_KEY"],
http_options=types.HttpOptions(base_url="https://router.apitoken.sale"),
)
response = client.models.generate_content(
model="gemini-3.6-flash",
contents="Reply with exactly: connected",
)
print(response.text)import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({
apiKey: process.env.APITOKEN_API_KEY,
httpOptions: { baseUrl: "https://router.apitoken.sale" },
});
const response = await ai.models.generateContent({
model: "gemini-3.6-flash",
contents: "Reply with exactly: connected",
});
console.log(response.text);- 传裸 base URL https://router.apitoken.sale;SDK 配置中不要再附加 /v1beta。
- 传具体的 model ID,比如 gemini-3.6-flash——永远不要依赖客户端默认值。
- 把 APITOKEN_API_KEY 放在环境变量里,而不是写进源码。
如果 SDK 的每个请求都返回 404,检查请求路径里是否出现了重复的 /v1beta/v1beta 段。SDK 会自己拼接 API 版本;如果配置的 host 已包含 /v1beta,就会产生重复路径。
前几次调用的成本
Gemini 调用按 Google 官方费率项精确结算——输入、缓存输入和输出——再叠加固定 50% 折扣。常用文本模型折后每 100 万 token 的价格:
| 模型 | 每 100 万 token 输入 / 缓存 / 输出 | 适合的首个任务 |
|---|---|---|
| gemini-3.6-flash | $0.375 / $0.0375 / $1.875 | 日常编程、聊天和智能体 |
| gemini-3.1-flash-lite | $0.125 / $0.0125 / $0.75 | 分类、抽取、路由 |
| gemini-2.5-flash-lite | $0.05 / $0.005 / $0.20 | 最便宜的大批量文本 |
| gemini-3.1-pro-preview | $1 / $0.10 / $6 | 最硬的推理和评审 |
排查首个响应的问题
| 状态码 | 可能原因 | 解决方法 |
|---|---|---|
| 400 | 缺少或错误的 x-goog-api-key(INVALID_ARGUMENT,原因 API_KEY_INVALID),或本 endpoint 无法兑现的字段(FILE_URI_UNSUPPORTED / CACHED_CONTENT_UNSUPPORTED) | 核对密钥和请求头;文件用 inlineData;去掉 cachedContent |
| 404 | /v1beta 重复,或 model ID 不在目录中 | 传裸 host;从 GET /v1beta/models 中挑选 ID |
| 402 FAILED_PRECONDITION | 预付余额耗尽——HTTP 402,不是 RESOURCE_EXHAUSTED,也不是 429 | 在控制台充值任意整数美元金额 |
不要在原生 Gemini 路由上发送 Authorization: Bearer 或 Anthropic 的 x-api-key 请求头——x-goog-api-key 是它们接受的唯一凭据。由于线上协议格式不变,日后切回 Google 自己的端点只需改一行 base URL。
常见问题
官方 Google GenAI SDK 能配合 apiToken.sale 使用吗?
可以。在 Python 中设置 HttpOptions(base_url)、在 JavaScript 中设置 httpOptions.baseUrl 为 https://router.apitoken.sale,并传入 apiToken.sale 密钥;请求和响应结构保持原生。
Gemini API 请求用哪个请求头鉴权?
x-goog-api-key,携带你的 sk-pool 密钥。原生 Gemini 路由不接受 Authorization: Bearer 或 Anthropic 的 x-api-key 请求头。
如何流式输出 Gemini 的内容?
用 x-goog-api-key 调用 /v1beta/models/{model}:streamGenerateContent?alt=sse,或使用 SDK 的 generate_content_stream / generateContentStream 方法。最后一个 SSE 事件携带汇总的 usageMetadata。
为什么重复的 /v1beta 会返回 404?
Google SDK 会在配置的 host 上自动追加 API 版本。只配置裸 host,最终请求中就只会有一个 /v1beta 段。
应该先调用哪个 Gemini 模型?
通用文本和编程任务从 gemini-3.6-flash 开始。批量分类迁移到 Flash-Lite 模型,最硬的推理任务交给 gemini-3.1-pro-preview。
调用 countTokens 免费吗?
免费。在模型路径上调用 :countTokens 只返回 token 计数、不做生成,因此可以在付费生成之前估算输入规模。