Для получения чистого Markdown любой страницы добавьте .md к URL‑адресу страницы.
Для полного индекса документации см. https://api.vega.chat/docs/llms.txt.
Для полного содержания документации см. https://api.vega.chat/docs/llms-full.txt.
Для интеграции AI‑клиентов (Claude Code, Cursor и др.) подключитесь к MCP‑серверу по адресу https://api.vega.chat/docs/_mcp/server.

Справочник API

MD версия

Схемы запросов и ответов VEGA очень похожи на Chat API от OpenAI, с небольшими отличиями. На высоком уровне VEGA нормализует схему между моделями и провайдерами, так что вам нужно изучить только одну.

Спецификация OpenAPI

Полный API VEGA задокументирован с помощью спецификации OpenAPI. Вы можете получить спецификацию в формате YAML или JSON:

Эти спецификации можно использовать с инструментами вроде Swagger UI, Postman или любым генератором кода, совместимым с OpenAPI, чтобы исследовать API или генерировать клиентские библиотеки.

Запросы

Формат запроса Completions

Ниже представлена схема запроса в виде TypeScript‑типа. Это будет тело вашего POST‑запроса к эндпоинту /api/v1/chat/completions (см. быстрый старт выше для примера).

Для полного списка параметров см. Parameters.

typescript
// Определения подтипов ниже
type Request = {
  // Требуется либо "messages", либо "prompt"
  messages?: Message[];
  prompt?: string;

  // Если "model" не указан, используется модель по умолчанию пользователя
  model?: string; // См. раздел "Supported Models"

  // Позволяет принудительно задать формат вывода модели.
  // См. раздел "Structured Outputs" ниже и страницу моделей, чтобы узнать, какие модели это поддерживают.
  response_format?: ResponseFormat;

  stop?: string | string[];
  stream?: boolean; // Включить потоковую передачу

  // Плагины для расширения возможностей модели (парсинг PDF, исправление ответов)
  // См. раздел "Plugins": api.vega.chat/docs/guides/features/plugins
  plugins?: Plugin[];

  // См. LLM Parameters (api.vega.chat/docs/api/reference/parameters)
  max_tokens?: number; // Диапазон: [1, context_length)
  temperature?: number; // Диапазон: [0, 2]

  // Вызов инструментов
  // Будет передан без изменений провайдерам, реализующим интерфейс OpenAI.
  // Для провайдеров с кастомными интерфейсами мы трансформируем и сопоставляем свойства.
  // Иначе мы преобразуем инструменты в шаблон YAML. Модель отвечает сообщением‑ассистентом.
  // См. модели, поддерживающие вызов инструментов: /aimodels?supported_parameters=tools
  tools?: Tool[];
  tool_choice?: ToolChoice;

  // Расширенные необязательные параметры
  seed?: number; // Только целое число
  top_p?: number; // Диапазон: (0, 1]
  top_k?: number; // Диапазон: [1, Infinity) — недоступно для моделей OpenAI
  frequency_penalty?: number; // Диапазон: [-2, 2]
  presence_penalty?: number; // Диапазон: [-2, 2]
  repetition_penalty?: number; // Диапазон: (0, 2]
  logit_bias?: { [key: number]: number };
  top_logprobs: number; // Только целое число
  min_p?: number; // Диапазон: [0, 1]
  top_a?: number; // Диапазон: [0, 1]

  // Снижение задержки за счёт предсказанного вывода модели
  // https://platform.openai.com/docs/guides/latency-optimization#use-predicted-outputs
  prediction?: { type: 'content'; content: string };

  // Параметры, специфичные только для VEGA
  // См. раздел "Model Routing": api.vega.chat/docs/guides/features/model-routing
  models?: string[];
  route?: 'fallback';
  // См. раздел "Provider Routing": api.vega.chat/docs/guides/routing/provider-selection
  provider?: ProviderPreferences;
  user?: string; // Стабильный идентификатор ваших конечных пользователей. Помогает обнаруживать и предотвращать злоупотребления.

  // Параметры отладки (только при потоковой передаче)
  debug?: {
    echo_upstream_body?: boolean; // Если true, возвращает трансформированное тело запроса, отправленное провайдеру
  };
};

// Подтипы:

type TextContent = {
  type: 'text';
  text: string;
};

type ImageContentPart = {
  type: 'image_url';
  image_url: {
    url: string; // URL или base64‑закодированные данные изображения
    detail?: string; // Необязательно, по умолчанию "auto"
  };
};

type ContentPart = TextContent | ImageContentPart;

type Message =
  | {
      role: 'user' | 'assistant' | 'system';
      // ContentParts применимы только к роли "user":
      content: string | ContentPart[];
      // Если указано "name", оно будет добавлено так:
      // для моделей, не являющихся OpenAI: `{name}: {content}`
      name?: string;
    }
  | {
      role: 'tool';
      content: string;
      tool_call_id: string;
      name?: string;
    };

type FunctionDescription = {
  description?: string;
  name: string;
  parameters: object; // JSON Schema object
};

type Tool = {
  type: 'function';
  function: FunctionDescription;
};

type ToolChoice =
  | 'none'
  | 'auto'
  | {
      type: 'function';
      function: {
        name: string;
      };
    };

// Формат ответа для структурированных выводов
type ResponseFormat =
  | { type: 'json_object' }
  | {
      type: 'json_schema';
      json_schema: {
        name: string;
        strict?: boolean;
        schema: object; // JSON Schema object
      };
    };

// Конфигурация плагинов
type Plugin = {
  id: string; // 'web', 'file-parser', 'response-healing', 'context-compression'
  enabled?: boolean;
  // Дополнительные опции, специфичные для плагина
  [key: string]: unknown;
};

Структурированные выводы

Параметр response_format позволяет заставить модель возвращать структурированные JSON‑ответы. VEGA поддерживает два режима:

  • { type: 'json_object' }: базовый режим JSON — модель вернёт корректный JSON
  • { type: 'json_schema', json_schema: { ... } }: строгий режим схемы — модель вернёт JSON, точно соответствующий вашей схеме

Подробное использование и примеры см. в разделе Structured Outputs. Чтобы найти модели, поддерживающие структурированные выводы, проверьте страницу моделей.

Плагины

Плагины VEGA расширяют возможности модели функциями веб‑поиска, обработки PDF, исправления ответов и сжатия контекста. Включите плагины, добавив массив plugins в ваш запрос:

json
{
  "plugins": [
    { "id": "web" },
    { "id": "response-healing" }
  ]
}

Доступные плагины: web (поиск в реальном времени), file-parser (обработка PDF), response-healing (автоматический ремонт JSON) и context-compression (сжатие подсказок «middle‑out»). Подробные параметры конфигурации см. в разделе Plugins.

Заголовки

VEGA позволяет указывать некоторые необязательные заголовки для идентификации вашего приложения и его обнаружения пользователями на нашем сайте.

  • HTTP-Referer: идентифицирует ваше приложение на VEGA
  • X-OpenRouter-Title: задаёт/изменяет название вашего приложения (X-Title также принимается)
  • X-OpenRouter-Categories: назначает категории маркетплейса (см. App Attribution)
typescript
fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <VEGA_API_KEY>',
    'HTTP-Referer': '<YOUR_SITE_URL>', // Необязательно. URL сайта для ранжирования на VEGA.
    'X-OpenRouter-Title': '<YOUR_SITE_NAME>', // Необязательно. Название сайта для ранжирования на VEGA.
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'openai/gpt-5.2',
    messages: [
      {
        role: 'user',
        content: 'What is the meaning of life?',
      },
    ],
  }),
});

Если параметр model опущен, будет использована модель по умолчанию пользователя или плательщика.
В противном случае выберите значение model из поддерживаемых моделей или API и укажите префикс организации. VEGA выберет наименее дорогой и лучший GPU, доступный для выполнения запроса, и при необходимости переключится на других провайдеров или GPU, если получит ответ с кодом 5xx или будет ограничена по частоте запросов.

Поддерживаются также Server‑Sent Events (SSE) — это позволяет включить потоковую передачу для всех моделей. Просто укажите stream: true в теле запроса. В SSE‑потоке иногда будет появляться «comment»‑payload, который следует игнорировать (см. ниже).

Если выбранная модель не поддерживает определённый параметр запроса (например, logit_bias в моделях, не являющихся OpenAI, или top_k для OpenAI), параметр будет проигнорирован. Остальные параметры передаются в базовый API модели.

Предзаполнение ассистента

VEGA поддерживает запрос у модели завершить частичный ответ. Это удобно, когда нужно направить модель к определённому стилю ответа.

Чтобы воспользоваться этой функцией, просто добавьте сообщение с role: "assistant" в конец массива messages.

typescript
fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <VEGA_API_KEY>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'openai/gpt-5.2',
    messages: [
      { role: 'user', content: 'What is the meaning of life?' },
      { role: 'assistant', content: "I'm not sure, but my best guess is" },
    ],
  }),
});

Ответы

Формат CompletionsResponse

VEGA нормализует схему между моделями и провайдерами в соответствии с Chat API от OpenAI.

Это означает, что choices всегда массив, даже если модель вернула лишь один результат. Каждый элемент будет содержать свойство delta, если был запрошен поток, и message в противном случае. Это упрощает использование единого кода для всех моделей.

Схема ответа в виде TypeScript‑типа:

typescript
// Определения подтипов ниже
type Response = {
  id: string;
  // В зависимости от того, задали ли вы "stream": true и
  // передали ли вы "messages" или "prompt", форма вывода будет разной
  choices: (NonStreamingChoice | StreamingChoice | NonChatChoice)[];
  created: number; // Unix‑время
  model: string;
  object: 'chat.completion' | 'chat.completion.chunk';

  system_fingerprint?: string; // Присутствует только если провайдер поддерживает

  // Данные об использовании всегда возвращаются для неблокирующего режима.
  // При потоковой передаче usage возвращается один раз в последнем чанке
  // перед сообщением [DONE], с пустым массивом choices.
  usage?: ResponseUsage;
};
typescript
// **VEGA** всегда возвращает подробную информацию об использовании.
// Подсчёт токенов производится токенизатором модели.

type ResponseUsage = {
  /** Включая изображения, входной аудио и инструменты, если они есть */
  prompt_tokens: number;
  /** Сгенерированные токены */
  completion_tokens: number;
  /** Сумма двух вышеуказанных полей */
  total_tokens: number;

  /** Детализация токенов prompt (необязательно) */
  prompt_tokens_details?: {
    cached_tokens: number;        // Токены, кэшированные эндпоинтом
    cache_write_tokens?: number;  // Токены, записанные в кэш (модели с явным кэшированием)
    audio_tokens?: number;        // Токены, использованные для входного аудио
    video_tokens?: number;        // Токены, использованные для входного видео
  };

  /** Детализация токенов completion (необязательно) */
  completion_tokens_details?: {
    reasoning_tokens?: number;    // Токены, сгенерированные для рассуждений
    audio_tokens?: number;        // Токены, сгенерированные для аудио‑вывода
    image_tokens?: number;        // Токены, сгенерированные для вывода изображений
  };

  /** Стоимость в кредитах (необязательно) */
  cost?: number;
  /** Был ли запрос выполнен с использованием Bring Your Own Key */
  is_byok?: boolean;
  /** Подробный расчёт стоимости (необязательно) */
  cost_details?: {
    upstream_inference_cost?: number;             // Показано только для BYOK‑запросов
    upstream_inference_prompt_cost: number;
    upstream_inference_completions_cost: number;
  };

  /** Использование серверных инструментов (необязательно) */
  server_tool_use?: {
    web_search_requests?: number;
  };
};
typescript
// Подтипы:
type NonChatChoice = {
  finish_reason: string | null;
  text: string;
  error?: ErrorResponse;
};

type NonStreamingChoice = {
  finish_reason: string | null;
  native_finish_reason: string | null;
  message: {
    content: string | null;
    role: string;
    tool_calls?: ToolCall[];
  };
  error?: ErrorResponse;
};

type StreamingChoice = {
  finish_reason: string | null;
  native_finish_reason: string | null;
  delta: {
    content: string | null;
    role?: string;
    tool_calls?: ToolCall[];
  };
  error?: ErrorResponse;
};

type ErrorResponse = {
  code: number; // См. раздел "Error Handling"
  message: string;
  metadata?: Record<string, unknown>; // Содержит дополнительную информацию об ошибке, например детали провайдера, сырое сообщение об ошибке и т.д.
};

type ToolCall = {
  id: string;
  type: 'function';
  function: FunctionCall;
};

Пример:

json
{
  "id": "gen-xxxxxxxxxxxxxx",
  "choices": [
    {
      "finish_reason": "stop", // Нормализованный finish_reason
      "native_finish_reason": "stop", // Исходный finish_reason от провайдера
      "message": {
        // будет "delta", если поток
        "role": "assistant",
        "content": "Hello there!"
      }
    }
  ],
  "usage": {
    "prompt_tokens": 10,
    "completion_tokens": 4,
    "total_tokens": 14,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0
    },
    "cost": 0.00014
  },
  "model": "openai/gpt-4o" // Может быть также "anthropic/claude-sonnet-4.6" и др., в зависимости от фактически использованной модели
}

Причина завершения

VEGA нормализует finish_reason каждой модели до одного из следующих значений: tool_calls, stop, length, content_filter, error.

У некоторых моделей и провайдеров могут быть дополнительные причины завершения. Необработанная строка finish_reason, возвращённая моделью, доступна через свойство native_finish_reason.

Запрос стоимости и статистики

Подсчёт токенов в ответе API completions производится токенизатором модели. Использование кредитов и цены моделей основаны на этих нативных подсчётах.

Вы также можете использовать возвращённый id, чтобы запросить статистику генерации (включая количество токенов и стоимость) после завершения запроса через эндпоинт /api/v1/generation. Это удобно для аудита исторического использования или асинхронного получения статистики.

typescript
const generation = await fetch(
  'https://api.vega.chat/api/v1/generation?id=$GENERATION_ID',
  { headers },
);

const stats = await generation.json();

Смотрите полное описание ответа в справочнике API Generation.

Обратите внимание, что подсчёт токенов также доступен в поле usage тела ответа для неблокирующих completions.