Пользовательские цены
Собственные тарифы для любой модели глобально или на уровне виртуального ключа с уточнением до провайдера и ключа провайдера.
Обзор
Meridian рассчитывает стоимость запросов по каталогу цен, который автоматически синхронизируется с датасетом цен. Пользовательские цены переопределяют цены каталога во время работы, без перезапуска: вы задаёте собственные тарифы для любой модели в нужной области действия.
Ключевые возможности:
- Области действия — цена применяется глобально или только для провайдера, ключа провайдера или виртуального ключа.
- Сопоставление по шаблону — точное имя модели или префикс, например
gpt-4*. - Фильтр по типу запроса — переопределение действует только для выбранных операций: chat, embedding, генерация изображений и других.
- Иерархическое разрешение — применяется наиболее специфичное переопределение, более широкие области служат резервным вариантом.
Источник данных о ценах
Переопределения применяются поверх каталога цен. По умолчанию Meridian загружает датасет цен Meridian и синхронизирует его каждые 24 часа. Если вы ведёте собственный датасет, укажите его адрес.
- В боковом меню откройте Models → Model Settings.
- Заполните поля:
- Pricing Datasheet URL — адрес датасета цен. Пустое значение — датасет по умолчанию.
- Model Parameters URL — адрес датасета параметров моделей. Пустое значение — датасет по умолчанию.
- Pricing Sync Interval (hours) — интервал синхронизации в часах, от 1 до 8760.
- Нажмите Save Changes.
Кнопка Force Sync Now запускает синхронизацию немедленно.
{
"framework": {
"pricing": {
"pricing_url": "https://your-host/pricing.json",
"model_parameters_url": "https://your-host/model-parameters.json",
"pricing_sync_interval": 86400
}
}
}| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
pricing_url | string | Нет | датасет Meridian | Адрес датасета цен. Поддерживаются http://, https://, file:// и префикс env.. |
model_parameters_url | string | Нет | датасет Meridian | Адрес датасета параметров моделей. Поддерживаются http://, https:// и file://. |
pricing_sync_interval | integer | Нет | 86400 | Интервал синхронизации в секундах. Значение меньше 3600 поднимается до 3600 с предупреждением в логе. |
Датасет можно загружать из локальной файловой системы:
"pricing_url": "file:///opt/meridian/pricing.json"Области действия
Каждое переопределение относится к одной области — scope_kind. Для запроса Meridian находит все подходящие переопределения и применяет то, у которого область наиболее специфична.
virtual_key_provider_key (наиболее специфичная)
virtual_key_provider
virtual_key
provider_key
provider
global (наименее специфичная)| Область | Обязательные идентификаторы | Когда применяется |
|---|---|---|
global | — | Ко всем запросам. |
provider | provider_id | Ко всем запросам к провайдеру. В provider_id указывается имя провайдера, например openai. |
provider_key | provider_key_id | К запросам через конкретный ключ провайдера. |
virtual_key | virtual_key_id | Ко всем запросам с виртуальным ключом. |
virtual_key_provider | virtual_key_id, provider_id | К запросам с виртуальным ключом к конкретному провайдеру. |
virtual_key_provider_key | virtual_key_id, provider_id, provider_key_id | К запросам с виртуальным ключом через конкретный ключ провайдера. |
Указывайте только идентификаторы своей области. Лишний идентификатор — ошибка: например, provider scope_kind only supports provider_id.
Сопоставление по шаблону
Поле pattern задаёт имя модели, match_type — способ сопоставления.
match_type | Поведение | Пример |
|---|---|---|
exact | Точное совпадение имени. Символ * недопустим. | gpt-4o — только gpt-4o |
wildcard | Совпадение по префиксу. Шаблон содержит ровно один символ * — в конце. | gpt-4* — gpt-4o, gpt-4-turbo, gpt-4o-mini |
В одной области точное совпадение проверяется раньше шаблона. Из нескольких подходящих шаблонов выбирается шаблон с самым длинным префиксом.
Порядок поиска цены
Цена из каталога ищется по первому найденному имени модели в таком порядке:
- Модель серверного резервного варианта, если запрос обслужен им.
- Каноническое имя алиаса ключа —
routing_info.resolved_key_alias.model_name. - Идентификатор модели алиаса —
routing_info.resolved_key_alias.model_id. - Модель из запроса —
routing_info.model.
Такой порядок решает задачу непрозрачных идентификаторов. Если алиас ключа сопоставляет deployment Azure 12345-azure-prod с именем claude-sonnet-4-5, цена находится в каталоге по имени модели, хотя идентификатора deployment в каталоге нет.
Переопределения сопоставляются с именем модели, отправленным провайдеру: моделью резервного варианта, model_id алиаса или моделью из запроса — по первому найденному. Поэтому переопределение можно задать для конкретного deployment. Если модели нет в каталоге, переопределение применяется к пустой базовой цене.
Типы запросов
Поле request_types обязательно и содержит хотя бы одно значение. Указывайте базовый тип: chat_completion покрывает и потоковые, и непотоковые запросы. Потоковые варианты (chat_completion_stream и другие) отклоняются.
| Тип | Операция |
|---|---|
chat_completion | Chat-запросы |
text_completion | Text completions |
responses | Responses API |
realtime | Realtime API. Тарифицируется как responses. |
compaction | Сжатие контекста. Тарифицируется как responses. |
embedding | Генерация embedding |
rerank | Реранжирование |
speech | Синтез речи |
transcription | Распознавание речи |
image_generation | Генерация изображений |
image_variation | Вариации изображений. Тарифицируются как image_generation. |
image_edit | Редактирование изображений |
video_generation | Генерация видео |
video_remix | Ремикс видео. Тарифицируется как video_generation. |
ocr | Распознавание документов |
container_create | Создание контейнеров |
Типы realtime, compaction и container_create задаются только через API и config.json.
Создание переопределения
- В боковом меню откройте Models → Pricing Overrides. В таблице — название, область, провайдер, ключ и шаблон модели каждого переопределения. Список можно искать по названию и фильтровать по виртуальному ключу.

- Нажмите New Override.
- Заполните форму Create Pricing Override:
- Name — название переопределения.
- Scope root — Global или Virtual key. Для Virtual key выберите виртуальный ключ.
- Provider — провайдер или All providers. После выбора провайдера появляется поле Provider key.
- Match type — Exact или Wildcard.
- Pattern — имя модели или префикс со
*в конце. - Request types — один или несколько типов запросов.
- Pricing fields — поля цен в долларах США за единицу. Найдите поле поиском или в группе и введите значение. Поля без значения не переопределяются.
- Нажмите Save Override.

Изменить или удалить переопределение можно в меню строки таблицы — Edit и Delete.
Создание:
curl -X POST http://localhost:8080/api/governance/pricing-overrides \
-H "Content-Type: application/json" \
-d '{
"name": "GPT-4o negotiated rate",
"scope_kind": "global",
"match_type": "exact",
"pattern": "gpt-4o",
"request_types": ["chat_completion"],
"patch": {
"input_cost_per_token": 0.0000025,
"output_cost_per_token": 0.00001
}
}'Поле patch — JSON-объект с переопределяемыми полями цен. Ответ 201:
{
"message": "Pricing override created successfully",
"pricing_override": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "GPT-4o negotiated rate",
"scope_kind": "global",
"match_type": "exact",
"pattern": "gpt-4o",
"request_types": ["chat_completion"],
"pricing_patch": "{\"input_cost_per_token\":0.0000025,\"output_cost_per_token\":0.00001}",
"created_at": "2026-09-14T10:00:00Z",
"updated_at": "2026-09-14T10:00:00Z"
}
}Изменение:
curl -X PUT http://localhost:8080/api/governance/pricing-overrides/{id} \
-H "Content-Type: application/json" \
-d '{
"patch": {
"input_cost_per_token": 0.000002,
"output_cost_per_token": 0.000008
}
}'Неуказанные поля сохраняют прежние значения. Переданный patch заменяет сохранённый целиком. При смене scope_kind идентификаторы области сбрасываются: сохраняются только переданные в том же запросе.
Удаление:
curl -X DELETE http://localhost:8080/api/governance/pricing-overrides/{id}Список:
# Все переопределения
curl http://localhost:8080/api/governance/pricing-overrides
# Фильтр по области и поиск по названию с пагинацией
curl "http://localhost:8080/api/governance/pricing-overrides?scope_kind=virtual_key&virtual_key_id=vk-abc123&search=gpt&limit=25&offset=0"| Параметр | Описание |
|---|---|
scope_kind, virtual_key_id, provider_id, provider_key_id | Фильтры по области. |
search | Поиск по названию без учёта регистра. |
limit, offset | Пагинация. По умолчанию limit — 25, максимум — 100. |
Пагинация включается, если передан limit, offset или search. Ответ содержит pricing_overrides, count, total_count, limit и offset.
Переопределения задаются в governance.pricing_overrides. В отличие от API, поля цен передаются в pricing_patch строкой с JSON.
{
"governance": {
"pricing_overrides": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Global GPT-4o rate",
"scope_kind": "global",
"match_type": "exact",
"pattern": "gpt-4o",
"request_types": ["chat_completion"],
"pricing_patch": "{\"input_cost_per_token\":0.0000025,\"output_cost_per_token\":0.00001}"
},
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"name": "All Claude models for prod VK",
"scope_kind": "virtual_key",
"virtual_key_id": "vk-abc123",
"match_type": "wildcard",
"pattern": "claude*",
"request_types": ["chat_completion"],
"pricing_patch": "{\"input_cost_per_token\":0.000003,\"output_cost_per_token\":0.000015}"
}
]
}
}| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id | string | Да | Уникальный идентификатор. Рекомендуется UUID. |
name | string | Да | Название переопределения. |
scope_kind | string | Да | Область действия: global, provider, provider_key, virtual_key, virtual_key_provider, virtual_key_provider_key. |
virtual_key_id | string | Для областей virtual_key* | Идентификатор виртуального ключа. |
provider_id | string | Для областей provider, virtual_key_provider, virtual_key_provider_key | Имя провайдера. |
provider_key_id | string | Для областей provider_key, virtual_key_provider_key | Идентификатор ключа провайдера. |
provider_key_name | string | Нет | Имя ключа провайдера вместо provider_key_id. Преобразуется в идентификатор при загрузке. Нельзя указывать вместе с provider_key_id. |
match_type | string | Да | exact или wildcard. |
pattern | string | Да | Имя модели или префикс со * в конце. |
request_types | array | Да | Типы запросов, хотя бы одно значение. |
pricing_patch | string | Нет | JSON-строка с переопределяемыми полями цен. |
Для записей из config.json правила областей, шаблонов и типов запросов при загрузке не проверяются. Некорректная запись не вызовет ошибку, а просто не будет применяться. Проверяйте значения по таблицам на этой странице.
Применяется каждое переданное поле цены, в том числе со значением 0: так можно сделать операцию бесплатной. Неизвестные поля через API и config.json отбрасываются без ошибки. Форма в веб-интерфейсе неизвестные поля отклоняет.
Справочник полей цен
Все значения — стоимость за единицу в долларах США.
Токены
| Поле | Описание |
|---|---|
input_cost_per_token | Входной токен |
output_cost_per_token | Выходной токен |
input_cost_per_token_batches | Входной токен, batch-запросы |
output_cost_per_token_batches | Выходной токен, batch-запросы |
input_cost_per_token_priority | Входной токен, приоритетные запросы |
output_cost_per_token_priority | Выходной токен, приоритетные запросы |
input_cost_per_token_flex | Входной токен, flex-запросы |
output_cost_per_token_flex | Выходной токен, flex-запросы |
input_cost_per_token_fast | Входной токен, fast-режим |
output_cost_per_token_fast | Выходной токен, fast-режим |
input_cost_per_character | Входной символ (модели с тарификацией по символам) |
Тарифы по размеру контекста
| Поле | Описание |
|---|---|
input_cost_per_token_above_128k_tokens | Входной токен, контекст больше 128 тыс. токенов |
output_cost_per_token_above_128k_tokens | Выходной токен, контекст больше 128 тыс. токенов |
input_cost_per_image_above_128k_tokens | Входное изображение, контекст больше 128 тыс. токенов |
input_cost_per_video_per_second_above_128k_tokens | Секунда входного видео, контекст больше 128 тыс. токенов |
input_cost_per_audio_per_second_above_128k_tokens | Секунда входного аудио, контекст больше 128 тыс. токенов |
input_cost_per_token_above_200k_tokens | Входной токен, контекст больше 200 тыс. токенов |
input_cost_per_token_above_200k_tokens_priority | То же, приоритетные запросы |
output_cost_per_token_above_200k_tokens | Выходной токен, контекст больше 200 тыс. токенов |
output_cost_per_token_above_200k_tokens_priority | То же, приоритетные запросы |
input_cost_per_token_above_272k_tokens | Входной токен, контекст больше 272 тыс. токенов |
input_cost_per_token_above_272k_tokens_priority | То же, приоритетные запросы |
input_cost_per_token_flex_above_272k_tokens | То же, flex-запросы |
output_cost_per_token_above_272k_tokens | Выходной токен, контекст больше 272 тыс. токенов |
output_cost_per_token_above_272k_tokens_priority | То же, приоритетные запросы |
output_cost_per_token_flex_above_272k_tokens | То же, flex-запросы |
Кэширование
| Поле | Описание |
|---|---|
cache_creation_input_token_cost | Запись токена в кэш промпта |
cache_read_input_token_cost | Чтение токена из кэша |
cache_creation_input_token_cost_priority | Запись в кэш, приоритетные запросы |
cache_read_input_token_cost_priority | Чтение из кэша, приоритетные запросы |
cache_creation_input_token_cost_flex | Запись в кэш, flex-запросы |
cache_read_input_token_cost_flex | Чтение из кэша, flex-запросы |
cache_creation_input_token_cost_fast | Запись в кэш, fast-режим |
cache_read_input_token_cost_fast | Чтение из кэша, fast-режим |
cache_creation_input_token_cost_above_1hr | Запись в кэш со сроком хранения больше часа |
cache_creation_input_token_cost_above_1hr_fast | То же, fast-режим |
cache_creation_input_token_cost_above_1hr_above_200k_tokens | То же, контекст больше 200 тыс. токенов |
cache_creation_input_token_cost_above_200k_tokens | Запись в кэш, контекст больше 200 тыс. токенов |
cache_read_input_token_cost_above_200k_tokens | Чтение из кэша, контекст больше 200 тыс. токенов |
cache_read_input_token_cost_above_200k_tokens_priority | То же, приоритетные запросы |
cache_creation_input_token_cost_above_272k_tokens | Запись в кэш, контекст больше 272 тыс. токенов |
cache_creation_input_token_cost_flex_above_272k_tokens | То же, flex-запросы |
cache_read_input_token_cost_above_272k_tokens | Чтение из кэша, контекст больше 272 тыс. токенов |
cache_read_input_token_cost_above_272k_tokens_priority | То же, приоритетные запросы |
cache_read_input_token_cost_flex_above_272k_tokens | То же, flex-запросы |
cache_read_input_image_token_cost | Чтение image-токена из кэша |
cache_creation_input_audio_token_cost | Запись audio-токена в кэш |
Изображения
| Поле | Описание |
|---|---|
input_cost_per_image | Входное изображение |
output_cost_per_image | Сгенерированное изображение |
input_cost_per_pixel | Входной пиксель |
output_cost_per_pixel | Выходной пиксель |
input_cost_per_image_token | Входной image-токен |
output_cost_per_image_token | Выходной image-токен |
output_cost_per_image_premium_image | Изображение premium-модели |
output_cost_per_image_low_quality | Изображение низкого качества |
output_cost_per_image_medium_quality | Изображение среднего качества |
output_cost_per_image_high_quality | Изображение высокого качества |
output_cost_per_image_auto_quality | Изображение с автоматическим выбором качества |
output_cost_per_image_above_512_and_512_pixels | Изображение больше 512×512 |
output_cost_per_image_above_512_and_512_pixels_and_premium_image | Premium-изображение больше 512×512 |
output_cost_per_image_above_1024_and_1024_pixels | Изображение больше 1024×1024 |
output_cost_per_image_above_1024_and_1024_pixels_and_premium_image | Premium-изображение больше 1024×1024 |
output_cost_per_image_above_2048_and_2048_pixels | Изображение больше 2048×2048 |
output_cost_per_image_above_4096_and_4096_pixels | Изображение больше 4096×4096 |
Аудио и видео
| Поле | Описание |
|---|---|
input_cost_per_audio_token | Входной audio-токен |
output_cost_per_audio_token | Выходной audio-токен |
input_cost_per_audio_per_second | Секунда входного аудио |
input_cost_per_video_per_second | Секунда входного видео |
output_cost_per_video_per_second | Секунда выходного видео |
input_cost_per_second | Секунда входных данных |
output_cost_per_second | Секунда выходных данных |
Прочее
| Поле | Описание |
|---|---|
search_context_cost_per_query | Запрос с контекстом веб-поиска |
code_interpreter_cost_per_session | Сессия code interpreter |
ocr_cost_per_page | Страница распознавания документа |
annotation_cost_per_page | Страница аннотирования документа |
inference_geo_us_multiplier | Множитель стоимости для обработки запроса в США |
Примеры
Единый тариф для всех моделей Anthropic
{
"id": "anthropic-flat-rate",
"name": "Anthropic flat rate",
"scope_kind": "provider",
"provider_id": "anthropic",
"match_type": "wildcard",
"pattern": "claude*",
"request_types": ["chat_completion", "text_completion", "responses"],
"pricing_patch": "{\"input_cost_per_token\":0.000003,\"output_cost_per_token\":0.000015}"
}Согласованный тариф для виртуального ключа
{
"id": "vk-prod-gpt4o-rate",
"name": "Prod VK — GPT-4o negotiated rate",
"scope_kind": "virtual_key",
"virtual_key_id": "vk-abc123",
"match_type": "exact",
"pattern": "gpt-4o",
"request_types": ["chat_completion"],
"pricing_patch": "{\"input_cost_per_token\":0.000002,\"output_cost_per_token\":0.000008}"
}Цена генерации изображений
{
"id": "dall-e-3-rate",
"name": "DALL-E 3 custom rate",
"scope_kind": "global",
"match_type": "exact",
"pattern": "dall-e-3",
"request_types": ["image_generation"],
"pricing_patch": "{\"output_cost_per_image_high_quality\":0.04,\"output_cost_per_image_medium_quality\":0.02}"
}Цена для модели, которой нет в каталоге
{
"id": "my-new-model-rate",
"name": "my-new-model pricing",
"scope_kind": "global",
"match_type": "exact",
"pattern": "my-new-model-v1",
"request_types": ["chat_completion"],
"pricing_patch": "{\"input_cost_per_token\":0.000001,\"output_cost_per_token\":0.000005}"
}Применение изменений
Созданное или изменённое переопределение сразу действует на узле, который обработал запрос. В кластере изменение передаётся на остальные узлы, а каждые 300 секунд узлы дополнительно выполняют полную сверку переопределений.
Дальше
- Алиасы моделей — сопоставление непрозрачных идентификаторов с именами из каталога.
- Виртуальные ключи — переопределения на уровне виртуального ключа.
- Бюджеты и лимиты — как рассчитанная стоимость учитывается в бюджетах.
- Маршрутизация провайдеров — каталог моделей и его синхронизация.
Пользовательские провайдеры
Несколько экземпляров одного и того же базового провайдера, ограничения по типам запросов, описательные имена и контролируемые шаблоны доступа.
Замена без пересборки приложения
Замените существующее подключение к AI-SDK на Meridian, поменяв только базовый URL в настройках. Код остаётся прежним, а вы получаете фолбэки, балансировку и управление бюджетом.