Xohlayman for developers v1

Превратите карточку товара в понятное желание.

Одна ссылка или скрипт без зависимостей добавляет на ваш сайт кнопку, которая безопасно передаёт товар в редактор Xohlayman.

Без SDKHTTPS-only18 местных магазинов
GET/add307
shop.exampleSony WH-CH520620 000 so‘m
01Параметры валидируются
02Переход только в /app
03Пользователь подтверждает

Скрипт не читает корзину, cookies или данные покупателя.

Живой предпросмотр

Так кнопка выглядит в карточке товара

Кнопку ниже монтирует тот же публичный файл, который вы подключаете на своём сайте.

shop.example/products/headphones•••
NEW
AUDIO · БЕСПРОВОДНЫЕ

Sony WH-CH520

Лёгкие наушники для музыки, работы и долгих прогулок.

620 000 so‘m
Быстрый старт

Выберите способ подключения

Оба варианта ведут через одинаковый безопасный контракт /add.

Рекомендуется

Готовая кнопка

Добавьте data-атрибуты рядом с вашей кнопкой покупки и один асинхронный скрипт на страницу.

<div
  data-xohlayman-button
  data-title="Sony WH-CH520"
  data-url="https://shop.example/products/sony-wh-ch520"
  data-image="https://shop.example/images/sony-wh-ch520.jpg"
  data-price="620000"
  data-store="My Store"
></div>
<script async src="https://xohlayman.uz/xohlayman-button.js"></script>
Без JavaScript

Обычная ссылка

Сформируйте URL на сервере или прямо в шаблоне карточки товара.

<a href="https://xohlayman.uz/add?url=https%3A%2F%2Fshop.example%2Fproducts%2Fsony-wh-ch520&title=Sony%20WH-CH520&price=620000&store=My%20Store">
  Add to Xohlayman
</a>
SPA И ДИНАМИЧЕСКИЙ КАТАЛОГ

Монтируйте после обновления DOM

Скрипт сам замечает новые карточки. Публичный метод полезен, когда ваш фреймворк переиспользует существующий узел.

const mount = document.createElement('div');
mount.dataset.xohlaymanButton = '';
mount.dataset.title = product.name;
mount.dataset.url = product.canonicalUrl;
mount.dataset.price = String(product.priceUzs);
document.querySelector('.buy-actions').append(mount);

window.XohlaymanButton?.mount(mount);
Контракт /add

Поддерживаемые параметры

Ни один параметр не даёт права сохранить подарок автоматически. Неизвестные и небезопасные значения отбрасываются.

urldata-url
HTTPS URL · до 2048 символов

Каноническая ссылка на товар. Фрагмент #… удаляется; логины, пароли, порты и HTTP-ссылки не принимаются.

titledata-title
Текст · до 160 символов

Название, которое попадёт в редактор желания. Управляющие символы удаляются, повторные пробелы схлопываются.

imagedata-image
HTTPS URL · до 2048 символов

Публичное изображение товара. Браузер загрузит его только после явного подтверждения пользователя в редакторе.

pricedata-price
Целое число · UZS

Цена без пробелов, валютного знака и десятичной части: например, 620000. Допустимы значения до 999 999 999 999.

storedata-store
Текст · до 80 символов

Отображаемое название магазина или продавца.

kinddata-kind
gift | fund

Предлагаемый тип: обычный подарок или общий сбор. Пользователь сможет изменить выбор перед сохранением.

prioritydata-priority
must | want | nice

Предлагаемый приоритет желания. Неизвестные значения игнорируются.

Только для виджета

Внешний вид и поведение

data-label
Свой текст кнопки, до 60 символов. По умолчанию: Add to Xohlayman.
data-variant
solid (по умолчанию) или outline.
data-size
default или compact; оба варианта сохраняют tap target не меньше 44px.
data-new-tab
Новая вкладка включена по умолчанию; укажите false для текущей.
Поддержка магазинов

Ссылка не потеряется, даже если магазин закрыт от роботов

Из известных магазинов Xohlayman либо читает публичные метаданные, либо сохраняет ссылку и открывает редактируемую карточку.

15 магазинов

Автозаполнение

Пробуем получить название, изображение и цену.

Podarok.co.uzMETAAsaxiyMETAOlchaMETATexnomartMETAMediaparkMETAYandex MarketMETAOLXMETAAlif ShopMETABeeMarketMETAGlotrMETAideaAPIiSpaceMETABuyMarketMETATovar.uzMETABirmarketAPI
3 магазинов

Ссылка + проверка

Антибот не мешает добавить желание вручную.

Uzum MarketLINKWildberriesLINKOzonLINK
Безопасный маршрут и строгий CSP

/add принимает только перечисленные поля, HTTPS-ссылки без credentials и всегда перенаправляет на тот же origin в /app. Произвольный redirect передать нельзя. Если сайт использует nonce в style-src, укажите тот же nonce у подключаемого скрипта — виджет перенесёт его на свои стили.

MCP-СЕРВЕР

Xohlayman в ChatGPT и Claude

Подключите Xohlayman как MCP-сервер — и списком можно управлять прямо в разговоре: «что ещё нужно Малике на свадьбу», «добавь кофеварку за 890 000». Транспорт — JSON-RPC 2.0 по HTTP, отдельный SDK не нужен.

Адрес сервераhttps://xohlayman.uz/api/mcp

Без токена — только публичное

Поиск идей в подборке, чтение открытого списка по коду ссылки, публичный профиль, проверка поддержки магазина. Ровно то, что и так видит любой человек со ссылкой.

search_gift_ideas, get_wishlist, get_profile, check_store_support, list_supported_stores

С токеном — свой аккаунт

Токен создаётся в настройках профиля (или в кабинете магазина) и передаётся заголовком Authorization: Bearer <токен>. Cookie сервер не читает вообще: у эндпойнта нет «попутных» прав, которые могла бы позаимствовать чужая страница.

  1. Откройте «Мой профиль» → «Доступ для ChatGPT и Claude» и создайте токен.
  2. Скопируйте его сразу — мы храним только отпечаток и больше не покажем.
  3. В настройках коннектора укажите адрес сервера и токен в поле авторизации.
Токен владельцаlist_my_wishlists, get_my_wishlist, add_wish, update_wish, remove_wish, create_wishlist, update_wishlist, list_my_exchanges, get_my_assignment

list_my_exchangesОбмены подарками, в которых вы участвуете или которые организовали: статус, бюджет, дата, ссылка.

get_my_assignmentКому вы дарите после жеребьёвки — и его список желаний. Только чтение.

Токен магазинаlist_my_offerings, save_offering, archive_offering, get_my_stats
Что сервер не отдаёт никогда

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

ГОТОВО К ИНТЕГРАЦИИ

Дайте покупателю сохранить желание в один тап.

Перейти к примеру