Вебпошук (Keenable)
Пошук в інтернеті та читання сторінок просто з вашого коду — тим самим ключем, що й моделі. Працює двома способами: як звичайна модель через /v1/chat/completions і як окремі ручки з чистим JSON.
Скільки коштує
$0,005 за запит — тобто $5 за 1000 запитів.
Ціна повиклична: один виклик — один запит, скільки б результатів не повернулося. Знайти 50 джерел коштує стільки ж, скільки знайти одне.
За невдалий запит гроші не списуються — ні за збій пошуку, ні за хибні параметри.
| що | рахується як |
|---|---|
| пошук, що повернув 1 результат | 1 запит |
| пошук, що повернув 50 результатів | 1 запит |
| читання сторінки | 1 запит |
| помилка будь-якого роду | 0 |
Спосіб 1 — як модель
Працює в Cursor, Claude Code, OpenCode і будь-якому клієнті OpenAI без жодної правки: просто оберіть модель.
Моделі:
| модель | що робить |
|---|---|
keenable/search | шукає в інтернеті, повертає список джерел із витягами |
keenable/read | читає сторінку й повертає її текст у markdown |
Пошук
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/search",
"messages": [{"role": "user", "content": "курс біткоїна сьогодні"}]
}'У відповідь прийде звичайне повідомлення асистента зі списком джерел: заголовок, дата публікації, повна адреса та витяг по кожному.
Читання сторінки
Першим словом повідомлення — адреса. Далі можна додати, що саме вас на цій сторінці цікавить.
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/read",
"messages": [{"role": "user", "content": "https://uk.wikipedia.org/wiki/Токіо кількість населення"}]
}'Без уточнення повернеться вся сторінка в markdown. З уточненням — лише те, про що ви попросили: це швидше й помітно дешевше за токенами на вашому боці, коли результат іде далі в модель.
Навіщо уточнення
Стаття у Вікіпедії — це десятки тисяч знаків. Якщо вам потрібна одна цифра, уточнення заощадить і час, і токени наступного кроку.
Python
from openai import OpenAI
client = OpenAI(
api_key="ваш-ключ",
base_url="https://nordrouter.com/v1",
)
found = client.chat.completions.create(
model="keenable/search",
messages=[{"role": "user", "content": "новини про ШІ за тиждень"}],
)
print(found.choices[0].message.content)Спосіб 2 — власні ручки
Якщо потрібна видача з полями, датами й фільтрами, а не суцільний текст — беріть JSON.
POST /v1/search
curl https://nordrouter.com/v1/search \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "новини про нейромережі",
"max_results": 5,
"published_after": "7d"
}'Параметри:
| параметр | тип | за замовчуванням | що робить |
|---|---|---|---|
query | рядок | обовʼязковий | що шукати |
site | рядок | — | шукати лише на цьому домені, наприклад pravda.com.ua |
max_results | число | 10 | скільки результатів, від 1 до 50 |
snippet_max_chars | число | — | довжина витягу, від 180 до 10 000 знаків |
published_after | рядок | — | матеріали, опубліковані пізніше цього моменту |
published_before | рядок | — | опубліковані раніше |
acquired_after | рядок | — | що потрапили до індексу пізніше |
acquired_before | рядок | — | що потрапили до індексу раніше |
query_time | рядок | — | шукати в індексі таким, яким він був на цей момент |
Дати приймаються у трьох видах: 2026-08-01, повна позначка часу ISO 8601 або відносно — 30min, 12h, 7d, 3mo, 1y.
Публікація та індекс — не одне й те саме
published_* фільтрує за датою самого матеріалу, acquired_* — за датою, коли сторінка потрапила до індексу. Різниця важлива: сторінку могли переписати, не чіпаючи дати публікації. Якщо вам потрібно «що зʼявилося в мережі за добу», беріть acquired_after.
Відповідь:
{
"query": "новини про нейромережі",
"count": 5,
"results": [
{
"title": "Заголовок статті",
"url": "https://example.com/article",
"description": "Короткий опис",
"snippet": "Витяг із тексту сторінки…",
"published_at": "2026-08-25T10:30:00Z",
"acquired_at": "2026-08-25T11:02:00Z"
}
]
}GET /v1/fetch
curl -G https://nordrouter.com/v1/fetch \
-H "Authorization: Bearer $NORDROUTER_KEY" \
--data-urlencode "url=https://example.com/article" \
--data-urlencode "prompt=дістань таблицю цін"Параметри:
| параметр | тип | за замовчуванням | що робить |
|---|---|---|---|
url | рядок | обовʼязковий | адреса сторінки |
max_chars | число | 50 000 | скільки знаків повернути |
prompt | рядок | — | що саме дістати зі сторінки, до 2000 знаків |
live | true / false | false | брати просто зі сторінки, а не з індексу |
Відповідь:
{
"url": "https://example.com/article",
"title": "Заголовок",
"description": "Опис",
"author": "Автор",
"content": "# Текст сторінки в markdown…",
"published_at": 1787777084
}Коли потрібен live
З індексу сторінка приходить швидше, але в індексі є не все. Якщо сторінка свіжа або закрита від обходу, ставте live=true — тоді її читають напряму з сайту. Коштує стільки ж.
Обмеження
| темп | 2 запити на секунду на ключ |
| довжина витягу | від 180 до 10 000 знаків |
| результатів за раз | до 50 |
| довжина уточнення при читанні | до 2000 знаків |
Перевищення темпу поверне 429 із заголовком Retry-After — повторіть через секунду.
Помилки
| код | що означає | що робити |
|---|---|---|
400 | бракує query чи url, або адреса без http:// | виправте запит |
401 | ключ не прийнято | перевірте Authorization |
402 | баланс вичерпано | поповніть в особистому кабінеті |
429 | надто часто | повторіть через секунду |
502 | пошук не відповів | повторіть; гроші не списано |
503 | пошук тимчасово недоступний | ми вже цим займаємося; гроші не списано |
Часті питання
Чи списується за порожню видачу? Так, якщо пошук відпрацював і чесно відповів «нічого не знайдено» — роботу було виконано. Не списується лише за помилки.
Чи можна стримити? Ні й не потрібно: видача приходить одним шматком за частки секунди.
Чи рахуються токени? Ціна повиклична, токени на неї не впливають. У відповіді моделі вони все одно показуються, щоб клієнтські бібліотеки не вважали відповідь порожньою.
Чим це відрізняється від моделей search/…? Ті спершу шукають, а потім відповідають знайденим мовною моделлю — ви платите за дві роботи. Тут ви отримуєте сиру видачу й самі вирішуєте, що з нею робити.