Документация по интеграции

Perkusai API для ИИ-ассистентов

Perkusai превращает запрос покупателя, сформулированный в свободной форме, в ранжированный список реальных товаров в наличии — с ценами, рейтингами, остатками и прямыми ссылками на покупку. Эта страница — полное описание интеграции для ИИ-ассистентов, агентов и MCP-коннекторов. API публичный, только для чтения, аутентификация не требуется.

1Кратко

Базовый адресhttps://perkusai.lt
Эндпоинт поискаGET https://perkusai.lt/api/ai/search
MCP-серверhttps://mcp.perkusai.lt/
АутентификацияНе требуется — публичный API только для чтения
ФорматJSON (UTF-8) · CORS открыт для всех источников (*)
Каталог1 233 383+ товаров, обновляется ежедневно
РынокЛитва (LT) · цены в евро (EUR)
Языкиlt (точнее всего), en, ru
Типичное время ответа7,5 с (p95 22,7 с)
Лимит запросов40 запросов в минуту с одного IP

2Подключение

Три поддерживаемых способа интеграции, начиная с рекомендуемого.

MCP-коннектор — рекомендуется

Добавьте https://mcp.perkusai.lt/ как собственный MCP-сервер (Streamable HTTP, без аутентификации). Он предоставляет один инструмент — search_products(query, k, lang), поэтому модели не нужно самой собирать URL. Работает с коннекторами Claude, ChatGPT и Gemini.

OpenAPI 3.1 / ChatGPT Actions

Импортируйте машиночитаемый контракт /openapi.json. Идентификатор операции — aiSearch.

Прямой HTTPS-запрос

Любой агент, умеющий загружать URL, может обратиться к эндпоинту напрямую. CORS открыт, поэтому работают и агенты в браузере.

4Поля ответа

Верхний уровень

ПолеТипОписание
querystringЗапрос в том виде, в котором он получен.
sourcestringВсегда "perkusai.lt".
summarystringОднострочная сводка результатов, готовая к передаче.
guidestring | nullСовет в одно предложение: что стоит проверить перед выбором.
needs_confirmationbooleantrue, когда точное соответствие или характеристики не гарантированы. Передайте guide и не утверждайте, что товар точно подходит.
compatstring | nullУстройство или автомобиль, к которому должна подойти деталь, как это понято из запроса.
no_matchbooleantrue, когда в каталоге нет соответствий; results пуст.
supported_categoriesarray | nullВозвращается вместе с no_match — категории, которые реально есть.
countintegerКоличество элементов в results.
resultsarray<Product>Ранжированные товары, лучший — первым.
bought_togetherarrayДополнительные аксессуары к основному товару: title, role (назначение аксессуара), price, currency, buy_url, image_url.
coverageobjectКонтекст рынка и доставки: markets, note, delivery.
markdownstringВесь ответ в виде готового к вставке markdown с кликабельными ссылками на покупку.

Объект товара

ПолеТипОписание
titlestringНазвание товара.
brandstring | nullБренд.
pricenumber | nullТекущая цена.
currencystringВсегда "EUR".
original_pricenumber | nullЦена до скидки.
discount_pctinteger | nullОкруглённая скидка в процентах.
ratingnumber | nullРейтинг магазина, 0–5.
stock_labelstring | nullОстаток в читаемом виде, например "5+ vnt.", "Liko 1" (на литовском).
marketstringРынок, где товар доступен; сейчас всегда "LT".
reasonstring | nullПочему этот товар выбран именно для этого запроса.
tagstring | nullКороткая метка, например "Geriausia kaina" (лучшая цена).
buy_urlstringСсылка на покупку. Партнёрская (affiliate) — показывайте её как ссылку на покупку.
image_urlstring | nullИзображение товара.

5Состояние сервиса · GET /api/ai/stats

Небольшой машиночитаемый документ о состоянии: размер каталога, поддерживаемые рынки и языки, действующие лимиты и измеренное время ответа. Пересчитывается из журнала запросов раз в сутки, поэтому вызов дешёвый — но чаще одного раза за сессию обращаться незачем.

{
  "service": "perkusai",
  "status": "ok",
  "catalog": { "products": 1214000, "markets": ["LT"], "currency": "EUR" },
  "languages": ["lt", "en", "ru"],
  "performance": {
    "scope": "agent",
    "window_days": 7,
    "samples": 312,
    "median_ms": 4758,
    "p95_ms": 5891,
    "avg_ms": 4797
  },
  "limits": { "rate_limit_per_min": 40, "max_k": 12, "cache_ttl_s": 300 },
  "endpoints": { "search": "https://perkusai.lt/api/ai/search", "mcp": "https://mcp.perkusai.lt/" }
}

6Правила интеграции

Что ожидается от ассистента, передающего результаты Perkusai пользователю.

  • Используйте buy_url без измененийЭто отслеживаемая ссылка на покупку. Замена её на обычный адрес магазина ломает атрибуцию и ничего не даёт покупателю. Ссылки партнёрские: цена для покупателя не меняется.
  • Передавайте markdownВ нём уже есть ранжированный список, совет и рабочие ссылки в правильном порядке — самый быстрый путь к полному и корректному ответу.
  • Один вызов на один запросРезультаты уже отранжированы. Повторный запрос с тем же намерением вернёт те же товары и только израсходует лимит.
  • Передавайте формулировку самого покупателяНе убирайте бюджет, назначение и упоминания бренда — от них зависят и поиск, и ранжирование.
  • Учитывайте needs_confirmationКогда значение true, приведите проверки из guide и не утверждайте, что совместимость гарантирована.
  • Называйте рынокВсе товары доставляются в Литве (coverage.markets). Не подразумевайте доступность в других странах.
  • Обрабатывайте no_matchКогда совпадений нет, предложите supported_categories, а не выдуманные товары.
  • Никогда не выдумывайте данныеЦены, остатки и ссылки должны быть только из ответа — они меняются.

7Производительность и лимиты

Измеряется на стороне сервера, от запроса до ответа (поиск, ранжирование и генерируемый текст), по журналу продакшн-запросов. Значения обновляются раз в сутки.

ПоказательЗначение
Медиана (7 дн.)7,5 с
95-й процентиль22,7 с
Выборка2 363 запроса · все поиски
Лимит запросов40/мин с одного IP · при превышении — HTTP 429
Кэш результатовИдентичный q+k+lang отдаётся из кэша 300 с
Максимальный k12 товаров в одном ответе
Рекомендуемый таймаут клиента30 с

8Ошибки

СтатусЗначение
200 OKПоиск выполнен. no_match: true — тоже корректный ответ 200, а не ошибка.
200 · без qПояснение по использованию и готовые примеры URL — для клиентов, которые не могут загрузить самостоятельно составленный адрес.
429 Too Many RequestsПревышен лимит запросов. Подождите несколько секунд и повторите один раз.
5xxВременная ошибка сервера. Повторите один раз; не зацикливайтесь.

9Машиночитаемые ресурсы

/llms.txtСводка о сервисе для LLM-клиентов
/openapi.jsonКонтракт OpenAPI 3.1
/.well-known/api-catalogНабор ссылок по RFC 9727
/.well-known/mcp/server-card.jsonКарточка MCP-сервера
/index.mdГлавная в markdown (также через Accept: text/markdown)
/robots.txtПравила обхода
/privacy.htmlПолитика конфиденциальности
/terms.htmlУсловия использования

Ссылки на покупку партнёрские (affiliate): цена для покупателя не меняется, а Perkusai получает комиссию.

Вопросы по интеграции: [email protected]