> Для получения чистого 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.

# Web Fetch

Инструменты сервера находятся в бета‑версии. API и поведение могут измениться.

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

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

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

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

```typescript title="TypeScript"
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {{API_KEY_REF}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      {
        role: 'user',
        content: 'Summarize the content at https://example.com/article'
      }
    ],
    tools: [
      { type: 'openrouter:web_fetch' }
    ]
  }),
});

const data = await response.json();
console.log(data.choices[0].message.content);
```

```python title="Python"
import requests

response = requests.post(
  "https://api.vega.chat/api/v1/chat/completions",
  headers={
    "Authorization": f"Bearer {{API_KEY_REF}}",
    "Content-Type": "application/json",
  },
  json={
    "model": "{{MODEL}}",
    "messages": [
      {
        "role": "user",
        "content": "Summarize the content at https://example.com/article"
      }
    ],
    "tools": [
      {"type": "openrouter:web_fetch"}
    ]
  }
)

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

```bash title="cURL"
curl https://api.vega.chat/api/v1/chat/completions \
  -H "Authorization: Bearer {{API_KEY_REF}}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "{{MODEL}}",
    "messages": [
      {
        "role": "user",
        "content": "Summarize the content at https://example.com/article"
      }
    ],
    "tools": [
      {"type": "openrouter:web_fetch"}
    ]
  }'
```

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

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

```json
{
  "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`**: принудительно использует встроенный в провайдера web fetch  
* **`exa`**: использует API Contents от [Exa](https://exa.ai) для извлечения содержимого страниц (поддерживает BYOK)  
* **`openrouter`**: использует прямой HTTP‑fetch с извлечением содержимого  
* **`firecrawl`**: использует API скрейпа от [Firecrawl](https://firecrawl.dev) (BYOK — bring your own key)  
* **`parallel`**: использует API extract от [Parallel](https://parallel.ai) для высококачественного извлечения содержимого  

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

| Функция                | Exa                 | Parallel    | Firecrawl       | VEGA        | Native           |
| ---------------------- | ------------------- | ----------- | --------------- | ----------- | ---------------- |
| **Фильтрация доменов** | Yes                 | Yes         | Yes             | Yes         | Varies           |
| **Усечение токенов**   | Yes                 | Yes         | Yes             | Yes         | No               |
| **API‑ключ**           | Server-side or BYOK | Server-side | BYOK (your key) | Server-side | Provider-handled |
| **Жёсткий лимит**     | None                | None        | None            | 50/request  | 50/request       |

### Firecrawl (BYOK)

Firecrawl использует ваш собственный API‑ключ. Чтобы настроить:

1. Перейдите в **Настройки плагина VEGA** ([VEGA plugin settings](https://api.vega.chat/settings/plugins)) и укажите ваш API‑ключ Firecrawl.  
2. Ваш аккаунт Firecrawl оплачивается отдельно от VEGA.

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

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

* **Движок Exa**: без жёсткого лимита (оплата через кредиты API)  
* **Движок Parallel**: без жёсткого лимита (оплата через кредиты API)  
* **Движок Firecrawl**: без жёсткого лимита (используются ваши кредиты Firecrawl)  
* **Движки VEGA/Native**: жёсткий лимит — 50 запросов получения за один запрос  

## Фильтрация доменов

Ограничьте, какие домены могут быть получены, используя `allowed_domains` и `blocked_domains`:

```json
{
  "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`, чтобы ограничить объём возвращаемого содержимого:

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

Содержимое, превышающее этот предел, будет усечено. Это полезно для контроля использования окна контекста при получении больших страниц.

## Работает с Responses API

Инструмент web fetch также совместим с Responses API:

```typescript title="TypeScript"
const response = await fetch('https://api.vega.chat/api/v1/responses', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {{API_KEY_REF}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    input: 'What does the documentation at https://example.com/docs say?',
    tools: [
      { type: 'openrouter:web_fetch', parameters: { max_content_tokens: 50000 } }
    ]
  }),
});

const data = await response.json();
console.log(data);
```

```python title="Python"
import requests

response = requests.post(
  "https://api.vega.chat/api/v1/responses",
  headers={
    "Authorization": f"Bearer {{API_KEY_REF}}",
    "Content-Type": "application/json",
  },
  json={
    "model": "{{MODEL}}",
    "input": "What does the documentation at https://example.com/docs say?",
    "tools": [
      {"type": "openrouter:web_fetch", "parameters": {"max_content_tokens": 50000}}
    ]
  }
)

data = response.json()
print(data)
```

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

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

```json
{
  "url": "https://example.com/article",
  "title": "Article Title",
  "content": "The full text content of the page...",
  "status": "completed",
  "retrieved_at": "2025-07-15T14:30:00.000Z"
}
```

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

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

## Ценообразование

| Движок      | Ценообразование                                                    |
| ----------- | ------------------------------------------------------------------- |
| **Exa**     | 100 ₽ за 1 000 запросов                                                |
| **Parallel**| 100 ₽ за 1 000 запросов                                                |
| **Firecrawl**| Использует ваши кредиты Firecrawl напрямую — без оплаты от VEGA   |
| **VEGA**| Бесплатно                                                          |
| **Native**  | Передаётся от провайдера                                            |

Все цены добавляются к стандартным затратам на токены LLM за обработку полученного содержимого.

## Следующие шаги

* [Обзор серверных инструментов](/docs/guides/features/server-tools) — Узнайте о серверных инструментах  
* [Web Search](/docs/guides/features/server-tools/web-search) — Поиск в интернете в реальном времени  
* [Datetime](/docs/guides/features/server-tools/datetime) — Получение текущей даты и времени  
* [Tool Calling](/docs/guides/features/tool-calling) — Узнайте о пользовательском вызове инструментов