Документация API ChatGPT: краткая справка и первые вызовы
Большинство чат-API используют формат запроса, популяризированный API ChatGPT. На этой странице — краткая справка по совместимому эндпоинту на этом сайте с примерами для копирования.
Последнее обновление

Итоги
- Базовый URL https://api.gptsemfiltro.com/v1, аутентификация по bearer-токену, ID модели uncensored.
- Три метода: chat completions, responses и список моделей; для баланса есть отдельные эндпоинты.
- Поддерживаются потоковая передача, вызов инструментов и JSON-режим; контекст составляет 100 000 токенов.
- Ошибки 429 содержат код: rate_limited или concurrency.
Что охватывает эта страница
Если вы искали документацию API ChatGPT, вам может подойти официальная документация OpenAI для моделей OpenAI. Эта страница — другое: рабочая справка по API, совместимому с OpenAI, размещённому на этом сайте. Она использует одну модель с открытыми весами, uncensored, настроенную на ответы без отказов по контенту для законного использования взрослыми. Это не официальный API OpenAI или другого вендора.
Форматы запросов и ответов соответствуют привычному формату OpenAI, поэтому официальные SDK и большинство инструментов работают после изменения базового URL и ключа. Полная справка находится в документации API; эта страница даёт краткую версию с примерами, которые можно выполнить.
Основы подключения и первый вызов
Основы подключения
| Пункт | Значение |
|---|---|
| Базовый URL | https://api.gptsemfiltro.com/v1 |
| Авторизация | Authorization: Bearer YOUR_KEY |
| ID модели | uncensored |
| Эндпоинт чата | POST /v1/chat/completions |
| Эндпоинт responses | POST /v1/responses |
| Список моделей | GET /v1/models |
| Баланс | GET /v1/balance или GET /v1/dashboard/billing/credit_grants |
| Максимальный размер тела запроса | 8 МБ |
| Контекстное окно | 100 000 токенов, промпт плюс генерация |
Получите ключ на странице API-ключ. Новые пользователи могут получить пробный баланс $0,50 одним кликом; он действителен в течение 7 дней и не требует оплаты. Вы можете создать новый ключ в любое время, а аккаунты с пополненным балансом могут хранить до 5 ключей, присваивать им метки и отзывать любой из них.
Ваш первый вызов
curl https://api.gptsemfiltro.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"}
],
"temperature": 0.7
}'
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
Ответ содержит choices[0].message.content и объект usage с подсчётом токенов промпта и ответа.
Параметры запроса
Параметры, которые вы будете использовать чаще всего:
model: всегдаuncensored.messages: список объектов сrole(system,user,assistantилиtool) иcontent.max_tokens: необязательный. Если его не указать, модель может выдать ответ, используя оставшуюся часть контекстного окна на 100 000 токенов.temperature,top_p,stop,seed,frequency_penalty,presence_penalty: передаются модели напрямую.stream: установите значениеtrueдля потоковой передачи (SSE), с данными об использовании в конце.toolsиtool_choice: описывают функции, которые может вызвать модель.response_format:{"type": "json_object"}включает JSON-режим.
Недоступно: генерация изображений, аудио или видео, эмбеддинги и дообучение. Сервис обрабатывает только текст.
Роли работают так же, как в формате OpenAI. Сообщение system задаёт поведение для всего чата, сообщения user содержат ввод пользователя, сообщения assistant содержат предыдущие ответы, а сообщения tool возвращают результаты функций. API не сохраняет память между вызовами, поэтому каждый запрос должен включать историю, которую вы хотите показать модели. Промпт и ответ делят контекстное окно на 100 000 токенов, поэтому длинная история оставляет меньше места для ответа.
Потоковая передача, вызов инструментов и JSON-режим
Потоковая передача
Установите stream в значение true и читайте события по мере их поступления. Каждый чанк содержит небольшой прирост текста, а данные об использовании поступают в конце.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.gptsemfiltro.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "List five uses of a context window." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Потоковый запрос удерживает слот параллельности до завершения потока, поэтому закрывайте потоки, которые больше не нужны.
Вызов инструментов и JSON-режим
Объявляйте функции с помощью tools. Когда модели нужна одна из них, в ответе будет tool_calls вместо текста. Вы запускаете функцию и отправляете результат обратно как сообщение с role: "tool".
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What is the weather in Lisbon?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"city": "Lisbon", "temp_c": 21}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
В продакшене проверяйте, существует ли tool_calls, прежде чем читать его, так как модель может ответить обычным текстом. Для структурированного вывода без инструментов добавьте "response_format": {"type": "json_object"} и укажите в промпте, что вам нужен JSON.
Лимиты, ошибки и заголовки
| Лимит | Полный ключ | Пробный ключ |
|---|---|---|
| Параллельные запросы | 8 | 2 |
| Запросов в минуту | 300 | 60 |
| Размер тела запроса | 8 МБ | 8 МБ |
При превышении лимита API возвращает HTTP 429. Код ошибки rate_limited означает слишком много запросов в минуту; concurrency означает слишком много одновременно. При временной перегрузке вы также получите 429 с заголовком Retry-After: 5. Неудачные или отклонённые запросы не оплачиваются.
Полезные заголовки ответа: X-Request-Id (цитируйте его при обращении в поддержку), X-Balance-USD, X-RateLimit-Limit-Requests и X-RateLimit-Limit-Concurrency.
Небольшой помощник для повторных попыток на Node.js, который ждёт время из Retry-After и увеличивает задержку при каждой попытке:
async function chat(messages, tries = 4) {
for (let n = 0; n < tries; n++) {
const res = await fetch("https://api.gptsemfiltro.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "uncensored", messages: messages }),
});
if (res.status === 429) {
const wait = Number(res.headers.get("Retry-After") || 5);
await new Promise(function (r) { setTimeout(r, wait * 1000 * (n + 1)); });
continue;
}
return res.json();
}
throw new Error("still rate limited");
}Перенос существующего кода и проверка баланса
Перенос существующего кода на этот эндпоинт
Если ваш код уже вызывает эндпоинт для чата в стиле OpenAI, миграция будет небольшой. Измените эти три значения, остальное оставьте:
- Базовый URL становится
https://api.gptsemfiltro.com/v1. - Ключ становится тем, что указан на странице API-ключ.
- Модель становится
uncensored.
Затем проверьте, от чего зависит ваш код. Всё, что основано на тексте и чате, переносится: системные промпты, история, потоковая передача, вызовы инструментов и JSON-режим. Всё остальное здесь отсутствует. Нет генерации изображений, аудио или видео, нет эмбеддингов и дообучения, поэтому код, вызывающий эти маршруты, требует другого провайдера.
Эндпоинт Responses также доступен для клиентов, предпочитающих этот формат:
curl https://api.gptsemfiltro.com/v1/responses \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "input": "Summarise what a context window is in one sentence."}'
Протестируйте его перед запуском, так как разные модели по-разному реагируют на один и тот же промпт. Отказы, тон и длина могут меняться, поэтому перезапустите промпты, которые вас интересуют.
Проверка баланса из кода
Баланс доступен тремя способами. В каждом ответе есть заголовок X-Balance-USD. Вы также можете вызвать GET /v1/balance или запрос в стиле API OpenAI GET /v1/dashboard/billing/credit_grants, который уже поддерживается некоторыми дашбордами.
curl https://api.gptsemfiltro.com/v1/balance \
-H "Authorization: Bearer YOUR_KEY"
Полезный паттерн — читать заголовок после каждого вызова, сохранять его и отправлять уведомление, когда баланс падает ниже выбранного вами порога. Поскольку кредит является предоплаченным и не сгорает, низкий баланс — это сигнал для пополнения, а не дедлайн.
Тарификация вкратце
Ввод стоит $0,15 за 1M токенов, вывод — $0,50 за 1M токенов, списание происходит с предоплаченного баланса. Пример: 3 000 входных и 600 выходных токенов стоят 3 000 x $0,15 / 1M + 600 x $0,50 / 1M = $0,00045 + $0,0003 = $0,00075. Пополнения — целыми суммами от $20 до $500 с бонусами +5% от $50, +10% от $100 и +15% от $200, оплата в USDT (TRC20) или USDC (Base). Подробнее на странице с ценами. Промпты не используются для обучения.
Чек-лист по устранению неполадок при первой интеграции
Большинство сбоев при первых вызовах вызваны коротким списком причин. Пройдитесь по нему по порядку, прежде чем подозревать сервис.
- Статус 401. Ключ отсутствует или введён с ошибкой. Выведите заголовок, который на самом деле отправляет ваш клиент, и сравните его с
Authorization: Bearer YOUR_KEY. Если ключ был вставлен в публичное место, пересоздайте его на странице API-ключей; старый ключ перестаёт работать сразу. - Статус 404. Путь неверный. Базовый URL заканчивается на
/v1, а SDK добавляет/chat/completionsсамостоятельно. Если вы вызываете API через обычный HTTP, укажите полный путь. - Ошибка, связанная с моделью. Единственный идентификатор модели —
uncensored. Имя, скопированное из документации другого провайдера, не совпадёт.GET /v1/modelsперечисляет, что может использовать ваш ключ. - Очень большой запрос завершается ошибкой. Лимит тела запроса — 8 МБ. Длинные истории лучше обрезать или сжимать задолго до достижения этого размера, а окно в 100 000 токенов общее для промпта и ответа.
- Периодические 429. Прочитайте код ошибки.
concurrencyозначает слишком много вызовов одновременно, поэтому снизьте количество воркеров.rate_limitedозначает слишком много запросов в минуту. ЗаголовокRetry-After: 5означает временную перегрузку, и короткая задержка исправит ситуацию. - Ответы обрываются. Если вы установили
max_tokens, ответ останавливается там, аfinish_reasonпринимает значениеlength. Увеличьте лимит или уберите его.
Сохраняйте значение X-Request-Id из любого вызова, который вы не можете объяснить. Это самый быстрый способ указать на один конкретный запрос при обращении в поддержку.
Дополнительные руководства
Часто задаваемые вопросы
Это официальный API ChatGPT?
Нет. Это независимая размещённая модель с открытыми весами с интерфейсом, совместимым с OpenAI. Она не управляется компанией OpenAI.
Какие эндпоинты поддерживаются?
POST /v1/chat/completions, POST /v1/responses и GET /v1/models, а также эндпоинты баланса в /v1/balance и /v1/dashboard/billing/credit_grants.
Мне нужен другой SDK?
Нет. Официальные SDK для Python и Node от OpenAI работают после изменения базового URL, ключа и идентификатора модели.
Как проверить оставшийся баланс?
Прочитайте заголовок X-Balance-USD в любом ответе или вызовите GET /v1/balance.
Получите API-ключ
Зарегистрируйтесь, скопируйте ключ и обновите базовый URL. Настройка завершена.