Vesremont — полный AI-контекст
Сводная версия AI-документации Vesremont: browser WebMCP, REST/OpenAPI, OAuth, MCP, A2A, UCP, SDK и CLI. Индекс: https://vesremont.com/llms.txt; динамические цены и остатки проверяйте на текущей странице или через API и повторно в корзине.
Business name: Vesremont
Brand: Vesremont
Legal entity: ООО «Афганец»
Description: Vesremont — русскоязычный интернет-магазин товаров для ремонта, строительства, дома и сада: инструмента, электрики, стройматериалов, крепежа, сантехники, оборудования, спецодежды и товаров для профессиональных задач. Публичный каталог содержит актуальные страницы категорий, брендов и товаров; цены, остатки и возможность заказа проверяются на текущей странице и в корзине.
Services: инструменты, электрика, строительные материалы, крепёж, сантехника, оборудование, спецодежда, товары для дома и сада
Documentation-Version: 1.14.31 Revision: sha256:5645af5ca9e82c3127c691283c5eec16d7efab8039972ccbbae5ae4b8ec746ce
Когда использовать Vesremont
Используйте Vesremont для поиска товаров, чтения карточек, проверки текущих цен и наличия, покупательских условий и работы с корзиной и заказами. Доступны browser WebMCP и отдельные REST/OpenAPI, OAuth, Remote MCP, A2A и UCP; личные удалённые операции требуют разрешения покупателя.
Цены, остатки и возможность заказа являются динамическими: проверяйте их на актуальной странице и повторно в корзине.
Найти товар и прислать ссылку на корзину — без OAuth
Для этой задачи не нужна сессия покупателя: агент готовит переносимую подборку, а покупатель открывает её в своём браузере. Привязка обычной корзины к сессии и CSRF не запрещает этот путь.
- Найдите товар по названию или артикулу через публичный поиск либо обычный HTML-поиск
/search/?search={артикул}. Для JSON-клиента —GET /api/v1/products?q={артикул}. Проверьте совпадение артикула и модели; числовойitems[].id— внутренний ID товара, не артикул и неitem_idстроки корзины. Все способы поиска. - Если карточка уже найдена, прочитайте нижний раскрываемый блок «Для AI-систем» после отзывов и аналогов: там указаны ID и конкретная ссылка, текст доступен в серверном HTML и Markdown. Можно сразу передать опубликованную
https://vesremont.com/buy/{id}:1, не вызывая API, не устанавливая SDK и не создавая подпись. Количество заменяется на нужное целое 1–99. Число{id}берётся только из сайта, не из догадки. - Для подписанной подборки прочитайте
GET /api/v1/cart-drafts/?product_id={id}&quantity=1и передайтеshare_urlиз ответа. Для следующего товара передайте вdrafttoken из предыдущегоshare_url, неdraft_id; максимум 20 разных товаров. Если HTTP-инструмент не читает JSON или блокирует новый адрес, используйте уже опубликованную короткую ссылку карточки. Недоступность инструмента не означает отсутствия функции на сайте; не обходите блокировку подменой IP/Host, cookies или внутренними AJAX. - Покупатель открывает ссылку. Сайт проверяет текущую цену и доступность и переносит товары защищённым POST в его корзину; при необходимости покупатель нажимает «Открыть готовую корзину». Агентский GET ничего в личной корзине не меняет. Заказ не создаётся. Полный порядок переноса и оформления.
Пример формата для проверенного в этой документации соответствия: артикул 4058075709355, ID 375092 → https://vesremont.com/buy/375092:1. Цена и наличие не закреплены примером. Для другого товара возьмите его собственные ID и ссылку.
Если нужно прочитать или изменить личную корзину через API, а не передать подборку по ссылке, переходите к OAuth-разрешению покупателя. Если нужен браузерный агент — используйте WebMCP текущей страницы. Общее OAuth-согласие и cart link никогда не заменяют подтверждение конкретного заказа.
Следующие runtime-поля относятся только к browser WebMCP, не ко всем способам работы с магазином:
Interaction mode: browser_webmcp
Runtime: document.modelContext
Remote integration contract: REST/OpenAPI, OAuth PKCE, MCP, A2A, UCP, webhooks, SDK and CLI — https://vesremont.com/llms/api.md
Live discovery: https://vesremont.com/agent.json and https://vesremont.com/.well-known/api-catalog
Stateless cart-draft handoff: https://vesremont.com/api/v1/cart-drafts/?product_id=375094
Этот файл автоматически собирается из тематических документов /llms/*.md, auth.md и pricing.md для клиентов, которым удобнее получить контекст одним запросом. Отдельные документы остаются каноническими для тематического чтения. Выбор маршрута: https://vesremont.com/llms/capabilities.md. Не нужно выполнять все описанные протоколы или методы авторизации подряд.
Public API и удалённые агентские интерфейсы Vesremont
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Реализовать вызовы выбранного REST/MCP/A2A/UCP интерфейса, SDK/CLI или webhook receiver.
Что нужно на входе: Выбранная бизнес-задача и транспорт; публичный каталог работает без buyer credentials.
Результат: Запросы по актуальной schema, корректная обработка ошибок и проверенный результат операции.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Поддерживаемые возможности — выбрать подходящий интерфейс · Корзина и оформление — проверить смысл и порядок покупательских действий · Версии и изменения — проверить совместимость и изменения.
Полный контракт интеграции: REST/OpenAPI, OAuth, Remote MCP, A2A, UCP, корзина, checkout, заказы, webhooks, SDK и CLI. Browser WebMCP через document.modelContext сохраняет собственный контракт. Документация описывает возможности и правила вызова; права покупателя и серверные ограничения проверяются при каждом запросе.
Как читать это руководство
Выберите один транспорт в разделе «Интерфейсы и discovery». Для точных REST полей используйте OpenAPI, для MCP — tools/list, для A2A — Agent Card и operation schema, для UCP — profile и schema capability. Не переносите имена аргументов и денежные единицы между ними автоматически. SDK и CLI — клиенты REST, а не дополнительный обязательный этап.
Поиск и подбор · смысл корзины и оформления · права и получение токена · все задачи и альтернативы. Если нужна только готовая ссылка, достаточно опубликованной /buy/ ссылки или GET cart-drafts; разделы OAuth и webhooks для этой задачи не нужны.
Интерфейсы и discovery
- REST 1:
https://vesremont.com/api/v1; машинное описание. - MCP 2026-07-28:
https://vesremont.com/mcp; машинное описание. - A2A 1.0:
https://vesremont.com/a2a; машинное описание. - UCP 2026-08-25:
https://vesremont.com/ucp/v1; машинное описание.
Публичное discovery: NLWeb, индексы и feeds
NLWeb 0.55: POST https://vesremont.com/ask с Content-Type: application/json и телом {"query":{"text":"4058075709355"},"prefer":{"mode":"list","streaming":false}}. Это альтернативное представление существующего поиска Manticore/Reindexer/Tarantool, не LLM, не запись в корзину и не покупательский API. Полезен для названия, модели и артикула; сложные пожелания уточняйте через штатные фильтры. OAuth, cookies и Authorization не передавать.
Ответ: _meta.version=0.55, _meta.response_type=answer, results[] с Schema.org Product, identifier (внутренний product_id), sku, name, url, description, image и offers при известной цене. Цена в RUB, не копейках; отсутствие offers не означает нулевую цену. Не обещается наличие/срок по одному Offer. grounding.source ведёт к REST-карточке. Не более первых 10 результатов; для пагинации/фасетов используйте REST, а не считайте эту выборку полным каталогом.
Для SSE установите prefer.streaming:true и Accept:text/event-stream: события start, result с index/item и complete; для пустого поиска — error с NO_RESULTS, затем complete. Поток передаёт результаты одного ограниченного поиска, а не токены генеративного ответа. При ошибке до начала потока возвращается JSON с _meta.response_type=failure и соответствующим HTTP status; сетевое закрытие без complete — не успех. Дополнительный GET: пример поиска; streaming=true включает тот же формат.
Поддерживаются query.text (1–200 символов, не более 600 UTF-8 байт), необязательный query.site=vesremont.com, prefer.mode=list, prefer.response_format=conversational_search, prefer.streaming boolean и meta.version=0.55. Тело до 8 KiB. Conversational context, память, summarize, произвольные сайты, пользовательские действия и await не поддерживаются; неизвестные поля отклоняются. Ошибочный JSON/запрос — 400/422, неверный MIME — 415, тело — 413, Origin — 403, лимит — 429 с Retry-After, отключение/недоступность — 503. Успешный пустой поиск — HTTP 200 с NO_RESULTS. Общий search-лимит тот же, что у REST: 30 запросов/минуту на IP, плюс nginx; смена транспорта не сбрасывает его.
Краткие индексы разделов
- Каталог Vesremont: только относящиеся к разделу задачи и переходы.
- Бренды Vesremont: только относящиеся к разделу задачи и переходы.
- Интеграция с Vesremont: только относящиеся к разделу задачи и переходы.
Совместимость с плоским NLWeb REST: POST /ask с JSON {"query":"4058075709355","mode":"list","streaming":false}. Допускаются только query, site=vesremont.com, mode=list, streaming и необязательный query_id (1–128 латинских букв, цифр, дефисов или подчёркиваний). streaming принимает true/false или 1/0; в плоском POST по умолчанию true. GET принимает те же параметры, по умолчанию streaming=false. Смешивать плоские поля с query.text/prefer нельзя. В results добавляются site и schema_object с тем же публичным Product; query_id — метка запроса, не сессия покупателя. Score и сгенерированные LLM-описания не выдумываются. Память, произвольные сайты, summarize/generate и покупательские действия остаются запрещены. Современный POST 0.55 и его строгие типы не изменены.
Schema Map перечисляет JSONL feed документации: 15 публичных страниц с их названиями, описаниями и Markdown-альтернативами из общего manifest. Это Schema Feeds 0.1 draft, не товарный feed и не снимок цен/остатков. Feed обновляется тем же генератором, что страницы. В robots.txt ссылка оставлена комментарием для совместимости с Google, не активной директивой Schemamap. Обычные sitemap остаются самостоятельными.
ARD trustManifest связывает HTTPS identity с доменом vesremont.com. Это самопубликация владельца домена, не независимый аудит, криптографическая аттестация или разрешение покупателя. Проверяйте TLS, домен и действующие права отдельно.
REST: начало работы
API discovery — JSON-карта существующего API: base_url, OpenAPI, публичные операции из его схемы, первый GET, sandbox и отдельная авторизация покупателя. /api, /api/ и /api/v1 с вариантом завершающего слеша отдают одну карту без redirect; это не листинг файлов и не новый интерфейс записи. Краткий индекс API отдаёт тот же документ, что /developers/llms.txt; корень skills — тот же index.json. Неизвестные ручки и внутренние исходники остаются закрытыми.
Публичный onboarding — чтение production-каталога без токена: GET /api/v1/products?per_page=1. По желанию получите accountless catalog credential через identity endpoint. Read-only sandbox возвращает только синтетический пример без заказов. В agent.json public_onboarding содержит первый запрос; remote_rest_api, remote_mcp и remote_interfaces отражают отдельный флаг публикации discovery, а не HTTP-доступность каталога. Не пропускайте первый GET из-за false в этих флагах. Не передавайте browser cookies. Если сам запрос недоступен, используйте публичный HTML-каталог, а не внутренние AJAX-ручки.
OpenAPI публикует реальные onboarding-операции GET /oauth/sandbox и POST /oauth/identity с собственным servers на корне домена. Не добавляйте к ним /api/v1. API index содержит их абсолютные URL. Бесплатное чтение не требует выдачи credential; цена доступа 0 RUB отделена от цен товаров и доставки. GET /agent/auth проверяет только уже выданное REST-разрешение и его live binding: без токена 401, с действующим — resource/scopes/expiry без данных покупателя. Не используется для регистрации, повышения прав или подтверждения заказа.
Совместимый адрес anonymous-регистрации — POST https://vesremont.com/api/agents/register (вариант со слешем также без redirect), JSON {"type":"anonymous"}. Это тот же /oauth/identity, не другая регистрация: одинаковые ограничения, проверка полей и catalog:read; полученную одноразовую assertion обменять по прежнему контракту /oauth/token. GET/HEAD возвращает descriptor, не выдаёт credential. Для публичного каталога этот шаг по-прежнему необязателен. Короткие /api.md и /mcp.md отдают существующий API guide; /llms.md и /.well-known/llms.txt — существующий корневой индекс; /developer.md — существующий /developer-ai.txt. Независимых копий нет.
OpenAPI 3.1 генерируется из того же реестра операций и схем, который используется обработчиками. Совместимый адрес: /.well-known/openapi.json. Таблица ниже также собрана из этого реестра. Markdown API guide доступен также по /openapi.md и /.well-known/openapi.json.md; это тот же документ /llms/api.md, не отдельная версия OpenAPI-контракта.
curl -fsS --get 'https://vesremont.com/api/v1/products' --data-urlencode 'q=труборез' --data-urlencode 'page=1' --data-urlencode 'per_page=10'
Ответы — UTF-8 JSON; POST/PATCH принимают JSON object с Content-Type: application/json, включая {} для операции без аргументов. HEAD доступен для GET. Не добавляйте завершающий / к REST-маршрутам; отдельный ранее опубликованный /api/v1/cart-drafts/ сохраняет свой URL. Неизвестные поля, дублирующиеся query-ключи и некорректные типы отклоняются.
| Операция | HTTP | URL | OAuth scopes |
|---|---|---|---|
status | GET | /api/v1/status | не требуется |
search_products | GET | /api/v1/products | не требуется |
get_product | GET | /api/v1/products/{product_id} | не требуется |
get_products_batch | POST | /api/v1/products/batch | не требуется |
search_brands | GET | /api/v1/brands | не требуется |
get_filters | GET | /api/v1/catalog/filters | не требуется |
get_reviews | GET | /api/v1/products/{product_id}/reviews | не требуется |
get_cart | GET | /api/v1/cart | cart:read |
add_cart_item | POST | /api/v1/cart/items | cart:write |
update_cart_item | PATCH | /api/v1/cart/items/{item_id} | cart:write |
remove_cart_item | DELETE | /api/v1/cart/items/{item_id} | cart:write |
get_favorites | GET | /api/v1/favorites | favorites:read |
add_favorite | POST | /api/v1/favorites/items | favorites:write |
remove_favorite | DELETE | /api/v1/favorites/items/{product_id} | favorites:write |
get_checkout | GET | /api/v1/checkout | checkout:read |
update_checkout | PATCH | /api/v1/checkout | checkout:write |
prepare_order | POST | /api/v1/orders/prepare | order:prepare |
submit_order | POST | /api/v1/orders/submit | order:submit |
get_order | GET | /api/v1/orders/{order_id} | orders:read |
list_webhooks | GET | /api/v1/webhooks | webhooks:read |
create_webhook | POST | /api/v1/webhooks | webhooks:write orders:read |
delete_webhook | DELETE | /api/v1/webhooks/{subscription_id} | webhooks:write |
list_webhook_deliveries | GET | /api/v1/webhooks/{subscription_id}/deliveries | webhooks:read |
Поиск, фильтры, цена и остатки
Поиск использует существующие Manticore-индексы и нормализацию сайта; фильтры и сортировка — существующий Reindexer, подробности товара и актуальные цены — Tarantool. page начинается с 1, per_page — до 100. Поддерживаемые sort и типы фильтров описаны в OpenAPI; сначала получите /api/v1/catalog/filters с section_id или brand_id. filters передаётся одним URL-encoded JSON object, а не PHP-массивом query-параметров. Не угадывайте ID характеристик.
Cursor pagination: передавайте pagination.next_cursor следующего ответа в cursor, сохраняя запрос, фильтры и сортировку. Cursor подписан, ограничен сроком и непрозрачен: не создавайте и не редактируйте его. Не передавайте одновременно cursor и page; размер страницы уже связан с cursor. Прежняя page/per_page пагинация сохраняется для совместимости. Это последовательный обход, не гарантия неизменного снимка каталога.
Цена в REST выражена в рублях, в UCP — в целых копейках (currency: RUB). Неизвестная цена — null, не ноль. stock.total и stock.local — суммарный доступный остаток всей складской сети магазина; это не обещание самовывоза сегодня. Сроки со складов не выдумываются. updated_at: null означает отсутствие доказанного времени изменения товара. Нулевой остаток сам по себе не запрещает заказ при известной цене.
Запрос с чрезмерно широким поисковым пересечением завершается явной ошибкой: частичный результат не выдаётся за полный. Используйте более точный запрос/категорию. Отзывы отдаются только опубликованные и одобренные, без внутренних пользовательских идентификаторов и контактов.
Авторизация
Полная последовательность и примеры находятся в auth.md: сначала выберите zero-auth, необязательный anonymous catalog credential, buyer OAuth Authorization Code + PKCE S256 либо browser session/CSRF. Для нескольких remote-интерфейсов одно явное согласие перечисляет consent_resources, а ограниченный token exchange выдаёт отдельный token каждой аудитории. Cookies агента не выбирают покупателя; общее разрешение не подтверждает заказ. Не копируйте token в URL или логи.
Ограничения и ошибки
REST-ошибки имеют application/problem+json, HTTP status, code и request_id, общий typed schema в OpenAPI. Сохраняйте только безопасный request ID для обращения в поддержку. 400 — исправьте параметры; 401 — повторная авторизация; 403 — недостаточно прав; 404 — отсутствующий или чужой ресурс; 409 — конфликт/устаревшее состояние; 422 — нарушение схемы аргументов или недействительный cursor; 429 — соблюдайте Retry-After; 503 — функция отключена или зависимость недоступна. Ответ status: ok проверяет API/PHP, а не здоровье всех хранилищ.
Лимиты по минутным окнам: catalog/read — 120, search — 30, mutations — 60, submit/webhook — 10, OAuth — 20. Дополнительно действует общий nginx-лимит. RateLimit-Policy содержит имя/q/w, RateLimit — имя/r/t по IETF draft-ietf-httpapi-ratelimit-headers-11 (ещё draft, не окончательный RFC). Совместимые RateLimit-Limit/Remaining/Reset сохранены; Reset — относительные секунды. Legacy X-RateLimit-Reset — Unix timestamp. На 429 есть Retry-After; раннее отклонение до policy может не содержать других заголовков. Не обходите лимит сменой идентичности. Личные ответы не предназначены для общего кэша; не логируйте credentials.
Совместимость и вывод из эксплуатации: политика опубликована в x-deprecation-policy OpenAPI, минимальное предупреждение — 180 дней. Сейчас вывод операций не объявлен. Действующие маршруты не помечаются устаревшими без реального объявления; при объявленном выводе используются Deprecation, Sunset и ссылка на замену. Общее согласие добавлено совместимо, отдельные согласия не удалены.
Ссылка на готовую корзину без OAuth
Вызовите GET /api/v1/cart-drafts/?product_id=375094&quantity=1. Ответ содержит share_url, draft_id, expires_at, items. Для следующего товара извлеките параметр draft из выданного share_url и передайте его вместе с очередными product_id/quantity; draft_id для этого не подходит. Передайте покупателю именно share_url из ответа, либо используйте /buy/375094:1 для короткой ссылки. Обращение к этим адресам не создаёт заказ и не даёт доступа к чужой корзине.
В share_url находится подписанный HMAC-SHA256 token, а не хеш браузерной сессии и не OAuth token. Он содержит только ID товаров, количества и срок: персональных данных и цены в нём нет. Подпись предотвращает подмену, но не скрывает состав. API-черновик живёт до 24 часов, permalink создаёт черновик на 1 час. Доступны до 20 разных товаров, количества 1–99. Не рассчитывайте подпись на клиенте; серверный ключ не публикуется.
GET страницы handoff сам по себе не изменяет корзину: перенос идёт защищённым browser POST в собственную сессию покупателя. При обычном пользовательском переходе он автоматизирован, при отсутствии подтверждённой навигации показывается кнопка. Сервер заново проверяет товары и цены, сохраняет остальные позиции покупателя; повторный перенос не увеличивает количество уже перенесённых позиций. Неверная или истёкшая подпись не допускает перенос. После переноса обычная кнопка корзины называется «Оформить».
Корзина и checkout
API использует настоящую Bitrix/FUSER-корзину разрешившего доступ покупателя. POST /api/v1/cart/items принимает product_id и количество ДОБАВЛЯЕМЫХ единиц; PATCH задаёт новое АБСОЛЮТНОЕ количество, ноль удаляет строку. PATCH/DELETE используют item_id строки корзины, не ID товара. Уточняйте поля и границы в OpenAPI. Каталожная цена всегда берётся сервером. Избранное и checkout используют ту же сессию, что сайт; после изменений перечитайте состояние. Не передавайте придуманные delivery/payment ID: выберите опубликованные для текущей корзины варианты get_checkout. UCP create/PUT, напротив, заменяют полный состав line_items — это не дельта REST add.
Не повторяйте неидемпотентное добавление в корзину вслепую после сетевого сбоя — сначала перечитайте корзину. Поддержка Idempotency-Key для отправки заказа не означает идемпотентность всех REST POST.
Заказ: обязательное подтверждение покупателя
- Заполните корзину и checkout. Вызовите
POST /api/v1/orders/prepareс{}и scopeorder:prepare. - Передайте покупателю выданный
confirmation_url: полную сводку и кнопку подтверждения показывает сам Vesremont в исходной браузерной сессии. Текстовое «да» в чате не заменяет этот серверный шаг. Агент не может одобрить заказ своим Bearer token. - После подтверждения вызовите
/api/v1/orders/submitсо scopeorder:submit, неизменным confirmation token и новым случайнымIdempotency-Key. Точное тело указано в OpenAPI. Один подготовленный состав — один ключ. - Повтор запроса допустим только с тем же ключом и тем же телом. При 202/неопределённом исходе не создавайте новую отправку. Сервер сверяет устойчивый маркер заказа; при необходимости требуется операторская проверка.
- Изменение корзины/контактов/доставки/оплаты делает прежнее подтверждение недействительным. Повторите prepare, просмотр и подтверждение.
Сохранённый заказ означает отправленную заявку, не автоматическое согласование цены, доставки или оплаты магазином. API не вызывает платёжный шлюз и не принимает данные банковских карт. Чтение /orders/{order_id} ограничено заказами этой пары покупатель–приложение.
Remote MCP
Документация — отдельный read-only MCP https://vesremont.com/docs/mcp: initialize → notifications/initialized → tools/list → search_docs {"query":"корзина"} или read_docs {"id":"purchase.md"}. Только 15 публичных тем и auth.md/pricing.md из общего manifest; resources/list/read возвращают те же Markdown. Нет buyer token, произвольных URL/файлов, корзины или заказов. Отправляйте запросы без Authorization. Product MCP /mcp сохраняется отдельно.
Пакетное чтение продуктов — POST /api/v1/products/batch с JSON {"product_ids":[375092,375094]} либо MCP tool get_products_batch. Максимум 10 уникальных внутренних ID, прежняя catalog-квота за каждый ID. Результат: items в порядке запроса и missing_ids для отсутствующих/непубличных товаров. Это не snapshot цен, не универсальный HTTP batch и не изменение корзины.
/mcp использует Streamable HTTP версии 2026-07-28, официальный SDK и единый реестр бизнес-операций. Получите перечень через tools/list и схемы inputSchema/outputSchema; он не равен списку 26 browser WebMCP tools. Публичные чтения анонимны, личные tools проверяют отдельный OAuth resource https://vesremont.com/mcp и scopes. Используйте совместимый MCP-клиент, обязательные protocol/method headers и JSON/SSE Accept, а не внутренний browser AJAX.
В MCP Idempotency-Key передаётся аргументом idempotency_key инструмента отправки заказа. Resources содержат только локальную публичную документацию; произвольные URL не загружаются. Наличие tools в списке не заменяет OAuth и покупательское подтверждение.
Последовательность клиента: initialize → notifications/initialized → tools/list или resources/list → вызовы. Сохраняйте выданный Mcp-Session-Id и согласованный Mcp-Protocol-Version; по завершении закройте MCP-сессию DELETE. Session ID не является OAuth-разрешением. Не подделывайте Origin: неизвестный браузерный Origin отклоняется.
resources/list/resources/read возвращают публичные документы и схему каталога с MIME и непустым содержимым. MCP App ui://vesremont/catalog публикуется как text/html;profile=mcp-app; инструменты поиска/товара связывают её через _meta.ui.resourceUri. Это отображение результата в sandbox совместимого клиента, не обход авторизации и не автоматическая покупка. Публичный view — https://vesremont.com/mcp/view: HTTP CSP разрешает embedding только ChatGPT/Claude, connect и внешние JS — только vesremont.com; формы, дочерние frames и inline scripts запрещены. _meta.ui.csp ограничивает host sandbox теми же публичными ресурсами; сама meta CSP не обеспечивает frame-ancestors.
A2A
Agent Card: /.well-known/agent-card.json. Реализован A2A 1.0 HTTP+JSON, POST /a2a/message:send. Передавайте message с уникальным messageId, role: "ROLE_USER" и одной частью parts: {"data":{"operation":"search_products","arguments":{"q":"труборез"}}}. Текстовая часть интерпретируется как поисковый запрос, не как произвольная команда. buyer_guidance возвращает действующие покупательские условия.
Ответ — синхронный Message. Background Tasks, streaming, task push notifications и выдуманный task lifecycle не объявляются. Для личных операций нужны те же права с resource https://vesremont.com/a2a; prepare_order возвращает ссылку покупательского подтверждения, а не обходит его.
UCP 2026-08-25
Business profile: /.well-known/ucp; транспорт REST /ucp/v1. Используйте TLS 1.3, UCP-Agent: profile="https://<ваш-публичный-host>/.well-known/ucp" и уникальный Request-Id. Для POST/PUT обязательны JSON Content-Type и Content-Digest: sha-256=:BASE64(SHA256(raw_body)): по фактически отправляемым байтам. Profile должен соответствовать официальной platform schema и объявлять запрашиваемые capabilities; сервер не выполняет запросы по произвольным URL из profile. Доступность capability определяется пересечением профилей.
Анонимные catalog operations: POST /catalog/search, POST /catalog/lookup, POST /catalog/product относительно /ucp/v1. Параметры и ответы соответствуют схемам UCP указанной версии; product ID передаётся в JSON и является числовым ID Vesremont. Search cursor непрозрачный: не вычисляйте его самостоятельно.
Permalink /buy/{id}:{qty},{id}:{qty} передаёт до 20 товаров (1–99 каждого) в существующий подписанный cart-draft handoff. Link не содержит цены, пользовательские/платёжные данные не импортируются. Поддерживается raw ID или base64url ID с префиксом ~. checkout.destination ограничен локальными публичными страницами Vesremont. Открытие ссылки не создаёт заказ; браузер защищённым POST переносит товары в реальную корзину.
Cart: POST /carts, GET/PUT /carts/{id}, POST /carts/{id}/cancel; OAuth scope dev.ucp.shopping.cart:manage, resource https://vesremont.com/ucp/v1. Это та же настоящая корзина покупателя. Create/PUT используют полную замену line_items, а не добавление дельты; cancel очищает корзину. Все изменяющие UCP-запросы требуют стабильного Idempotency-Key (16–128 символов). Удалённые price/totals отклоняются; товарные ID и количества проверяются по текущему каталогу.
Checkout: POST /checkout-sessions, GET/PUT /checkout-sessions/{id}, POST /{id}/complete и /{id}/cancel внутри /checkout-sessions. Scope dev.ucp.shopping.checkout:manage; для cart_id conversion нужны также cart scope и согласованная cart capability. Переданный cart_id использует текущий состав корзины; пересекающие его line_items/buyer hints не переопределяют состав.
Удалённый complete возвращает requires_escalation и continue_url: покупатель на Vesremont проверяет состав, контакты, реальную сводку и сам отправляет заказ. До этого удалённый запрос заказ не создаёт. Статус completed и order ID появляются только после успешного сохранения в Bitrix; неопределённый результат не считается завершением и не приводит к повторному Save. UCP payment handlers не заявлены: сайта достаточно для выбора доступного способа оплаты, но агент не передаёт card/payment credentials.
Уведомления о заказах
REST subscriptions требуют webhooks:read/webhooks:write, создание — дополнительно orders:read. HTTPS receiver сначала получает подписанный challenge и должен вернуть его; до успешной проверки события не отправляются. Секрет выдаётся один раз в ответе создания и хранится клиентом безопасно.
Standard Webhooks: проверяйте webhook-id, webhook-timestamp, webhook-signature по raw body и HMAC-SHA256; допускайте ограниченное окно времени и дедуплицируйте по event ID. У signing_secret удалите префикс whsec_ и декодируйте base64: ключ — полученные 32 байта. Формат подписи — v1,<base64>, подписываемая строка — <id>.<timestamp>.<raw body>. Не пересериализуйте JSON перед проверкой. При событии webhook.verify ответьте JSON {"challenge":"<значение payload.challenge>"}; для обычных событий — 2xx после устойчивого приёма. Обработку делайте идемпотентной.
Реальные события: order.status_changed, order.cancelled, payment.status_changed; контакты покупателя в payload не входят. Worker наблюдает сохранённые состояния, поэтому не обещает каждое промежуточное изменение. Повторы ограничены; история попыток доступна через deliveries. По умолчанию подписка ограничена сроком разрешения. Более долгий срок возможен только при отдельно включённой политике и явном согласии покупателя; всегда требуется живая исходная сессия. Отзыв прекращает будущие доставки, но не отменяет уже начавшийся HTTP-запрос.
Доставку выполняет штатный worker по cron, а не открытая страница покупателя. Во время challenge/retry покупателю ничего нажимать не требуется. Изменение статуса заказа оператором — отдельное действие только для проверки соответствующего события. После удаления подписки новые события по ней не доставляются. Не создавайте новый заказ ради ожидания webhook.
SDK и CLI
Компактные клиенты версии 0.2.0, лицензия MIT. Runtime-зависимостей нет. Клиенты опубликованы в npm, PyPI, RubyGems и как публичный Go module. Клиенты используют существующий REST API и не включают отключённые функции.
Опубликованные SDK, CLI и MCP-каталог
- npm — @vesremont_api/api: JS/TypeScript SDK и CLI — страница пакета — версия 0.2.0; Node.js 22+.
- PyPI — vesremont-api — версия 0.2.0; Python 3.10+.
- RubyGems — vesremont-api — версия 0.2.0; Ruby 3.3+.
- Go — github.com/oooafganec-dev/vesremont-sdk/go — версия 0.2.0; Go 1.22+.
- Публичный репозиторий SDK и CLI.
- Vesremont в MCP-каталоге Smithery.
- Официальный MCP Registry — com.vesremont/store 1.0.0.
- Vesremont в Glama — владелец домена подтверждён.
CLI vesremont устанавливается из npm-пакета @vesremont_api/api. MCP можно подключить напрямую по https://vesremont.com/mcp; установка SDK для этого не нужна. В официальном MCP Registry сервер опубликован как com.vesremont/store, версия 1.0.0; Smithery и Glama — отдельные каталоги того же сервера. В Glama подтверждено владение доменом Vesremont. Запись реестра не заменяет согласие покупателя и не подтверждает балл Ora. Установка и примеры, discovery и авторизация.
Конфигурации Claude Code, Cursor, Windsurf и skills
- Claude Code — .mcp.json
- Claude Code — правила SDK
- Cursor — .cursor/mcp.json
- Windsurf — правила SDK
- Windsurf — пример пользовательской MCP-конфигурации
- Инструкция подключения и доверия клиенту
- vesremont-product-discovery — публичный поиск товара
- vesremont-session-shopping — работа в браузерной сессии
- vesremont-buyer-guidance — условия и сопровождение покупателя
Это реальные файлы официального репозитория, не автоматическая установка и не подтверждение листинга skills.sh. Проверьте конфигурацию перед подключением. Windsurf использует пример пользовательской настройки, не проектный .windsurf/mcp.json. Правила SDK не дают доступа к покупателю; browser skill не заменяет remote OAuth. Канонические сценарии и контрольные суммы: Agent Skills index.
Альтернативные прямые загрузки
- JS/TypeScript SDK и CLI — Node.js 22+.
- Python SDK (wheel) — Python 3.10+.
- Python SDK (исходники) — Python 3.10+.
- Go SDK (исходный модуль) — Go 1.22+.
- Ruby SDK — Ruby 3.3+.
Сохранены прежние файлы для прямой установки; инструкции находятся в README каждого архива. Для установки из реестров используйте опубликованные имена и команды ниже.
Установка из опубликованных реестров
npm install @vesremont_api/api@0.2.0
npm install -g @vesremont_api/api@0.2.0
python -m pip install vesremont-api==0.2.0
gem install vesremont-api --version 0.2.0
go get github.com/oooafganec-dev/vesremont-sdk/go@v0.2.0
vesremont --help
Node SDK: ESM и TypeScript declarations; import из @vesremont_api/api. Python wheel устанавливается без компиляции; setuptools 77+ нужен только для сборки sdist. Ruby: require 'vesremont_api', класс Vesremont::Client. Go: import github.com/oooafganec-dev/vesremont-sdk/go; модуль опубликован тегом go/v0.2.0. Используйте точные опубликованные имена из команд установки выше.
SDK предоставляют status, поиск, товар, чтение корзины, cart-draft и общий request для остальных опубликованных REST-операций. Точные примеры — в README каждого пакета. CLI: status, search, product, cart-link, cart, request. cart --login использует текущий OAuth PKCE, scope cart:read и loopback callback на внешнем ПК; токен хранится в памяти одной команды и затем отзывается. Для собственных последовательностей используйте ранее полученный REST Bearer token (CLI: VESREMONT_ACCESS_TOKEN). Python SDK принимает токен, но не дублирует интерактивный мастер OAuth.
import { VesremontClient } from '@vesremont_api/api';
const api = new VesremontClient();
const products = await api.search('труборез', { page: 1, per_page: 10 });
const product = await api.product(375094);
const draft = await api.cartDraft(375094, 1);
// Передайте draft.share_url покупателю; не публикуйте его в общих логах.
from vesremont_api import VesremontClient
api = VesremontClient()
products = api.search('труборез', page=1, per_page=10)
product = api.product(375094)
draft = api.cart_draft(375094, 1)
vesremont search "труборез"
vesremont product 375094
vesremont cart-link 375094 1
vesremont cart --login
Общий метод SDK request принимает путь относительно /api/v1. JS: api.request('GET', '/catalog/filters', {query: {section_id: 7531}}); Python: api.request('GET', '/catalog/filters', query={'section_id': 7531}). Для связанных личных запросов создайте JS-клиент с {token} или Python-клиент с token=...; токен должен принадлежать REST resource и иметь необходимые scopes. Получайте credentials из защищённой среды, не из исходника.
Нет автоматических повторов запросов и переходов по redirect. Записи CLI требуют --write; submit требует стабильного Idempotency-Key, prepare и подтверждения покупателя на сайте. Использовать с внешнего ПК/хостинга, не с сервера Vesremont. CLI работает с production; синтетический read-only пример доступен отдельно по /oauth/sandbox, не для пробных заказов. Для подключения MCP используйте прямой endpoint и его discovery descriptor; установка SDK не требует регистрации в MCP Registry.
Границы контракта
Покупательские вызовы относятся к настоящему магазину. Только /oauth/sandbox — отдельный синтетический read-only пример; тестовых заказов он не создаёт. REST и удалённые протоколы не предоставляют доступ к произвольным файлам, SQL, внутреннему AJAX или запуску кода. Для MCP используйте discovery descriptor и прямое подключение. Отзывы можно читать, но публичный REST не предоставляет отправку отзывов или медиа. Вопросы безопасности: security.txt.
После подключения: поиск → проверка товара; для записи — порядок оформления. Для изменения интеграции читайте changelog, а не исторические ограничения из прежнего отчёта. API-квоты не описывают стоимость конкретного товара.
Товары для ремонта и дома — купить в интернет-магазине Vesremont
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Понять, что продаёт Vesremont, выбрать способ поиска, фильтрации и передачи подборки либо найти покупательские условия.
Что нужно на входе: Артикул, задача подбора или вопрос о магазине. Для публичного поиска и ссылки на корзину личный доступ не нужен.
Результат: Краткая инструкция с источником и выбранный маршрут; не обещание цены, добавления в личную корзину или создания заказа.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Поиск по сайту — найти конкретный товар · Навигация по каталогу — выбрать раздел · Фильтры и диапазоны — сузить подборку · Данные карточки товара — проверить карточку и ID · Корзина и оформление — передать подборку или оформить с подтверждением · Public API — сверить точный контракт API · Доставка и оплата — уточнить получение, оплату и возврат.
Где купить товары для ремонта и дома? В Vesremont можно выбрать инструмент, электрику, стройматериалы и сантехнику, узнать цены, наличие, доставку и самовывоз.
О Vesremont
Товары для дома, ремонта, строительства и профессиональных задач.
В каталоге Vesremont представлены инструмент, электрика и свет, строительные и расходные материалы, крепёж, сантехника, товары для дома, офиса и сада, станки, спецодежда и СИЗ, климатическое, складское, строительное и автосервисное оборудование, а также товары для спорта и туризма. Выберите нужный раздел выше или найдите товар по названию, бренду, модели или артикулу.
Каталог
Основные группы товаров: инструмент, электрика и свет, строительные и расходные материалы, крепёж, сантехника, товары для дома, офиса и сада, станки и оборудование, спецодежда и СИЗ, товары для спорта и туризма.
- Открыть каталог
- Найти товар: поиск по названию, категории, бренду, модели или артикулу.
- Открыть список брендов
Цены, остатки, возможность заказа, фильтры и состав выдачи являются динамическими. Их следует проверять на актуальной странице каталога или товара.
Актуальная цена относится к конкретному товару и указывается в текущем каталоге и карточке товара; перед подтверждением заказа её нужно повторно проверить в корзине.
Быстрый старт для AI: от поиска к проверенному действию
Найти товар по артикулу или названию
Для точного артикула начните с публичного поиска. В HTML используется параметр search, в REST и Markdown — q. Значение кодируйте как параметр URL. Сверьте артикул, модель и комплектацию среди результатов; похожее название не подтверждает совпадение. Если вариантов несколько, уточните товар, а не выбирайте первый.
GET /api/v1/products?q={артикул}&per_page=5GET /api/v1/products.md?q={артикул}&per_page=5GET /search/?search={артикул}- Документация Vesremont API: быстрый старт, OpenAPI, MCP и SDK
- Пример поиска артикула в Markdown
- Поиск: форматы, ограничения и альтернативы
Открыть карточку и получить product_id
Берите внутренний id из items[] ответа поиска, а ссылку на карточку — из опубликованного результата. В HTML карточки блок «Для AI-систем» содержит product_id и готовую ссылку на корзину. Артикул, product_id и ID строки личной корзины — разные значения. Для проверки товара используйте карточку или её публичное Markdown-представление; не извлекайте ID из предположений о URL.
GET /api/v1/products/{product_id}GET /api/v1/products/{product_id}.md- Карточка, идентификаторы и характеристики
- Как понимать цену и наличие
Подобрать товары через фильтры
Сначала выберите раздел каталога или бренд. На HTML-странице используйте опубликованные ссылки фильтров и диапазоны текущего раздела. Для REST получите доступные фильтры с section_id либо brand_id: их ID, значения и границы зависят от выбранного контекста. Передавайте filters одним URL-кодированным JSON-объектом по OpenAPI. Не переносите HTML-сегменты URL в REST и не придумывайте значения фильтров.
GET /api/v1/catalog/filters?section_id={section_id}GET /api/v1/catalog/filters?brand_id={brand_id}GET /api/v1/products?section_id={section_id}&filters={URL-кодированный JSON}- Выбрать раздел каталога
- Индекс документации каталога
- Индекс документации брендов
- Разделы и списки товаров
- Фильтры, диапазоны и сброс
- Только HTML: правила URL
- Точная схема REST filters
Работать с API-поиском
Каталог читается без cookies, API key, OAuth и установки SDK. Параметры q, section_id, brand_id, filters, sort и пагинацию передавайте по схеме REST. page начинается с 1, per_page — не более 100; выданный cursor используйте без изменения. При слишком широком поиске уточните запрос или раздел. Если ваш клиент не читает JSON, используйте products.md либо HTML-поиск: это ограничение формата клиента, а не отсутствие API.
GET /api/v1/products?q={запрос}&page=1&per_page=10- Первый запрос JSON без регистрации
- Тот же каталог в Markdown
- API: параметры, ошибки и протоколы
- Read-only sandbox: синтетические данные
Передать покупателю ссылку на корзину
После проверки товара передайте опубликованную ссылку /buy/{product_id}:{quantity} либо получите share_url через cart-drafts. Для этого не нужны вход, cookies или OAuth. GET агента не изменяет личную корзину: перенос выполняется на сайте покупателя защищённым POST с повторной проверкой цены и доступности. Подготовленная ссылка не означает, что товар уже добавлен, оплачен или заказан.
GET /api/v1/cart-drafts/?product_id={product_id}&quantity={quantity}- Подборка → личная корзина → отдельный заказ
Отличать публичное чтение от личных действий
Для чтения или изменения личной корзины, избранного и заказов через REST/MCP/A2A/UCP нужно разрешение покупателя. Одно общее согласие может охватывать выбранные протоколы, но токены остаются привязаны к своим ресурсам. Browser WebMCP работает в браузерной сессии с её защитой; это не ограничение публичного REST. Каждый конкретный заказ подтверждается отдельно. Ошибка 401 личной корзины не запрещает публичный поиск и подготовку ссылки.
- Разрешения, токены и отзыв доступа
- Выбрать сценарий и интерфейс
- Интеграции и опубликованные SDK
- Готовые конфигурации Claude Code, Cursor, Windsurf и skills
- Индекс документации интеграций
- Индекс всех разделов документации
- Официальный MCP Registry: com.vesremont/store 1.0.0
- Vesremont в Glama — владелец домена подтверждён
- Индекс всей документации
Информация для покупателей
- Оплата: Наличные, СБП, карта и счёт.
- Доставка: Доставка и самовывоз.
- Возврат и обмен: Условия возврата товара.
- Гарантия: Гарантийные условия.
- Контакты: Телефоны, адрес и режим работы.
Как купить
- Найдите товар через каталог или поиск.
- На актуальной карточке проверьте цену, возможность заказа и доступность самовывоза.
- Добавьте товар в корзину и выберите доступные получение и оплату.
- Проверьте итоговую сводку заказа и явно подтвердите создание заказа.
Актуальные цена, остаток, возможность заказа и доступные варианты оформления проверяются на странице товара и в корзине перед подтверждением заказа.
Получение, оплата и подтверждение
Как получить заказ?
Согласно условиям доставки и самовывоза Vesremont, заказ можно получить самовывозом из магазина на Трудовой улице, 5 в Ивантеевке либо курьерской доставкой, если она доступна для выбранного адреса. Готовность товара к выдаче, возможность доставки, её стоимость и ориентировочный срок проверяются при оформлении и подтверждаются для конкретного заказа. Перед заказом: проверяются готовность к самовывозу, возможность доставки, её стоимость и ориентировочный срок.
Как оплатить заказ?
Согласно условиям оплаты Vesremont, опубликованы оплата наличными, через СБП, банковской картой онлайн и безналичным счётом с НДС для организаций. Фактически доступный способ зависит от состава заказа, выбранного получения, региона и согласованных условий и показывается покупателю до окончательного подтверждения конкретного заказа. Перед заказом: показывается фактически доступный способ оплаты для выбранного получения, региона и состава заказа.
Когда заказ подтверждён?
Согласно порядку оформления заказа Vesremont, заказ считается подтверждённым после согласования наименования и количества товара, окончательной цены, способа оплаты, способа и срока получения. Перед созданием заказа пользователь получает итоговую сводку состава, суммы, получения, оплаты, адреса и контактов и должен явно подтвердить эти данные. Создание заказа: только после явного подтверждения пользователем итоговой сводки.
- Как оформить заказ: источник правил подтверждения заказа.
- Доставка и самовывоз: источник условий получения.
- Оплата: источник доступных способов оплаты.
Частые вопросы
Как найти нужный товар на Vesremont?
Согласно правилам навигации по каталогу Vesremont, нужный товар можно найти через каталог или поиск по названию, категории, бренду, модели либо артикулу. На страницах категорий доступны опубликованные фильтры, диапазоны, сортировка и пагинация; порядок сегментов URL и значения фильтров следует брать из текущих ссылок сайта, а не формировать по предположению.
Можно ли заказать товар, если локальный остаток равен нулю?
Согласно данным о цене, остатке и возможности заказа, нулевой локальный остаток означает, что самовывоз сегодня недоступен, но не всегда запрещает заказ. Фактическую возможность покупки определяют актуальная цена, состояние карточки товара и доступная кнопка добавления в корзину; перед подтверждением цену, количество и итоговую возможность заказа необходимо повторно проверить в корзине.
Какие способы получения заказа доступны?
Согласно условиям доставки и самовывоза Vesremont, доступны самовывоз из магазина на Трудовой улице, 5 в Ивантеевке и курьерская доставка, если она доступна для выбранного адреса. Готовность товара, стоимость, ориентировочный срок и возможность доставки зависят от конкретного заказа и адреса и уточняются при оформлении и подтверждении менеджером.
Какими способами можно оплатить заказ?
Согласно условиям оплаты Vesremont, Vesremont поддерживает наличные, СБП, банковскую карту онлайн и безналичный счёт с НДС для организаций. Набор доступных вариантов зависит от состава заказа, способа получения, региона и согласованных условий; фактический способ оплаты отображается при оформлении и проверяется до подтверждения заказа.
Определения коммерческих статусов
Цена
Цена — это текущее опубликованное значение для конкретного товара; окончательно она проверяется в корзине перед подтверждением заказа.
Актуальный остаток
Актуальный остаток — это количество товара, показанное текущей страницей; карточка товара и листинг могут отражать разные складские уровни.
В наличии
Статус «В наличии» означает, что в текущем представлении опубликован положительный остаток товара; условия получения всё равно проверяются при оформлении.
Под заказ
Статус «Под заказ» означает, что в листинге нет положительного локального остатка, но товар может оставаться доступным для заказа при наличии цены и активной кнопки покупки.
Самовывоз сегодня
Статус «Самовывоз сегодня» означает, что карточка товара публикует положительный локальный остаток и признак доступности самовывоза сегодня.
Как выбрать товар и подготовить заказ
Памятка для покупки инструмента, материалов и товаров для дома: что сверить в карточке, корзине и при получении. Полный порядок покупки — в инструкции по оформлению заказа.
1. Подберите модель под задачу
Начните с каталога или поиска: название модели и артикул помогут отличить похожие товары. В категории сравните нужные характеристики, а затем откройте карточку выбранной позиции. Для инструмента проверьте питание, размеры и совместимость с расходниками; для крепежа и материалов — назначение и единицу продажи. Совпадение бренда или фотографии не означает одинаковую комплектацию. Если важный параметр не указан либо допускает разные трактовки, уточните его до оформления заявки, а не выбирайте аналог только по внешнему сходству.
2. Сверьте характеристики и комплект
В карточке читайте название, описание, характеристики и комплектацию вместе. Фотография помогает увидеть товар, но не заменяет сведения изготовителя: аксессуар на иллюстрации не обязательно входит в поставку. Перед покупкой аккумуляторного инструмента отдельно проверьте, входят ли аккумулятор и зарядное устройство. При подборе заменяемой детали сравните размеры и совместимость с вашим оборудованием. Отзывы и вопросы полезны для уточнения опыта применения, однако характеристики выбранной модели и ответ продавца важнее предположений о похожем товаре.
3. Проверьте количество, цену и наличие
Добавьте нужные позиции в корзину и проверьте каждую строку: модель, количество и текущую стоимость. Не подменяйте количество единиц числом упаковок, если в карточке указана другая единица продажи. Цена в сохранённой подборке, старом снимке экрана или ответе помощника не фиксирует условия покупки. Остаток и доступность товара могут измениться, поэтому перед отправкой заявки перечитайте актуальную корзину. Если требуется больше товара, чем показано в наличии, согласуйте возможность поставки с магазином; не рассчитывайте на автоматическое резервирование при открытии страницы.
4. Выберите получение и оплату
Посмотрите условия доставки и самовывоза, затем проверьте доступные варианты для своего заказа. Для доставки укажите точный адрес и контактный телефон; доступность, стоимость и срок зависят от состава заказа и места получения. Для самовывоза дождитесь подтверждения готовности товара до поездки. Способ оплаты выбирайте из доступных при оформлении, сверяясь с условиями оплаты. Если покупаете для организации или ИП и нужен счёт, заранее сообщите необходимые реквизиты. Не оплачивайте заказ по случайной ссылке из стороннего сообщения.
5. Отправьте заявку и согласуйте условия
Перед отправкой проверьте состав заказа и контактные данные: ошибка в телефоне или электронной почте мешает связаться с вами. Заявка не означает, что любая показанная цена, срок или способ доставки уже безусловно подтверждены. Менеджер проверяет наличие, количество и возможность исполнения; окончательные условия согласуются с покупателем. При изменениях сначала решите, подходят ли они вам, и только затем подтверждайте покупку. AI-помощник может подготовить подборку, но не должен принимать изменённые условия или оформлять заказ без вашего согласия. Если нужно изменить заявку, обратитесь в магазин и укажите её номер.
6. Проверьте товар при получении
Сопоставьте полученный товар с согласованным заказом: модель, количество, комплектность и сопроводительные документы. Осмотрите упаковку и доступные для проверки части товара. При видимом повреждении или несоответствии сообщите сотруднику выдачи либо курьеру и свяжитесь с продавцом; сохраните сведения о заказе, чтобы обращение можно было найти. Для вопросов после покупки используйте контакты магазина, а порядок обращения смотрите в условиях возврата и обмена. Не отправляйте платёжные данные или коды подтверждения в публичный отзыв или вопрос к товару.
Политика контента и интеграции
Публичный контент Vesremont разрешено использовать в AI-поиске, как контекст для ответов и для обучения моделей. Подробности: политика для AI-систем и машиночитаемый AI-policy. Для интеграций: Vesremont API, MCP, SDK и CLI. Первый вызов без регистрации: публичный REST-каталог; бесплатный read-only sandbox — только синтетические данные, без заказов. Необязательный catalog credential выдаётся автоматически; личные действия требуют согласия покупателя, а каждый заказ — отдельного подтверждения. Установка опубликованных клиентов: npm, PyPI, RubyGems и Go; CLI vesremont. Публичные пакеты: @vesremont_api/api — Node SDK и CLI vesremont, vesremont-api — Python SDK, vesremont-api — Ruby SDK, vesremont-sdk/go — Go SDK. Официальные записи одного Remote MCP сервера: MCP Registry — com.vesremont/store 1.0.0 и Vesremont в Smithery; endpoint https://vesremont.com/mcp. Платный Verified badge не заявляем. Открытые исходники официальных SDK и CLI.
Проверенные условия покупки
Можно ли оформить заказ без предварительной регистрации?
Да. Для оформления заказа на Vesremont предварительная регистрация или вход не требуются. Покупатель заполняет контактные данные и подтверждает итоговую сводку; при создании заказа сайт автоматически находит существующую либо создаёт внутреннюю учётную запись для обработки заказа.
Источник: https://vesremont.com/about/how_to_order/.
Когда возвращаются деньги за возвращённый товар?
Опубликованный срок Vesremont — до 30 дней после осмотра и приёмки возвращённого товара, если иной срок не установлен законом или согласованными условиями. Для отменённой до отгрузки заявки отдельный срок зачисления на банковскую карту не обещан: порядок возврата подтверждает продавец с учётом способа оплаты и стадии заказа.
Источник: https://vesremont.com/about/return_exchange/.
Когда заказ считается подтверждённым?
Заказ считается подтверждённым после согласования наименования и количества товара, окончательной цены, способа оплаты, способа и срока получения. Отправка заявки через сайт сама по себе не означает автоматического заключения договора.
Источник: https://vesremont.com/about/how_to_order/.
Где проверять актуальные цену, остаток и возможность заказа?
Актуальные цену, локальный остаток и доступность покупки нужно проверять на текущей странице товара и затем в корзине. Нулевой локальный остаток исключает самовывоз сегодня, но не всегда исключает возможность заказа.
Источник: https://vesremont.com/llms/availability.md.
Можно ли изменить адрес, дату или способ получения после оформления заявки?
До подтверждения заказа заявку можно изменить, связавшись с Vesremont. После подтверждения изменение состава, количества, оплаты или получения возможно только по согласованию с продавцом; новый адрес, дата или интервал не считаются принятыми, пока менеджер их не подтвердил.
Источник: https://vesremont.com/about/how_to_order/.
Доступна ли доставка во все регионы России?
Vesremont не публикует обещание доставки во все регионы России. Возможность, стоимость и срок курьерской доставки зависят от населённого пункта, адреса, габаритов и веса заказа и подтверждаются при оформлении менеджером.
Источник: https://vesremont.com/about/delivery_info/.
Как определяется срок гарантии?
Гарантийный срок определяется для конкретного товара по документам изготовителя или продавца: гарантийному талону, инструкции, документации, договору либо описанию товара. Единого срока для всего каталога Vesremont нет.
Источник: https://vesremont.com/about/warranty/.
К кому обращаться по гарантии?
Покупатель обращается в Vesremont по телефону, электронной почте или через магазин и пункт выдачи. Продавец принимает обращение и при необходимости организует проверку качества или экспертизу; прямое обращение к изготовителю не заявлено как обязательный первый шаг.
Источник: https://vesremont.com/about/warranty/.
Где проверять наличие инструкции и гарантийных документов?
Наличие инструкции, гарантийного талона и другой сопроводительной документации проверяется при получении товара, если такие документы предусмотрены изготовителем. Универсальный отдельный архив инструкций и сертификатов для всего каталога Vesremont не опубликован.
Источник: https://vesremont.com/about/warranty/.
Можно ли подписаться на уведомление о поступлении товара?
Нет. Vesremont сейчас не предоставляет отдельную подписку на уведомление о поступлении. Актуальный остаток и возможность заказа нужно повторно проверять на странице товара, в каталоге или уточнять у магазина.
Источник: https://vesremont.com/about/how_to_order/.
Полезные ссылки
- Главная Vesremont
- Корзина
- Избранное
- Контакты
- AI-документация
- Политика использования контента AI-системами
Публичный контент Vesremont разрешено использовать в AI-поиске, как контекст для ответов и для обучения моделей. Служебные URL и пользовательские действия регулируются фактическими правилами сайта и требуют серверной проверки.
Каталог Vesremont
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Выбрать раздел и получить подходящий список товаров.
Что нужно на входе: Категория или опубликованный URL каталога; для артикула быстрее поиск.
Результат: Список товаров и доступные именно для него фильтры, сортировка и продолжение списка.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Фильтры и диапазоны — сузить подборку по характеристикам · Данные карточки товара — проверить выбранную модель · Поиск по сайту — найти известный артикул вместо обхода категорий.
Удалённый каталог
Для программного чтения используйте GET /api/v1/products, /api/v1/products/{product_id}, /api/v1/brands и /api/v1/catalog/filters. Каталог также доступен через Remote MCP, A2A и UCP. Публичные чтения не требуют OAuth; схемы, параметры, пагинация и scopes личных действий — в Public API и OpenAPI. URL HTML-фасетов не являются параметрами REST: используйте опубликованные ID и типы фильтров.
Структура
/catalog/ — корень каталога. Категории, подкатегории, бренды и часть фасетных значений представлены валидированными путями под /catalog/. Товар имеет путь, начинающийся с /catalog/product/.
Каталог серверно рендерит:
- хлебные крошки и ссылки на родительские разделы;
- дочерние категории;
- выбранные фильтры и ссылки сброса;
- категориальные фасеты как
a[href]; - числовые диапазоны как number/range inputs с
data-*контрактом; - карточки товаров как ссылки;
- сортировку и пагинацию как ссылки.
JavaScript перехватывает клики для AJAX-обновления, но опубликованные href остаются полноценными URL и открываются напрямую.
Рекомендуемый алгоритм агента
- Откройте
/catalog/либо подходящий URL из sitemap. - Переходите по ссылкам категорий до нужного раздела.
- Для категориального фильтра используйте точный
hrefего значения. - Для range прочитайте контейнер
[data-filter-type="range"], затем постройте query по правилам диапазонов. - После каждого перехода заново читайте актуальные фасеты, количества и ссылки: они зависят от текущей комбинации.
- Откройте товар по ссылке карточки и проверьте цену, остаток и возможность заказа на самой карточке.
Важное ограничение пути
Пользовательская механика размещает до трёх валидных символьных кодов в path, а дополнительные значения — в повторяемых filter query-параметрах. Порядок path-сегментов выбирается из актуальных серверных данных каталога и валидируется сервером. Поэтому самостоятельно переставлять или соединять символьные коды нельзя: используйте готовые href текущей страницы.
Отзывы категории
Для валидного состояния каталога может существовать страница {catalog-url}otziv/. На ней доступны отзывы товаров выбранной категории/фасетного состояния. Query-параметры этой страницы описаны в URL-грамматике.
Правила AI-блока на страницах магазина
Эти правила и блок на сайте формируются из одного источника. Числа в фигурных скобках — обозначения, не реальные ID.
Каталог и фильтры
Вы на странице раздела или отфильтрованной подборки. Используйте опубликованные ссылки подкатегорий, товаров и пагинации; не угадывайте URL и ID. Для известного артикула быстрее поиск, для подбора — каталог.
Как уточнить подборку
Берите значения, диапазоны и ссылки фильтров из текущей страницы. После изменения перечитайте список и выбранные фильтры. Для REST сначала GET /api/v1/catalog/filters?section_id={section_id} либо ?brand_id={brand_id}, затем GET /api/v1/products с тем же контекстом и filters — одним URL-кодированным JSON-объектом по схеме. HTML-сегменты URL не являются REST-параметрами. Фильтры и диапазоны · HTML URL · OpenAPI.
Из листинга в карточку
Откройте ссылку нужного товара. В нижнем блоке карточки «Для AI-систем» указаны внутренний product_id, данные для текстового клиента и готовая ссылка на корзину, если доступно оформление. Не подставляйте артикул, ID бренда/раздела или строки корзины вместо product_id. Сверьте модель, текущую цену и возможность заказа в карточке; совпадение фотографии недостаточно. Правила карточки · Цена и наличие.
Если товар не найден
Публичный поиск без регистрации: GET /api/v1/products?q={артикул}&per_page=5. Числовой items[].id — ID товара. Если клиент не читает JSON, используйте /api/v1/products.md?q={артикул} или /search/?search={артикул}. Сверьте точное совпадение; несколько подходящих вариантов требуют уточнения. Пример Markdown-каталога · Поиск · API.
Передать корзину
Передайте опубликованную в карточке ссылку /buy/{product_id}:{quantity} либо получите share_url через GET /api/v1/cart-drafts/?product_id={product_id}&quantity=1. Вход, cookies, API-ключ и OAuth для подготовки ссылки не нужны. GET корзину не меняет. Когда покупатель откроет ссылку, сайт защищённым POST-запросом перенесёт товар в его корзину и заново проверит текущую цену и наличие. Заказ при этом не оформляется, а доступа к чужой корзине ссылка не даёт. Перенос подборки и оформление.
Личные операции отдельно
Для чтения или изменения личной корзины через REST, MCP, A2A или UCP нужно отдельное разрешение покупателя. Общее разрешение агенту не подтверждает конкретный заказ: его состав и сумму покупатель подтверждает отдельно. Выбрать сценарий · Разработчикам.
URL-грамматика Vesremont
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Правильно продолжить навигацию по опубликованному HTML URL.
Что нужно на входе: Реальный href/canonical и значения текущих фильтров. Символические пути каталога нельзя угадывать.
Результат: Корректный URL следующего состояния; HTML query не переносится в REST schema.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Фильтры и диапазоны — получить допустимые значения · Поиск по сайту — найти страницу заново при неизвестном пути · Public API — использовать отдельный контракт программного интерфейса.
URL программных интерфейсов
REST использует /api/v1 без завершающего slash у маршрутов; отдельный /api/v1/cart-drafts/ сохраняет slash. OpenAPI: /openapi.json и /.well-known/openapi.json. Remote MCP: /mcp; A2A: /a2a/message:send; UCP: /ucp/v1. Discovery: /.well-known/api-catalog, /.well-known/mcp.json, /.well-known/agent-card.json, /.well-known/ucp. OAuth metadata: /.well-known/oauth-authorization-server. Не дописывайте slash, index.php или HTML-параметры к API URL. Контракт: Public API.
Ниже описан фактический протокол, который обрабатывают серверная часть и JavaScript сайта. В примерах {...} означает переменную часть, а не буквальный текст.
Страницы
| Назначение | Паттерн |
|---|---|
| Корень каталога | /catalog/ |
| Валидное состояние каталога | /catalog/{validated-path}/ |
| Товар | /catalog/product/{section-code}/{product-code}/ |
| Бренд | /catalog/brand/{brand-code}/ |
| Все бренды | /brand/ |
| Поиск | /search/?search={url-encoded-text} |
| Отзывы состояния каталога | /catalog/{validated-path}/otziv/ |
| Корзина | /personal/basket/ |
| Передать товары покупателю без OAuth | /buy/{product_id}:{quantity} |
| Подписать подборку, получить share_url | /api/v1/cart-drafts/?product_id={id}&quantity={qty} |
/buy/ использует внутренний ID товара, не артикул или ID строки корзины. Конкретная ссылка публикуется в видимом тексте карточки. Это документированное исключение к запрету угадывать catalog path: меняется только количество 1–99 у известного ID. Несколько товаров: /buy/{id1}:{qty1},{id2}:{qty2}, до 20 разных ID. Сайт выполняет защищённый перенос при открытии покупателем, а не запись одним GET агента. Порядок переноса.
{validated-path} и оба кода товарного URL проверяются сервером по актуальному набору валидных URL. Не конструируйте и не переставляйте их сегменты без готового href, canonical или URL из sitemap.
Категориальные фасеты
Дополнительное значение передаётся повторяемым параметром:
filter={facet-value-code}
Несколько разных групп:
?filter={code-1}&filter={code-2}
Коды чувствительны к фактическим данным каталога. Получайте их из data-filter-value-code и используйте опубликованный href; не выводите код из видимого названия. Штатный интерфейс переключает значение внутри одной группы и комбинирует значения разных групп.
Числовые диапазоны
range={filter-id}_s_o_{min}-e_d_{max}
Фактический синтаксис содержит подчёркивание после ID, не знак =. ID, min и max — неотрицательные целые числа; текущий HTML задаёт step="1". Несколько диапазонов — повторяемые параметры:
?range={id-1}_s_o_{min-1}-e_d_{max-1}&range={id-2}_s_o_{min-2}-e_d_{max-2}
filter-id=1 зарезервирован реализацией для цены. Остальные ID обозначают числовые характеристики и должны присутствовать на текущей странице. Сервер отбрасывает неизвестные ID и корректирует выходящие за доступные границы значения.
Реальный пример существующего формата:
/catalog/krepyezh/?range=1_s_o_82704-e_d_476950&range=4283_s_o_398-e_d_1437
Сортировка товаров
sorts=id_sort
sorts=price_min
sorts=price_max
id_sort— штатный порядок «Новинки»; UI обычно удаляет параметр и использует его как default.price_min— сначала дешевле.price_max— сначала дороже.
Параметр sort в robots.txt — старое SEO-правило и не является интерфейсом текущего каталога. Используется именно sorts.
Пагинация товаров
page={positive-integer}
page=1 является начальным состоянием и обычно удаляется генератором ссылок. Ссылки пагинации публикуются в HTML. Изменение фасета или range сбрасывает page; смена сортировки может сохранить текущую страницу.
Комбинация query
Поддерживается совместное использование повторяемых filter, повторяемых range, одного sorts и одного page, например:
/catalog/{validated-path}/?filter={code}&range={id}_s_o_{min}-e_d_{max}&sorts=price_min&page=2
Порядок query-параметров не является смысловым. При кодировании используйте обычный percent-encoding; не кодируйте разделители _s_o_, -e_d_, & и = как часть значений вручную.
Отзывы категории
На URL с окончанием /otziv/ обрабатываются:
otziv_sort=old|rating_high|rating_low; отсутствие параметра означает сначала новые;otziv_rating=1|2|3|4|5;otziv_media=1;otziv_offset={positive-integer}для следующей пачки;- те же
filterиrange, что определяют исходное состояние категории.
Кнопки отзывов сейчас изменяют эти параметры через JavaScript. Агент может построить URL по указанным допустимым значениям.
Поиск
GET /search/?search={text}
Других публичных query-параметров, сортировки или пагинации у страницы поиска текущая реализация не предоставляет.
Фильтры каталога
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Сузить выбор, не смешивая HTML-фасеты и параметры API.
Что нужно на входе: Текущий раздел/бренд и его опубликованные фильтры; ID и допустимые границы берутся с сайта.
Результат: Проверенная подборка с выбранными характеристиками; после изменения фильтра перечитывается список.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — сравнить характеристики кандидатов · URL и параметры — собрать допустимое состояние HTML-каталога · Навигация по брендам — ограничить подборку производителем.
Фильтры REST и удалённых протоколов
Сначала запросите GET /api/v1/catalog/filters с section_id либо brand_id. Используйте возвращённые ID, типы, значения и границы; не переносите URL HTML-фасетов в REST. Для GET /api/v1/products параметр filters — один URL-encoded JSON object. Список сортировок и структура запроса определены в OpenAPI. MCP/A2A используют схемы реестра операций, UCP — собственную catalog schema. Полный контракт.
Соответствие сортировок
| Порядок | HTML URL | REST search_products | Browser WebMCP set_catalog_sort |
|---|---|---|---|
| Штатный | без sorts | sort=id_sort | sort=default |
| Цена по возрастанию | sorts=price_min | sort=price_min | sort=price_asc |
| Цена по убыванию | sorts=price_max | sort=price_max | sort=price_desc |
Это разные имена одного выбранного порядка в разных интерфейсах. Browser-инструмент сам преобразует свой enum в HTML URL; параметры sorts и sort не взаимозаменяемы. UCP использует собственную схему, не эту REST-таблицу. После перехода перечитайте результаты.
Категориальные фильтры
Каждая группа имеет контейнер:
<div data-filter-type="categorical"
data-filter-id="..."
data-filter-name="...">
Значения представлены ссылками со следующими атрибутами:
href— готовое следующее состояние; это основной интерфейс;data-filter-idиdata-filter-name— группа;data-filter-value-id— внутренний ID значения;data-filter-value-code— символьный код URL;data-checked="true|false"— текущее состояние;- видимые имя и количество подходящих товаров.
Используйте href, потому что сервер может переместить значение между path и повторяемым filter=..., а также нормализовать порядок path-сегментов.
Диапазонные фильтры
Контейнер диапазона публикует:
<div data-filter-type="range"
data-filter-id="4283"
data-filter-name="Длина"
data-range-min="1"
data-range-max="2000"
data-range-step="1"
data-range-selected-min="398"
data-range-selected-max="1437">
Number inputs дополнительно содержат data-filter-id и data-range-bound="min|max". Значения формируются из тех же серверных данных, что и UI, и обновляются после AJAX-навигации.
Алгоритм для запроса «длина 500–1000»:
- Найдите range-контейнер с
data-filter-name="Длина". - Прочитайте его ID, допустимые min/max и step.
- Ограничьте запрос пользователя опубликованными границами и соблюдайте step.
- Удалите существующий
rangeс тем же ID. - Добавьте
range={id}_s_o_500-e_d_1000. - Удалите
page, потому что набор результатов изменился. - Откройте URL и проверьте новые
data-range-selected-*.
Если выбран полный опубликованный диапазон, штатный UI удаляет соответствующий range из URL.
Несколько фильтров
- Разные категориальные группы комбинируются.
- Разные range ID комбинируются повторяемыми
range. - Категориальные и range фильтры комбинируются между собой.
- UI предполагает переключение, а не множественный выбор нескольких значений одной категориальной группы.
Сброс
Активные категориальные значения и группы имеют ссылки сброса. Активный range имеет ссылку, которая удаляет только параметр соответствующего ID. Предпочитайте эти ссылки ручному редактированию сложного path.
Динамичность
Допустимые значения, количества и границы зависят от выбранной категории и остальных фильтров. Не кэшируйте их как глобальный справочник и не переносите ID между несвязанными страницами без повторной проверки HTML.
В WebMCP сначала вызывайте get_catalog_filters без filterId: он возвращает до трёх групп, nextOffset и выбранные значения. Для раскрытия конкретной группы повторите вызов с её filterId; значения также идут страницами до трёх элементов через nextValueOffset. Для перехода используйте возвращённый resultUrl или типизированные set_catalog_range/set_catalog_sort.
Правила AI-блока на страницах магазина
Эти правила и блок на сайте формируются из одного источника. Числа в фигурных скобках — обозначения, не реальные ID.
Каталог и фильтры
Вы на странице раздела или отфильтрованной подборки. Используйте опубликованные ссылки подкатегорий, товаров и пагинации; не угадывайте URL и ID. Для известного артикула быстрее поиск, для подбора — каталог.
Как уточнить подборку
Берите значения, диапазоны и ссылки фильтров из текущей страницы. После изменения перечитайте список и выбранные фильтры. Для REST сначала GET /api/v1/catalog/filters?section_id={section_id} либо ?brand_id={brand_id}, затем GET /api/v1/products с тем же контекстом и filters — одним URL-кодированным JSON-объектом по схеме. HTML-сегменты URL не являются REST-параметрами. Фильтры и диапазоны · HTML URL · OpenAPI.
Из листинга в карточку
Откройте ссылку нужного товара. В нижнем блоке карточки «Для AI-систем» указаны внутренний product_id, данные для текстового клиента и готовая ссылка на корзину, если доступно оформление. Не подставляйте артикул, ID бренда/раздела или строки корзины вместо product_id. Сверьте модель, текущую цену и возможность заказа в карточке; совпадение фотографии недостаточно. Правила карточки · Цена и наличие.
Если товар не найден
Публичный поиск без регистрации: GET /api/v1/products?q={артикул}&per_page=5. Числовой items[].id — ID товара. Если клиент не читает JSON, используйте /api/v1/products.md?q={артикул} или /search/?search={артикул}. Сверьте точное совпадение; несколько подходящих вариантов требуют уточнения. Пример Markdown-каталога · Поиск · API.
Передать корзину
Передайте опубликованную в карточке ссылку /buy/{product_id}:{quantity} либо получите share_url через GET /api/v1/cart-drafts/?product_id={product_id}&quantity=1. Вход, cookies, API-ключ и OAuth для подготовки ссылки не нужны. GET корзину не меняет. Когда покупатель откроет ссылку, сайт защищённым POST-запросом перенесёт товар в его корзину и заново проверит текущую цену и наличие. Заказ при этом не оформляется, а доступа к чужой корзине ссылка не даёт. Перенос подборки и оформление.
Личные операции отдельно
Для чтения или изменения личной корзины через REST, MCP, A2A или UCP нужно отдельное разрешение покупателя. Общее разрешение агенту не подтверждает конкретный заказ: его состав и сумму покупатель подтверждает отдельно. Выбрать сценарий · Разработчикам.
Карточка товара
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Установить точную идентичность товара и прочитать его текущие данные.
Что нужно на входе: Карточка или product_id, найденные через поиск/каталог. Артикул и ID строки корзины — не product_id.
Результат: Проверенные ID, canonical URL, модель, характеристики, цена и отдельные сигналы наличия.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Цена и возможность заказа — правильно истолковать цену и остатки · Отзывы и вопросы — прочитать отзывы и вопросы · Корзина и оформление — передать ссылку или продолжить покупку.
ID и ссылка видны без HTML-атрибутов
Внизу страницы товара, после отзывов и аналогов перед подвалом, находится раскрываемый AI-блок. Он содержит внутренний числовой ID и конкретную ссылку https://vesremont.com/buy/{id}:1 для доступного к заказу товара. Это серверный текст и a[href] внутри блока, а не JavaScript или скрытый метатег. Содержимое доступно в HTML и Markdown независимо от раскрытия. Агент с доступом только к тексту страницы может передать эту ссылку покупателю без API-запросов и без OAuth.
Если нужен другой объём — используйте тот же проверенный ID и целое количество 1–99. Если товар недоступен, блок сообщает это и не предлагает ссылку на добавление. Полный путь передачи корзины.
Товар через Public API
GET /api/v1/products/{product_id} возвращает товар по числовому ID Vesremont: имя, canonical URL, бренд, раздел, характеристики, текущую цену и остатки. HTML URL и ID строки корзины не подменяют product_id. Для выбора фасетов используйте section.id/brand.id ответа, для перехода — их опубликованные URL. updated_at: null означает отсутствие доказанного времени изменения; не назначайте вымышленную дату. REST использует рубли, UCP — целые копейки. Контракт и схемы.
Текстовые альтернативы JSON: /api/v1/products.md?q={артикул} и /api/v1/products/{id}.md. Поиск возвращает ID; подтвердите артикул и название, не принимайте первый частичный результат за точное совпадение. Поиск и fallback. Номер артикула, GTIN, ID товара и item_id строки корзины — разные значения.
URL и идентичность
Поиск возвращает краткий товарный DTO, а GET /api/v1/products/{id} и {id}.md — детальную карточку с брендом, разделом, описанием и характеристиками. В Markdown сохранены ссылки на HTML и JSON той же позиции. Отсутствие характеристик в кратком списке не означает, что они отсутствуют у товара.
Поле gtin берётся только из опубликованного поля штрихкода каталога (8, 12, 13 или 14 цифр); при отсутствии — null. Оно не вычисляется из названия, артикула или URL. updated_at: null — неизвестное время изменения именно товара, не дата чтения API и не версия документации.
| Значение | Откуда взять | Где использовать |
|---|---|---|
| SKU / артикул / GTIN | Текст карточки или ответ товара | Поиск и проверка совпадения; не подставлять как ID |
| product_id / items[].id | Публичный поиск, ответ товара, AI-блок карточки | Чтение товара, добавление, /buy/ и cart-drafts |
| item_id | Ответ личной корзины | Изменение/удаление конкретной строки именно этой корзины |
| brand.id / section.id | Ответ товара и каталожные справочники | Выбор бренда/раздела и получение их фильтров |
| order_id | Подтверждённый результат сохранения заказа | Чтение разрешённого заказа и его событий; не номер товара |
Не переносите идентификаторы между колонками даже при совпадении чисел. Точные имена полей зависят от интерфейса: контракты. Для задачи «сравнить» перечитайте характеристики каждого кандидата; совпадение бренда или части названия ещё не означает ту же модель.
Товар открывается по /catalog/product/{section-code}/{product-code}/. Используйте опубликованный href, canonical или URL из sitemap: не выводите section-code из названия товара самостоятельно. Страница размечена schema.org/Product и содержит canonical URL, название, SKU/артикул, GTIN при наличии, бренд, изображения, описание и характеристики.
Основные источники в HTML:
itemtype="https://schema.org/Product"— корень товара;itemprop="url",name,sku,mpn,gtin*,brand,image,description;- таблица характеристик и
additionalProperty/PropertyValue; itemprop="offers"/Offerдля цены, валюты и schema availability;itemprop="aggregateRating"при наличии отзывов.
Корень товара и карточки листинга также публикуют data-product-id, data-product-url, data-product-price, data-product-stock и data-product-orderable. На детальной карточке data-product-stock — остаток первого склада; на листинге это суммарный остаток карточки. Детальная карточка дополнительно публикует data-product-pickup-today. Листинг добавляет old-price и discount-percent, когда скидка реально показана. Stateful-кнопки имеют data-agent-action и data-product-id; эти атрибуты описывают действие, но не отменяют требования session + CSRF.
Цена и скидка
Число price.amount в JSON выражено в рублях, без разделителей тысяч; Markdown показывает две цифры копеек (например, 15 599,40 RUB). Это одна сумма, а не разные тарифы. Правила старой цены и скидки принадлежат availability.md.
Актуальная цена находится в Offer: itemprop="price", валюта — RUB. В листинге также могут отображаться старая цена и процент скидки. На детальной карточке текущая реализация не выводит отдельный old-price/discount контракт, поэтому не переносите старую цену из другой страницы без проверки.
Положительная актуальная цена определяет, можно ли оформить товар. Если цена отсутствует или равна нулю, страница показывает «Недоступно для заказа».
Остаток и получение
При положительном локальном остатке HTML показывает:
- «На складе N»;
inventoryLevelс числом и единицейшт;- «Самовывоз Сегодня».
При нулевом остатке эти блоки отсутствуют в DOM, а data-product-pickup-today="false". Покупка может оставаться доступной, если цена положительна. Подробности: наличие.
Характеристики и бренд
Характеристики находятся в обычной таблице. Значения, имеющие страницу каталога, являются ссылками. Бренд имеет ссылку /catalog/brand/{brand-code}/ и блок количества товаров бренда.
Страна родина и Страна производитель — разные импортируемые характеристики. Первая передаёт страну происхождения бренда/товара в терминологии источника, вторая — страну производства. Значения могут совпадать или различаться; не объединяйте их и не подменяйте одно другим.
Аналоги
Ниже карточки выводится товарный листинг аналогов/похожих товаров. Сначала система пытается подобрать товары по главным характеристикам; если результатов нет, использует товары раздела. Каждая карточка аналога имеет обычную ссылку на товар.
Отзывы и вопросы
Счётчики, вкладки, опубликованные материалы и формы находятся на карточке. Формы stateful и отправляются через JavaScript/AJAX; см. reviews.md.
Действия
- Избранное — кнопка, session + CSRF, JavaScript/AJAX.
- В корзину — кнопка, session + CSRF, JavaScript/AJAX.
- Быстрый заказ — добавляет одну позицию и переводит в корзину; JavaScript/AJAX.
- Изменение количества — кнопки появляются после чтения корзины из сессии.
Это ограничения кнопок браузерной корзины, не запрет на переносимую ссылку. /buy/{id}:{quantity} и публичный issuer cart-drafts передают подборку в браузер покупателя; agent GET не меняет его корзину. Личные REST/MCP/A2A/UCP операции требуют OAuth, но выдача ссылки его не требует.
Перед state-changing действием прочитайте capabilities.md и не отправляйте заказ без подтверждения пользователя.
Правила AI-блока на страницах магазина
Эти правила и блок на сайте формируются из одного источника. Числа в фигурных скобках — обозначения, не реальные ID.
Внутренний ID этого товара для API — {product_id} (product_id). Это не артикул и не ID строки корзины.
Если кнопка покупки доступна: Готовая ссылка на корзину с 1 шт. этого товара: https://vesremont.com/buy/{product_id}:1. Агент может передать её покупателю: вход в аккаунт, API-ключ, cookies и OAuth для этого не нужны.
Если кнопка покупки доступна: Если нужна подписанная ссылка, выполните GET-запрос cart-drafts для этого товара и передайте покупателю share_url из ответа. Этот запрос корзину не меняет.
Иначе: Товар сейчас недоступен для заказа. Ссылка на добавление не предлагается; перед выбором проверьте актуальную цену и возможность заказа.
Когда покупатель откроет ссылку, сайт защищённым POST-запросом перенесёт товар в его корзину и заново проверит текущую цену и наличие. Заказ при этом не оформляется, а доступа к чужой корзине ссылка не даёт.
Данные этого товара для текстового клиента · Как передать корзину по ссылке · API для разработчиков
Для чтения или изменения личной корзины через REST, MCP, A2A или UCP нужно отдельное разрешение покупателя.
Наличие и возможность заказа
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Различить возможность заказа, складской остаток и самовывоз сегодня.
Что нужно на входе: Свежий ответ товара или карточка; у HTML и API различаются складские показатели и денежные единицы.
Результат: Отдельные факты о цене, наличии и возможности заказа без выдуманного срока поставки.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — перечитать динамические данные · Доставка и оплата — проверить условия получения · Корзина и оформление — передать подборку или подготовить checkout.
Значения в REST и UCP
REST stock.total и stock.local суммируют доступные остатки всей складской сети магазина. Это не тот же сигнал, что остаток первого склада в HTML-карточке, и не обещание самовывоза сегодня. Сроки доставки со складов отдельно не объявлены. В REST цена выражена в рублях; в UCP — в целых копейках с currency: RUB. Неизвестная цена — null, не ноль. Возможность заказа и актуальный итог проверяются сервером при работе с корзиной и checkout. Public API.
Vesremont хранит цену и остатки отдельно. Нельзя интерпретировать одно поле как полную бизнес-семантику.
В REST availability описывает складской сигнал, а orderable — возможность заказа по актуальной положительной цене. Даже in_stock не разрешает покупку при orderable: false. Надпись «Под заказ» сама по себе также не подтверждает цену или возможность оформления. Для решения проверяйте orderable и текущую цену; перед записью сервер проверяет их снова.
Старая цена и промо листинга
price.old_amount и discount_percent возвращаются только когда источник API содержит подходящую старую цену выше текущей. null означает неизвестное значение, не нулевую скидку и не обещание отсутствия акции.
В листинге зачёркнутая сравниваемая цена может вычисляться из текущей цены и отдельного промопроцента: текущая / (1 - процент / 100), с округлением интерфейса. Это объясняет показанный промоблок, но не доказывает историческую цену продажи. Не подставляйте рассчитанное число в old_amount и не объявляйте скидку подтверждённой историей. Текущая цена, оформление и показанный промоблок сохраняются независимо от наличия старой цены в API.
Фактические правила карточки
| Сигнал | Реальное значение |
|---|---|
| Цена больше 0 | Товар считается доступным для добавления в корзину |
| Цена отсутствует или 0 | «Недоступно для заказа», кнопки покупки отсутствуют |
| Остаток первого склада больше 0 | data-product-pickup-today="true", schema InStock, показаны «На складе N» и «Самовывоз Сегодня» |
| Остаток первого склада 0/отсутствует, но цена больше 0 | data-product-pickup-today="false", schema OutOfStock, склад/самовывоз отсутствуют в DOM, но кнопки покупки остаются |
ost_total в листинге | Человекочитаемая строка, сформированная сервером из суммарного остатка |
На детальной карточке data-product-stock содержит остаток первого склада. На листинге data-product-stock относится к суммарному остатку карточки, поэтому сравнивать эти два значения как один складской показатель нельзя. data-product-orderable отражает возможность заказа по положительной цене и не выводится из остатка.
Как принимать решение
- Для возможности заказа проверяйте наличие кнопки «В корзину» или «Быстрый заказ» и положительную цену.
- Для немедленного самовывоза требуйте
data-product-pickup-today="true", видимый блок «Самовывоз» и положительныйinventoryLevel. - Не преобразуйте
OutOfStockавтоматически в «заказать невозможно»: текущая реализация допускает заказ при нулевом остатке. - Не обещайте срок поставки товара с нулевым остатком; на карточке нет отдельного стабильного состояния «под заказ» со сроком.
Известное семантическое противоречие
При цене больше нуля и остатке 0 карточка одновременно имеет schema OutOfStock и активные кнопки покупки. Это реальное поведение, а не ошибка документации. До унификации бизнес-статусов агент должен сообщать оба факта отдельно: «локальный остаток 0» и «заказ через сайт доступен».
Поиск
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Найти точный товар по артикулу, модели или названию.
Что нужно на входе: Текст запроса. HTML, JSON и Markdown — альтернативы, OAuth для публичного поиска не нужен.
Результат: Подтверждённое совпадение, product_id и URL; неоднозначные результаты требуют уточнения, а не выбора наугад.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — сверить артикул и характеристики · Фильтры и диапазоны — уточнить широкий подбор · Корзина и оформление — передать уже найденные товары по ссылке.
Артикул → точный товар → ссылка на корзину
- Для известного артикула используйте публичный
GET /api/v1/products?q={артикул}(JSON) илиGET /api/v1/products.md?q={артикул}(Markdown). OAuth и API key не нужны. Кодируйте query value, не меняйте Host/IP и не передавайте browser cookies. - Сопоставьте артикул и модель с результатом, прочитайте
items[].idв JSON или явный ID в Markdown. При нескольких совпадениях проверьте точную карточку; не угадывайте ID и не подставляйте артикул вместо него. - Если ваш инструмент не читает API, откройте HTML-поиск
/search/?search={артикул}либо найденную поисковиком карточку. В карточке есть видимый текстовый блок с ID и конкретной/buy/ссылкой. HTML-атрибуты и выполнение JavaScript для этого не нужны. - Для запроса «пришли корзину» передайте эту опубликованную ссылку покупателю. Можно не открывать её агентом: перенос выполняется при открытии покупателем, а не в его отсутствие. Отметьте отдельно, если ваш инструмент не смог проверить ссылку; не объявляйте функцию невозможной. Ссылка, несколько товаров и оформление.
JSON, Markdown и HTML — альтернативы, а не обязательные последовательные этапы. Публичные MCP/A2A инструменты поиска также доступны без покупательского токена; SDK — необязателен. Подробности каждого протокола — в Public API.
Поиск в открытом браузере через WebMCP
search_products({search: "артикул или модель"}) открывает обычную страницу результатов; единственное точное совпадение может сразу открыть карточку. После навигации заново получите список инструментов текущей страницы.
- В листинге вызовите
get_visible_products({limit: 1}), чтобы показать цену первого результата и получить его настоящийproductIdи URL.limitограничивает число возвращённых товаров, не выполняет новый поиск. - Для полной карточки вызовите
open_product({productId: ID_из_результата}). Он принимает только товар, уже представленный на текущей странице, и открывает его опубликованный URL. Произвольный ID не угадывайте. - На карточке
get_current_product({})читает цену, остаток, описание и характеристики той же страницы, которую видит покупатель. Цена в рублях; наличие, возможность заказа и самовывоз — разные признаки. - Пустой список не доказывает отсутствие товара во всём каталоге. Уточните запрос или дождитесь штатной загрузки выдачи. Для добавления нужен отдельный
add_to_cart; поиск и открытие карточки корзину не меняют.
Навигационные инструменты меняют открытую страницу и поэтому не помечены как чистое чтение readOnlyHint: true. Чтение данных выполняют get_visible_products и get_current_product. Браузерные инструменты и подтверждения · Карточка товара.
Программный поиск REST
GET /api/v1/products?q={text}&page=1&per_page=10 — поиск товаров; GET /api/v1/brands?q={text} — поиск брендов. Здесь используется q, тогда как HTML /search/ ниже использует search. API опирается на существующую поисковую нормализацию и Manticore-индексы сайта; фильтры/сортировка используют Reindexer, детали товара и цена — Tarantool. Пагинация начинается с 1, per_page ограничен 100. При слишком широком пересечении сервер возвращает ошибку вместо неполного результата. Уточните запрос или категорию. MCP/A2A используют операции реестра, UCP — catalog/search с непрозрачным cursor. Контракт поиска.
Публичная форма
В header каждой HTML-страницы находится стандартная форма:
<form action="/search/" method="get" role="search">
<input name="search" type="search">
</form>
Публичный интерфейс:
GET https://vesremont.com/search/?search={url-encoded-text}
Используется параметр search, не q, s или query.
Поведение
- Пробельные символы нормализуются, значение обрезается по краям.
- Пустой запрос показывает страницу поиска без результатов.
- Результаты разделены на категории, бренды и товары.
- Максимум на серверной странице: 5 категорий, 5 брендов и 100 товаров.
- Если после объединения найден ровно один уникальный URL, сервер отвечает
302на найденную категорию, бренд или товар. - Страница не предоставляет публичной пагинации, сортировки или фасетов результатов.
- Ссылки результатов являются обычными
a[href].
Header также показывает AJAX-подсказки через внутренние /search_ajax/ endpoint. Это вспомогательный JS-интерфейс; для агента предпочтительна GET-форма /search/.
Бренды
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Найти бренд и перейти к его ассортименту.
Что нужно на входе: Название бренда, его опубликованный URL или brand.id из товара.
Результат: Проверенный бренд и список его товаров; brand.id не подменяет section_id или product_id.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Навигация по каталогу — просмотреть ассортимент · Фильтры и диапазоны — подобрать характеристики · Данные карточки товара — проверить конкретную модель.
Бренды через API
GET /api/v1/brands?q={text} возвращает бренды по существующему поиску магазина. Бренд товара читается из /api/v1/products/{product_id}; фильтр списка товаров использует его brand.id. ID бренда и ID раздела различны даже при совпадающих названиях. Для browser-навигации используйте возвращённый canonical URL. Параметры и ограничения: Public API.
Точки входа
- Индекс брендов: https://vesremont.com/brand/
- Страница бренда:
/catalog/brand/{brand-code}/
Индекс брендов генерируется из актуальных серверных данных и содержит ссылки на страницы брендов, популярные бренды и алфавитные группы.
Поиск брендов
На /brand/ есть форма GET с name="q", но текущий JavaScript перехватывает её и выполняет POST-поиск подсказок. Серверная страница /brand/ сама не обрабатывает q как полноценную страницу результатов. Поэтому:
- для универсального поиска используйте
/search/?search={brand-name}; - для обхода брендов используйте ссылки индекса
/brand/или brand sitemap; - не объявляйте
/brand/?q=...стабильным серверным API.
Страница бренда
Страница бренда является каталогом: она показывает категории товаров бренда, фасеты, сортировку и пагинацию. Для дальнейшей фильтрации используйте опубликованные ссылки так же, как на обычной категории.
Правила AI-блока на страницах магазина
Эти правила и блок на сайте формируются из одного источника. Числа в фигурных скобках — обозначения, не реальные ID.
Каталог бренда
Вы на странице ассортимента бренда. Бренд не определяет конкретную модель: откройте карточку из листинга и сверьте артикул, характеристики и комплектацию. ID бренда не является product_id. Навигация по брендам.
Как уточнить подборку
Берите значения, диапазоны и ссылки фильтров из текущей страницы. После изменения перечитайте список и выбранные фильтры. Для REST сначала GET /api/v1/catalog/filters?section_id={section_id} либо ?brand_id={brand_id}, затем GET /api/v1/products с тем же контекстом и filters — одним URL-кодированным JSON-объектом по схеме. HTML-сегменты URL не являются REST-параметрами. Фильтры и диапазоны · HTML URL · OpenAPI.
Из листинга в карточку
Откройте ссылку нужного товара. В нижнем блоке карточки «Для AI-систем» указаны внутренний product_id, данные для текстового клиента и готовая ссылка на корзину, если доступно оформление. Не подставляйте артикул, ID бренда/раздела или строки корзины вместо product_id. Сверьте модель, текущую цену и возможность заказа в карточке; совпадение фотографии недостаточно. Правила карточки · Цена и наличие.
Если товар не найден
Публичный поиск без регистрации: GET /api/v1/products?q={артикул}&per_page=5. Числовой items[].id — ID товара. Если клиент не читает JSON, используйте /api/v1/products.md?q={артикул} или /search/?search={артикул}. Сверьте точное совпадение; несколько подходящих вариантов требуют уточнения. Пример Markdown-каталога · Поиск · API.
Передать корзину
Передайте опубликованную в карточке ссылку /buy/{product_id}:{quantity} либо получите share_url через GET /api/v1/cart-drafts/?product_id={product_id}&quantity=1. Вход, cookies, API-ключ и OAuth для подготовки ссылки не нужны. GET корзину не меняет. Когда покупатель откроет ссылку, сайт защищённым POST-запросом перенесёт товар в его корзину и заново проверит текущую цену и наличие. Заказ при этом не оформляется, а доступа к чужой корзине ссылка не даёт. Перенос подборки и оформление.
Личные операции отдельно
Для чтения или изменения личной корзины через REST, MCP, A2A или UCP нужно отдельное разрешение покупателя. Общее разрешение агенту не подтверждает конкретный заказ: его состав и сумму покупатель подтверждает отдельно. Выбрать сценарий · Разработчикам.
Корзина и покупка
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Выбрать между передачей подборки, личной корзиной и настоящим заказом.
Что нужно на входе: Проверенные товары/количества и точное пожелание покупателя. Для ссылки доступ к его сессии не нужен.
Результат: Ссылка, проверенное состояние корзины или подтверждённый сохранённый заказ — сообщайте только фактически достигнутый результат.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Доставка и оплата — выбрать получение и оплату из checkout · Public API — выполнить операции и читать статус/уведомления · Поддерживаемые возможности — выбрать browser или remote интерфейс.
Выберите путь по задаче, не по наличию сессии
| Задача | Достаточный путь | Нужно разрешение покупателя? |
|---|---|---|
| Найти товар, цену и ID | Публичные HTML, JSON/Markdown каталога или catalog tools MCP/A2A/UCP | Нет |
| Прислать корзину с выбранными товарами | Опубликованная /buy/{id}:{qty} ссылка или share_url из cart-drafts | OAuth не нужен; покупатель открывает ссылку, сайт выполняет защищённый перенос |
| Прочитать/изменить личную корзину из внешнего клиента | REST/MCP/A2A/UCP с минимальными scopes | Да, OAuth PKCE; одно согласие может покрыть выбранные интерфейсы |
| Работать внутри открытой страницы покупателя | Browser WebMCP текущей страницы | Браузерная сессия и CSRF; не внешний Bearer API |
| Создать реальный заказ | Подготовить → показать сводку → отдельное подтверждение → отправить | Всегда отдельное подтверждение конкретного заказа |
Если пользователь просит только ссылку, не начинайте с OAuth или доступа к его корзине. Отсутствие browser session, cookies, POST-инструмента или SDK у агента не мешает передать опубликованную ссылку. Эта ссылка — переносимая подборка, а не ссылка на содержимое чужой сессии.
Готовая ссылка на корзину — кратчайший путь
Если карточка уже найдена, возьмите конкретную ссылку из нижнего раскрываемого AI-блока после отзывов и аналогов перед подвалом. Его серверный текст также содержит внутренний product_id и доступен в HTML/Markdown без JavaScript. Например, для артикула 4058075709355 в проверенной карточке ID 375092: https://vesremont.com/buy/375092:1. Артикул не используется вместо ID. Это пример идентичности, не гарантия текущей цены или наличия.
Если известен только артикул: публичный поиск → проверить карточку и ID → /buy/{id}:1. JSON-клиент читает /api/v1/products?q={артикул}, текстовый — /api/v1/products.md?q={артикул}, HTML-клиент — /search/?search={артикул} или карточку. Эти пути альтернативны, не обязательны все сразу. Агент может передать известную опубликованную ссылку без её самостоятельного открытия, честно указав, если проверка его инструментом недоступна.
Для нескольких товаров короткий формат: https://vesremont.com/buy/{id1}:{qty1},{id2}:{qty2}. Не более 20 разных ID, количества — целые 1–99. Он использует тот же подписанный handoff. Не добавляйте цену, контакты, токены, cookies или данные оплаты в URL.
Альтернативный GET /api/v1/cart-drafts/?product_id={id}&quantity=1 возвращает JSON с share_url, draft_id, expires_at и items. Передайте share_url, не URL issuer и не общий /personal/basket/: общий адрес корзины не переносит подборку. Для следующего товара передайте параметр draft, извлечённый из предыдущего share_url (не draft_id); тот же товар увеличивает количество внутри подборки. Подпись создаёт только сервер.
«Хеш» в share_url — подписанный HMAC-SHA256 token с ID товаров, количествами, случайным ID и сроком. Состав не зашифрован, но персональные данные, цена, cookies и OAuth credentials туда не включаются. API выдаёт черновик до 24 часов; /buy/ создаёт черновик на 1 час при открытии. Короткий URL не содержит истекающей подписи: при следующем открытии создаётся новый проверенный черновик. Просроченный share_url нужно получить заново; изменённая подпись отвергается.
Покупатель открывает ссылку. Перенос в его настоящую корзину выполняется защищённым browser POST, с перепроверкой цены и доступности. GET агента/краулера не изменяет корзину. Обычная пользовательская навигация может автоматически выполнить перенос; иначе сайт показывает кнопку «Открыть готовую корзину». Остальные позиции сохраняются. Повтор переноса не складывает количества: сохраняется большее из текущего и указанного. Ссылка не даёт доступа к чужой корзине, не подтверждает заказ и не доказывает, что товар уже добавлен до открытия покупателем.
Не обращайтесь напрямую к /local/ajax/agent_cart_claim.php, не снимайте CSRF/Origin и не используйте cookies агента вместо браузера покупателя. Если инструмент блокирует адрес или JSON, используйте конкретную /buy/ ссылку из карточки; не обходите блокировку через IP/Host. Если реальные серверные ошибки сохраняются, сообщите статус, а не обещайте успех.
Удалённый покупательский контур — только для личного доступа
Не смешивайте результаты последовательных этапов:
| Этап | Что уже известно | Что ещё НЕ произошло |
|---|---|---|
| Ссылка / share_url выдана | Подборка подготовлена для открытия покупателем | Личная корзина ещё не подтверждена как изменённая |
| Корзина перечитана после записи | Фактический состав и текущая цена | Заказ не отправлен |
| Checkout заполнен | Текущие контакты, получение, оплата и итог | Нет согласия на конкретную сводку |
| Prepare / confirmation_url | Сводка готова к проверке покупателем | Общего OAuth-согласия недостаточно для отправки |
| Сохранение подтверждено сервером | Есть результат заказа / order_id | Создание заявки не равно оплате, отгрузке или готовности к выдаче |
| Статус / webhook прочитан | Известно сохранённое состояние на момент ответа | Не обещана доставка каждого промежуточного изменения |
REST/MCP/A2A/UCP работают с реальной Bitrix/FUSER-корзиной разрешившего доступ покупателя. Внешний клиент получает OAuth Authorization Code + PKCE S256, минимальные scopes и отдельный resource выбранного протокола; cookies внешнего клиента не выбирают чужую корзину. В REST добавление использует product_id, PATCH/DELETE — item_id строки корзины. Сервер определяет цену; после записи перечитайте корзину и checkout.
Для работы через несколько протоколов используйте одно общее разрешение: в consent_resources явно перечисляются нужные интерфейсы, покупатель один раз разрешает перечисленные права. Затем клиент получает отдельный token для каждого resource посредством ограниченного token exchange. Один token не становится универсальным, новые scopes не добавляются, срок не продлевается. Старый путь отдельных согласий остаётся доступным. Подготовка корзины и checkout после разрешения автоматизирована; конкретный заказ подтверждается отдельно.
REST/MCP/A2A: prepare выдаёт confirmation_url. Покупатель на Vesremont проверяет сводку и подтверждает её; только затем разрешён submit с тем же confirmation token и стабильным Idempotency-Key. При неопределённом исходе сохраняйте ключ и тело запроса; не создавайте повторный заказ новым ключом. Изменение состава или checkout требует нового подтверждения. UCP complete возвращает requires_escalation и continue_url для завершения на сайте; completed появляется после сохранения заказа. Точные маршруты и scopes: Public API, Authentication.
Подписанная cart-draft ссылка передаёт до 20 товаров в браузерную корзину с перепроверкой цены и CSRF POST; она не создаёт заказ и не является OAuth-разрешением.
После создания: статус и события
Используйте order_id из подтверждённого сервером результата. Чтение заказа через API ограничено разрешённой парой покупатель–приложение, а не любым номером из 1С. Для получения событий выберите подписку и receiver по разделу «Уведомления о заказах» API-руководства: challenge → подтверждение receiver → подписанные события → проверка подписи и дедупликация. Штатный worker выполняет challenge/retry; покупателю не нужно нажимать кнопки или создавать второй заказ ради ожидания события.
При неизвестном исходе отправки не создавайте новую отправку с новым ключом. Сохраните исходные тело и Idempotency-Key, проверьте результат тем же разрешённым способом; при необходимости передайте безопасный request_id поддержке. Публичные условия доставки не заменяют фактический статус заказа.
Браузерная ветка: текущая сессия и WebMCP
Следующие разделы описывают браузерную session/CSRF-модель, а не Bearer-запросы. Если вы выбрали remote API, возвращайтесь к его schema; browser-имена инструментов и правила подтверждения не копируются в удалённый запрос автоматически.
Общая модель
Корзина привязана к текущему пользовательскому контексту и HTTP-сессии. Избранное хранится в текущей HTTP-сессии. Обязательная авторизация для этих состояний не требуется. Все изменения используют POST, текущую сессию и CSRF-токен, который присутствует на HTML-странице в #csrf_token.
Избранное
- Страница:
/favorits/. - Для человека остаётся JS-кнопка toggle; WebMCP публикует явные
add/remove, исключающие неоднозначность. - Состояние: текущая HTTP-сессия, без обязательной авторизации.
- AI-инструменты:
get_favorites,set_favorite.
Корзина
- Страница:
/personal/basket/. - Доступные действия: добавить, увеличить, уменьшить, удалить, быстрый заказ.
- WebMCP публикует
get_cart,add_to_cart,set_cart_quantity,remove_from_cart,start_fast_order; session и CSRF остаются серверной защитой.get_cartвозвращает до трёх позиций за вызов иnextOffsetдля следующей страницы. - Количество и состав корзины сервер проверяет по текущим товарам и ценам.
Checkout
В обычной корзине кнопка называется «Оформить». API повторяет действующую логику магазина: выбирайте получение и оплату из текущего get_checkout, включая самовывоз, а не из произвольно отфильтрованных настроек Bitrix. Цены, контакты, доставка и итог перепроверяются перед сохранением; сохранённая заявка не означает проведённый платёж.
Checkout динамически собирается JavaScript из текущего session-состояния:
- состав и количество товаров;
- способ получения;
- адрес при курьерской доставке;
- способ оплаты;
- имя, email, телефон, комментарий;
- отправка заказа.
Контакты представлены именованной аннотированной HTML-формой. Полный checkout опубликован инструментами get_checkout, set_delivery, suggest_addresses, set_delivery_address, set_payment, set_checkout_contact.
Нужна ли предварительная регистрация?
Нет. Покупатель может заполнить checkout и отправить подтверждённый заказ без предварительной регистрации или входа. При создании заказа сервер ищет существующего внутреннего пользователя по текущему Bitrix-пользователю, телефону или email; если совпадение отсутствует, создаёт внутреннюю учётную запись для обработки заказа. Это серверная часть оформления, а не требование заранее зарегистрироваться.
Безопасность агента
- Добавление в корзину обратимо, но изменяет состояние сессии: сообщайте результат.
- Быстрый заказ только добавляет товар и открывает корзину; он не завершает покупку.
- Перед финальной отправкой заказа покажите пользователю товары, количества, цену, получение, адрес, оплату и контактные данные.
- Сначала вызовите
prepare_orderи покажите возвращённую сводку. Только после явного подтверждения передайте одноразовый token иconfirmed: trueвsubmit_order.
Защита финального действия
prepare_order проверяет непустую корзину, телефон и адрес курьерской доставки, после чего выдаёт token на 10 минут. Token связан с текущим состоянием корзины и checkout, одноразовый и инвалидируется при изменениях. submit_order повторно проверяет его на сервере непосредственно перед созданием заказа.
Доставка и оплата
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Ответить об условиях получения, оплаты и возврата либо заполнить checkout.
Что нужно на входе: Для общего вопроса достаточно публичных условий; для стоимости и способов конкретного заказа нужен его checkout.
Результат: Ответ со ссылкой на условия или проверенный выбор checkout, но не обещание оплаты/готовности к выдаче.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Корзина и оформление — подтвердить заказ после заполнения · Цена и возможность заказа — проверить сигнал самовывоза товара · Public API — получить текущий checkout через выбранный протокол.
Получение и оплата через API
Авторизованный клиент читает /api/v1/checkout и выбирает только возвращённые для текущей корзины способы получения и оплаты. Изменения отправляются PATCH /api/v1/checkout по OpenAPI schema; не угадывайте delivery/payment ID. Стоимость и итог проверяются перед подтверждением заказа. UCP checkout передаёт покупателя на сайт через continue_url; платёжные реквизиты карты удалённый агент не передаёт. Public API.
Информационные страницы
- Доставка: https://vesremont.com/about/delivery_info/
- Оплата: https://vesremont.com/about/payment_info/
- Как заказать: https://vesremont.com/about/how_to_order/
- Возврат и возврат средств: https://vesremont.com/about/return_exchange/
- Контакты и самовывоз: https://vesremont.com/about/contacts/
Checkout: способы получения
Текущий checkout предоставляет самовывоз и курьерскую доставку. Доступность, стоимость и детали зависят от session-состояния заказа. При курьерской доставке адрес ищется через подсказки и затем сохраняется в сессию.
На карточке товара «Самовывоз Сегодня» показывается только при положительном остатке первого склада и сопровождается data-product-pickup-today="true". При нулевом остатке значение равно false, а текст самовывоза отсутствует в DOM. Это сигнал карточки, а не подтверждение готовности конкретного заказа; окончательные условия определяются в checkout и подтверждаются менеджером.
Checkout: способы оплаты
UI содержит:
- наличными при получении;
- СБП;
- онлайн банковской картой;
- счёт с НДС.
Фактически доступный набор может зависеть от доставки, региона, суммы и состояния заказа. Не выбирайте способ только по этой документации — прочитайте текущий checkout.
Когда возвращаются деньги?
Опубликованный срок возврата средств — до 30 дней после осмотра и приёмки возвращённого товара, если иной срок не установлен законом или согласованными условиями. Для отменённой до отгрузки заявки Vesremont не публикует отдельный гарантированный срок появления средств на банковской карте; порядок зависит от способа оплаты и стадии заказа и уточняется у продавца.
Автоматизация
WebMCP публикует get_checkout, set_delivery, suggest_addresses, set_delivery_address, set_payment и set_checkout_contact. suggest_addresses возвращает до трёх вариантов. Значения валидируются атомарно и сохраняются в том же session-состоянии, которое использует UI; перед заказом всегда перечитывайте prepare_order.
Отзывы и вопросы
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Прочитать отзывы/вопросы или подготовить пользовательскую публикацию.
Что нужно на входе: Точный товар. Публичное чтение и подтверждаемая отправка текста/медиа — разные действия.
Результат: Опубликованные материалы либо подтверждённая отправка на модерацию, не обещание немедленной публикации.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — вернуться к характеристикам · Поддерживаемые возможности — выбрать доступный browser-инструмент для записи · Корзина и оформление — продолжить покупку после выбора.
Публичное чтение отзывов через API
GET /api/v1/products/{product_id}/reviews возвращает опубликованные и одобренные отзывы без внутренних пользовательских ID и контактных данных. Контракт чтения: Public API. Публичный REST не предоставляет запись отзывов, вопросов, реакций или загрузку медиа; для этих действий остаются браузерные инструменты и пользовательское подтверждение. Далее описан browser-интерфейс, а не REST schema.
Чтение
Карточка товара содержит:
- количество и средний рейтинг отзывов;
- количество вопросов;
- вкладки отзывов и вопросов;
- опубликованный текст, автора, дату, оценку и медиа;
- кнопки подгрузки и фильтры.
Опубликованные отзывы имеют семантические элементы и идентификаторы. Дополнительные записи подгружаются AJAX.
Отправка
На карточке есть HTML-формы с именованными полями для отзыва и вопроса, однако их отправка в текущей реализации зависит от JavaScript: JS добавляет action-флаг и CSRF, отправляет multipart POST и обрабатывает JSON-ответ.
Отзыв может включать имя, контакт, рейтинг 1–5, достоинства, недостатки, комментарий и фото/видео. Вопрос может включать имя, контакт, текст и медиа. Материалы проходят серверную валидацию и модерацию.
Оценки и реакции
Сортировка, фильтрация, подгрузка, реакции и комментарии используют отдельные AJAX-действия и session rate limits. Они не представлены стабильными публичными HTML-формами или URL.
Статус для агента
- Чтение первоначально отрендеренных отзывов/вопросов: поддерживается HTML.
- Публичный REST предоставляет постраничное чтение опубликованных отзывов по указанному выше контракту. Интерактивные фильтры, вопросы и browser UI не следует считать тем же REST-интерфейсом.
- Создание отзыва/вопроса: declarative WebMCP-формы без auto-submit; пользователь проверяет содержимое до модерации.
- Комментарии и ответы: контекстные declarative WebMCP-формы без auto-submit.
- Реакции:
react_to_reviewиreact_to_comment; повтор той же реакции снимает её.
Не отправляйте пользовательский текст или медиа без явного подтверждения содержимого.
Возможности AI-агента
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Выбрать кратчайший поддерживаемый маршрут под задачу и возможности клиента.
Что нужно на входе: Намерение пользователя и доступный инструмент: чтение страниц, HTTP, MCP или браузерный WebMCP.
Результат: Один выбранный путь, его границы и следующий документ; проходить все протоколы подряд не требуется.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Поиск по сайту — начать публичный подбор · Корзина и оформление — работать с подборкой/корзиной/заказом · Public API — подключить выбранный протокол.
Выберите задачу: карта документации
Начните с нужной строки. Следующий документ нужен по смыслу задачи, а не как обязательный дополнительный тест. REST, MCP, A2A, UCP и browser WebMCP — альтернативные способы работы, не пять последовательных этапов.
| Задача | Сначала | Затем / уточнение | Что считается результатом |
|---|---|---|---|
| Найти артикул или модель | search.md | products.md | Совпадение, ID и ссылка на товар; не первый похожий результат. |
| Подобрать по категории и характеристикам | catalog.md | filters.md | Подборка по текущим фасетам; затем проверка каждой карточки. |
| Выбрать бренд | brands.md | catalog.md | Ассортимент нужного бренда, не смешение brand.id и product_id. |
| Сравнить цену, наличие и отзывы | products.md | availability.md | Отдельные проверенные факты; отзывы — в reviews.md. |
| Прислать готовую ссылку на корзину | purchase.md | products.md | Опубликованная /buy/ ссылка или share_url; GET не изменяет личную корзину. |
| Изменить личную корзину или избранное | purchase.md | api.md | Состояние перечитано после записи; remote — с OAuth, browser — session/CSRF. |
| Оформить конкретный заказ | purchase.md | delivery.md | Сводка → отдельное подтверждение → проверенное сохранение; не автоматическая оплата. |
| Узнать статус заказа и получать события | api.md | purchase.md | Доступ только к разрешённым заказам; webhook проверяется и дедуплицируется. |
| Ответить о доставке, оплате, возврате | delivery.md | home.md | Ответ по публичному источнику; условия не равны статусу конкретного заказа. |
| Прочитать или отправить отзыв/вопрос | reviews.md | products.md | Чтение публично; запись через browser с подтверждением и модерацией. |
| Подключить SDK, CLI, MCP, A2A или UCP | api.md | capabilities.md | Выбран один подходящий интерфейс, его schema и минимальные права. |
| Обойти сайт или обновить интеграцию | sitemaps.md | changelog.md | Канонические URL и актуальная версия, не выгрузка личных данных. |
Права, формат и источник — отдельные решения
- Публичные товары, отзывы и условия: без OAuth. HTML, JSON и Markdown — альтернативные представления, а не разные права. Поиск и запасные пути.
- Только ссылка на подборку: без OAuth; перенос в собственную корзину выполняет сайт защищённым POST после открытия покупателем. Передача подборки.
- Личные remote-операции: auth.md — выбор метода, одно согласие, отдельные audience-bound tokens и отзыв. Browser WebMCP использует свою сессию/CSRF, не этот Bearer token.
- Настоящий заказ: отдельное подтверждение конкретной сводки. Общее разрешение и sandbox его не заменяют. Оформление.
- API access, бесплатные режимы и квоты: pricing.md; цена товара и его доступность: availability.md.
- Правила использования публичного контента: AI-policy; это не разрешение на личные данные. Организация/контакты: identity.json; покупательские условия: faq-ai.txt.
Если путь остановился
Не читается JSON — используйте опубликованный Markdown или HTML того же товара. Не найден точный артикул — уточните запрос, не выдумывайте ID. 401 у личной корзины — выберите buyer auth, а не отказывайтесь от публичного поиска. 403 — проверьте права, не обходите защиту. 429 — соблюдайте Retry-After. Неизвестен результат записи — сначала перечитайте состояние; неопределённый заказ не отправляйте новым Idempotency-Key. Контракты ошибок.
Документация объясняет сценарий; актуальные schemas определяют поля. Live discovery определяет публикацию интерфейса; старый changelog — историю. Динамические цена/остаток/checkout читаются заново. Если источники расходятся, укажите конкретное расхождение, не объявляйте всю функцию отсутствующей.
Карту возможностей читайте по выбранному режиму
Выберите маршрут в карте задач выше, затем один из режимов ниже. Публичный каталог и условия не требуют доступа к покупателю. Если нужен только ответ или ссылка на товар, завершите задачу на этом результате — переход в корзину не обязателен. Задача «найди артикул и пришли корзину» использует поиск → проверку товара → передачу подборки, без buyer OAuth.
Таблица ниже описывает главным образом браузерный UI/WebMCP. Отсутствие переносимого протокола у конкретной JS-кнопки не означает отсутствия отдельного cart-link или remote API. Для личной корзины внешнего клиента — OAuth, для подтверждения заказа — отдельный просмотр сводки. Режимы не наследуют права друг друга.
Статусы браузерных действий:
supported— надёжный обычный link/form/URL-интерфейс;browser-js— доступно через семантический DOM и JavaScript, но нет переносимого link/form/URL протокола;partial— чтение доступно, действие или часть данных ограничены;webmcp— доступно через типизированный WebMCP-инструмент с runtime-валидацией.declarative-webmcp— HTML-форма опубликована как инструмент и сохраняет пользовательский контроль отправки.
| Возможность | Метод сейчас | Статус | Примечание |
|---|---|---|---|
| Понять назначение сайта | /llms.txt, HTML | supported | Корневой AI-маршрутизатор |
| Начать работу агенту | /agents/ | supported | Единая карта capabilities, policies и discovery |
| Обнаружить действия агента | /agent.json | supported | AWP v0.2-манифест фактических WebMCP-инструментов |
| Обнаружить программный интерфейс | /.well-known/api-catalog | supported | RFC 9727 Linkset: browser WebMCP, agent.json, документация и skills |
| Обнаружить Agent Skills | /.well-known/agent-skills/index.json | supported | Discovery v0.2.0, SHA-256 каждого SKILL.md |
| Навигация по категориям | a[href] | supported | Использовать опубликованные URL |
| Открыть бренд | a[href], brand sitemap | supported | /catalog/brand/{code}/ |
| Открыть товар | a[href], card sitemap | supported | /catalog/product/{section-code}/{product-code}/ |
| Категориальный фильтр | a[href] | supported | Path/query выбирает сервер |
| Несколько групп фасетов | последовательные href | supported | Одна выбранная величина на группу в штатном UI |
| Числовой диапазон | data-contract + URL grammar | supported | Повторяемый range |
| Несколько диапазонов | URL grammar | supported | Повторяемый range с разными ID |
| Сортировка товаров | a[href], sorts | supported | id_sort, price_min, price_max |
| Пагинация товаров | a[href], page | supported | Положительное целое |
| Поиск | GET HTML form | supported | Параметр search |
| Прочитать товар | Product/Offer HTML | supported | Цена, SKU, бренд, характеристики, остаток |
| Передать корзину по ссылке | Видимый ID и /buy/{id}:{qty} в карточке; cart-drafts share_url | supported | Без OAuth; browser POST при открытии покупателем, не создание заказа |
| Прочитать аналоги | товарные ссылки | supported | Подбор по характеристикам/разделу |
| Прочитать отзывы и вопросы | HTML + AJAX load | partial | Начальные записи доступны без внутреннего API |
| Отзывы категории: сортировка/фильтр | URL query + JS | supported | otziv_* параметры документированы |
| Избранное | get_favorites, set_favorite | webmcp | Явные add/remove, session + CSRF |
| Добавить в корзину | add_to_cart | webmcp | Проверка ID и количества |
| Изменить количество/удалить | set_cart_quantity, remove_from_cart | webmcp | Удаление идемпотентно |
| Быстрый заказ | start_fast_order | webmcp | Возвращает checkout URL, заказ не отправляет |
| Просмотр корзины | get_cart | webmcp | Постраничные товары и полный итог; продолжение через nextOffset |
| Выбрать получение | set_delivery | webmcp | pickup или courier |
| Указать адрес | suggest_addresses, set_delivery_address | webmcp | Подсказки и явное сохранение |
| Выбрать оплату | set_payment | webmcp | cash/sbp/card/invoice |
| Отправить заказ | prepare_order → submit_order | webmcp | Одноразовый подтверждающий токен |
| Оставить отзыв/вопрос | аннотированные HTML forms | declarative-webmcp | Без auto-submit, медиа, модерация |
| Реакции/комментарии | imperative reactions + forms | webmcp | Session/rate limit |
| Полный discovery | sitemap index | supported | brand/card/filtr shards |
Удалённые интерфейсы, SDK и CLI
| Интерфейс | Контракт | Авторизация и назначение |
|---|---|---|
| REST v1 | /api/v1, /openapi.json | Каталог без токена; корзина, избранное, checkout, заказы и webhooks по OAuth scopes |
| OAuth | /.well-known/oauth-authorization-server | Authorization Code + PKCE S256; CIMD, одно общее либо отдельные согласия, отдельный resource каждого токена и отзыв |
| Remote MCP | /mcp, /.well-known/mcp.json | Streamable HTTP; tools из общего API-реестра, отдельный audience |
| A2A 1.0 | /a2a/message:send, /.well-known/agent-card.json | Синхронные Messages для реальных операций и buyer guidance |
| UCP 2026-08-25 | /ucp/v1, /.well-known/ucp | Catalog, permalink, реальная корзина, checkout с завершением покупателем |
| Cart-draft | /api/v1/cart-drafts/, /cart/claim/ | Подписанные ID/количества; CSRF-перенос в браузерную корзину, без создания заказа |
| Webhooks | /api/v1/webhooks | HTTPS challenge, Standard Webhooks HMAC, дедупликация и история deliveries |
| JS/TypeScript, Python, Go, Ruby; Node CLI | Опубликованные реестры и /developers/downloads/ | Клиенты REST; CLI — в npm-пакете, подключение MCP не требует SDK |
Полное руководство содержит схемы, scopes, ограничения, PKCE и порядок подтверждения заказа. 26 browser WebMCP tools не равны реестру удалённых операций. Один Bearer token нельзя использовать для разных аудиторий или вместо browser CSRF. Дополнительное общее согласие позволяет ограниченным token exchange получить отдельные токены REST/MCP/A2A/UCP без повторных нажатий; только для явно разрешённых покупателем интерфейсов, без расширения прав и продления срока. Прежние согласия и отдельное подтверждение каждого заказа сохраняются.
Публичный каталог читает актуальные данные магазина без регистрации и cookies. Для безопасного знакомства с форматом есть отдельный бесплатный read-only sandbox: синтетические данные, без корзины, оформления, оплаты и отправки в 1С. Sandbox для настоящих заказов не предоставляется; покупательские операции относятся к production и требуют действующих разрешений и подтверждений. Самостоятельный anonymous credential необязателен и ограничен catalog:read; он не даёт прав покупателя. Восемь этапов авторизации, режимы доступа и квоты. A2A не предоставляет фоновые tasks или push lifecycle, UCP не принимает банковские реквизиты.
agent.json.documented_interfaces описывает полный реализованный контракт; remote_interfaces — опубликованный сейчас набор по серверной конфигурации. Руководство может описывать интерфейс, временно выключенный в live discovery: это не обещание его текущей доступности и не выдача прав. Browser WebMCP, cart-link и remote API проверяются раздельно. Историческое «remote: false» в changelog не описывает состояние сегодня.
agent.json.capabilities_context равен browser_webmcp: его batch_actions: false, webhooks: false и idempotency: false относятся только к этому браузерному интерфейсу, не ко всему магазину. У удалённых операций отдельные контракты: публичный get_products_batch читает до 10 товаров, webhooks требуют разрешения покупателя, а поддержка ключа идемпотентности определяется конкретной операцией в OpenAPI и API guide. current_capabilities — инвентарь browser tools для разных типов страниц, не обещание регистрации всех инструментов на главной. Живой набор — в document.modelContext текущей страницы.
WebMCP runtime
Инструменты регистрируются через document.modelContext только там, где они релевантны странице. Корзина и избранное доступны глобально; каталог, карточка и checkout добавляют контекстные инструменты. get_current_product возвращает остаток, независимую возможность заказа и pickupToday. Обычные чтения ограничивают размер ответа и используют nextOffset, а prepare_order возвращает полную транзакционную сводку. Браузеры без WebMCP используют прежний HTML/JS интерфейс.
Проверенный пример ответа document.modelContext
25 сентября 2026 года внешний WebMCP-клиент открыл публичную карточку товара, получил зарегистрированные страницей инструменты через document.modelContext и вызвал read-only инструмент get_cart с аргументами:
{"offset":0,"limit":3}
Фактически полученный DOMString:
{"empty":true,"items":[],"totalItems":0,"offset":0,"nextOffset":null,"totalQuantity":0,"totalPrice":0,"currency":"RUB"}
Это зафиксированный реальный ответ production, а не обещание постоянных значений. Содержимое корзины зависит от текущей браузерной сессии; поля и ограничения инструмента определяются актуальной schema, зарегистрированной страницей, и сверяются с agent.json.
Agent Web Protocol manifest
https://vesremont.com/agent.json публикует AWP v0.2-манифест этих же инструментов для первичного discovery. Поле operation точно совпадает с именем WebMCP-инструмента. Сам манифест не является отдельным HTTP API: агент открывает подходящую страницу Vesremont, читает актуальный document.modelContext и вызывает зарегистрированный там инструмент. Доступность каталожных, товарных и checkout-инструментов зависит от контекста страницы.
Манифест генерируется тем же AI generator, что /.well-known/ai.txt, llms-full.txt и HTML-зеркала. Проверка сопоставляет каждую объявленную операцию с исходным WebMCP-модулем, поэтому документация не должна обещать несуществующий инструмент.
API catalog
https://vesremont.com/.well-known/api-catalog публикует RFC 9727 Linkset с MIME application/linkset+json. Каталог связывает browser WebMCP с /agent.json, /agents/ и Agent Skills index. Отдельные удалённые интерфейсы добавляются генератором только после их явного включения и публикации на сервере. Текущее состояние, авторизация и схемы описаны в Public API; их нельзя выводить из перечня browser WebMCP tools.
Agent Skills и единая точка входа
https://vesremont.com/agents/ объединяет фактические точки discovery, политику и правила безопасного вызова инструментов. Индекс https://vesremont.com/.well-known/agent-skills/index.json публикуется в формате Agent Skills Discovery v0.2.0. Каждый skill строится генератором из действующей capability model, а его digest вычисляется по точным байтам опубликованного SKILL.md.
Опубликованы три области Agent Skills: поиск и чтение товаров, управление корзиной/checkout и ответы по действующим покупательским условиям. Skills описывают browser WebMCP и выбор удалённого интерфейса с OAuth. Удалённые протоколы не наследуют browser-session авторизацию; схемы и scopes — в Public API.
Версии AI-документации
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Понять изменение версии и правила обновления документации.
Что нужно на входе: Версия/ревизия ранее прочитанных документов. Старые записи — история, не текущий запрет функций.
Результат: Понимание изменения и переход к актуальному контракту; успешная установка не равна полной внешней приёмке.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Поддерживаемые возможности — прочитать текущие возможности · Public API — обновить интеграцию · Sitemap и обнаружение URL — обнаружить актуальные страницы.
Текущая версия AI-документации и публичного агентского контракта: 1.14.31.
1.14.31 — 2026-10-26
- Добавлен английский HTML developer portal
/en/developers/: API documentation, OpenAPI, MCP server, SDK и авторизация. Адреса и возможности берутся из общих источников; новые API-ручки и независимый контракт не создаются. - Русский
/developers/сохранён целиком. Языковые ссылки, отдельные canonical, английские HTML/OG/TechArticle metadata и существующие стили применяются адресно. Новый URL включён в freshness, sitemap и штатную AI-очередь переобхода. - Публикация английской страницы не означает индексацию или новый зачёт Ora. Покупательские права, API/OAuth, CSRF/Origin, ядро, nginx/TLS и CSS/JS не меняются.
1.14.30 — 2026-10-23
- Pinterest https://ru.pinterest.com/vesremont/ добавлен в общий список соцпрофилей магазина и прежнюю полосу подвала с отдельной SVG-иконкой. VK, Telegram и YouTube сохранены; шаблон и стили подвала не меняются.
- Ссылка используется существующими Organization JSON-LD и Microdata, identity.json, brand.txt и AI-policy. Публикация ссылки не объявляется верификацией профиля или новым результатом Ora.
1.14.29 — 2026-10-19
- YouTube-канал https://www.youtube.com/@vesremont_com добавлен в общий список соцпрофилей магазина рядом с ВКонтакте и Telegram. Штатный генератор подвала использует тот же список и отдельный SVG; расположение и стили соцполосы сохранены.
- Ссылка публикуется существующими Organization JSON-LD и Microdata, identity.json, brand.txt и AI-policy. Прежние профили и Wikidata сохранены; отдельные оценки Ora и подтверждение владельца YouTube не заявляются.
1.14.28 — 2026-10-14
- На странице разработчика уточнены назначение developer portal, руководство API, спецификация OpenAPI и подключение MCP server. Сохранены общий заголовок, прежние разделы, ссылки, SDK/CLI, OAuth и browser WebMCP.
- Краткий developer-текст и корневой индекс ведут к тем же каноническим ресурсам. Контракты API, права доступа и покупательские операции не изменены. Публикация текста не подтверждает его индексацию или новый результат Ora.
1.14.27 — 2026-10-13
- В общий источник идентичности магазина добавлена запись Wikidata Q141711311 с официальным сайтом https://vesremont.com/ в P856. Ссылка публикуется существующими JSON-LD, Microdata, identity.json, brand.txt и AI-policy; прежние профили сохранены.
- Запись Wikidata не объявляется независимой сертификацией или подтверждённым зачётом Ora. Дизайн, товары, API, OAuth, nginx, TLS, CSS/JS и покупательские операции не менялись.
1.14.26 — 2026-10-12
- Полный товарный Markdown теперь сохраняет HTML/JSON ссылки, бренд, раздел, описание, характеристики и неизвестное время изменения из того же публичного DTO. Поиск явно обозначен как краткий список; денежные суммы отображаются с двумя цифрами копеек.
- В публичный DTO и общую схему добавлен необязательный nullable gtin из существующего поля штрихкода, без изменения каталожных данных и без догадок по URL/названию.
- Уточнены границы browser/remote capabilities, соответствие сортировок и различие текущей цены, промопроцента и неизвестной исторической цены.
- Четыре browser cart descriptions описывают действие без инструкций читателю; имена, обработчики, hints и входные схемы прежние. Удалена недоказанная общая декларация human-written; действующие принципы публикации сохранены.
- Товарные характеристики, названия, аналоги, скидки, покупательские условия, OAuth и защитные проверки не менялись. Публикация и новые баллы Ora/Glama проверяются отдельно.
1.14.25 — 2026-10-12
- Уточнены описания remote MCP/REST/A2A операций в общем ProtocolContract: выбор поиска/фильтров/карточки, источники ID, корзина/избранное, checkout/подтверждение/заказ и подписки/доставки событий.
- Browser WebMCP: описания четырёх операций корзины явно различают добавление единиц, итоговое количество, удаление и переход к оформлению; agent.json содержит те же тексты.
- Названия, схемы, обработчики, scopes, аннотации навигации и защитные проверки сохранены. Описания не подтверждают покупательскую приёмку и не обещают рост оценок Ora/Glama.
1.14.24 — 2026-10-12
- Индекс Agent Skills теперь показывает явные When to use и How to call до загрузки конкретного SKILL.md. Условие выбора берётся из первого смыслового абзаца самого skill, а ссылка ведёт к его полной процедуре и канонической документации.
- Состав, содержимое и SHA-256 трёх SKILL.md сохранены. Это уточнение discovery, не изменение API, прав покупателя, протоколов или покупательских действий. Публикация и результат внешнего аудита проверяются отдельно.
1.14.23 — 2026-10-12
- Добавлена прямая ссылка на существующую карточку Vesremont в Glama с подтверждённым владельцем домена. Главная, developer portal, API guide, индексы и полные тексты связывают её с прежним endpoint
https://vesremont.com/mcp. - Ссылка принадлежит общей карте опубликованных интеграций; generated HTML/Markdown собираются штатно. Подтверждение Glama не означает разрешение покупателя или зачёт Ora. API, OAuth, nginx, TLS, CSS/JS, корзина и заказы не менялись.
1.14.22 — 2026-10-12
- В Markdown-справочнике главной абсолютные внешние ссылки сохраняются без добавления домена магазина. Исправлена ссылка на официальный MCP Registry в home.md, его HTML-зеркале и llms-full.txt; относительные ссылки по-прежнему ведут на Vesremont.
- Validator проверяет точную цель Markdown-ссылки, а не наличие склеенного URL. API, OAuth, лимиты, корзина и заказы не менялись. Признание реестра и developer-ресурсов Ora проверяется отдельно.
1.14.21 — 2026-10-11
/api/agents/registerсо слешем и без передаёт прежнему OAuth-входу исходный POST без redirect. Это та же необязательная anonymous-регистрация с прежними проверками полей, лимитами, assertion и catalog:read, не новый механизм выдачи прав./api.mdи/mcp.mdотдают существующий API guide;/llms.mdи/.well-known/llms.txt— существующий корневой индекс;/developer.md— developer-ai.txt. Точные nginx aliases, не дополнительные копии документации.- По внешнему отчёту 1.14.20 авторизация Ora уже 1/1, прежние rate/Markdown/batch/docs-MCP зачёты сохранены. Эта редакция не объявляет оставшиеся четыре незачёта заранее закрытыми.
1.14.20 — 2026-10-11
- OpenAPI описывает уже действующие бесплатный read-only sandbox и необязательную anonymous-регистрацию как операции с собственным server. API index сохраняет их точные абсолютные URL, не подставляет /api/v1.
- Новый read-only GET/HEAD /agent/auth проверяет существующее REST-разрешение, native buyer binding и отзыв. Без токена возвращает настоящий 401 с Bearer resource_metadata. Ответ не содержит покупательских данных или идентификаторов разрешения; новых scopes и согласий не создаёт.
- Публичные API-корни, каталог и docs MCP остаются без токена. Старые адреса sandbox/identity не меняются. Реестры, соцпрофили и поисковый зачёт проверяются отдельно: эта версия не объявляет все незачёты Ora закрытыми.
1.14.19 — 2026-10-11
- API-index использует прежний generated JSON через штатный анонимный Bitrix-вход и настоящий discovery-счётчик 30/60. Метаданные имеют отдельный nginx budget 10r/s, не расходующий edge-квоту каталога.
- OpenAPI явно указывает публичный default
security: []; каждая личная операция сохраняет собственные buyerOAuth scopes. - Read-only
POST /api/v1/products/batchчитает 1–10 уникальных product_id с обычной catalog-квотой за каждый ID. Поиск, цены, ownership, корзина и оформление не заменены. - Отдельный
https://vesremont.com/docs/mcpиспользует официальный SDK: только search_docs/read_docs и опубликованные Markdown-ресурсы, без произвольного fetch и личных данных. - Главная сохраняет HTML для обычного браузера. Известные AI bot User-Agent получают существующий home.md; явный
text/markdown;q=0сохраняет HTML. Vary разделяет Accept/User-Agent. - Публикация и баллы Ora проверяются отдельно; эта запись не означает прохождение внешней проверки.
Записи прежних версий ниже — история на указанную дату, не текущие ограничения. Актуальные пути — возможности и корзина по ссылке; фактическая публикация интерфейсов — live discovery.
1.14.18 — 2026-10-11
- Добавлен JSON discovery-вход /api с существующими публичными операциями из OpenAPI, ссылками на первый запрос, sandbox, документацию и разрешения покупателя. Публикация по-прежнему зависит от прежнего флага, не подтверждает здоровье сервиса.
- /api/llms.txt использует тот же файл, что developer index; корень agent-skills — существующий index.json. Варианты API root со слешем и без него не требуют redirect. Неизвестные пути не становятся опубликованными.
- Runtime-операции, OAuth, лимиты каталога, корзина, подтверждение заказа и правила robots.txt не менялись. Балл Ora устанавливается только отдельной внешней проверкой.
1.14.17 — 2026-10-10
- Уточнён путь первого публичного запроса: API Catalog → REST → OpenAPI → GET каталога без регистрации. Publication gate по-прежнему управляется штатной серверной командой; отключённые интерфейсы не объявляются включёнными.
- Публикация discovery не меняет права, OAuth, корзину или подтверждение заказа. Доступность HTTP и результат внешнего аудита проверяются отдельно.
1.14.16 — 2026-10-10
- В agent.json добавлен public_onboarding с первым публичным GET и синтетическим read-only sandbox. Флаги remote_rest_api/remote_mcp по-прежнему обозначают публикацию discovery, а не доступность публичного каталога; это явно объяснено в точках входа.
- В OpenAPI исправлено устаревшее описание sandbox. Он не является вторым сервером полного API и не поддерживает заказы. Права, защитные проверки и runtime-конфигурация не менялись.
1.14.15 — 2026-10-10
- Добавлены официальные профили магазина: ВКонтакте и Telegram. Видимые ссылки подвала и sameAs организации используют общий источник; это не заявление о верификации внешними каталогами.
- Для HTML 404 подключён штатный набор стилей подвала, в том числе при позднем определении ошибки в каталоге. HTTP 404 и Markdown-ответ сохранены.
1.14.14 — 2026-10-10
- Из trustManifest ARD удалено неподдерживаемое поле description; HTTPS identity сохранена без заявлений о независимой сертификации.
- Ссылка на schema map в robots.txt оформлена комментарием, а не нестандартной директивой. Сам schema map и остальные способы обнаружения сохранены.
- Разметка товаров главной дополнена данными каталога и действующими условиями карточки. Microdata и JSON-LD сохранены, отзывы и рейтинги без источника не добавляются.
- Запись описывает изменение исходников, не результат внешней проверки или новый балл аудита.
1.14.13 — 2026-10-06
- Для корневого и четырёх секционных llms.txt доступны точные
.txt.mdпредставления тех же исходников с MIME text/markdown. Основные URL сохранены; приватные и произвольные пути не открываются. - Описания browser WebMCP сообщают действие, результат и побочные эффекты без команд вызвать другие инструменты. Порядок работы остаётся в документации поиска и покупок.
- Уточнены productId и добавляемое количество; схемы, обработчики, аннотации навигации, разрешения и подтверждение заказа не менялись. Внешняя оценка Ora не выводится из этих изменений.
1.14.12 — 2026-10-06
- Browser WebMCP: штатный GET submit поиска не перехватывается deferred-loader; пустой запрос возвращает явную ошибку агенту. Ручной поиск сохранён.
get_visible_productsобъясняет выбор первого результата,open_productоткрывает опубликованную карточку из текущего листинга,get_current_productдополнительно возвращает её описание и характеристики. Навигация не выдаётся за чистое чтение.submit_orderпомечен consequential; серверное подтверждение и логика заказа не менялись. Remote API, OAuth, SDK и три опубликованных skills не изменены.- Регистрация в каталогах и оценка Ora не выводятся из установки или локального теста.
1.14.11 — 2026-10-06
- Главная и developer portal явно ссылаются на индексы каталога, брендов и интеграций. docs/llms.txt также начинается с H1, сохраняя metadata и существующий URL.
- Опубликованные конфигурации Claude Code, Cursor, Windsurf и три skills связаны прямыми ссылками с документацией. Наличие GitHub-файлов не объявляется принятием skills.sh.
- Уточнены Accept и проверяемый ответ синтетического sandbox; публичный MCP handshake отделён от защищённых покупательских инструментов. Убрана двусмысленность между официальным MCP Registry и Smithery.
- Runtime API, OAuth, scopes и покупательские действия не менялись. Поисковая индексация и оценка Ora подтверждаются отдельно.
1.14.10 — 2026-10-06
- Публичный NLWeb list принимает также плоский REST-запрос query/streaming/mode. Оба формата используют один поиск и общий лимит, без покупательских операций. Контракт POST 0.55 сохранён.
- Индексы catalog/llms.txt, brand/llms.txt и developers/llms.txt начинаются с H1 без YAML frontmatter, как формат llms.txt; тематические Markdown сохраняют metadata. URL и полезные переходы не меняются.
- Повторная доступность developer portal, sandbox и индексов проверяется отдельно от поисковой индексации и оценки Ora.
1.14.9 — 2026-10-06
- Добавлена ссылка на официальный MCP Registry: com.vesremont/store 1.0.0. Публикация подтверждена владельцем с внешнего ПК; новый балл Ora проверяется отдельно.
- Исправлена поставка public discovery: /ask исключён из общих редиректов сайта; новые публичные индексы и feed получают права чтения для nginx. Установка дополнительно проверяет чтение от имени действующих nginx workers, без self-HTTP.
1.14.8 — 2026-10-06
- Публичный /ask: NLWeb 0.55 list JSON/SSE поверх существующего поиска и его общего лимита. Без LLM, buyer credentials, сторонних сайтов или операций покупателя.
- Индексы catalog/llms.txt, brand/llms.txt и developers/llms.txt собираются из общей карты задач. Schema Map перечисляет JSONL feed 15 документационных страниц; товарные цены и остатки этим feed не публикуются.
- ARD содержит только самозаявленную HTTPS identity домена, без вымышленных подписей или сертификатов аудита. Новая внешняя приёмка и балл Ora проверяются отдельно.
1.14.7 — 2026-10-06
- Первый вход из AI-справочника главной ведёт в документацию Vesremont API, а не на результат товарного поиска. Пример поиска сохранён и подписан отдельно; тот же порядок публикуется в документации главной.
- Для тематических Markdown-файлов
/llms/*.mdиспользуетсяContent-Type: text/markdown; charset=utf-8. URL и содержимое сохраняются; ошибки и ограничения доступа не подменяются успешным ответом. - Sandbox остаётся синтетическим read-only примером; разрешение покупателя и отдельное подтверждение заказа не меняются. Эта версия не является подтверждением нового балла Ora или смены категории сайта.
1.14.6 — 2026-10-06
- На страницах фильтра и ассортимента бренда появился свёрнутый AI-справочник перед подвалом: листинг → фильтры → карточка и product_id → ссылка на корзину. Выводится отдельным custom:filtr_ai, не через footer и не в AJAX.
- Правила существующей карточки и новых блоков принадлежат общему storefront_ai.php; те же тексты используются в products/catalog/filters/brands Markdown и HTML. Дизайн карточки и логика покупки не изменены; CSS нового компонента находится в assets/css.
- Раскрытие нативное, без JS-переключателя. Публичная подборка не заменяет разрешение на личные операции и подтверждение конкретного заказа.
1.14.5 — 2026-10-06
- Свёрнутый справочник главной перенесён перед товарами. Поиск артикула, карточка/ID, фильтры, API-поиск, cart link и границы личного доступа объясняются до перехода в документацию.
- Краткие инструкции, покупательская памятка и ссылки политики главной и home.md используют общие источники; HTML-зеркало и full text строятся штатным генератором. Runtime API и правила безопасности не менялись.
1.14.4 — 2026-10-06
- Общая карта задач связывает поиск, категории, бренды, фильтры, сравнение, наличие, отзывы, покупательские условия, подборку, личную корзину, заказ, события, интеграцию и обход сайта. Каждый тематический раздел указывает цель, входные данные, результат и причину следующего перехода.
- Задача, транспорт, формат и права разделены. Публичное чтение не отправляет в обязательную регистрацию, browser WebMCP не объявляется единственным интерфейсом, SDK не требуется для прямого MCP, подготовленная ссылка не называется созданным заказом.
- Полный OAuth walkthrough остаётся в auth.md; API-руководство ссылается на него вместо повторения. Уточнены ID, добавляемое/абсолютное количество, полная замена UCP, статусы после заказа и отсутствие автоматической оплаты.
- Генерируемые HTML/Markdown, summaries и Agent Skills используют согласованные переходы. Подзаголовки HTML отображаются как заголовки, а не текст с символами Markdown. История прежних версий сохраняется как история.
- Изменена документация, не бизнес-логика, schemas, права, подтверждение заказа или пакеты SDK. Результат публикации и поведение сторонних AI проверяются отдельно.
1.14.3 — 2026-10-06
- Карточка публикует внутренний product_id и конкретную короткую ссылку на корзину в видимом серверном тексте рядом с покупкой, без необходимости читать data-атрибуты или выполнять JavaScript.
- Путь «артикул → карточка/ID → готовая ссылка» вынесен в начало документации с альтернативами JSON, Markdown и HTML; отсутствие POST-инструмента у модели не объявляется отсутствием cart-link.
- Все тематические документы получили согласованные переходы между поиском, карточкой, передачей подборки, личным OAuth-доступом и подтверждением заказа. Browser session/CSRF не обобщаются на публичный handoff.
- SDK, OAuth scopes, сроки токенов, подпись, CSRF/Origin, ownership и подтверждение заказа не менялись. Это изменение подачи, не новый способ записи одним GET.
Версия имеет формат MAJOR.MINOR.PATCH:
MAJORменяется при несовместимом изменении структурыagent.json, удалении или несовместимом изменении инструмента;MINORменяется при добавлении инструмента, поля результата или новой документированной возможности с сохранением совместимости;PATCHменяется при уточнении текста, примера или метаданных без изменения действующего контракта.
Криптографическая ревизия sha256:... дополняет версию и позволяет проверить точное содержимое текущего набора документов. Версия объясняет смысл изменения, а ревизия меняется при изменении канонических Markdown-файлов, маршрутизатора llms.txt, robots.txt или generated AI-документов.
1.14.2 — 2026-10-06
- Главная и developer portal связывают реальные API/MCP services, четыре опубликованных SDK и CLI через штатный JSON-LD renderer. GitHub sameAs относится к исходникам SDK, Smithery — к MCP-сервису; репозиторий не выдается за идентичность юридического лица. Видимый текст совпадает с разметкой; CSP не ослабляется.
- В кратком llms-маршрутизаторе npm ведёт на публичные metadata закреплённой версии: они содержат имя, CLI bin, homepage и integrity. Человеческая npm-страница и прежние ссылки остаются в полном руководстве; anti-bot 403 не обходится.
- Первый публичный API-вызов, границы синтетического sandbox и команды опубликованного CLI доступны непосредственно из точки входа. OAuth, права покупателя, подтверждение заказов и runtime API не меняются. Поисковая индексация и признание внешних реестров подтверждаются отдельно, не локальными тестами.
1.14.1 — 2026-10-05
- Общий индекс, scoped-индекс, API-руководство и их генерируемые представления связаны с опубликованными npm/PyPI/RubyGems/Go SDK версии 0.2.0, исходным репозиторием и карточкой Smithery. Исправлены npm import и команды установки; сохранены альтернативные прямые загрузки.
- Уточнены три разных пути: zero-auth чтение актуального каталога, синтетический read-only sandbox и разрешённые покупателем production-операции. Удалено устаревшее общее утверждение об отсутствии sandbox; тестовое оформление настоящих заказов не обещается.
- Исправления относятся к документации. Пакеты не перепубликовываются; runtime, OAuth scopes, сессии, CSRF/Origin, подтверждение заказа и идемпотентность не меняются. Новый балл Ora подтверждается только новым аудитом после установки.
1.14.0 — 2026-10-05
- Добавлен короткий путь: одно явное согласие покупателя для нескольких интерфейсов REST/MCP/A2A/UCP и отдельные audience-bound tokens через ограниченный OAuth Token Exchange. Сохранены прежние согласия, scopes, привязка к покупателю, отзыв и отдельное подтверждение конкретного заказа; обмен не продлевает срок доступа.
- Кнопка обычной корзины сокращена до «Оформить». Документированы подпись и срок ссылки cart-draft, безопасный перенос в текущую корзину и отсутствие повторного увеличения количества.
- Руководства отражают итоговую схему работающих корзины, избранного, checkout, заказов и уведомлений, штатный Bitrix bootstrap, MCP resources/Apps, cursor pagination и реальные ограничения. Обновлены auth.md, тематические документы, skills, discovery-представления и HTML-зеркала общим генератором.
- Действующие ручные/браузерные пути не удалены. Документация не меняет production-флаги и не заменяет внешнюю проверку новой возможности после установки.
1.13.0 — 2026-10-02
- Опубликован полный контракт REST/OpenAPI, OAuth Authorization Code + PKCE S256, Remote MCP, A2A и UCP: поиск, фильтры, товары, корзина, избранное, checkout, заказы и подписанные уведомления.
- Завершены руководства по audience/resource, scopes, CIMD, native loopback, отзыву разрешений, cart-draft handoff, подтверждению заказа и Idempotency-Key. Browser WebMCP сохраняет самостоятельный session/CSRF-контракт и 26 инструментов.
- Добавлены инструкции установки JS/TypeScript SDK, Python SDK и CLI из пакетов Vesremont. Отдельный sandbox не предоставляется; клиенты работают с настоящим магазином.
- Согласованы тематические Markdown, agent skills, developer/auth/compatibility документы, AI-индексы и HTML-зеркала. Документированный контракт отделён от live discovery: документация не переключает разрешения или серверные флаги.
- Atom feed и криптографическая ревизия обновляются общим генератором из этих же источников. Исторические записи ниже описывают состояние соответствующей версии, а не ограничения текущего контракта.
1.12.0 — 2026-09-29
- Добавлено генерируемое руководство
/llms/api.mdи его HTML-зеркало/for_ai/api_ai/: опубликованные серверные интерфейсы, их схемы, OAuth scopes, ограничения и подтверждение заказа описываются отдельно от browser WebMCP. - Discovery в
agent.json, RFC 9727 API Catalog, developer и auth документации учитывает явные серверные флаги публикации. Наличие реализации не выдаётся за завершённую серверную приёмку; выключенные интерфейсы не объявляются доступными. - Для включённого UCP описаны каталог, permalink, настоящая корзина и передача checkout покупателю с окончательным подтверждением на Vesremont. SDK, публичная CLI, sandbox и MCP Registry в эту публикацию не входят.
1.11.0 — 2026-09-29
- Опубликован stateless agent cart-draft handoff: агент может получить подписанную подборку товаров по ID, передать покупателю
share_url, а сайт перепроверяет данные и переносит подборку в Bitrix-корзину защищённым браузерным POST. Открытие ссылки не создаёт заказ. - В карточке товара и листинге указан URL создания подборки; developer, auth и agent-документация различают этот ограниченный handoff и ещё не опубликованный полноценный OAuth REST/OpenAPI.
1.10.0 — 2026-09-29
- Добавлен generated Atom feed
/feed.xmlс реальными версиями и описаниями изменений публичной документации Vesremont; feed объявлен в общем HTML head и использует опубликованный changelog как источник. - Телефонная ссылка общей шапки использует собственный видимый текст как accessible name без несовпадающего
aria-label; остальные ARIA-атрибуты и видимый текст не изменены. - Проверенные Lighthouse-отчёты подтвердили, что touch targets, responsive image resolution, CLS и redirect audit уже проходят; существующие реальные размеры изображений сохранены без фиктивных атрибутов и изменения качества.
1.9.0 — 2026-09-29
- Каноническая Organization identity получила подтверждённый профиль Яндекс Бизнес через
sameAs;identity.json, JSON-LD сайта и compatibility-документы используют общий источник. - Реальная семишаговая инструкция
/about/how_to_order/получилаHowTo/HowToStepJSON-LD, построенный из того же видимого списка без вымышленных времени, стоимости или материалов. /llms.htmlстал generated облегчённым HTML-представлением/llms.txtбез каталожной шапки, поисковой формы и её placeholder;/llms.txtполучил английский routing-блок и сокращён до восьми основных URL.- Неизвестные
/.well-known/*сохраняют HTTP 404 и получают короткие recovery-ссылки;/privacy/и/terms/ведут на существующие канонические юридические документы и опубликованы в footer. - Главная получила самостоятельные покупательские ответы со ссылками на источники внутри текста, machine-friendly подпись Pricing и семантическую таблицу реальных определений цены и наличия.
1.8.0 — 2026-09-29
- Фактический footer-генератор получил обычную ссылку на уже существующую Developer documentation
/developers/; опубликованные юридические и покупательские ссылки сохранены. /auth.mdпреобразован в последовательный walkthrough текущего browser WebMCP: browser session, CSRF, guest checkout, вызов инструментов, подтверждение заказа и явно отсутствующие remote auth endpoints.- Корневой
/llms.txtсокращён до девяти основных routing-ссылок; подробная карта остаётся в/llms-full.txt,/docs/llms.txtи тематической документации. - Определения цены и статусов наличия на главной стали явными законченными предложениями при сохранении
<dfn>; главная получила стандартныйmeta authorорганизации Vesremont. - Корень
/catalog/, подтверждённый сохранённым production HTML как единственная проверенная HTML-страница без H1, получил один содержательный заголовок; AJAX-ответы каталога не изменены.
1.7.0 — 2026-09-29
- Каноническая identity-модель дополнена единым списком реальных направлений каталога; textual AI-документы одинаково разделяют business name, brand и legal entity.
- Добавлен generated
/auth.mdс фактической моделью browser session + CSRF, гостевым оформлением и цепочкой подтверждения заказа без объявления OAuth или удалённого API. - Добавлена
/developers/— документация существующего browser WebMCP,document.modelContext, 26 инструментов, Agent Skills и trust-страниц. agent.jsonявно связывает browser entrypoint, developer documentation и authentication documentation, сохраняяremote_rest_api: falseиremote_mcp: false.- Корневой
/llms.txtсокращён до компактного routing index; полная тематическая карта остаётся в/docs/llms.txt,/llms/и/llms-full.txt. - Определения коммерческих статусов на главной получили семантический
<dfn>; покупательская документация явно сообщает об отсутствии отдельной подписки на поступление товара. - 404 recovery дополнен Developer documentation, а новые страницы подключены к Markdown negotiation, sitemap, robots, freshness и локальной перевалидации.
1.6.0 — 2026-09-28
- Корневой
/ai.jsonдобавлен как совместимый URL того же generated JSON, который канонически публикуется по/.well-known/ai.json; отдельной копии политики нет. - Каноническая identity-модель явно разделяет бренд Vesremont и юридическое лицо ООО «Афганец» и предоставляет единые краткое и полное описания для AI-документов, JSON-LD и agent metadata.
ai.txtдополнен фактическими identity, discovery, Content-Signal и dynamic-data указаниями без шаблонного текста; добавлен scoped-индекс/docs/llms.txt.- Канонические и формируемые из HTML Markdown-представления получили frontmatter с title, description, canonical и фактической датой версии либо перевалидации.
agent.json,/agents/и developer guide явно фиксируют режимbrowser_webmcp, runtimedocument.modelContext, browser session + CSRF, отсутствие remote REST/MCP и полный текущий список инструментов.- Главная получила видимые определения коммерческих статусов и ссылку на правила чтения динамических цен; ItemList фактически показанных товаров связывается с Product/Offer без создания вымышленных сущностей.
- Проверка всех 43 same-origin ссылок текущего
llms.txtподтвердила HTTP 200 и ожидаемые MIME; bounded warning внешнего сканера не потребовал сокращения маршрутизатора.
1.5.0 — 2026-09-28
- Публичные информационные, каталожные, брендовые, поисковые и agent-страницы получили Markdown-представление из того же финального HTML по
Accept: text/markdownи через прямые.md-URL; отдельная копия динамических данных не создаётся. - HTML и HTTP discovery дополнены связями
llms-txt,llms-full-txt, Markdown alternate и заголовкамиX-Llms-Txt/X-Llms-Full-Txt. - Store, Organization, WebSite и AI-policy используют единое каноническое имя и описание Vesremont.
OAI-SearchBot,Claude-UserиPerplexity-Userпереведены в существующую группу полного доступа для поиска и пользовательских запросов в соответствии с публичной AI-политикой сайта.- Ссылки баннеров, логотипа и изображений товаров получили явные доступные имена; FAQ главной получил видимые ссылки на фактические источники ответов.
- Корень большого брендового Markdown-представления отдаёт компактный алфавитный индекс, а группы брендов читаются по параметру
letterиз того же актуального HTML.
1.4.0 — 2026-09-28
- Добавлена единая точка входа
/agents/, которая перечисляет только действующие browser WebMCP-инструменты, discovery endpoints, политики и обязательное подтверждение передsubmit_order. - Добавлен RFC 9727
/.well-known/api-catalogв формате Linkset JSON; он описывает только существующий browser WebMCP и не заявляет отложенный REST/OpenAPI. - Добавлен Agent Skills Discovery v0.2.0: три generated
SKILL.mdи индекс с SHA-256 точных байтов каждого артефакта. - AI-policy дополнена эквивалентным
/.well-known/ai.json;ai.txtссылается на JSON и использует общий источник identity/policy. - Из одной модели организации генерируются
identity.json,brand.txt, а из общих buyer/capability/policy данных —faq-ai.txt,developer-ai.txt,robots-ai.txtиpricing.md. /index.mdотдаёт тот же физический документ, что/llms/home.md; главная публикует его как Markdown alternate./llm.txtотдаёт тот же физический файл, что/llms.txt, а/llms.htmlиспользует существующее HTML-зеркало без отдельной копии контента.- Опубликован RFC 9116
/.well-known/security.txtс публичным контактом, сроком действия и каноническим URL. - Покупательская документация прямо фиксирует оформление без предварительной регистрации и точную область опубликованного срока возврата средств.
1.3.1 — 2026-09-28
- Единый sitemap-генератор дополнен группой
pageдля главной, корней каталога и брендов, информационных страниц, AI-документации и machine-readable AI endpoints. - Поиск, избранное, корзина и служебные URL намеренно исключены как неканонические или зависящие от пользовательской сессии.
- Статические страницы
/about/*/и/for_ai/*/обнаруживаются тем же генератором по опубликованнымindex.php; отдельный параллельный механизм не создаётся.
1.3.0 — 2026-09-27
- Добавлен ARD-манифест инструментов Vesremont, автоматически построенный из того же списка действий, что и
agent.json. - Канонический актуальный URL —
/.well-known/ard.json; совместимый с Lighthouse 13.5 URL/.well-known/ai-catalog.jsonотдаёт тот же физический файл и не может разойтись с ним. - HTML и HTTP discovery публикуют обе связи
ardиai-catalog; существующиеllms.txt,agent.jsonи WebMCP остаются самостоятельными совместимыми точками входа. - Локальный валидатор проверяет ARD 1.0/Lighthouse: обязательные поля, URN, тип ресурса, единственный
urlилиdata, representative queries и точное соответствие capabilities действиямagent.json.
1.2.0 — 2026-09-26
- Добавлено содержательное Markdown-представление главной
/llms/home.md, которое генератор строит из общего структурированного источника главной страницы. GET /с явнымAccept: text/markdownполучает этот документ без redirect и сContent-Type: text/markdown; charset=utf-8; обычные браузерные запросы продолжают получать HTML.- HTML и Markdown представления корневого URL разделены заголовком
Vary: Accept, чтобы промежуточные кэши не смешивали форматы. - Title, description, основные покупательские сведения, сценарии получения и оплаты и FAQ главной используют тот же источник данных, что и Markdown.
- Из
robots.txtудалена устаревшая директиваHost; AI-группы,Content-Signal,Clean-param, правила доступа иSitemapне изменены.
1.1.0 — 2026-09-25
- В общую full-access группу десяти AI User-Agent добавлен
Crawl-delay: 0как явный сигнал без искусственного замедления обхода. Allow: /сохранён: доступ к публичному контенту и допустимая частота запросов не ограничиваются. Парсеры, не принимающие нулевое значение нестандартной директивы, могут безопасно её игнорировать.Googlebotне входит в эту группу и не поддерживаетCrawl-delay;YandexBotпродолжает использовать прежнюю группуUser-agent: *, а Яндекс не учитываетCrawl-delayс 2018 года.- Валидатор требует ровно один
Crawl-delay: 0в общей группе и не допускает его появления в остальных группах.
1.0.1 — 2026-09-25
- Десять явно разрешённых AI User-Agent объединены в одну стандартную robots.txt-группу с общим
Allow: /. - Политика доступа не изменилась: каждый из десяти токенов по-прежнему получает полный доступ и не входит в restrictive-группы.
- Валидатор проверяет единую группу, уникальность каждого токена и отсутствие дополнительных
AllowилиDisallowвнутри неё. - Группы
Googlebot,YandexBot, остальных crawler-ов,Content-Signal,HostиSitemapне изменялись.
1.0.0 — 2026-09-25
- Зафиксирован текущий публичный baseline
agent.jsonформата AWP0.2. - Зафиксирован набор реально зарегистрированных WebMCP-инструментов для чтения страниц, каталога, карточки товара, корзины, избранного и checkout.
- Связь каждого действия
agent.jsonс одноимённой операцией WebMCP проверяется генератором и валидатором. - В документации возможностей опубликован фактический ответ read-only инструмента
get_cart, полученный черезdocument.modelContextна production 25 сентября 2026 года. - Добавлено это версионируемое описание изменений; последующие изменения структуры
agent.json, состава инструментов, аргументов или результатов должны получать новую запись и новую версию.
Публикация и актуальность
Канонические файлы /llms/*.md собираются один раз в сутки в /llms-full.txt и HTML-зеркала /for_ai/. Текущая версия и точная SHA-256-ревизия публикуются в сгенерированных документах.
/llms-full.txt является статическим текстовым ресурсом и использует следующую политику:
- TTL клиентского кэша — 1 час:
Cache-Control: max-age=3600; - Nginx публикует фактические
ETagиLast-Modifiedстатического файла; - после истечения TTL клиенту следует выполнить условный запрос с
If-None-MatchилиIf-Modified-Since; - если файл не изменился, Nginx может ответить
304 Not Modified; если изменился — вернуть новую полную версию и новые валидаторы кэша.
Эта политика относится к статическому /llms-full.txt. Она не назначает Last-Modified или часовой TTL главной странице, каталогу, фильтрам, карточкам товаров и другим динамическим страницам.
Sitemap-инфраструктура
Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Обнаружить канонические публичные URL для обхода и индексации.
Что нужно на входе: Задача массового discovery. Для одного артикула нужен поиск, а не обход всех shards.
Результат: URL страниц из текущего sitemap index; sitemap не выдаёт права на личные данные.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Навигация по каталогу — прочитать найденные категории · Данные карточки товара — прочитать найденные товары · Поиск по сайту — решить единичный запрос без массового обхода.
Discovery программных интерфейсов
Sitemap обнаруживает публичные страницы и документацию, но не даёт прав на корзину или заказ. Для протоколов используйте RFC 9727 /.well-known/api-catalog, OpenAPI /openapi.json, MCP descriptor /.well-known/mcp.json, A2A Agent Card /.well-known/agent-card.json, UCP profile /.well-known/ucp и OAuth metadata /.well-known/oauth-authorization-server. Условия вызова и полный список интерфейсов: Public API. Agent manifest разделяет документированный контракт и live discovery.
Главный индекс:
https://vesremont.com/sitemaps/sitemap_page.xml
Стандартная точка https://vesremont.com/sitemap.xml возвращает 301 на этот основной индекс. Если агент автоматически пробует /sitemap.xml, следует перейти по редиректу и использовать итоговый sitemap index.
Он создаётся единым генератором из актуального набора валидных URL каталога и публичных статических маршрутов. Каждый shard содержит не более 50 000 URL.
Группы
| Группа | Путь shard | Содержимое |
|---|---|---|
| Бренды | /sitemaps/brand/sitemap-brand-{n}.xml | URL, чей код начинается с brand/ |
| Товары | /sitemaps/card/sitemap-card-{n}.xml | URL, чей код начинается с product/ |
| Каталог/фасеты | /sitemaps/filtr/sitemap-filtr-{n}.xml | остальные валидные catalog URL |
| Публичные страницы | /sitemaps/page/sitemap-page-{n}.xml | главная, корни каталога и брендов, информационные страницы, AI-документация и её machine-readable endpoints |
Фактическое число shards и URL всегда читайте из текущего index. Файлы sitemap являются runtime-результатом генератора и не дублируются в /llms.txt.
Статические и AI URL
Группа page собирается в том же запуске без второго генератора. Она включает /, /catalog/, /brand/, /agents/, опубликованные /about/*/, /for_ai/*/, /llms/ и /llms/*.md, а также llms.txt, совместимые /llm.txt и /llms.html, llms-full.txt, agent.json, /index.md, AI-policy /.well-known/ai.txt и /.well-known/ai.json, RFC 9727 /.well-known/api-catalog, ARD endpoints /.well-known/ard.json и /.well-known/ai-catalog.json, Agent Skills, identity и совместимые generated AI-документы. Новые страницы внутри /about/*/ и /for_ai/*/ подхватываются по наличию публичного index.php.
Поиск, избранное, корзина, служебные и пользовательские URL в sitemap не включаются: их содержимое зависит от запроса или сессии и не является самостоятельной канонической страницей для массового обхода.
Каноничность
Генератор нормализует повторные/краевые слеши, очищает дублирующий brand-фасет у последних brand-разделов и сохраняет старые варианты как 301-редиректы. Для discovery используйте итоговые <loc>, а не внутренние коды.
Source: https://vesremont.com/auth.md
Authentication
Нужна только ссылка с товарами для покупателя? OAuth не нужен: путь передачи корзины. Нужны поиск и данные товара? Начните с публичного GET ниже. Личный доступ и необязательный anonymous credential — разные ветки; не проходите регистрацию ради выдачи cart link.
Vesremont: бесплатный публичный каталог и read-only sandbox. Первый GET выполняется без человека; необязательный anonymous credential не даёт покупательских прав. Стоимость API — 0 RUB; возможности и квоты.
Start here: первый API-вызов без человека
GET /api/v1/products?per_page=1 → items и числовой id. Не нужны API key, аккаунт, cookies, CSRF или OAuth-согласие. Не передавайте Authorization для zero-auth. GET /oauth/sandbox → синтетический JSON, read_only: true, orders_supported: false.
Для машинной проверки sandbox отправьте GET https://vesremont.com/oauth/sandbox с Accept: application/json, без Authorization и cookies. Успех — HTTP 200, environment: "sandbox", synthetic: true, read_only: true, orders_supported: false, items[0].id: "demo-product". При Accept: text/html тот же URL показывает страницу для человека, при Accept: text/markdown — текст. HTML вместо JSON не означает отсутствие sandbox. Это пример формата, не песочница оформления заказов.
Проверить границу личного доступа можно без записи: GET /api/v1/cart без токена должен вернуть 401 и WWW-Authenticate с resource_metadata. У Remote MCP публичны initialize, discovery и каталог; вызов tools/call → get_cart требует cart:read для ресурса https://vesremont.com/mcp. Доступный handshake не означает отключённую авторизацию приватных инструментов. MCP metadata: protected resource.
Выбор ветки: не выполняйте все варианты подряд
Публичное чтение или ссылка-подборка — готово без регистрации. Step 1–8 ниже относятся только к НЕОБЯЗАТЕЛЬНОМУ anonymous catalog credential. Для личных remote-операций переходите к разделу «Remote access»: CIMD, согласие покупателя, PKCE и отзыв. Для действий внутри сайта — «Interaction mode»: browser WebMCP, session/CSRF. После получения доступа вернитесь к своей задаче; заказ всегда подтверждается отдельно.
Step 1 — Discover
Прочитайте PRM → authorization_servers → AS metadata. В agent_auth используйте skill, identity_endpoint, identity_types_supported и sandbox_endpoint. Приватный API возвращает 401 и WWW-Authenticate: Bearer resource_metadata="https://vesremont.com/.well-known/oauth-protected-resource/api/v1".
Step 2 — Pick a method
Каталог: zero-auth или anonymous с catalog:read. Внешние identity_assertion / id-jag и service_auth не поддерживаются. Личные корзина, checkout, заказы: отдельное CIMD/PKCE S256 согласие покупателя, не anonymous credential.
Step 3 — Register
GET /oauth/identity публикует шаблон. Отправьте POST https://vesremont.com/oauth/identity, Content-Type: application/json, тело {"type":"anonymous"}. Сохраните в памяти registration_id и выданный identity_assertion; assertion действует 300 секунд. Не передавайте email, пароль или чужой assertion.
Step 4 — Claim
Пропустите: claim_supported: false; claim endpoint не опубликован. Anonymous нельзя превратить в покупательское разрешение. Не имитируйте Claim и не повышайте scopes.
Step 5 — Exchange the assertion
Один form-urlencoded POST https://vesremont.com/oauth/token: grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer, assertion=<полученный identity_assertion>, scope=catalog:read, resource=https://vesremont.com/api/v1. Кодируйте значения через URLSearchParams. Ответ: access_token, token_type, expires_in (900 секунд), scope. Refresh token не выдаётся.
Step 6 — Use the access_token
Выполните GET https://vesremont.com/api/v1/products?per_page=1 с Authorization: Bearer <access_token>. Результат — items и ID товаров. Токен действует только для REST-каталога, не MCP/A2A/UCP или данных покупателя. Не сохраняйте token/assertion в URL, файлах или логах.
Step 7 — Errors
400 при повторном/просроченном assertion или неверном resource/scope — не повторяйте его; прочитайте OAuth error. 401 при истекшем/отозванном token — удалите его. При 429 дождитесь Retry-After. 403 не даёт права обходить scope/ownership. Для личной операции получите отдельное согласие; неопределённую отправку заказа не повторяйте с новым Idempotency-Key.
Step 8 — Revocation
Form-urlencoded POST https://vesremont.com/oauth/revoke: token=<access_token> и client_id=<registration_id>. Затем удалите credential. Предъявление отозванного token получает 401; независимое публичное чтение без credentials остаётся доступным. Истечение требует новой anonymous регистрации, не человека.
Совместимый адрес шага Register — POST /api/agents/register, со слешем также без redirect. Это тот же обработчик /oauth/identity: JSON {"type":"anonymous"}, прежние поля ответа и дальнейшие шаги Exchange/Use/Revocation. Новых прав и отдельной регистрации нет.
Подробности: покупатель, browser WebMCP и одно общее согласие
Ниже две независимые ветки: browser session/CSRF для открытой страницы и Remote access для внешнего клиента. Публичный каталог и передача подборки не требуют ни одной из них. Гостевая сессия покупателя допустима; отсутствие логина не означает отсутствие сессии или права обходить проверки.
Interaction mode
Interaction mode: browser_webmcp
Runtime: document.modelContext
Browser WebMCP Authentication: browser_session_and_csrf
Browser WebMCP работает внутри открытой страницы сайта с её browser session и CSRF. Удалённые REST, MCP, A2A и UCP работают по собственному контракту OAuth PKCE, описанному ниже. Не переносите browser cookies во внешний клиент и не используйте access token как CSRF-токен.
Browser session
WebMCP-инструменты работают в контексте текущей браузерной сессии Vesremont. Корзина, избранное и состояние checkout относятся к этой сессии, поэтому после навигации или изменения данных агент повторно читает document.modelContext и актуальное состояние страницы.
CSRF protection
Изменяющие состояние WebMCP-действия используют серверную CSRF-проверку текущей сессии. Агент вызывает опубликованные инструменты через document.modelContext и не обращается напрямую к внутренним Bitrix/AJAX endpoint.
Guest checkout
Предварительная регистрация или вход перед checkout не требуются: login_required_before_checkout = false. Покупатель указывает контактные данные при оформлении; сервер создаёт или связывает внутреннюю учётную запись в рамках обработки заказа.
Calling WebMCP tools
- Открыть Vesremont в браузере с поддержкой WebMCP.
- Прочитать текущий
document.modelContextи доступный для страницы список инструментов. - Вызвать нужный опубликованный инструмент в контексте текущей browser session.
- После перехода на другую страницу снова прочитать
document.modelContext, потому что набор контекстных инструментов может измениться.
Creating an order
- Вызвать
prepare_orderи получить полную актуальную сводку и одноразовый token подтверждения заказа. - Показать сводку пользователю и получить явное подтверждение.
- Один раз вызвать
submit_orderсconfirmed: trueи полученным token. - При изменении корзины, checkout или истечении token повторить подготовку и подтверждение.
Token из prepare_order подтверждает только конкретную подготовленную сводку заказа. Это не login token, access token или OAuth credential.
Remote access
Чтобы проверить существующее REST-разрешение без чтения корзины, используйте GET /agent/auth. Без токена — 401 с Bearer resource_metadata; с действующим buyer token — только resource, scopes, expires_at и признак проверки живой сессии. Не возвращаются покупательские ID, контакты, токен или grant_id. Catalog credential и токены для другой audience здесь не подходят. Проверка не выдаёт новых прав и не подтверждает заказ.
Бесплатный sandbox и необязательная anonymous-регистрация объявлены отдельными операциями OpenAPI с собственным server https://vesremont.com. Не добавляйте /api/v1 перед /oauth/sandbox, /oauth/identity или /agent/auth. Sandbox остаётся синтетическим read-only примером, не второй реализацией магазина.
Удалённый доступ отделён от browser WebMCP. Публичное чтение каталога не требует токена. Корзина, избранное, checkout и заказы требуют разрешения покупателя и Bearer access token; cookies удалённого клиента не выбирают корзину покупателя.
Покупательский OAuth — отдельная ветка
Следующая последовательность нужна только для личных remote-операций. Публичный GET не требует токена; необязательный anonymous credential ограничен REST catalog:read и описан в начале этого auth.md. Он не превращается в разрешение покупателя. Вход в аккаунт магазина и согласие на доступ приложения — разные действия; покупатель может работать в гостевой сессии.
Короткий путь: одно согласие для нескольких интерфейсов
Если агенту нужны REST, MCP, A2A и UCP, покупатель может разрешить их на одной странице. Это дополнительный путь; прежние восемь этапов и отдельное согласие для одного интерфейса сохраняются. Общее разрешение не является подтверждением заказа.
- Создайте обычный Authorization Code + PKCE S256 запрос. В
resourceукажите основной интерфейс, напримерhttps://vesremont.com/api/v1. В дополнительном параметре Vesremontconsent_resourcesперечислите нужные resource URL через пробел. Список должен содержать основной resource, без повторов и посторонних адресов. ИспользуйтеURLSearchParams, не склеивайте URL вручную. - В
scopeзапросите только права, нужные задаче. Покупатель видит все интерфейсы и права и один раз нажимает «Разрешить доступ» либо «Отказать». Разрешённые scopes действуют для каждого явно перечисленного интерфейса; новых прав при обмене не появляется. UCP имеет собственные manage scopes — не заменяйте ими REST scopes и не запрашивайте их только ради публичного каталога. - Обменяйте code один раз для основного resource, как описано в Exchange ниже. Для остальных одобренных интерфейсов получите отдельные Bearer tokens через тот же
/oauth/token, используя ограниченный OAuth Token Exchange (RFC 8693).
Пример параметров общего согласия для чтения корзины через REST/MCP/A2A:
const params = new URLSearchParams({
response_type: 'code', client_id, redirect_uri, state,
code_challenge, code_challenge_method: 'S256',
resource: 'https://vesremont.com/api/v1', scope: 'cart:read',
consent_resources: [
'https://vesremont.com/api/v1',
'https://vesremont.com/mcp',
'https://vesremont.com/a2a'
].join(' ')
});
const authorizationUrl = 'https://vesremont.com/oauth/authorize?' + params;
Для UCP добавьте https://vesremont.com/ucp/v1 в тот же список и только необходимые UCP scopes. После первичного обмена отправьте form-urlencoded POST:
grant_type=urn:ietf:params:oauth:grant-type:token-exchange
subject_token_type=urn:ietf:params:oauth:token-type:access_token
subject_token=<исходный access_token основного интерфейса>
client_id=<тот же client_id>
resource=https://vesremont.com/mcp
scope=cart:read
scope можно только сузить; без него сохраняются scopes исходного токена. Ответ содержит access_token, issued_token_type, token_type, expires_in, scope. Каждый выданный токен имеет одну аудиторию: REST token по-прежнему не принимается MCP/A2A/UCP. Полученные таким обменом токены нельзя обменивать дальше. Прежнее разрешение без списка дополнительных интерфейсов не даёт доступа к ним.
Обмен не продлевает срок: новый токен истекает не позже исходного токена и разрешения. Refresh tokens не выдаются. Отзыв исходного токена прекращает использование всех его производных; отзыв одного производного прекращает только его доступ. Отзыв общего разрешения покупателем закрывает все связанные интерфейсы. Для продолжения после истечения снова требуется согласие покупателя.
Дальнейшая подготовка выполняется агентом автоматически в пределах разрешения. Конкретный заказ покупатель отдельно подтверждает на сайте по реальной сводке товаров, суммы, получения, оплаты и контактов. CSRF/Origin, живая привязка к покупателю, ownership и Idempotency-Key остаются обязательными.
Discover
Шаг 1 — обнаружить авторизацию.
Прочитайте OAuth metadata и OpenAPI. Их Markdown-представления: OAuth walkthrough и API guide. Это инструкции, не копии машинных схем. Документация описывает реализованный контракт; доступность удалённых интерфейсов определяется live discovery, а не наличием этой инструкции.
Pick method
Шаг 2 — выбрать способ доступа.
Публичное чтение каталога не требует регистрации или токена. Личные операции используют OAuth Authorization Code, PKCE S256 и обязательный resource. Password grant, client credentials, refresh token и OIDC не поддерживаются. Browser WebMCP использует браузерную сессию и CSRF, а не REST Bearer token.
Register
Шаг 3 — представить клиент.
Опубликуйте свой HTTPS Client ID Metadata Document (CIMD). Его URL — client_id. Динамического registration endpoint нет; не отправляйте запрос на выдуманный /register. Преднастроенный native CLI описан отдельно ниже.
Пример CIMD — замените домен и callback собственными HTTPS-адресами:
{
"client_id": "https://your-app.example/oauth/client.json",
"client_name": "Your application",
"redirect_uris": ["https://your-app.example/oauth/callback"],
"grant_types": ["authorization_code"],
"response_types": ["code"],
"token_endpoint_auth_method": "none"
}
Claim
Шаг 4 — идентифицировать приложение, не покупателя.
Отдельного claim endpoint или API key для доступа к покупателю нет; анонимный ключ каталога не заменяет его согласие. Сервер получает CIMD по HTTPS: client_id должен совпасть с URL документа, redirect_uri — точно с одним из опубликованных URI. CIMD — метаданные public client, не секрет и не аутентификация покупателя. PKCE связывает обмен кода с исходным verifier; сам по себе он не удостоверяет владельца домена или личность покупателя. Доступ к покупателю даёт только его согласие на Vesremont.
Authorize
Шаг 5 — получить согласие покупателя.
Сгенерируйте случайные PKCE verifier и state; храните их на стороне клиента. code_challenge = BASE64URL(SHA256(verifier)), без padding. Откройте покупателю /oauth/authorize?response_type=code&client_id=...&redirect_uri=...&scope=...&resource=...&state=...&code_challenge=...&code_challenge_method=S256. Кодируйте каждое значение параметра отдельно.
Покупатель на Vesremont видит приложение, запрашиваемые права и получателя токена и сам разрешает доступ. Предварительная регистрация для гостевой корзины не обязательна. Вернувшись в callback, проверьте точное совпадение state и ожидаемый issuer, если он передан. При отказе не продолжайте личные операции.
Exchange
Шаг 6 — обменять одноразовый код.
В течение 5 минут отправьте form-urlencoded POST на /oauth/token: grant_type=authorization_code, code, исходные client_id, redirect_uri, resource, code_verifier. Код одноразовый. Токен живёт до 15 минут, исходное разрешение — до 1 часа; ориентируйтесь на expires_in, а не на собственные предположения. Никогда не публикуйте verifier, code или token.
Use
Шаг 7 — выполнить разрешённую операцию.
Передавайте токен только в Authorization: Bearer … по HTTPS. Не помещайте его в URL, логи или ссылки для покупателя. При истечении снова получите согласие; автоматического refresh нет. После неопределённого исхода записи перечитайте состояние, не повторяйте заказ с новым ключом.
resource выбирается отдельно для токена: https://vesremont.com/api/v1, https://vesremont.com/mcp, https://vesremont.com/a2a либо https://vesremont.com/ucp/v1. Используйте только опубликованные интерфейсы. Токен одного получателя не подходит другому; общее согласие позволяет получить отдельные токены описанным выше обменом. Запрашивайте минимальные scopes из OpenAPI/описания инструмента; UCP использует dev.ucp.shopping.cart:manage и dev.ucp.shopping.checkout:manage.
Revocation
Шаг 8 — отозвать доступ.
Form-urlencoded POST /oauth/revoke с token и client_id. Отзыв исходного токена прекращает доступ и его производных. Покупатель может отозвать всё разрешение и связанные уведомления на странице разрешений. Выход из аккаунта, смена пользователя или потеря исходной браузерной сессии прекращают доступ к её данным. Клиент должен удалить отозванные токены; успешный revoke не разрешает дальнейшие операции.
Errors
OAuth возвращает поле error; REST использует application/problem+json и code. Это разные контракты ошибок: не считайте любой HTTP 200 доказательством полученных прав. Проверяйте HTTP status, формат и обязательные поля ответа.
- При отказе покупателя (
access_denied) остановите flow; новый запрос согласия возможен только по его действию. - При неверном
state, issuer или неожиданном callback отклоните ответ. Не обменивайте код и не продолжайте личные операции. - При
invalid_grantне повторяйте обмен одноразового кода: он мог истечь, быть использован или не соответствовать PKCE/resource. Начните новое разрешение покупателя. - При REST 401 прекратите использование токена; при необходимости получите новое разрешение. При 403 проверьте scopes и resource, не подменяйте пользователя или cookies.
- При 429 соблюдайте
Retry-After, если он передан. При сетевом сбое или 503 не считайте запись успешной: перечитайте состояние перед повтором; для заказа сохраняйте исходный Idempotency-Key.
Для поддержки сохраняйте только безопасный request_id, если он есть. Не записывайте authorization code, verifier, токены, полный callback URL, cookies или контакты покупателя в общие логи.
Native CLI
Преднастроенный public client vesremont-cli использует loopback callback http://127.0.0.1:{port}/callback только на компьютере покупателя. Самостоятельному приложению не следует выдавать себя за этот клиент: HTTPS-интеграция использует собственный CIMD. CLI открывает Authorization Code + PKCE flow, проверяет state, обменивает код и отзывает токен при завершении команды. Встроенный CLI использует порт 8765; он должен быть свободен. HTTP допускается только для этого loopback callback, а API и OAuth endpoints остаются HTTPS.
Browser consent и CSRF
Согласие на доступ, подтверждение заказа и UCP review обрабатывает сайт в текущем браузерном контексте. Страница публикует CSRF-токен, JavaScript передаёт его в изменяющем POST, сервер выполняет действующую проверку. PKCE и state не заменяют эту защиту. Внешний агент открывает страницу покупателю и не отправляет согласие или подтверждение вместо него; при отказе не продолжает личные операции.
Origin браузерного приложения должен быть явно разрешён оператором для CORS. CORS не заменяет OAuth. Серверный клиент не должен подделывать browser Origin. Наличие UCP profile, Agent Card или MCP descriptor также не даёт прав на покупателя.
- OAuth: not currently used for browser WebMCP
Отдельный stateless endpoint GET https://vesremont.com/api/v1/cart-drafts/?product_id={id} выдаёт только подписанную подборку ID товаров и количества. Добавьте quantity или существующий draft, чтобы увеличить подборку. Ответ содержит share_url; при открытии покупателем цены перепроверяются, а перенос в настоящую корзину выполняется браузерным POST с текущим CSRF-токеном. Ссылка не создаёт заказ и не заменяет OAuth/API checkout.
Browser WebMCP и удалённые интерфейсы не смешивают сессионные cookies и OAuth credentials. Текущий состав опубликованных интерфейсов указан отдельно в agent.json и API-документации.
Developer documentation: https://vesremont.com/developers/
Agent documentation: https://vesremont.com/agents/
Capability manifest: https://vesremont.com/agent.json
После авторизации: корзина, избранное и подтверждение заказа · поля операций, статусы и webhooks. Не запрашивайте новые права, если задача завершилась публичным чтением или передачей ссылки.
Title: Аутентификация Vesremont: browser session, CSRF и OAuth PKCE
Description: Авторизация browser WebMCP и REST/MCP/A2A/UCP: session, CSRF, PKCE S256, scopes, resource, отзыв разрешений и подтверждение заказа.
Canonical: https://vesremont.com/auth.md
Last modified: 2026-10-26
Source: https://vesremont.com/pricing.md
Цены и оплата на Vesremont
Индекс документации: https://vesremont.com/llms.txt — используйте его для обнаружения остальных публичных страниц и машинных представлений Vesremont.
Vesremont — интернет-магазин, а не подписочный SaaS. Здесь описаны стоимость товаров, проверка суммы заказа и опубликованные способы оплаты. Единой фиксированной таблицы цен или подписочных тарифов нет: цена относится к конкретному товару и меняется вместе с каталогом.
Режимы доступа: стоимость, возможности и ограничения
За вызовы описанных интерфейсов реализация Vesremont не взимает отдельную плату. Это не обещание безлимитной мощности или SLA. Подписочные платные API-тарифы и платные обновления квоты не предлагаются. Оплачиваются товары и согласованные услуги получения, а не выдача OAuth-разрешения.
| Режим | Цена доступа | Возможности | Пределы |
|---|---|---|---|
| Публичный каталог (production) | 0 RUB за доступ; без подписки | Поиск, карточки, цены и доступность; без API key | catalog — 120 запросов/минуту, search — 30; без личных данных |
| Анонимный catalog credential | 0 RUB за выдачу и доступ | Только публичное REST-чтение, scope catalog:read | Assertion 5 минут, одноразовый обмен; token 15 минут, без refresh или покупательских прав |
| Read-only sandbox | 0 RUB | Синтетический пример /oauth/sandbox, не реальные предложения магазина | GET/HEAD, без изменения корзины, оформления, оплаты и отправки в 1С |
| Доступ по согласию покупателя | 0 RUB за API-доступ | Разрешённые корзина, избранное, checkout, заказы и webhooks | scopes/ownership; отдельное подтверждение заказа; товарные цены и доставка не входят в цену API-доступа |
Бесплатный режим — Free tier
Цена доступа: 0 RUB. Это действующий режим публичного чтения, не временная trial-подписка. Регистрация, банковская карта, платёжные реквизиты и браузерное согласие не нужны. Первый вызов: GET /api/v1/products?per_page=1.
Включены поиск по названию/артикулу, чтение карточек, текущих цен и опубликованного остатка. MCP/A2A также предоставляют публичные операции поиска и товара; UCP-каталог сохраняет проверку Content-Digest. Доступ не включает корзину, историю заказов или другие личные данные.
Free plan: включённые возможности
- REST catalog search:
GET /api/v1/products?q={название_или_артикул}; параметр кодируется как query value. - Product details:
GET /api/v1/products/{id}; используйте числовой ID из ответа поиска. - Pagination: размер страницы и следующий cursor берутся из действующего REST-контракта; не скачивайте весь каталог одним запросом.
- Product pricing: актуальная цена за единицу и опубликованная валюта; неизвестная цена остаётся
null. - Availability: опубликованный остаток и возможность заказа; это не обещание выдачи сегодня.
- Remote MCP / A2A: публичные инструменты поиска и чтения товара без покупательского токена.
- UCP catalog: публичное чтение с обязательными transport headers и проверкой Content-Digest.
- Cart handoff: подписанная ссылка на подборку не даёт доступа к чужой корзине и не оформляет заказ.
Free plan: что не входит
- Чтение или изменение личных корзин, избранного и checkout без согласия покупателя.
- История чужих заказов, чужие webhooks или произвольный доступ к внутренним данным Bitrix.
- Неограниченная частота запросов, выделенная мощность, платное повышение квоты или договорный SLA.
- Автоматическое подтверждение заказа, списание оплаты или подтверждение доставки.
Самостоятельный catalog credential
Цена выдачи и использования: 0 RUB. Identity endpoint доступен без аккаунта; JSON-шаблон регистрации — {"type":"anonymous"}. Assertion действует 5 минут и обменивается один раз на REST-токен catalog:read сроком 15 минут. Walkthrough описывает регистрацию, обмен, вызов и отзыв.
Этот credential не расширяет публичные возможности и не повышает квоту. Он не является бессрочным API key; refresh, Claim, корзина и покупательские scopes не поддерживаются. Новый credential не служит способом обхода rate limit.
Credential plan: цена и жизненный цикл
- Registration price: 0 RUB;
POST /oauth/identityс JSON{"type":"anonymous"}. - Exchange price: 0 RUB; полученный assertion обменивается только один раз на
/oauth/token. - Usage price: 0 RUB за публичное REST-чтение; token не даёт скидки или надбавки к товарной цене.
- Assertion lifetime: 300 секунд; просроченный или повторный assertion отклоняется.
- Access token lifetime: 900 секунд; действуют фактические
expires_inи права ответа. - Included scope: только
catalog:read; resource —https://vesremont.com/api/v1. - Excluded features: refresh token, Claim, внешний ID-JAG,
service_auth, личные данные и перенос токена в другой протокол. - Cancellation:
/oauth/revoke; после отзыва token не принимается даже публичным endpoint.
Бесплатный read-only sandbox
Цена доступа: 0 RUB. GET /oauth/sandbox возвращает синтетический товар и пример структуры цены. Ответ явно содержит synthetic: true, read_only: true, orders_supported: false. Для знакомства с форматом не нужны credential или браузер.
Цены sandbox не являются предложениями магазина. Здесь нельзя проверить настоящую оплату, резервирование, доставку, создание заказа или обмен с 1С. Для актуальных предложений используйте production-каталог, для заказа — обычную подтверждаемую процедуру магазина.
Sandbox plan: цена и ограничения
- Price: 0 RUB; нет trial-периода, карты для регистрации или последующего автоматического списания.
- Endpoint: GET /oauth/sandbox; не нужны token, cookies или согласие.
- Dataset: синтетический пример;
synthetic: true,read_only: true,orders_supported: false. - Included: знакомство с JSON-форматом товара, RUB и целыми копейками примера цены.
- Excluded: реальный склад, изменение корзины, заказ, платёж, доставка, webhooks заказов и обмен с 1С.
- Limits: endpoint не отменяет общие ограничения HTTP и discovery; 429 требует ожидания, не повтора записи.
Покупательский доступ — не платный API-план
Цена API-доступа: 0 RUB. После согласия доступны только разрешённые scopes, resource и данные конкретного покупателя. REST, MCP, A2A и UCP могут использовать одно общее согласие с отдельными audience-bound токенами. Это не безлимитный тариф и не расширение прав anonymous credential.
Товары и согласованное получение оплачиваются отдельно по актуальному checkout. Подписка, плата за токен или дополнительное API-списание к заказу не добавляются. OAuth-согласие само по себе не создаёт заказ, не подтверждает сумму и не означает оплату.
Buyer access: возможности и отдельные расходы
- API price: 0 RUB; согласие не открывает платную подписку.
- Cart / favorites: доступны только данные разрешившего покупателя и только необходимые scopes.
- Checkout: способы получения, оплаты и контакты берутся из текущего состояния магазина.
- Orders / webhooks: чтение и уведомления ограничены ownership, разрешением и действующим контрактом.
- Protocols: одно согласие может включать REST/MCP/A2A/UCP, но каждый токен имеет собственную аудиторию.
- Confirmation: каждый заказ отдельно подтверждается покупателем по актуальным товарам и сумме.
- Goods price: переменная цена конкретных товаров из production-каталога и checkout; не 0 RUB за товар.
- Delivery price: только рассчитанные или согласованные условия заказа;
nullне означает бесплатную доставку. - Payment: сохранение заказа и выбор метода не доказывают успешное списание.
Квоты и срок доступа
| Policy | Запросов | Окно |
|---|---|---|
| catalog / read | 120 | 60 секунд |
| search / discovery | 30 | 60 секунд |
| mutation | 60 | 60 секунд |
| submit / webhook | 10 | 60 секунд |
| oauth / oauth_revoke | 20 | 60 секунд; отзыв имеет отдельный бюджет |
Квоты действуют на IP либо разрешение покупателя по операции; регистрация anonymous дополнительно ограничена глобальной discovery-квотой. nginx имеет отдельную защитную квоту. Не создавайте новые идентичности для обхода лимита. RateLimit-Policy задаёт q/w, RateLimit — r/t; RateLimit-Reset — относительные секунды, а X-RateLimit-Reset — Unix timestamp. При 429 дождитесь Retry-After. Остаток — подсказка, не зарезервированная мощность. Ранние отклонения могут не содержать application rate headers.
Где получить актуальную цену?
Проверяйте цену на текущей странице товара, в актуальном листинге и затем в корзине перед подтверждением заказа. Для браузерного агента доступны get_current_product, get_visible_products и get_cart; стабильный перечень инструментов опубликован в agent.json.
Удалённый клиент читает актуальную цену через REST /api/v1/products/{product_id} или каталог MCP/A2A/UCP. REST использует рубли; UCP — целые копейки и currency: RUB. Неизвестная цена равна null, а не нулю. Итог, доставка и оплата проверяются в текущем checkout. Контракт: Public API.
| Значение | Как трактовать |
|---|---|
| Текущая цена товара | Цена за единицу из актуального ответа или страницы, не из этой документации. |
| Валюта и единицы | REST — рубли; UCP — целые копейки, RUB. Не смешивайте эти единицы при расчёте. |
null вместо цены | Стоимость неизвестна; не показывайте товар как бесплатный и не придумывайте сумму. |
| Остаток | Не является ценой или обещанием самовывоза сегодня. Проверяйте условия получения отдельно. |
| Скидка и старая цена | Показывайте только при наличии соответствующих актуальных данных, не вычисляйте рекламную скидку самостоятельно. |
updated_at: null | Достоверное время обновления не опубликовано; нельзя обещать свежесть до секунды. |
Стоимость заказа и доставки
Количество, текущие товарные цены, доступные способы получения и оплаты проверяет сервер. Агент не передаёт собственные цены в корзину. Сумма товарных строк не заменяет итог checkout: получение и его стоимость должны быть подтверждены для конкретного заказа.
Если стоимость доставки или окончательный итог ещё не рассчитаны, удалённый checkout оставляет соответствующие значения null. Не заменяйте их нулём, не обещайте бесплатную доставку и не выдавайте неполную сводку за финальный счёт. Доступные delivery/payment ID берите из текущего checkout, а не из другого заказа или документа.
Доступ к API и покупка — разные действия
Публичное production-чтение каталога не требует Bearer token, API key или регистрации агента. Это способ начать интеграцию, а не обещание безлимитного API-тарифа: действуют опубликованные ограничения запросов. Документ не устанавливает отдельные платные или бесплатные подписки на API.
Корзина, checkout и заказы относятся к разрешившему доступ покупателю. Используйте OAuth PKCE, минимальные scopes и правильный resource. Browser WebMCP сохраняет сессионную модель. Доступ к данным, добавление товара и подготовка заказа не означают оплату или окончательное подтверждение магазином. Отдельного sandbox для заказов нет: /oauth/sandbox — только синтетические read-only данные.
Какие способы оплаты поддерживаются?
Опубликованы наличные, СБП, банковская карта онлайн и безналичный счёт с НДС для организаций. Фактически доступный способ зависит от состава заказа, способа получения, региона и согласованных условий.
Агент не передаёт платёжные реквизиты карты и не считает выбор способа оплаты доказательством списания. Покупатель проверяет сводку и выполняет предусмотренное сайтом подтверждение. Налоговые условия и реквизиты счёта берутся из действующих условий магазина, а не из предположений агента.
Проверка цены перед заказом
- Найдите товар в публичном каталоге и прочитайте текущую карточку по его ID. Убедитесь, что цена известна, проверьте валюту и количество.
- Получите разрешение покупателя для личных операций либо работайте через текущий browser WebMCP. После изменения перечитайте корзину.
- Прочитайте checkout, выберите реально доступные способы получения и оплаты; неизвестные суммы явно обозначьте как неизвестные.
- Подготовьте заказ, покажите покупателю актуальную сводку и получите необходимое подтверждение. Изменение состава или checkout требует новой проверки.
- После отправки прочитайте сохранённое состояние. Успешное сохранение заказа не подменяет статус его оплаты или подтверждение магазином.
Канонические покупательские условия
Не используйте этот документ как товарный прайс-лист и не кэшируйте из него цену конкретного товара. Следующий шаг выбирается по задаче: поиск, корзина и подтверждение заказа, получение прав или интеграция и обработка лимитов.
Title: Цены и оплата на Vesremont
Description: Текущие цены товаров, рубли и копейки, неизвестные суммы, доставка, способы оплаты и проверка заказа Vesremont.
Canonical: https://vesremont.com/pricing.md
Last modified: 2026-10-26