ChatGPT API: полное руководство
OpenAI API предоставляет доступ к моделям GPT-4o, GPT-4o-mini, o1. Это основа для AI-чатботов, генерации контента и автоматизации задач.
Получение API ключа
Зарегистрируйтесь на platform.openai.com, пополните баланс ($5+) и создайте API ключ. Храните ключ в переменных окружения.
Первый запрос (cURL)
curl https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{
"model": "gpt-4o-mini",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Что такое VPS хостинг?"}
],
"max_tokens": 500
}' PHP интеграция
composer require openai-php/client <?php
require 'vendor/autoload.php';
$client = OpenAI::client($_ENV['OPENAI_API_KEY']);
$response = $client->chat()->create([
'model' => 'gpt-4o-mini',
'messages' => [
['role' => 'system', 'content' => 'Ты помощник поддержки ZevsHost.'],
['role' => 'user', 'content' => 'Как добавить домен в cPanel?'],
],
'max_tokens' => 800,
]);
echo $response->choices[0]->message->content; Python интеграция
pip install openai from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Explain VPS in 3 sentences."}],
max_tokens=200
)
print(response.choices[0].message.content) Streaming (потоковый вывод)
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Напиши статью о VPS"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) Цены и модели (2025)
| Модель | Input (1M) | Output (1M) | Применение |
|---|---|---|---|
| gpt-4o-mini | $0.15 | $0.60 | Чатботы, поддержка |
| gpt-4o | $2.50 | $10.00 | Сложные задачи |
| o1-mini | $1.10 | $4.40 | Логика, код |
Частые ошибки API
Коды ошибок OpenAI API стандартные для HTTP, но причины за ними не всегда очевидны из текста ответа.
401 — Incorrect API key provided
{"error": {"message": "Incorrect API key provided: sk-***", "type": "invalid_request_error"}} Ключ не прошёл проверку: он отозван, скопирован не полностью или указан для другого проекта организации. Проверьте ключ в разделе API keys на platform.openai.com — отозванные ключи там помечены явно.
429 — Rate limit reached / insufficient_quota
Под кодом 429 скрываются две разные проблемы: превышение лимита запросов в минуту (временно, нужно повторить с задержкой) и исчерпание оплаченного баланса (insufficient_quota, требует пополнения). Текст поля type в JSON-ответе различает эти случаи — их нельзя обрабатывать одинаковой повторной попыткой.
Основные коды ошибок и реакция на них
| Код | Тип ошибки | Что делать |
|---|---|---|
| 401 | invalid_request_error / неверный ключ | Проверить и перевыпустить ключ |
| 429 | rate_limit_exceeded | Повторить запрос с экспоненциальной задержкой |
| 429 | insufficient_quota | Пополнить баланс, повтор не поможет |
| 500/503 | server_error | Повторить позже, проблема на стороне OpenAI |
Когда прямой вызов OpenAI API не подходит
- Данные пользователей нельзя передавать за пределы вашей инфраструктуры — в этом случае нужен локальный вариант вроде Ollama.
- Нужна независимость от одного провайдера — стоит сразу закладывать абстракцию, как описано в статье про сравнение AI API.
- Бюджет непредсказуем при пиковой нагрузке — без жёсткого лимита на max_tokens и мониторинга расходов счёт может вырасти быстрее, чем ожидалось.
- Нужна гарантия времени отклика — публичный API не даёт SLA по задержке, при пиковой нагрузке OpenAI ответ может занять заметно больше обычного.
Проверка, что интеграция работает
curl -s https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY" | head -c 200 Если ключ рабочий, запрос вернёт JSON со списком доступных моделей. Ошибка 401 на этом шаге означает проблему с ключом ещё до того, как вы начнёте разбираться с логикой самого чат-запроса — так быстрее локализовать, в какой части системы сбой.
При проектировании интеграции стоит сразу закладывать логирование стоимости запросов: поле usage в ответе API содержит точное число использованных токенов на вход и выход. Сохраняя эти значения вместе с идентификатором запроса, можно быстро найти, какой именно сценарий использования резко увеличил счёт, вместо того чтобы разбираться постфактум по общей сумме в личном кабинете OpenAI.