Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.loveandpay.io/llms.txt

Use this file to discover all available pages before exploring further.

Главное в одном предложении

Внутренний счёт Love&Pay живёт 1 час, СБП-QR от банка живёт 5 минут, поэтому в течение часа мы автоматически пересоздаём QR каждые 5 минут — клиент всегда видит свежий код, а вам ничего делать не нужно.

Полная схема

Статусы счёта

СтатусОписаниеМожно создавать возврат?
PENDINGСоздан, ожидает оплаты, QR активен
PAIDОплачен клиентом, деньги на балансе✅ Да
EXPIREDИстёк час, оплата невозможна
CANCELLEDОтменён партнёром через UI/API
REFUNDEDПолностью возвращён клиенту— (уже возвращён)

QR-коды: почему пересоздаются

Любой банк-участник СБП выдаёт одноразовый QR с TTL 5 минут. Это требование НСПК (Национальной системы платёжных карт) — для безопасности. Чтобы клиент мог открыть счёт спустя 10-30 минут и всё равно увидеть валидный QR, наш бэк сам обращается к банку и просит новый QR каждые 5 минут, пока внутренний счёт активен (1 час).

Что это значит для вас

ГдеЧто отображается
invoice.qrCodeBase64 в APIТекущий валидный QR (PNG base64) на момент запроса
Платёжная страница /pay/INV-XXXАвто-обновление QR каждые 5 минут без перезагрузки
POS-кабинет партнёраРеал-тайм обновление в UI
Если вы кешируете qrCodeBase64 у себя — кеш живёт не дольше 5 минут. Лучше всегда передавайте клиенту ссылку paymentLink — она рендерит свежий QR при каждом открытии.

Жизнь счёта = 1 час (по умолчанию)

После создания счёт активен ровно expiresAt = createdAt + 1 час. По истечении:
  • Статус автоматически меняется на EXPIRED
  • Любая попытка оплаты возвращает ошибку клиенту
  • Срабатывает webhook invoice.expired (если настроен)
  • Счёт остаётся в истории навсегда (для отчётности)

Что делать, если клиент опоздал

  1. Создайте новый счёт через API или UI — это занимает миллисекунду.
  2. Если есть customer-flow с retention, используйте customerEmail / customerPhone при создании — сможете находить клиентские повторы по этим полям.

Возвраты

После статуса PAID партнёр может оформить возврат через Возвраты:
  • Полный — вся сумма счёта обратно клиенту.
  • Частичный — любая часть. Несколько частичных возвратов на один счёт допустимы пока их сумма ≤ исходной.
Сроки: 1–5 рабочих дней — зависит от банка клиента. Комиссия: процент удержания задан в тарифе партнёра (поле refundFeePercent).
После возврата:
  • Статус счёта → REFUNDED (для полного), при частичных остаётся PAID + появляется запись в Refund
  • Срабатывает webhook invoice.refunded

Метаданные счёта

При создании можно передать metadata (JSON). Это поле сохраняется и возвращается в каждом ответе и вебхуке — удобно для связки с вашим внутренним order id, корзиной, клиентом.
{
  "amount": 250000,
  "description": "Заказ #12345",
  "metadata": {
    "orderId": "12345",
    "shopId": "moscow-1",
    "items": [{"sku": "A001", "qty": 2}]
  }
}

Реалтайм отслеживание статуса

Три способа узнать что счёт оплачен:
СпособLatencyКогда использовать
Webhook1–3 секProduction — самый надёжный
GET /api/v2/invoices/по запросуРезерв на случай пропущенного вебхука
POS-UI polling3 секТолько в кабинете партнёра — там это уже встроено
Настроить вебхук →

QuickReference

ПараметрЗначение
TTL внутреннего счёта1 час
TTL СБП-QR от банка5 минут
Период автопересоздания QRкаждые 5 минут
Минимальная сумма счёта10 ₽ (1000 копеек)
Максимальная суммаЗависит от лимитов вашего терминала
Статусы webhook’аinvoice.paid, invoice.expired, invoice.cancelled, invoice.refunded