Быстрый старт
Один API-ключ. Все модели. Совместимость с OpenAI и Anthropic.
curl https://api.luno.codes/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 1024
}'Получите API-ключ
Панель управления → API-ключи → Создать
Укажите Base URL
https://api.luno.codes/v1
Используйте любую модель
claude-sonnet-4-6, gpt-4o, gemini-3.1-pro...
Аутентификация
Передавайте API-ключ через заголовок Authorization или x-api-key.
Authorization: Bearer YOUR_API_KEY
# or
x-api-key: YOUR_API_KEYИнтеграции
Прямая замена для любого инструмента с поддержкой OpenAI или Anthropic API.
Claude Code
Готово к копированию. Замените файл настроек — и всё работает.
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.luno.codes",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-6",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5"
}
}ANTHROPIC_BASE_URL — без /v1 (Claude Code добавляет его сам)
Задайте все три DEFAULT_*_MODEL — иначе фоновые задачи завершатся ошибкой "model may not exist"
Codex CLI
export OPENAI_BASE_URL=https://api.luno.codes/v1
export OPENAI_API_KEY=YOUR_API_KEY
codex
OpenCode
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"luno": {
"npm": "@ai-sdk/openai-compatible",
"name": "Luno",
"options": {
"baseURL": "https://api.luno.codes/v1",
"apiKey": "YOUR_API_KEY"
},
"models": {
"claude-opus-4-8": { "name": "Claude Opus 4.8" },
"claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" },
"gpt-4o": { "name": "GPT-4o" }
}
}
}
}
Cursor
Settings → Models → OpenAI API Key:
Base URL: https://api.luno.codes/v1
API Key: YOUR_API_KEY
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="https://api.luno.codes/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
Anthropic Python SDK
import anthropic
client = anthropic.Anthropic(
base_url="https://api.luno.codes/v1",
api_key="YOUR_API_KEY"
)
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}]
)
print(message.content[0].text)https://api.luno.codes/v1Модели
Все модели доступны через единый эндпоинт. Нажмите на любой ID модели, чтобы скопировать.
curl https://api.luno.codes/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Claude
claude-fable-5Самая мощная — флагман
claude-opus-4-8Самая мощная, для сложных задач
claude-opus-4-7Прошлый флагман
claude-opus-4-6Сильные рассуждения
claude-opus-4-5Сбалансированный Opus
claude-sonnet-5Новейший Sonnet — превью
claude-sonnet-4-6Лучший баланс скорости и качества
claude-sonnet-4-5Быстрая генерация
claude-sonnet-4Лёгкий Sonnet
claude-haiku-4-5Сверхбыстрая
GPT
gpt-5.6-solГлубокое рассуждение
gpt-5.6-terraСбалансированный флагман
gpt-5.6-lunaБыстрая и доступная
gpt-5.5Прошлый флагман
gpt-5.4Прошлый флагман
gpt-5.3-codexАгентское программирование
gpt-5.2-codexПрограммирование на длинной дистанции
gpt-5.1Адаптивные рассуждения
gpt-4oМультимодальная
gpt-4o-miniБыстрая и дешёвая
Gemini
gemini-3.5-flashСамая быстрая, лучшее соотношение цены и качества
gemini-3.1-proСамая мощная Gemini
gemini-3.1-flashЛёгкая и быстрая
Эндпоинты
/v1/chat/completionsФормат OpenAI — работает со всеми моделями
/v1/messagesФормат Anthropic — модели Claude (Claude Code, SDK)
Стриминг
Добавьте "stream": true для вывода в реальном времени через Server-Sent Events.
curl https://api.luno.codes/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"stream": true,
"messages": [{"role": "user", "content": "Explain SSE briefly"}]
}'const res = await fetch("https://api.luno.codes/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "claude-sonnet-4-6",
stream: true,
messages: [{ role: "user", content: "Hello" }]
})
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
process.stdout.write(decoder.decode(value));
}Ошибки
Стандартные HTTP-коды состояния с телом ошибки в формате JSON.
auth_errorНеверный или отсутствующий API-ключ
insufficient_fundsБюджет токенов на этот период исчерпан
rate_limit_exceededСлишком много запросов — снизьте темп
upstream_errorПровайдер модели временно недоступен
{
"error": {
"message": "Invalid API key provided.",
"type": "auth_error",
"code": 401
}
}