Создавайте с Claude
по предсказуемой цене.
AliCode — это drop-in шлюз к Claude API: тот же протокол, что у Anthropic, существенно ниже стоимость и без жёстких RPM-лимитов. Измените базовый URL — и продолжайте работу без изменений в коде.
Направьте любой инструмент, работающий по Anthropic Messages API или OpenAI Chat Completions API, на
https://api.alicode.store и используйте ключ, начинающийся с sk-ali-. Отдельного обучения не требуется: протокол идентичен api.anthropic.com на всех поддерживаемых эндпоинтах, вплоть до байтового представления SSE-событий.
AliCode создан для того, чтобы сделать доступ к Claude API экономически предсказуемым. Официальные тарифы рассчитаны на корпоративные бюджеты; мы консолидируем спрос множества команд и разработчиков, заключаем оптовые контракты на мощности и передаём полученную экономию пользователям в виде прозрачной pay-as-you-go модели с оплатой по факту потребления.
Что вы получаете
- Тот же протокол что у Anthropic.
/v1/messages, SSE-события, content-блоки,tool_use, vision, кэширование промптов — идентичные байты. Если ваш код работает с официальным API, он работает у нас с заменой одной переменной окружения. - Оба API на одном эндпоинте. OpenAI Chat Completions тоже поддерживается — Cursor / Continue / OpenWebUI / любой OpenAI SDK скрипт просто меняет base URL. Никаких translation-прослоек с вашей стороны.
- Files, batches, count_tokens. Полный паритет фич для SDK-хелперов — ваш клиентский код не требует ни одного `if`. Anthropic SDK автоматически их находит и использует так, словно говорит с официальным эндпоинтом.
- Pay-as-you-go кредиты. Пополнение от 300 ₽. Кредиты не сгорают. Без подписок, минимальных платежей и обязательств — расходы прекращаются в тот момент, когда вы прекращаете обращения к API.
- Без поминутных лимитов. Мы не разделяем доступ по тарифным уровням. Единственное ограничение — защита от злоупотреблений на уровне IP (1000 запросов/мин), что на порядки превышает потребности любого штатного агентского цикла.
- Тот же конверт безопасности. Весь трафик через TLS 1.3, API-ключи с bcrypt-хешем в БД, спенд-кэпы и whitelist моделей на каждый ключ, мгновенный revoke, ни промпт ни ответ не логируются.
Для кого
AliCode рассчитан на разработчиков, для которых AI — повседневный рабочий инструмент, а не отдельная функция SaaS-продукта. Если вы постоянно работаете в Cline, Cursor, Claude Code, Continue или Aider, либо запускаете Python-сценарии с интенсивными обращениями к API (эмбеддинги, классификация, агентские циклы, пакетная суммаризация) — это решение для вас. Тарификация построена так, чтобы интенсивное использование оставалось доступным: пользователь Cursor, генерирующий 200K токенов Sonnet в день, платит порядка $5 в месяц вместо $60.
AliCode не является заменой корпоративных контрактов с Anthropic. Если вам требуется индивидуальный DPA, аудиторская отчётность SOC2, выделенные мощности или формальный SLA выше 99.5%, обращайтесь напрямую в Anthropic. Мы предоставляем перепродажу их мощностей в потребительском масштабе.
Доступные модели
| Модель | Контекст | Макс. вывод | Для чего |
|---|---|---|---|
| claude-haiku-4-5 | 200K | 64K | Агентские циклы, быстрая классификация, дешёвые completion'ы |
| claude-sonnet-4-5 | 200K | 64K | Дефолт — ежедневный кодинг, vision, tool use |
| claude-sonnet-4-6 | 200K | 64K | Свежий Sonnet — лучше слушает инструкции |
| claude-opus-4-5 | 200K | 64K | Тяжёлые рассуждения, расширенное мышление |
| claude-opus-4-7 | 200K | 128K | Топ — агенты, глубокие рефакторы, многоступенчатое планирование |
Старые ID моделей (claude-3-7-sonnet-latest, claude-3-5-haiku-latest, claude-opus-4-1) тоже принимаются как алиасы.
Быстрый старт
Пять минут от нуля до первого запроса.
- Зарегистрируйтесь (email + пароль).
- Откройте /dashboard/keys → Создать ключ → скопируйте. Начинается с
sk-ali-… - Сделайте первый запрос:
curl https://api.alicode.store/v1/messages \
-H 'x-api-key: $ALICODE_KEY' \
-H 'anthropic-version: 2023-06-01' \
-H 'content-type: application/json' \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 256,
"messages": [{"role":"user","content":"hi"}]
}'
import os, anthropic
client = anthropic.Anthropic(
api_key=os.environ["ALICODE_KEY"],
base_url="https://api.alicode.store",
)
msg = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=256,
messages=[{"role":"user","content":"hi"}],
)
print(msg.content[0].text)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ALICODE_KEY,
baseURL: "https://api.alicode.store",
});
const msg = await client.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 256,
messages: [{ role: "user", content: "hi" }],
});
console.log(msg.content[0].text);
Всё. Ваш существующий код на Anthropic SDK работает без изменений.
Миграция с Anthropic
Одна переменная окружения, никаких правок кода. Замените api.anthropic.com на api.alicode.store; замените ваш sk-ant-… ключ на sk-ali-…
Bash / Docker
# before
export ANTHROPIC_API_KEY=sk-ant-…
export ANTHROPIC_BASE_URL=https://api.anthropic.com
# after
export ANTHROPIC_API_KEY=sk-ali-…
export ANTHROPIC_BASE_URL=https://api.alicode.store
Python SDK
# only this line changes
client = anthropic.Anthropic(
api_key=os.environ['ALICODE_KEY'],
base_url='https://api.alicode.store',
)
Node SDK
const client = new Anthropic({
apiKey: process.env.ALICODE_KEY,
baseURL: 'https://api.alicode.store',
});
Таблица совместимости
| Возможность | Anthropic | AliCode | Заметки |
|---|---|---|---|
| Messages API | ✓ | ✓ | Полная совместимость формата ответа по байтам |
| Стриминг SSE | ✓ | ✓ | Те же имена событий и порядок |
| Tool use | ✓ | ✓ | Включая параллельные вызовы инструментов |
| Vision | ✓ | ✓ | base64 / url / file_id — всё поддерживается |
| Кэширование промптов | ✓ | ✓ | cache_control: ephemeral |
| Расширенное мышление | ✓ | ✓ | поле thinking у Opus |
| Files API | ✓ | ✓ | Постоянные загрузки для vision/документов |
| Message Batches | ✓ | ✓ | JSONL-результаты, 50% от цены |
| Count tokens | ✓ | ✓ | BPE-точно (±3-5%) |
| Citations | ✓ | — | Скоро в Q3 |
Cursor
Cursor использует OpenAI-совместимый base URL. Переопределите его на наш.
- File → Preferences → Cursor Settings → Models
- Прокрутите до API Keys → включите OpenAI API Key.
- Вставьте свой
sk-ali-…ключ. - Включите Override OpenAI Base URL и вставьте
https://api.alicode.store/v1 - Жмите Verify. Затем в Add or search model добавьте
claude-sonnet-4-5(илиclaude-haiku-4-5/claude-opus-4-7).
Cline
Cline — бесплатное агентское расширение для VS Code. Говорит на Anthropic-протоколе нативно.
- VS Code → Extensions → найдите Cline → установите.
- Откройте панель Cline (левый сайдбар) → Settings (вверху справа).
- API Provider: Anthropic
- API Key:
sk-ali-… - Use custom base URL: ✓ →
https://api.alicode.store - Model ID:
claude-sonnet-4-5
Сохраните и начните новый таск. Cline будет использовать все свои инструменты (Read, Edit, Bash, и т.д.) через наш шлюз, включая стриминг tool_use и vision-блоки.
Рекомендуемые модели
- Дефолт для кодинга:
claude-sonnet-4-5— приемлемое качество с максимальной скоростью; на нём остаются 90% юзеров. - Дешёвая разведка:
claude-haiku-4-5— отлично для «объясни этот файл» / «найди баг»; в ~4× дешевле Sonnet. - Тяжёлые рефакторы:
claude-opus-4-7— когда Sonnet раз за разом косячит, переключитесь на Opus один turn и обратно.
Советы
- Vision: перетащите картинки в инпут Cline — они уйдут как
imagecontent-блоки. Наш шлюз отправит их на captioning-провайдер, передаст caption Claude для рассуждения. Вы этого не видите — только ответ. - Веб-поиск: ничего объявлять не надо — мы автоматически инжектим
web_search, когда Cline пытается его сделать черезexecute_command + curl. Спасает вашу песочницу от падений на network-вызовах. - Длинные сессии: автокомпактификация Cline работает идеально — мы поддерживаем
context_management.compact_*для каждой модели.
Claude Code (Anthropic CLI)
Две переменные окружения, одна команда.
export ANTHROPIC_BASE_URL=https://api.alicode.store
export ANTHROPIC_API_KEY=sk-ali-…
claude
Добавьте оба export в свой shell rc-файл (~/.zshrc / ~/.bashrc) чтобы они стали постоянными. На Windows: setx ANTHROPIC_BASE_URL ...
Continue.dev
Откройте конфиг Continue (иконка шестерёнки → Open config.yaml):
name: AliCode
models:
- name: AliCode Sonnet
provider: openai
model: claude-sonnet-4-5
apiKey: sk-ali-…
apiBase: https://api.alicode.store/v1
roles: [chat, edit, apply]
Roo Code
Roo — форк Cline с режимами (Code / Architect / Ask). Настройка как у Cline:
- Provider: Anthropic
- Base URL:
https://api.alicode.store - API Key:
sk-ali-… - Model ID:
claude-sonnet-4-5
Python и Node SDK
Python (anthropic)
pip install anthropic
from anthropic import Anthropic
client = Anthropic(api_key='sk-ali-…', base_url='https://api.alicode.store')
# Non-streaming
msg = client.messages.create(
model='claude-sonnet-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': 'Hello'}],
)
print(msg.content[0].text)
# Streaming
with client.messages.stream(
model='claude-sonnet-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': 'Tell me a joke'}],
) as stream:
for text in stream.text_stream:
print(text, end='', flush=True)
Node (@anthropic-ai/sdk)
npm install @anthropic-ai/sdk
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ apiKey: 'sk-ali-…', baseURL: 'https://api.alicode.store' });
const stream = await client.messages.stream({
model: 'claude-sonnet-4-5',
max_tokens: 512,
messages: [{ role: 'user', content: 'Hi' }],
});
for await (const ev of stream) {
if (ev.type === 'content_block_delta' && ev.delta.type === 'text_delta') {
process.stdout.write(ev.delta.text);
}
}
OpenAI SDK (для /v1/chat/completions)
from openai import OpenAI
client = OpenAI(api_key='sk-ali-…', base_url='https://api.alicode.store/v1')
resp = client.chat.completions.create(
model='claude-sonnet-4-5',
messages=[{'role': 'user', 'content': 'Hi'}],
)
print(resp.choices[0].message.content)
Аутентификация
Все /v1/* эндпоинты требуют API-ключ. Принимаем его в любом из двух заголовков — выберите тот, что уже использует ваш SDK:
| Заголовок | Формат | Используется |
|---|---|---|
| x-api-key | sk-ali-… | Anthropic SDK, Cline, Claude Code |
| Authorization | Bearer sk-ali-… | OpenAI SDK, Cursor, Continue |
Создание ключей
- Откройте /dashboard/keys.
- Жмите Создать ключ, дайте имя (например «production»).
- Скопируйте секрет — показан один раз. Мы храним только хеш.
Ограничения для ключа
У каждого ключа есть опциональные лимиты:
- Лимит RPM — запросов в минуту, по умолчанию совпадает с тарифом аккаунта.
- Spend cap (центы) — авто-revoke после трат на N центов с этого ключа.
- Allowed models — whitelist; запросы с другими моделями получают
403.
Отзыв ключа из дашборда мгновенный. Отозванные ключи отдают 401 в течение секунд по всем серверам.
Перевыпуск ключей
Выпустите новый ключ, задеплойте, потом отзовите старый. Никакого даунтайма — оба работают параллельно до момента revoke. Рекомендуем перевыпускать продовые ключи раз в 90 дней.
Модель безопасности
Мы храним только bcrypt-хеш вашего секрета — плейнтекст показан один раз при создании и больше никогда. Если потеряли — выпустите новый ключ и отзовите старый; восстановить потерянный секрет мы не можем. Каждый запрос привязан к IP адресу с которого он пришёл (видно в дашборде), так что необычное использование легко аудитить.
Где хранить ключи
- Local development: environment variable in your shell rc-file (
~/.zshrc/~/.bashrc), never committed to git. - CI/CD: encrypted secret in GitHub Actions / GitLab / Vercel / your platform's secret store.
- Servers:
/etc/environmentor systemdEnvironmentFile=, root-readable only. - Never embed in client-side JS, mobile apps, or any place a user can extract bytes from disk.
If a key leaks, revoke it from the dashboard. Within seconds it returns 401 across every server we run.
POST/v1/messages
Anthropic-совместимый Messages-эндпоинт. Идентичен api.anthropic.com/v1/messages.
Тело запроса
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| model | string | да | claude-sonnet-4-5, -haiku-4-5, -opus-4-8 |
| messages | array | да | Формат Anthropic: role + content-блоки |
| max_tokens | int | да | Лимит вывода. Авто-поднимается до потолка модели. |
| system | string|array | нет | Системный промпт; передайте массив блоков для cache_control-брейкпоинтов |
| stream | bool | нет | Включить SSE (см. Стриминг) |
| tools | array | нет | Схемы инструментов, вкл. серверный web_search_20250305 |
| tool_choice | object | нет | auto / any / tool / none |
| temperature | float | нет | Диапазон 0–1. При отсутствии применяется разумное значение по умолчанию (ниже для вызовов инструментов/агента). |
| top_p | float | нет | Nucleus sampling; предпочитайте temperature |
| top_k | int | нет | Сэмплирование из топ-K кандидатов |
| stop_sequences | array | нет | До 4 строк, останавливающих генерацию |
| thinking | object | нет | {"type":"enabled","budget_tokens":4096} (Opus & Sonnet 4.5+) |
| metadata | object | нет | {"user_id":"…"} для вашей аналитики |
Формат ответа
{
"id": "msg_011…",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-5",
"content": [
{ "type": "text", "text": "Closures in PHP capture variables…" }
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 42,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 128
}
}
Значения stop_reason
| Значение | Что означает |
|---|---|
| end_turn | Модель закончила естественно |
| max_tokens | Упёрлись в ваш лимит max_tokens посреди генерации |
| stop_sequence | Вывод совпал с одной из ваших stop_sequences |
| tool_use | Модель хочет вызвать инструмент — выполните его и продолжите диалог |
| pause_turn | Долгий цикл инструмента приостановлен — продолжите, отправив те же сообщения обратно |
POST/v1/messages/count_tokens
Считает токены планируемого запроса без вызова модели. Используется SDK для оценки стоимости, планирования context window и pre-check rate-лимитов.
То же тело запроса что у /v1/messages. Оценка использует cl100k_base BPE (ближайшая открытая аппроксимация токенайзера Claude) — типичная точность ±3-5% на прозе, ±8-10% на плотном коде/JSON.
curl https://api.alicode.store/v1/messages/count_tokens \
-H 'x-api-key: sk-ali-…' \
-H 'content-type: application/json' \
-d '{
"model": "claude-sonnet-4-5",
"system": "You are Claude.",
"messages": [{"role":"user","content":"Hello world"}]
}'
{ "input_tokens": 14 }
POST/v1/chat/completions
OpenAI-совместимый. Используется Cursor (через override base URL), Continue, OpenWebUI, любыми вашими скриптами на OpenAI SDK.
Внутри переводим OpenAI-форму запроса в Anthropic, ответ — обратно в OpenAI-форму, включая стриминг-чанки, tool_calls, vision image_url блоки и finish_reason.
curl https://api.alicode.store/v1/chat/completions \
-H 'Authorization: Bearer sk-ali-…' \
-H 'content-type: application/json' \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role":"user","content":"ping"}]
}'
Маппинг finish_reason
| Anthropic stop_reason | OpenAI finish_reason |
|---|---|
| end_turn | stop |
| max_tokens | length |
| stop_sequence | stop |
| tool_use | tool_calls |
GET/v1/models
Возвращает список публичных ID моделей. Два формата по одному пути, в зависимости от заголовка Accept:
- OpenAI shape —
{ object: 'list', data: [{ id, object, owned_by, … }] } - Anthropic shape (
GET /v1/models/{id}too) — full capabilities tree with image_input, thinking.adaptive, effort.max, prompt_caching, context_management.
curl https://api.alicode.store/v1/models \
-H 'Authorization: Bearer sk-ali-…'
# specific model
curl https://api.alicode.store/v1/models/claude-sonnet-4-5 \
-H 'Authorization: Bearer sk-ali-…'
/v1/files
Постоянная загрузка для картинок, PDF и текстовых дампов. После загрузки вы ссылаетесь на файл по id в content сообщения, вместо отправки base64 каждый turn — экономит токены и bandwidth в длинных диалогах и батчах.
Beta-заголовок: anthropic-beta: files-api-2025-04-14 (принимается, но не обязателен).
POST/v1/files — upload
curl https://api.alicode.store/v1/files \
-H 'x-api-key: sk-ali-…' \
-F 'file=@/path/to/image.png'
{
"id": "file_011…",
"type": "file",
"filename": "image.png",
"mime_type": "image/png",
"size_bytes": 184320,
"created_at": "2026-05-17T15:23:39Z",
"downloadable": true
}
Использование файла в сообщении
{
"model": "claude-sonnet-4-5",
"max_tokens": 512,
"messages": [{
"role": "user",
"content": [
{ "type": "image", "source": { "type": "file", "file_id": "file_011…" } },
{ "type": "text", "text": "What is in this image?" }
]
}]
}
Другие эндпоинты
| Метод и путь | Назначение |
|---|---|
| GET /v1/files | Список, постранично через before_id / after_id / limit |
| GET /v1/files/{id} | Метаданные |
| GET /v1/files/{id}/content | Скачивание сырых байт (стримом) |
| DELETE /v1/files/{id} | Мягкое удаление; 24ч до окончательной очистки |
Лимиты
- Максимум загрузки: 25 МБ на файл.
- Допустимые mime: PNG, JPEG, WEBP, GIF, PDF, plain text, markdown, CSV.
- SHA-256 dedup: повторная загрузка идентичных байт возвращает существующий file_id, новой записи нет.
/v1/messages/batches
Обрабатывает до 10 000 сообщений в одной async-джобе по 50% от обычной цены. Submit, poll, fetch results — всё асинхронно.
Beta-заголовок: anthropic-beta: message-batches-2024-09-24 (принимается, но не обязателен).
POST/v1/messages/batches — submit
curl https://api.alicode.store/v1/messages/batches \
-H 'x-api-key: sk-ali-…' \
-H 'content-type: application/json' \
-d '{
"requests": [
{ "custom_id": "q-1", "params": { "model":"claude-sonnet-4-5", "max_tokens":100, "messages":[{"role":"user","content":"2+2"}] }},
{ "custom_id": "q-2", "params": { "model":"claude-sonnet-4-5", "max_tokens":100, "messages":[{"role":"user","content":"capital of france"}] }}
]
}'
{
"id": "msgbatch_011…",
"type": "message_batch",
"processing_status": "in_progress",
"request_counts": {"processing":2,"succeeded":0,"errored":0,"canceled":0,"expired":0},
"created_at": "2026-05-18T15:25:50Z",
"expires_at": "2026-05-19T15:25:50Z",
"results_url": null
}
Поллинг до завершения
# Poll every few seconds
curl https://api.alicode.store/v1/messages/batches/msgbatch_011… \
-H 'x-api-key: sk-ali-…'
# When processing_status == 'ended', fetch JSONL results
curl https://api.alicode.store/v1/messages/batches/msgbatch_011…/results \
-H 'x-api-key: sk-ali-…'
{"custom_id":"q-1","result":{"type":"succeeded","message":{ … }}}
{"custom_id":"q-2","result":{"type":"succeeded","message":{ … }}}
Все эндпоинты
| Метод и путь | Назначение |
|---|---|
| POST /v1/messages/batches | Создать батч (до 10K запросов) |
| GET /v1/messages/batches | Список, курсорная пагинация |
| GET /v1/messages/batches/{id} | Статус и счётчики |
| POST /v1/messages/batches/{id}/cancel | Пометить на отмену; оставшиеся пропускаются |
| GET /v1/messages/batches/{id}/results | Вывод JSONL стримом |
| DELETE /v1/messages/batches/{id} | Удалить батч и результаты (должен быть завершён) |
Валидация
custom_idобязателен и должен быть уникальным внутри батча.- Каждый объект
params— это полное тело/v1/messages(без стриминга — батчи всегда возвращают завершённые сообщения). - Батчи протухают через 24 часа после создания; оставшиеся элементы получают статус
expired.
Стриминг SSE
Поставьте stream: true. Сервер возвращает Anthropic-формат Server-Sent Events. События приходят в таком порядке:
message_start— начальная метадата сообщения, пустой content.content_block_start— по одному на каждый блок (text / tool_use / thinking).content_block_delta— N дельт сtext_delta,input_json_deltaилиthinking_delta.content_block_stop— закрытие текущего блока.message_delta— финальныйstop_reasonи счётчики usage.message_stop— конец стрима.ping— отправляется каждые ~15с для keepalive.
Сырые байты (сокращённо)
event: message_start
data: {"type":"message_start","message":{"id":"msg_…","model":"claude-sonnet-4-5","content":[]}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":", world"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":9}}
event: message_stop
data: {"type":"message_stop"}
Использование через Python SDK
with client.messages.stream(
model='claude-sonnet-4-5',
max_tokens=512,
messages=[{'role':'user','content':'Tell me a joke'}],
) as stream:
for text in stream.text_stream:
print(text, end='', flush=True)
Использование инструментов
Передайте tools[] c input_schema (JSON Schema). Ассистент возвращает content-блоки типа tool_use; ваш клиент выполняет инструмент и шлёт tool_result в следующем user turn.
Раунд 1 — объявляем инструмент, получаем tool_use
{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"tools": [{
"name": "get_weather",
"description": "Get current weather for a city",
"input_schema": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}],
"messages": [{ "role": "user", "content": "What is the weather in Berlin?" }]
}
Ответ содержит блок tool_use:
{
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that." },
{ "type": "tool_use", "id": "toolu_01abc", "name": "get_weather", "input": { "city": "Berlin" } }
]
}
Раунд 2 — отправляем tool_result обратно
{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"tools": [/* same tools[] */],
"messages": [
{ "role": "user", "content": "What is the weather in Berlin?" },
{ "role": "assistant", "content": [
{ "type": "text", "text": "Let me check that." },
{ "type": "tool_use", "id": "toolu_01abc", "name": "get_weather", "input": { "city": "Berlin" } }
]},
{ "role": "user", "content": [
{ "type": "tool_result", "tool_use_id": "toolu_01abc", "content": "18°C, sunny" }
]}
]
}
tool_choice
| Значение | Поведение |
|---|---|
| {"type":"auto"} | По умолчанию — модель сама решает, вызывать ли инструмент |
| {"type":"any"} | Заставляет модель вызвать ЛЮБОЙ из объявленных инструментов |
| {"type":"tool","name":"get_weather"} | Заставляет вызвать именно этот инструмент |
| {"type":"none"} | Отключает вызовы инструментов на этот turn |
Параллельные вызовы: модель может вернуть несколько tool_use блоков в одном turn. Запустите их параллельно и верните все tool_result блоки в следующем сообщении пользователя.
Поиск в вебе
Серверный инструмент web_search_20250305 от Anthropic, полностью эмулирован. Объявите его в tools[] — модель решает когда искать, наш шлюз выполняет запрос, результаты возвращаются в контекст модели, вы получаете финальный ответ со ссылками.
{
"model": "claude-sonnet-4-5",
"max_tokens": 512,
"tools": [{ "type": "web_search_20250305", "name": "web_search", "max_uses": 3 }],
"messages": [{ "role": "user", "content": "What is the latest stable PHP version?" }]
}
Vision
Отправляйте картинки как content-блоки Anthropic типа image. Три варианта source:
| source.type | Структура | Когда использовать |
|---|---|---|
| base64 | { media_type, data } | Разовая отправка, картинка встроена в запрос |
| url | { url } | Публичные картинки в интернете |
| file | { file_id } | Переиспользуется в диалогах / батчах — см. Files API |
{
"model": "claude-sonnet-4-5",
"max_tokens": 512,
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this image?" },
{ "type": "image", "source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<base64-bytes>"
}}
]
}]
}
Постоянное vision через файлы
# upload once
FILE_ID=$(curl -s https://api.alicode.store/v1/files \
-H 'x-api-key: sk-ali-…' \
-F 'file=@chart.png' | jq -r .id)
# reference in many turns / batches
curl https://api.alicode.store/v1/messages \
-H 'x-api-key: sk-ali-…' \
-H 'content-type: application/json' \
-d "{
\"model\":\"claude-sonnet-4-5\",
\"max_tokens\":512,
\"messages\":[{ \"role\":\"user\", \"content\":[
{ \"type\":\"image\", \"source\":{ \"type\":\"file\", \"file_id\":\"$FILE_ID\" } },
{ \"type\":\"text\", \"text\":\"summarise this chart\" }
]}]
}"
Кэширование промптов
Помечайте стабильные префиксы через cache_control: { type: "ephemeral" }. Следующие запросы переиспользующие этот префикс платят 10% от обычной цены input за закэшированную часть. TTL кэша: 5 минут с последнего хита.
До 4 breakpoints на запрос. Мы автоматически вставляем один breakpoint в конце system-блока если его нет, чтобы даже простые запросы получали выгоду от кэширования.
Куда ставить брейкпойнты
- В конце системного промпта — самое популярное, самый большой выигрыш.
- После длинного статичного документа в первом user-turn.
- После tools[] объявления, если их много.
Пример
{
"model": "claude-sonnet-4-5",
"max_tokens": 256,
"system": [
{ "type": "text", "text": "You are a senior support engineer. Follow company tone.\n\n[…3000 token style guide…]",
"cache_control": { "type": "ephemeral" } }
],
"messages": [{ "role": "user", "content": "Why is my server slow?" }]
}
Счётчики использования
"usage": {
"input_tokens": 12,
"cache_creation_input_tokens": 3045,
"cache_read_input_tokens": 0,
"output_tokens": 80
}
On the next request reusing the same prefix:
"usage": {
"input_tokens": 14,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 3045,
"output_tokens": 80
}
Вы платите полную цену только за input_tokens (новый контент) и 10% за cache_read_input_tokens.
Расширенное мышление
Доступно у Opus и свежих Sonnet. Ассистент эмитит thinking-блоки content перед финальным ответом — видимое рассуждение, как внутренний монолог Claude Code.
Включается полем thinking в запросе:
{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"thinking": { "type": "enabled", "budget_tokens": 4096 },
"messages": [{ "role": "user", "content": "Plan a refactor of this codebase…" }]
}
Ответ содержит и thinking, и text блоки:
"content": [
{ "type": "thinking", "thinking": "The user wants a refactor plan. Let me…", "signature": "msg_…" },
{ "type": "text", "text": "Here is a 5-step plan: …" }
]
Биллинг и лимиты
Цены за 1М токенов (USD)
| Модель | Вход | Выход | Запись кэша | Чтение кэша |
|---|---|---|---|---|
| claude-haiku-4-5 | $0.80 | $4.00 | $1.00 | $0.08 |
| claude-sonnet-4-5 | $2.50 | $12.00 | $3.13 | $0.25 |
| claude-opus-4-8 | $3.00 | $14.00 | $3.75 | $0.30 |
Скидки
- Batch API — 50% от цены за input и output.
- Кэширование промптов — 90% скидки на cached префикс при чтении.
Пополнение
Пополнение от 300 ₽. Кредиты не сгорают. Никаких отписок не нужно.
Rate-лимиты
Никаких поминутных лимитов. Никаких суточных квот. Применяется только антифрод на уровне IP (1000 req/min, 50 одновременных коннектов) — далеко за пределами того что нужно реальному агенту. Per-key RPM и spend-cap настраиваются в дашборде.
Коды ошибок
Ошибки в формате Anthropic:
{ "type": "error", "error": { "type": "<error_type>", "message": "<human-readable>" }, "request_id": "req_011…" }
| HTTP | error.type | Что означает |
|---|---|---|
| 400 | invalid_request_error | Битый JSON, нет поля, неверная модель, кривой tools[] |
| 401 | authentication_error | Отсутствует или неверный x-api-key |
| 402 | insufficient_credits | Баланс ниже расчётной стоимости |
| 403 | permission_error | Ключу не разрешена эта модель |
| 404 | not_found_error | Неизвестный id файла/батча/модели |
| 413 | request_too_large | Тело больше 50 МБ или загрузка файла > 25 МБ |
| 415 | invalid_request_error | Неподдерживаемый mime_type при загрузке файла |
| 429 | rate_limit_error | Превышен лимит частоты по ключу или IP |
| 500 | api_error | Баг сервера — откройте тикет с request_id |
| 502 | api_error | Апстрим упал (ретраябельно) |
| 503 | overloaded_error | Режим защиты — повторите чуть позже |
Стратегия повторов
Считайте 429, 502, 503 и idempotent-таймауты ретраябельными. Используйте экспоненциальный backoff начиная с 1с, удваивая, с jitter; не больше 3 попыток. Официальные SDK делают это сами — если у вас anthropic или @anthropic-ai/sdk, retry-with-backoff уже из коробки.
Не ретраите 400 / 401 / 402 / 403 / 404 / 413 / 415 — они указывают на проблему с самим запросом, повтор даст ту же ошибку. Сначала чините причину.
500 редко и означает баг на нашей стороне; мы видим их в мониторинге и обычно деплоим фикс за часы. Если упёрлись систематически — открывайте тикет с request-id, это самый быстрый путь для нас отследить.
Отладка падающего запроса
- Сначала смотрите HTTP-код — он говорит чья проблема (4xx = клиент, 5xx = сервер).
- Читайте поле
error.messageв JSON — оно специально человекочитаемое. - Возьмите заголовок
request-idиз ответа. Даже на ошибках мы его возвращаем. - Воспроизведите
curl -vиз чистой шеллы — убедитесь что это не ваш SDK добавляет странные заголовки. - Если так и не разобрались — пишите на
hello@alicode.storerequest-id, время и curl-команду. Найдём ваш запрос в логах.
FAQ и правовая информация
Самые частые вопросы перед регистрацией — кликните на любой чтобы развернуть ответ.
Как вы можете быть на 85% дешевле Anthropic?
Две причины. Первая: мы работаем на consumer-инфраструктуре без энтерпрайз-оверхеда — нет dedicated success engineers, on-prem деплоев, кастомных DPA на каждого клиента. Вторая: мы агрегируем тысячи мелких разрабов в один большой клиентский профиль и договариваемся об оптовых ставках на эту совокупную нагрузку. Официальный прайс Anthropic под энтерпрайз-procurement; наш — под одного инженера с банковской картой. Мы берём небольшую маржу посередине, вы оставляете разницу себе.
Размен честный: вы получаете то же качество модели и тот же протокол, но без энтерпрайз-SLA, кастомных юридических условий и приоритетной capacity при инцидентах. Для 99% инди / агентств / хоббистов — отличная сделка.
Это правда Claude или какая-то другая модель за кулисами?
Это настоящий Claude. Те же модели Anthropic, то же обучение, тот же интеллект. Мы не файнтьюним, не проксируем через какой-то более дешёвый open-source. Мы маршрутизируем ваш запрос на Claude-инференс и возвращаем сырые байты обратно. Единственная разница от прямого вызова Anthropic — URL и ваш API-ключ.
Сломается ли это как только Anthropic выкатит новую фичу?
Всё что проходит через расширения протокола — новые anthropic-beta флаги, новые типы content-блоков, новые типы инструментов — пропускается прозрачно. Обновления выкатываем за часы после публичного релиза Anthropic. Фичи требующие server-side стейта (Files API, Message Batches, count_tokens) реализованы за нашей инфрой, чтобы SDK-хелперы продолжали работать. Citations и code execution — следующие в роадмапе.
Это вообще легально? Вам можно ресейлить?
Да. Мы покупаем API-мощности по стандартным ставкам у авторизованных провайдеров и ресейлим доступ к ним. Это нормальные коммерческие отношения — ровно так работали cloud-ресейлеры, MSP и агрегаторы с 1990-х. Вы соглашаетесь использовать сервис по нашему AUP ниже; мы соглашаемся предоставлять купленные вами мощности.
Важно: вы должны соблюдать публичный Acceptable Use от Anthropic даже несмотря на то что зовёте нас — те же правила контента (никакого abuse, нелегального контента, scraping защищённых систем). Любые сигналы модерации от апстрима мы пропускаем.
Вы логируете мои промпты? Ответы?
Нет. Логируем только метадату запроса для биллинга — timestamp, IP, user_id, модель, количество input/output токенов, HTTP-статус. Тело промпта и тело ответа в нашу БД не попадают. Они проходят через память только на время запроса и освобождаются в момент отправки ответа.
Фичи памяти разговора (SessionMemory, Memdir) — opt-in: вам нужно явно включать их в запросе, и они хранят только то что вы попросите, привязанное к вашему аккаунту.
Где обрабатываются мои данные? Это GDPR-compliant?
Наш control-plane (аккаунт, биллинг, хеши API-ключей) работает в ЕС. Инференс модели выполняют региональные эндпоинты Anthropic — обычно US-East для англоязычных клиентов, EU доступны по запросу. Поскольку мы не храним контент промптов и ответов, GDPR data-subject права (доступ, удаление, переносимость) применяются только к метадате аккаунта, которую вы сами можете удалить из дашборда в любой момент.
Что если запрос упадёт посреди стрима?
Если апстрим вернёт 5xx до того как сгенерировались токены — вы получаете чистый 502, и запрос не тарифицируется (кредиты не списываются). Мы ротируем upstream-ключи и автоматически уводим в cooldown проблемные, поэтому повтор попадает на здоровый ключ; официальные SDK сами ретраят 502/503 с backoff.
Если стрим обрывается посреди ответа (редко, но возможно на плохих сетях) — получаете частичный контент, счётчики usage отражают только реально сгенерированное. SDK должен обрабатывать это как обычный короткий ответ.
Можно отменить? Получить refund?
Подписки нет, отменять нечего. Неиспользованные кредиты не сгорают — баланс остаётся в аккаунте навсегда, даже если вы не пользуетесь годами. Refund: если случайно пополнили не тот аккаунт — пишите в support в течение 24 часов, перенесём баланс. Обычные использованные кредиты не возвращаем (инференс уже оплачен апстриму).
Как именно работает биллинг?
Каждый запрос биллится по завершению ответа. Списываем input_tokens × input_rate + output_tokens × output_rate по ставкам из раздела Биллинг. Cache-чтения биллятся по 10% от input-ставки; batch-запросы — по 50% от обычной. Списание атомарное, видно в дашборде в течение секунд. Можно ставить per-key spend-caps чтобы жёстко стопать runaway-скрипты.
Чем это отличается от OpenRouter / Helicone / Together / Groq?
OpenRouter — это маршрутизирующий маркет; они предлагают много моделей от разных провайдеров с небольшой надбавкой к прайсу каждого. У них ширина, у нас глубина по Anthropic-протоколу: полные Files / Batches / count_tokens, дешёвый Claude, реальные Anthropic-SSE байты, prompt caching с прокидыванием cache_control. Если используете только Claude — у нас выгоднее.
Helicone — observability и кэш перед апстрим API; цены не меняет, добавляет аналитику. Можете поставить Helicone перед AliCode если нужно и то и то.
Together / Groq / Fireworks — open-source модели (Llama, Mixtral, Qwen). Другая категория. Дешевле, но это не Claude.
Латенси — потеряю ли я секунды?
Наш оверхед суб-миллисекундный: добавляем максимум ~5-15мс к first-token latency при маршрутизации через шлюз, в сравнении с прямым вызовом апстрима. Остальное — это то что отдаёт сам Anthropic. На практике разницу не заметите; собственная вариация Claude между вызовами сильно больше нашего routing-оверхеда.
Можно использовать в продакшене?
Да — мы обслуживаем продакшен-трафик платящих клиентов и относимся к шлюзу как к продакшен-системе: мониторинг, авто-скейл, репликация, ротация ключей, инцидент-response. Формальный SLA на free-tier не публикуем, но целимся в 99.5% месячный аптайм для платных аккаунтов; статус публикуется на /v1/health.
В чём разница между base64-картинкой и загрузкой через /v1/files?
Функционально идентично — то же качество vision, та же стоимость токенов за изображение. Разница в bandwidth и размере запроса: base64 раздувает на ~33% и пересылается на каждом turn длинного диалога; file_id грузится один раз и дешёво ссылается дальше.
Есть ли webhooks / async callbacks?
Пока нет. Для async-нагрузок используйте Message Batches — polling через GET /v1/messages/batches/{id} и реакция когда processing_status == "ended". Webhooks в роадмапе на Q3 вместе с Citations и Code Execution.
Есть командные / shared аккаунты?
Пока нет — каждый аккаунт single-user. Для командных setup'ов рекомендуем один аккаунт на команду + per-developer API-ключи (у каждого ключа своё имя и spend-cap, легко аттрибутировать). Командные workspace с общим биллингом — в планах.
Как обрабатываете abuse / runaway-скрипты?
Три линии защиты:
- Per-key spend cap — задайте долларовый лимит на ключ в дашборде; при достижении ключ авто-отзывается.
- Per-key RPM лимит — ограничиваем запросы в минуту на ключ для защиты от бесконечных циклов.
- Аварийный стоп аккаунта — один клик в дашборде отзывает все ключи разом.
Можно скидку за объём?
Наши публичные ставки уже агрессивные. Если тратите больше $500/мес стабильно — пишите на hello@alicode.store с описанием use case; для постоянных heavy-юзеров и коммерческих партнёрств иногда устраиваем custom-ставки.
Cursor пишет "Named models unavailable", что делать?
Cursor на бесплатном плане ограничивает произвольные имена моделей у OpenAI-style эндпоинта. Workaround: в списке моделей Cursor добавьте известное OpenAI-имя вроде gpt-4o или gpt-4-turbo вместо claude-sonnet-4-5. Наш шлюз распознаёт алиасы и маршрутизирует на нужную Claude-модель.
Получаю 401 хотя ключ верный
Частые причины:
- Ключ отозван, а вы закэшировали его локально — выпустите новый в дашборде.
- Скопировали с лишним пробелом или \n в конце — обрежьте whitespace.
- Используете
Bearerна заголовкеx-api-key(там должен быть голый ключ) или голый ключ наAuthorization(там нужен префиксBearer). - Аккаунт заблокирован за abuse — проверьте почту на уведомление от нас.
Acceptable Use Policy (правила использования)
Используя AliCode, вы соглашаетесь не: генерировать контент сексуализирующий несовершеннолетних; харрасить, доксить или клеветать; создавать контент специально для введения в заблуждение или имитации реальных людей; массово создавать дезинформацию или спам; пытаться вломиться в системы которыми не владеете; регистрировать несколько аккаунтов чтобы обойти лимиты или бан; ресейлить доступ без предварительного письменного соглашения; использовать сервис способами нарушающими AUP самого Anthropic. Нарушения = немедленная блокировка аккаунта. Кредиты на заблокированных аккаунтах не возвращаются.
Условия использования (краткая версия)
AliCode предоставляется как есть, без гарантий любого рода. Сервис эксплуатируется его оператором в соответствии с законодательством Российской Федерации. Вы отвечаете за безопасность ваших API-ключей и легальность использования. Можем блокировать аккаунты за нарушения AUP без возврата. Кредиты не переносятся между аккаунтами. Цены могут меняться с разумным предварительным уведомлением; существующий баланс соблюдается по ставке покупки. Условия регулируются законодательством Российской Федерации — см. полные Условия использования.
Контакты и поддержка
Response time on email is typically within 24h on weekdays. For server-side bugs include the request-id header from the failed call — that's how we find your trace in the logs.