Настройка инструментов

Быстрый старт 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

Создайте ключ и посмотрите свой каталог

  1. 01Создайте бесплатный аккаунт apiToken.sale и откройте дашборд — без согласований и waitlist.
  2. 02Сгенерируйте один API key. Он выглядит как sk-pool-… и одинаково работает для Gemini, Claude, GPT и Kimi.
  3. 03Пополните баланс на любую целую сумму в долларах картой или криптой; предоплатный баланс не сгорает.
  4. 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, включая длинный контекст и генерацию изображений

Все поддерживаемые model ID и цены

Разбор проблем первого ответа

СтатусВероятная причинаРешение
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 в одну строку.

Как выбрать между Pro, Flash и Flash-Lite

Частые вопросы

Работает ли официальный 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 на баланс платформы — без карты.