Быстрый старт Gemini API: первый запрос через curl и Google GenAI SDK
Этот quickstart по Gemini API доводит до первого рабочего запроса за минуты: один curl на нативный маршрут generateContent, затем тот же вызов из официального Google GenAI SDK на Python или JavaScript. Меняются только base URL и заголовок с ключом — формы запросов, стриминг и метаданные usage остаются в точности такими, как их описывает Google.
·
Один endpoint, нативный протокол Gemini
Чтобы сделать первый запрос к Gemini API через apiToken.sale, оставьте протокол Google как в документации и поменяйте только два значения: base URL становится https://router.apitoken.sale, а ключ — ваш ключ apiToken.sale в заголовке x-goog-api-key. Каждый запрос и ответ сохраняет нативную форму generateContent, поэтому документация Google, примеры SDK и любой ваш существующий код под Gemini работают без изменений.
Один ключ и один предоплатный баланс покрывают всех поддерживаемых провайдеров — Gemini наряду с Claude, GPT и Kimi. Использование Gemini тарифицируется по официальным токен-ставкам Google, а перед списанием с баланса применяется фиксированная скидка 50%. Никакого проекта Google Cloud или платёжного аккаунта с вашей стороны не требуется.
Читайте также: Как купить API-ключ Gemini
Создайте ключ и посмотрите свой каталог
- 01Создайте бесплатный аккаунт apiToken.sale и откройте дашборд — без согласований и waitlist.
- 02Сгенерируйте один API key. Он выглядит как 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 — правильный дефолт для первого текстового запроса: встроенного дефолта клиентской библиотеки может не оказаться в каталоге шлюза, а router обслуживает только те ID, которые перечисляет.
Первый запрос: generateContent через curl
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, так что код учёта токенов и расходов работает с самого первого вызова.
Перед отправкой большого промпта вызовите :countTokens на том же пути модели. Он возвращает число токенов, ничего не генерируя, — бесплатная оценка входа до того, как вы потратите деньги на генерацию.
Стриминг токенов через streamGenerateContent
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, а финальное событие несёт суммарную usageMetadata. В SDK тот же маршрут вызывается через generate_content_stream в Python и generateContentStream в JavaScript.
Стримьте всё, что видит пользователь, чтобы первые токены отрисовывались сразу. Для пакетных задач, где важен только итоговый текст, обычный 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; не добавляйте /v1beta в конфигурацию SDK.
- Передавайте конкретный model ID вроде gemini-3.6-flash — никогда не полагайтесь на дефолт клиента.
- Держите APITOKEN_API_KEY в переменных окружения, а не в исходном коде.
Если каждый запрос SDK возвращает 404, проверьте путь на удвоенный сегмент /v1beta/v1beta. SDK сам подставляет версию API; если в конфигурации хоста /v1beta уже указан, получается удвоенный путь.
Сколько стоят первые запросы
Вызовы Gemini рассчитываются по точным официальным ставкам Google — input, cached input и output — а сверху применяется фиксированная скидка 50%. Цены после скидки за 1M токенов для основных текстовых моделей:
| Модель | Input / cached / output за 1M | Подходящая первая задача |
|---|---|---|
| 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 | Самое сложное рассуждение и ревью |
Полный прайс Gemini, включая длинный контекст и генерацию изображений →
Разбор проблем первого ответа
| Статус | Вероятная причина | Решение |
|---|---|---|
| 400 | Отсутствует или неверен x-goog-api-key (INVALID_ARGUMENT, причина API_KEY_INVALID), либо поле, которое этот endpoint не выполняет (FILE_URI_UNSUPPORTED / CACHED_CONTENT_UNSUPPORTED) | Проверьте ключ и заголовок; файлы — inlineData; уберите cachedContent |
| 404 | Удвоенный /v1beta или model ID не из каталога | Передавайте голый host; выберите ID из GET /v1beta/models |
| 402 FAILED_PRECONDITION | Предоплатный баланс исчерпан — HTTP 402, не RESOURCE_EXHAUSTED и не 429 | Пополните баланс на любую целую сумму в долларах в дашборде |
Не отправляйте Authorization: Bearer или Anthropic-заголовок x-api-key на нативных маршрутах Gemini — x-goog-api-key единственный credential, который они принимают. Поскольку формат на проводе не меняется, возврат на собственный endpoint Google позже сводится к изменению base URL в одну строку.
Частые вопросы
Работает ли официальный Google GenAI SDK с apiToken.sale?
Да. Установите HttpOptions(base_url) в Python или httpOptions.baseUrl в JavaScript на https://router.apitoken.sale и передайте ключ apiToken.sale; формы запросов и ответов остаются нативными.
Какой заголовок аутентифицирует запросы к Gemini API?
x-goog-api-key с вашим ключом sk-pool. Нативные маршруты Gemini не принимают Authorization: Bearer и Anthropic-заголовок x-api-key.
Как стримить вывод Gemini?
Вызовите /v1beta/models/{model}:streamGenerateContent?alt=sse с x-goog-api-key или используйте метод SDK generate_content_stream / generateContentStream. Финальное SSE-событие несёт суммарную usageMetadata.
Почему удвоенный /v1beta возвращает 404?
Google SDK сам добавляет версию API к настроенному хосту. Укажите только голый host, чтобы в итоговом запросе был ровно один сегмент /v1beta.
Какую модель Gemini вызвать первой?
Начните с gemini-3.6-flash для обычного текста и кодинга. Массовую классификацию перенесите на модель Flash-Lite, а самое сложное рассуждение — на gemini-3.1-pro-preview.
Бесплатен ли вызов countTokens?
Да. Вызов :countTokens на пути модели возвращает число токенов без генерации, так что размер входа можно оценить до оплаты генерации.
Войдите через Google или GitHub и получите приветственный бонус $5 на баланс платформы — без карты.