> For the complete documentation index, see [llms.txt](https://wiki.tribute.tg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.tribute.tg/ru/for-shops/api-magazina/models.md).

# Models

## The Shop object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"Shop":{"type":"object","required":["id","userId","name","link","callbackUrl","recurrent","onlyStars","tokenCharging","status"],"properties":{"id":{"type":"integer","format":"uint64","description":"ID магазина"},"userId":{"type":"integer","description":"ID владельца магазина"},"name":{"type":"string","description":"Название магазина"},"link":{"type":"string","description":"Ссылка/slug магазина"},"callbackUrl":{"type":"string","format":"uri","description":"URL вебхука для уведомлений о заказах"},"recurrent":{"type":"boolean","description":"Доступны ли рекуррентные платежи"},"onlyStars":{"type":"boolean","description":"Принимаются ли только платежи через Telegram Stars"},"tokenCharging":{"type":"boolean","description":"Включены ли списания по токенам (merchant-initiated)"},"status":{"type":"integer","description":"Статус магазина (0 = неактивен, 1 = активен)","enum":[0,1]}}}}}}
```

## The ShopOrder object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrder":{"type":"object","required":["uuid","shopId","amount","currency","title","description","status","successUrl","failUrl","paymentUrl","createdAt","period"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина, к которому относится заказ"},"amount":{"type":"integer","format":"int64","description":"Сумма заказа в минимальных единицах валюты (центы/копейки)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"title":{"type":"string","description":"Название заказа (макс 100 символов UTF-16)"},"description":{"type":"string","description":"Описание заказа (макс 300 символов UTF-16)"},"status":{"type":"string","description":"Статус заказа. `prepaid` опциональный (включается по запросу продавца): card-to-Stars заказы, где Stars зачислены покупателю, но он ещё не подтвердил списание. Продавцы без включения видят `pending`.\n\nОтказ по карте статус не меняет — заказ остаётся в `pending` и доступен к оплате.\n","enum":["pending","prepaid","paid","failed"]},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"successUrl":{"type":"string","format":"uri","description":"URL редиректа при успешной оплате"},"failUrl":{"type":"string","format":"uri","description":"URL редиректа при неудачной оплате"},"paymentUrl":{"type":"string","format":"uri","nullable":true,"description":"Веб-URL для завершения оплаты клиентом в браузере.\n`null` для заказов OnlyStars — их можно оплатить только внутри Telegram через `webappPaymentUrl`.\n`null` для заказов, созданных по платёжной ссылке — такие заказы оплачиваются только через экран ссылки (см. `paymentLinkUuid`).\n"},"webappPaymentUrl":{"type":"string","format":"uri","description":"URL для оплаты через Telegram WebApp. Пустой для заказов, созданных по платёжной ссылке — они оплачиваются только через `webappPaymentUrl` самой ссылки."},"createdAt":{"type":"string","format":"date-time","description":"Время создания заказа в формате ISO 8601"},"comment":{"type":"string","description":"Комментарий к заказу (опционально)"},"period":{"type":"string","description":"Период оплаты для рекуррентных заказов","enum":["onetime","weekly","monthly","quarterly","halfyearly","yearly"]},"memberStatus":{"type":"string","description":"Статус рекуррентной подписки (только для рекуррентных заказов)","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания рекуррентной подписки в формате ISO 8601 (только для рекуррентных заказов)"},"memberInTrial":{"type":"boolean","description":"True, пока активный участник ещё находится в бесплатном пробном периоде (подписан, но списание не произошло). Присутствует всегда, когда есть участник — `false` для участников без пробного периода, после конвертации пробного периода или отмены подписки. Отсутствует, только если участника нет."},"memberTrialStartedAt":{"type":"string","format":"date-time","description":"Начало пробного периода (момент подписки) в формате ISO 8601. Присутствует у активного участника с пробным периодом — и во время пробного периода, и после конвертации (тогда историческое значение). Отсутствует для не-пробных и отменённых участников."},"memberTrialEndsAt":{"type":"string","format":"date-time","description":"Дата окончания пробного периода / первого списания в формате ISO 8601. Присутствует у активного участника с пробным периодом — и во время пробного периода, и после конвертации (тогда историческое значение). Отсутствует для не-пробных и отменённых участников."},"lastPaidTransactionAt":{"type":"string","format":"date-time","nullable":true,"description":"Дата последней оплаченной транзакции в формате ISO 8601. Null, если транзакций нет."},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты. Если задана — первое списание прошло по этой сумме, последующие списываются по `amount`. Отсутствует, если у заказа нет переопределения первого периода.\n"},"sendEmail":{"type":"boolean","description":"Отправляется ли покупателю чек на email после успешной оплаты (наследуется от магазина при создании)"},"image":{"type":"object","nullable":true,"description":"Изображение заказа, отображается в счетах и транзакциях Telegram Stars. Null, если изображение не задано.","properties":{"id":{"type":"integer","description":"ID изображения"},"path":{"type":"string","format":"uri","description":"URL изображения"},"thumbnail":{"type":"string","description":"Миниатюра в формате Base64"},"width":{"type":"integer","description":"Ширина изображения в пикселях"},"height":{"type":"integer","description":"Высота изображения в пикселях"},"fileType":{"type":"string","description":"Тип файла","enum":["image","video"]}}},"paymentLinkUuid":{"type":"string","format":"uuid","description":"UUID платёжной ссылки, по которой создан заказ. Отсутствует у обычных заказов."}}}}}}
```

## The ShopPaymentLink object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopPaymentLink":{"type":"object","description":"Многоразовая платёжная ссылка. Каждая оплата по ней создаёт разовый заказ магазина на сумму, выбранную покупателем.","required":["uuid","shopId","title","description","currency","defaultAmount","customerId","status","webappPaymentUrl","createdAt"],"properties":{"uuid":{"type":"string","format":"uuid","description":"Публичный идентификатор ссылки"},"shopId":{"type":"integer","format":"uint64"},"title":{"type":"string"},"description":{"type":"string"},"currency":{"type":"string","enum":["eur","rub","usd"]},"defaultAmount":{"type":"integer","format":"int64","description":"Сумма, предвыбранная на экране оплаты, в минимальных единицах валюты"},"email":{"type":"string","format":"email","description":"Email клиента, копируется в каждый заказ по ссылке; отсутствует, если не задан"},"customerId":{"type":"string"},"payload":{"nullable":true,"description":"JSON-значение, переданное при создании; возвращается как есть в вебхуках"},"status":{"type":"string","enum":["active","deactivated"]},"webappPaymentUrl":{"type":"string","description":"Ссылка на оплату в Telegram Mini App для отправки покупателю (многоразовая)"},"createdAt":{"type":"string","format":"date-time"},"deactivatedAt":{"type":"string","format":"date-time","description":"Присутствует после деактивации ссылки"}}}}}}
```

## The ShopOrderPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderPayload":{"type":"object","required":["uuid","shopId","amount","currency","fee","status","isRecurrent"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Обычная рекуррентная цена заказа — сумма списаний за 2-й и\nпоследующие периоды, в минимальных единицах валюты (центы/копейки).\nДля рекуррентных заказов с переопределением первого периода сумму,\nфактически списанную при этой первой оплате (CIT), несёт\n`firstPeriodAmount`.\n"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"fee":{"type":"integer","format":"int64","description":"Комиссия платформы в минимальных единицах валюты"},"status":{"type":"string","description":"Статус заказа (вебхук отправляется только при status = 'paid')","enum":["paid"]},"email":{"type":"string","format":"email","description":"Email клиента (опционально, может быть пустым)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"isRecurrent":{"type":"boolean","description":"Является ли заказ рекуррентным"},"period":{"type":"string","description":"Период оплаты (только для рекуррентных заказов)","enum":["weekly","monthly","quarterly","halfyearly","yearly"]},"paymentToken":{"type":"string","format":"uuid","description":"UUID платежного токена для списаний мерчантом (только при включённом tokenCharging и успешном создании токена)"},"cardLast4":{"type":"string","description":"Последние 4 цифры карты, использованной для оплаты (только при включённом tokenCharging)"},"cardBrand":{"type":"string","description":"Бренд карты (только при включённом tokenCharging)"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты — для этого события об оплате это сумма, фактически списанная. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"memberStatus":{"type":"string","description":"Статус подписки (только для рекуррентных заказов)","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания подписки в формате ISO 8601 (только для рекуррентных заказов)"},"isTrial":{"type":"boolean","description":"true, если это событие — активация бесплатного пробного периода: деньги ещё не списаны, подписка активна до `trialEndsAt`, а первое списание (`firstPeriodAmount`, если задан, иначе `amount`) произойдёт по окончании пробного периода."},"trialPeriod":{"type":"string","description":"Длительность пробного периода (присутствует только при активации пробного периода).","enum":["one_hour","twelve_hours","twenty_four_hours","three_days","seven_days"]},"trialEndsAt":{"type":"string","format":"date-time","description":"Момент окончания бесплатного пробного периода, когда выполняется первое списание (только при активации пробного периода)."},"paymentLinkUuid":{"type":"string","format":"uuid","description":"UUID платёжной ссылки, по которой создан заказ (только для заказов, созданных по платёжной ссылке)."},"payload":{"description":"`payload` платёжной ссылки, переданный при её создании (только для заказов, созданных по платёжной ссылке)."}}}}}}
```

## The ShopOrderChargeFailedPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderChargeFailedPayload":{"type":"object","required":["uuid","shopId","amount","currency","period","chargeRetries"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Сумма, которую попытались списать за неудавшийся рекуррентный период,\nв минимальных единицах валюты. Равна рекуррентной сумме `amount` заказа;\nпереопределение первого периода (`firstPeriodAmount`) применяется только\nк первому платежу (CIT), не к последующим рекуррентным списаниям.\n"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"period":{"type":"string","description":"Период оплаты","enum":["weekly","monthly","quarterly","halfyearly","yearly"]},"chargeRetries":{"type":"integer","description":"Количество неудачных попыток списания (1-3). Расписание: 2-я попытка через ~2ч после первой неудачной попытки, 3-я через ~8ч после первой неудачной попытки. После 3 неудач рекуррентный заказ отменяется.","minimum":1,"maximum":3},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"isRecurrent":{"type":"boolean","description":"Является ли заказ рекуррентным"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"memberStatus":{"type":"string","description":"Статус подписки","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания подписки в формате ISO 8601"}}}}}}
```

## The ShopOrderChargeSuccessPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderChargeSuccessPayload":{"type":"object","required":["uuid","shopId","amount","currency","period"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Сумма, списанная за текущий рекуррентный период, в минимальных\nединицах валюты. Равна рекуррентной сумме `amount` заказа;\nпереопределение первого периода (`firstPeriodAmount`) применяется\nтолько к первому платежу (CIT), не к последующим рекуррентным\nсписаниям.\n"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"period":{"type":"string","description":"Период оплаты","enum":["weekly","monthly","quarterly","halfyearly","yearly"]},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"isRecurrent":{"type":"boolean","description":"Является ли заказ рекуррентным"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"memberStatus":{"type":"string","description":"Статус подписки","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания подписки в формате ISO 8601"}}}}}}
```

## The ShopOrderCancelledPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderCancelledPayload":{"type":"object","required":["uuid","shopId","amount","currency","period","cancelReason"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Сумма заказа в минимальных единицах валюты (центы/копейки)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"period":{"type":"string","description":"Период оплаты","enum":["weekly","monthly","quarterly","halfyearly","yearly"]},"cancelReason":{"type":"string","description":"Причина отмены.\n- `cancelled_by_seller` — отменено владельцем магазина.\n- `charge_failed` — не удалось списать средства с карты (например, исчерпаны все попытки повторного списания, висящий неоплаченный инвойс, внутренняя ошибка обработки).\n- `payment_method_expired` — сохранённый способ оплаты (карта) больше недоступен.\n- `stars_subscription_expired` — подписка Telegram Stars перестала продлеваться на стороне Telegram. Покрывает как подписки чистыми Stars (карта не привязана; продление выполняет Telegram), так и OnlyStars-подписки «карта → Stars», у которых покупатель отменил подписку на стороне Telegram (предварительное списание с карты тогда прекращается).\n- `seller_unavailable` — продавец больше не может принимать платежи (аккаунт заблокирован/удалён, выплаты отключены или не пройдена верификация).\n- `last_charge_refunded` — была возвращена последняя по времени создания транзакция покупателя по заказу магазина. Возврат более старой транзакции при наличии более новой подписку НЕ отменяет.\n","enum":["cancelled_by_seller","charge_failed","payment_method_expired","stars_subscription_expired","seller_unavailable","last_charge_refunded"]},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"isRecurrent":{"type":"boolean","description":"Является ли заказ рекуррентным"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"memberStatus":{"type":"string","description":"Статус подписки (только для рекуррентных заказов)","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания подписки в формате ISO 8601 (только для рекуррентных заказов)"}}}}}}
```

## The ShopOrderRefundedPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderRefundedPayload":{"type":"object","required":["uuid","shopId","transactionId","amount","currency","status"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"transactionId":{"type":"integer","format":"uint64","description":"ID транзакции, по которой выполнен возврат"},"amount":{"type":"integer","format":"int64","description":"Сумма возврата в минимальных единицах валюты (центы/копейки)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"status":{"type":"string","description":"Статус возврата","enum":["initiated","completed"]},"refundedAt":{"type":"string","format":"date-time","description":"Время завершения возврата (опционально, присутствует только при status = 'completed')"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"isRecurrent":{"type":"boolean","description":"Является ли заказ рекуррентным"},"period":{"type":"string","description":"Период оплаты","enum":["onetime","weekly","monthly","quarterly","halfyearly","yearly"]},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"memberStatus":{"type":"string","description":"Статус подписки (только для рекуррентных заказов)","enum":["active","cancelled"]},"memberExpiresAt":{"type":"string","format":"date-time","description":"Дата окончания подписки в формате ISO 8601 (только для рекуррентных заказов)"},"paymentLinkUuid":{"type":"string","format":"uuid","description":"UUID платёжной ссылки, по которой создан заказ (только для заказов, созданных по платёжной ссылке)."},"payload":{"description":"`payload` платёжной ссылки (только для заказов, созданных по платёжной ссылке)."}}}}}}
```

## The ShopOrderPaymentFailedPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderPaymentFailedPayload":{"type":"object","required":["uuid","shopId","amount","currency","errorCode","errorMessage"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Обычная рекуррентная цена заказа — сумма списаний за 2-й и\nпоследующие периоды, в минимальных единицах валюты (центы/копейки).\nДля рекуррентных заказов с переопределением первого периода сумму,\nкоторую попытались списать при этой первой оплате (CIT), несёт\n`firstPeriodAmount`.\n"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"errorCode":{"type":"string","description":"`payment_declined` — отказ банка; `payment_failed` — сбой обработки после авторизации","enum":["payment_declined","payment_failed"]},"errorMessage":{"type":"string","description":"Описание ошибки для понимания причины сбоя"},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"firstPeriodAmount":{"type":"integer","format":"int64","nullable":true,"description":"Цена первого периода в минимальных единицах валюты — для этой неуспешной первой оплаты (CIT) это сумма, которую попытались списать. Присутствует, если продавец передал `firstPeriodAmount` при создании заказа; иначе отсутствует."},"paymentLinkUuid":{"type":"string","format":"uuid","description":"UUID платёжной ссылки, по которой создан заказ (только для заказов, созданных по платёжной ссылке)."},"payload":{"description":"`payload` платёжной ссылки (только для заказов, созданных по платёжной ссылке)."}}}}}}
```

## The ShopOrderPrepaidPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderPrepaidPayload":{"type":"object","required":["uuid","shopId","amount","currency","starsAmount","onlyStars","starsPurchaseId"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Сумма заказа в минимальных единицах валюты (центы/копейки)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"period":{"type":"string","description":"Период подписки (отсутствует для разовых заказов)"},"starsAmount":{"type":"integer","format":"int64","description":"Количество Telegram Stars, зачисленных покупателю"},"onlyStars":{"type":"boolean","description":"Всегда true для этого события (card-to-Stars)"},"starsPurchaseId":{"type":"integer","format":"uint64","description":"Внутренний идентификатор для сопоставления событий"},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"}}}}}}
```

## The ShopOrderPaymentReceivedPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopOrderPaymentReceivedPayload":{"type":"object","required":["uuid","shopId","amount","currency","starsAmount","onlyStars","starsPurchaseId"],"properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"amount":{"type":"integer","format":"int64","description":"Сумма заказа в минимальных единицах валюты (центы/копейки)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"period":{"type":"string","description":"Период подписки (отсутствует для разовых заказов)"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"},"starsPurchaseId":{"type":"integer","format":"uint64","description":"Внутренний идентификатор для сопоставления событий"},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально, включается если указан при создании заказа)"}}}}}}
```

## The ShopToken object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopToken":{"type":"object","required":["shopId","token","cardLast4","cardBrand","amount","currency","active","createdAt"],"properties":{"shopId":{"type":"integer","format":"uint64","description":"ID магазина, к которому относится токен"},"token":{"type":"string","format":"uuid","description":"UUID платёжного токена"},"cardLast4":{"type":"string","description":"Последние 4 цифры номера карты"},"cardBrand":{"type":"string","description":"Бренд карты (VISA, MASTERCARD и др.)"},"customerId":{"type":"string","description":"Идентификатор клиента мерчанта (опционально)"},"amount":{"type":"integer","format":"int64","description":"Фиксированная сумма списания в минимальных единицах валюты"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"active":{"type":"boolean","description":"Активен ли токен и может ли использоваться для списаний"},"createdAt":{"type":"string","format":"date-time","description":"Время создания токена в формате ISO 8601"},"lastUsedAt":{"type":"string","format":"date-time","description":"Время последнего списания по токену (опционально)"}}}}}}
```

## The ShopCharge object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopCharge":{"type":"object","required":["chargeUuid","shopId","status","amount","currency","createdAt"],"properties":{"chargeUuid":{"type":"string","format":"uuid","description":"UUID списания"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина, к которому относится списание"},"status":{"type":"string","description":"Статус списания","enum":["pending","processing","success","failed","timeout"]},"reference":{"type":"string","description":"Референс мерчанта (опционально)"},"amount":{"type":"integer","format":"int64","description":"Сумма списания в минимальных единицах валюты"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"token":{"type":"string","format":"uuid","description":"UUID платёжного токена"},"errorCode":{"type":"string","description":"Код ошибки при неудачном списании (опционально)"},"errorMessage":{"type":"string","description":"Сообщение об ошибке при неудачном списании (опционально)"},"createdAt":{"type":"string","format":"date-time","description":"Время создания списания в формате ISO 8601"},"processedAt":{"type":"string","format":"date-time","description":"Время завершения обработки списания (опционально)"}}}}}}
```

## The ShopTokenChargeSuccessPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopTokenChargeSuccessPayload":{"type":"object","required":["chargeUuid","shopId","token","amount","currency","processedAt"],"properties":{"chargeUuid":{"type":"string","format":"uuid","description":"UUID списания"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"token":{"type":"string","format":"uuid","description":"UUID платёжного токена"},"amount":{"type":"integer","format":"int64","description":"Сумма списания в минимальных единицах валюты"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"reference":{"type":"string","description":"Референс мерчанта (опционально)"},"processedAt":{"type":"string","format":"date-time","description":"Время завершения списания в формате ISO 8601"}}}}}}
```

## The ShopTokenChargeFailedPayload object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"ShopTokenChargeFailedPayload":{"type":"object","required":["chargeUuid","shopId","token","amount","currency","errorCode","errorMessage"],"properties":{"chargeUuid":{"type":"string","format":"uuid","description":"UUID списания"},"shopId":{"type":"integer","format":"uint64","description":"ID магазина"},"token":{"type":"string","format":"uuid","description":"UUID платёжного токена"},"amount":{"type":"integer","format":"int64","description":"Сумма списания в минимальных единицах валюты"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"reference":{"type":"string","description":"Референс мерчанта (опционально)"},"errorCode":{"type":"string","description":"Код ошибки"},"errorMessage":{"type":"string","description":"Подробное сообщение об ошибке"}}}}}}
```

## The Transaction object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"Transaction":{"type":"object","required":["id","type","amount","currency","createdAt","total"],"properties":{"id":{"type":"integer","format":"uint64","description":"ID транзакции"},"type":{"type":"string","description":"Тип транзакции"},"objectId":{"type":"integer","format":"uint64","description":"ID связанного объекта"},"amount":{"type":"number","format":"double","description":"Сумма транзакции в единицах валюты (например, EUR, RUB)"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)","enum":["eur","rub","usd"]},"createdAt":{"type":"integer","format":"int64","description":"Время создания транзакции (Unix timestamp в секундах)"},"serviceFee":{"type":"number","format":"double","description":"Сумма комиссии сервиса"},"total":{"type":"number","format":"double","description":"Итоговая сумма за вычетом комиссий"},"paymentMethod":{"type":"string","description":"Использованный способ оплаты"},"isRefunded":{"type":"boolean","description":"Был ли выполнен возврат по транзакции"},"isRefundable":{"type":"boolean","description":"Возможен ли возврат по транзакции"},"isRecurring":{"type":"boolean","description":"Является ли транзакция рекуррентным платежом"},"shopOrder":{"type":"object","description":"Детали связанного заказа магазина (включается для транзакций заказов магазина)","properties":{"uuid":{"type":"string","format":"uuid","description":"UUID заказа"},"title":{"type":"string","description":"Название заказа"},"description":{"type":"string","description":"Описание заказа"},"amount":{"type":"number","format":"double","description":"Сумма заказа в единицах валюты"},"currency":{"type":"string","description":"Код валюты (в нижнем регистре)"},"status":{"type":"string","description":"Статус заказа","enum":["pending","paid","failed"]},"email":{"type":"string","format":"email","description":"Email клиента (опционально)"},"successUrl":{"type":"string","format":"uri","description":"URL редиректа при успешной оплате"},"failUrl":{"type":"string","format":"uri","description":"URL редиректа при неудачной оплате"},"createdAt":{"type":"integer","format":"int64","description":"Время создания заказа (Unix timestamp в секундах)"},"comment":{"type":"string","description":"Комментарий к заказу (опционально)"},"period":{"type":"string","description":"Период оплаты","enum":["onetime","weekly","monthly","quarterly","halfyearly","yearly"]},"shopName":{"type":"string","description":"Название магазина"},"starsAmount":{"type":"integer","format":"int64","description":"Фиксированная сумма в Telegram Stars (0 если не задано)"},"onlyStars":{"type":"boolean","description":"Принимает ли заказ только оплату через Telegram Stars"}}}}}}}}
```

## The Error object

```json
{"openapi":"3.1.0","info":{"title":"Tribute Shop API","version":"1.0.0"},"components":{"schemas":{"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Код ошибки","enum":["error_bad_request","error_not_found","error_not_permitted","no_access"]},"message":{"type":"string","description":"Описание ошибки"}}}}}}
```
