OpenAI API через curl, Python и Node.js: инструкция (2026)
Первый вызов OpenAI-совместимого API через curl, PowerShell, Python и Node.js: Base URL, API Key, Model ID, переменные окружения, ошибки и безопасный запуск.
Короткий ответ: если провайдер выдал вам Base URL, API Key и Model ID, его OpenAI-совместимый API можно проверить из командной строки, а затем подключить через Python или Node.js. Учётная запись OpenAI для этого не нужна, а ключ не придётся записывать прямо в исходный код.
Инструкция подходит для сервисов, которые заявляют совместимость с OpenAI Chat Completions или предоставляют endpoint
/v1/chat/completions. У нативных API Anthropic и Gemini, а также у сервисов только с Responses API формат запроса отличается. В таком случае следуйте документации своего провайдера.
Что понадобится
Откройте личный кабинет API-провайдера и найдите три параметра:
| Параметр | Пример | На что обратить внимание |
|---|---|---|
| Base URL | https://api.example.com/v1 | Используйте адрес своего провайдера, а не пример из статьи |
| API Key | sk-... | Храните только на своём устройстве или сервере |
| Model ID | gpt-4.1-mini | Скопируйте точный идентификатор из доступного вам списка моделей |
Base URL часто заканчивается на /v1. SDK сам добавляет путь /chat/completions, поэтому в его настройках указывают только базовый адрес. Для curl нужен полный endpoint:
Base URL: https://api.example.com/v1
Полный endpoint: https://api.example.com/v1/chat/completions
Некоторые сервисы используют адрес без /v1 или собственный путь. Не добавляйте части URL наугад: ориентируйтесь на пример запроса в документации провайдера. Если эти термины пока незнакомы, сначала прочитайте что такое Base URL, Model ID и Token.
Шаг 1. Сохраните настройки в переменных окружения
Так ключ не окажется прямо в программе. Переменные ниже временные и обычно исчезают после закрытия терминала, что удобно для первой проверки.
Windows PowerShell
$env:AI_API_KEY="ваш API Key"
$env:AI_BASE_URL="https://api.example.com/v1"
$env:AI_MODEL="точный Model ID из личного кабинета"
macOS или Linux
export AI_API_KEY="ваш API Key"
export AI_BASE_URL="https://api.example.com/v1"
export AI_MODEL="точный Model ID из личного кабинета"
Не отправляйте настоящий ключ в мессенджер, не показывайте его на скриншоте и не запускайте примеры с ним в публичном онлайн-компиляторе. Подробнее об этом рассказывает руководство по безопасности API Key.
Способ 1. Минимальный запрос из командной строки
Начинать полезно именно с него: если прямой запрос работает, а программа — нет, значит проблема почти наверняка в настройке SDK или в коде.
macOS или Linux: curl
curl "$AI_BASE_URL/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AI_API_KEY" \
-d '{
"model": "'"$AI_MODEL"'",
"messages": [
{"role": "user", "content": "Ответь только: соединение работает"}
],
"temperature": 0.2
}'
Windows PowerShell
В Windows PowerShell кавычки обрабатываются иначе, поэтому надёжнее использовать встроенную команду Invoke-RestMethod:
$headers = @{
"Authorization" = "Bearer $env:AI_API_KEY"
"Content-Type" = "application/json"
}
$body = @{
model = $env:AI_MODEL
messages = @(
@{ role = "user"; content = "Ответь только: соединение работает" }
)
temperature = 0.2
} | ConvertTo-Json -Depth 5
Invoke-RestMethod `
-Uri "$env:AI_BASE_URL/chat/completions" `
-Method Post `
-Headers $headers `
-Body $body
При успехе вы получите JSON-ответ. Проверьте четыре вещи:
- в
choices[0].message.contentесть текст модели; - поле
modelсоответствует фактически вызванной модели; - в
usageмогут быть указаны входные, выходные и общие токены; - в личном кабинете появилась новая операция, а списание соответствует короткому тесту.
Не каждый совместимый сервис возвращает одинаковый набор полей в usage. Для базовой проверки достаточно статуса HTTP 200 и непустого массива choices.
Способ 2. Вызов API из Python
Возьмём официальный Python SDK OpenAI, но направим его на Base URL выбранного провайдера.
1. Установите Python и библиотеку
Подойдёт Python 3.9 или новее:
python --version
python -m pip install --upgrade openai
В Windows вместо python иногда используется команда py.
2. Создайте файл test_api.py
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AI_API_KEY"],
base_url=os.environ["AI_BASE_URL"],
)
response = client.chat.completions.create(
model=os.environ["AI_MODEL"],
messages=[
{"role": "system", "content": "Отвечай кратко и по делу."},
{"role": "user", "content": "Ответь только: Python подключён"},
],
temperature=0.2,
)
print(response.choices[0].message.content)
if response.usage:
print("Всего токенов:", response.usage.total_tokens)
3. Запустите
python test_api.py
Ответ «Python подключён» означает, что основные настройки верны. Если программа сообщает об отсутствующей переменной окружения, задайте её ещё раз в том же окне терминала и повторите запуск.
Способ 3. Вызов API из Node.js
Для примера потребуется Node.js 18 или более новая версия.
1. Создайте проект и установите SDK
mkdir api-test
cd api-test
npm init -y
npm install openai
2. Создайте файл test-api.mjs
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AI_API_KEY,
baseURL: process.env.AI_BASE_URL,
});
const response = await client.chat.completions.create({
model: process.env.AI_MODEL,
messages: [
{ role: "system", content: "Отвечай кратко и по делу." },
{ role: "user", content: "Ответь только: Node.js подключён" },
],
temperature: 0.2,
});
console.log(response.choices[0].message.content);
if (response.usage) {
console.log("Всего токенов:", response.usage.total_tokens);
}
3. Запустите
node test-api.mjs
Если провайдер показывает полный endpoint, не помещайте весь путь /chat/completions в параметр baseURL. Иначе SDK может добавить его повторно и вернуть ошибку 404.
Какой способ выбрать
| Способ | Для кого | Преимущество | Ограничение |
|---|---|---|---|
| curl / PowerShell | Первичная проверка и диагностика | Минимум зависимостей, виден исходный ответ | Неудобно для большого приложения |
| Python | Автоматизация, обработка данных, первые AI-проекты | Короткий код и много готовых библиотек | Нужно установить Python и зависимости |
| Node.js | Сайты, боты и JavaScript-проекты | Хорошо подходит для серверной части веб-приложений | Ключ нельзя переносить в браузерный код |
Если программировать пока не хочется, воспользуйтесь инструкцией по работе с AI API без кода.
Типичные ошибки
| Статус или симптом | Частая причина | Что проверить сначала |
|---|---|---|
| 401 Unauthorized | Неверный, отозванный ключ или неправильный заголовок | Скопируйте ключ заново и проверьте схему Bearer |
| 403 Forbidden | Ограничение аккаунта, региона, IP или прав на модель | Статус аккаунта и разрешения ключа |
| 404 Not Found | Ошибка в пути или дублирование /v1 | Сопоставьте полный URL с документацией |
| model not found | Ошибка в Model ID или нет доступа | Скопируйте идентификатор из доступного списка |
| 429 Too Many Requests | Закончился баланс или превышен лимит частоты, токенов, параллельных запросов | Баланс, квоты и статус сервиса |
| 500/502/503 | Временный сбой у провайдера или вышестоящего сервиса | Повторите позже или переключите маршрут |
| Тайм-аут | Сеть, медленная модель или слишком длинный контекст | Сначала отправьте короткий запрос из этой статьи |
Оптимальный порядок диагностики:
- Проверьте баланс и состояние аккаунта в личном кабинете.
- Заново скопируйте Base URL, API Key и Model ID.
- Отправьте минимальный запрос через curl или PowerShell.
- Сохраните полный HTTP-статус и текст ошибки.
- Если прямой запрос успешен, вернитесь к Python или Node.js.
- Если ошибка остаётся, передайте поддержке время, модель, статус и request ID, но не полный ключ.
Подробная схема есть в руководстве по диагностике подключения API.
Что изменить перед запуском реального проекта
Не вызывайте API прямо из браузера
JavaScript сайта, расширение браузера и переменные фронтенда доступны пользователю. Пример Node.js предназначен только для контролируемой вами серверной среды. В браузерную сборку API Key попадать не должен.
Добавьте тайм-аут и ограниченные повторы
Ошибки 429, 502 и 503 иногда проходят после паузы, но число повторов должно быть ограничено. Бесконечный цикл опасен. Кроме того, запрос мог завершиться у провайдера, даже если клиент не получил ответ: бездумный повтор способен привести к двойному списанию.
Сверьте модель и расходы
Сразу после первого успеха проверьте в личном кабинете модель, число входных и выходных токенов, время и сумму операции. Начинайте с короткого запроса и небольшого баланса, затем постепенно увеличивайте контекст и частоту.
Итоговый чек-лист
- Base URL взят из документации провайдера, а не из чужого скриншота.
- Model ID скопирован из списка, доступного вашему аккаунту.
- API Key хранится в переменной окружения, а не в коде.
- Минимальный запрос через curl или PowerShell возвращает HTTP 200.
- Python или Node.js получает текст из
choices[0].message.content. - Операция и списание появились в личном кабинете.
- Реальное приложение обращается к API с сервера и ограничивает тайм-ауты и повторы.
- Вы знаете, как отозвать ключ, и подготовили резервный маршрут.
После этого базовая цепочка «проверка endpoint → вызов из программы → сверка расходов» готова. Следующий полезный материал — как устроена тарификация AI API. Осваивайте потоковую выдачу, длинный контекст и вызов инструментов по одному: так источник ошибки будет понятен.
Проверено: 26 августа 2026 года
Область применения: OpenAI-совместимый Chat Completions API
Рекомендация: начинайте с короткого запроса и небольшого баланса; точный endpoint и возможности модели всегда сверяйте с актуальной документацией провайдера.