Документация Веб запрос

Web Fetch (Получение контента по URL)

Дайте любой модели возможность получать содержимое веб-страниц и PDF-документов по URL.

Инструмент openrouter:web_fetch позволяет модели получать содержимое конкретного URL. Когда модели нужно прочитать веб-страницу или PDF-документ, она вызывает инструмент с URL. Содержимое извлекается и возвращается в виде текста, который модель использует в своём ответе.

Базовый URL: https://api.ru-openrouter.ru/v1/chat/completions

Как это работает

  1. Вы включаете инструмент { "type": "openrouter:web_fetch" } в массив tools запроса.
  2. Модель, исходя из промпта, решает, нужно ли ей получить содержимое URL, и формирует запрос.
  3. URL загружается через настроенный движок (по умолчанию auto — используется нативный fetch провайдера, если он доступен, иначе — Exa).
  4. Содержимое страницы (текст, заголовок и URL) возвращается модели.
  5. Модель использует полученное содержимое в своём ответе. При необходимости она может получить несколько URL в рамках одного запроса.

Быстрый старт

curl https://api.ru-openrouter.ru/v1/chat/completions \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.2",
    "messages": [
      {
        "role": "user",
        "content": "Кратко изложи содержимое https://example.com/article"
      }
    ],
    "tools": [
      { "type": "openrouter:web_fetch" }
    ]
  }'
import requests

response = requests.post(
    "https://api.ru-openrouter.ru/v1/chat/completions",
    headers={
        "Authorization": "Bearer sk_ваш_api_ключ",
        "Content-Type": "application/json",
    },
    json={
        "model": "openai/gpt-5.2",
        "messages": [
            {
                "role": "user",
                "content": "Кратко изложи содержимое https://example.com/article"
            }
        ],
        "tools": [
            {"type": "openrouter:web_fetch"}
        ]
    }
)

data = response.json()
print(data["choices"][0]["message"]["content"])

Конфигурация

Инструмент web fetch принимает необязательные parameters для настройки поведения:

{
  "type": "openrouter:web_fetch",
  "parameters": {
    "engine": "exa",
    "max_uses": 10,
    "max_content_tokens": 100000,
    "allowed_domains": ["docs.example.com"],
    "blocked_domains": ["private.example.com"]
  }
}
Параметр Тип По умолчанию Описание
engine string auto Движок загрузки: auto, native, exa, openrouter, firecrawl или parallel
max_uses integer Максимальное число загрузок за один запрос. При превышении лимита инструмент возвращает ошибку
max_content_tokens integer Максимальная длина содержимого в приблизительных токенах. Содержимое сверх лимита обрезается
allowed_domains string[] Загружать только с этих доменов
blocked_domains string[] Никогда не загружать с этих доменов

Выбор движка

Инструмент web fetch поддерживает несколько движков загрузки:

  • auto (по умолчанию) — использует нативный fetch, если провайдер его поддерживает, иначе переключается на Exa
  • native — принудительно использует встроенный fetch провайдера
  • exa — извлечение содержимого страницы через Exa Contents API
  • openrouter — прямой HTTP-fetch с извлечением содержимого
  • firecrawl — скрейпинг через Firecrawl (BYOK — ваш собственный ключ)
  • parallel — высококачественное извлечение содержимого через Parallel

Возможности движков

Возможность Exa Parallel Firecrawl OpenRouter Native
Фильтрация доменов Да Да Да Да Зависит от провайдера
Обрезка по токенам Да Да Да Да Нет
API-ключ Серверный или BYOK Серверный BYOK (ваш ключ) Серверный Обрабатывается провайдером
Жёсткий лимит Нет Нет Нет 50/запрос 50/запрос

Firecrawl (BYOK)

Firecrawl использует ваш собственный API-ключ. Чтобы настроить его, укажите ключ Firecrawl в настройках плагинов. Ваш аккаунт Firecrawl тарифицируется отдельно.

Жёсткие лимиты

Для предотвращения неконтролируемых расходов:

  • Движок Exa — без жёсткого лимита (тарификация через API-кредиты)
  • Движок Parallel — без жёсткого лимита (тарификация через API-кредиты)
  • Движок Firecrawl — без жёсткого лимита (использует ваши кредиты Firecrawl)
  • Движки OpenRouter/native — жёсткий лимит 50 загрузок на запрос

Доменная фильтрация

Ограничьте домены, с которых можно загружать, с помощью allowed_domains и blocked_domains:

{
  "type": "openrouter:web_fetch",
  "parameters": {
    "allowed_domains": ["docs.example.com", "api.example.com"],
    "blocked_domains": ["internal.example.com"]
  }
}

Если задан allowed_domains, загружаются только URL с этих доменов. Если задан blocked_domains, URL с этих доменов отклоняются.

Обрезка содержимого

Используйте max_content_tokens, чтобы ограничить объём возвращаемого содержимого:

{
  "type": "openrouter:web_fetch",
  "parameters": {
    "max_content_tokens": 50000
  }
}

Содержимое сверх лимита обрезается. Это удобно для контроля размера контекстного окна при загрузке больших страниц.

Работа с Responses API

Инструмент web fetch также работает с эндпоинтом /v1/responses:

curl https://api.ru-openrouter.ru/v1/responses \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.2",
    "input": "Что написано в документации по адресу https://example.com/docs?",
    "tools": [
      { "type": "openrouter:web_fetch", "parameters": { "max_content_tokens": 50000 } }
    ]
  }'
import requests

response = requests.post(
    "https://api.ru-openrouter.ru/v1/responses",
    headers={
        "Authorization": "Bearer sk_ваш_api_ключ",
        "Content-Type": "application/json",
    },
    json={
        "model": "openai/gpt-5.2",
        "input": "Что написано в документации по адресу https://example.com/docs?",
        "tools": [
            {"type": "openrouter:web_fetch", "parameters": {"max_content_tokens": 50000}}
        ]
    }
)

print(response.json())

Формат ответа

Когда модель вызывает инструмент web fetch, она получает ответ вида:

{
  "url": "https://example.com/article",
  "title": "Article Title",
  "content": "Полный текстовый контент страницы...",
  "status": "completed",
  "retrieved_at": "2025-07-15T14:30:00.000Z"
}

Если загрузка не удалась, ответ содержит ошибку:

{
  "url": "https://example.com/404",
  "status": "failed",
  "error": "HTTP 404: Page not found"
}

Цена

Веб-fetch тарифицируется отдельно от обычных токенов. Стоимость за загрузку зависит от выбранного движка и добавляется к стандартной стоимости токенов за обработку полученного содержимого.