Lava top
Разработчикам

Добро пожаловать в API‑портал
lava.top!

С нашим API вы легко настроите интеграции: управляйте продуктами, получайте отчеты о продажах, работайте с подписками, принимайте донаты и настраивайте уведомления через webhook.
Мы постарались сделать документацию простой и понятной. Здесь вы найдёте всё, чтобы быстро разобраться, какие параметры передавать, что вернёт API в ответ, и как лучше настроить свою интеграцию.

Введение

Поддержка

Если вдруг что-то останется непонятным — напишите нам в поддержку: https://t.me/lava_sup_bot

Общая информация

Интеграция — это процесс объединения двух или более сервисов с помощью API. Она позволяет системам обмениваться данными и событиями, обеспечивая их совместную и автоматизированную работу.

С помощью lava.top можно настроить интеграцию с любой внешней системой, сервисом, сайтом или с Telegram-ботом: принимать и отслеживать оплаты, управлять доступом и контролировать статусы подписок. Всё это делает рабочие процессы проще и удобнее.

Начнем с ключевых терминов:
Public API

Public API — программный интерфейс lava.top, который позволяет внешним программам и приложениям взаимодействовать друг с другом по сети.

API key

API key — уникальный код, который используется для авторизации и аутентификации клиента API. Он работает, как аналог логина и пароля, только не для людей, а для программного обеспечения: без него вы не можете получить доступ к данным или функциям, которые предоставляет API.

Webhook

Webhook — механизм, позволяющий одному сервису автоматически отправлять данные другому сервису в ответ на определенные события. Проще говоря, это уведомление, которое ваша система получает, когда что-то произошло. Вместо того чтобы постоянно опрашивать сервер («что нового?»), вы один раз настраиваете URL, и сервер сам уведомляет вас, когда нужно.

Типовые сценарии использования нашего API:
Покупка продукта, первый платеж по подписке

diagram1diagram1

Работа с подпиской 2ой и последующие списания по подписке

diagram2diagram2

Настройка интеграции

Начало работы

Для того, чтобы начать настройку интеграции на платформе, потребуется создать API key и добавить webhook.

Как создать API key

1
Как создать API key
  1. Перейдите в раздел Интеграции в основном меню, выберите тип интеграции Public API.

screenshot1.pngscreenshot1.png

  1. Нажмите Настроить API key.

screenshot1-1.pngscreenshot1-1.png

  1. Платформа создаст ключ автоматически: скопируйте и сохраните его на своём устройстве.

screenshot2.pngscreenshot2.png

Как добавить webhook

2
Как добавить webhook
  1. Создайте API key и подтвердите, что вы его сохранили.
  2. Нажмите на кнопку Добавить Webhook.

screenshot3.pngscreenshot3.png

  1. Заполните поля:
  • URL — это ссылка на сервис, куда будут отправляться webhook (сервер, который будет обрабатывать запросы);
  • Тип события:
  1. Результат платежа — обычная покупка: этот webhook можно использовать для единоразовых платежей, а также для первого платежа по подписке.
  2. Регулярный платеж — покупка подписки: используется для оплаты второго, третьего и последующих платежей по подписке.

screenshot4.pngscreenshot4.png

Важно! Чтобы настроить подписку, нужно создать два webhook. Первый будет иметь тип «результат платежа», и на него будут приходить первые платежи по подписке. Второй webhook, с типом «регулярный платеж», будет получать все последующие оплаты.
  1. Выберите тип аутентификации:
  • Basic - введите логин и пароль от вашего сервиса, куда будут отправляться webhook.

screenshot5.pngscreenshot5.png

  • API key вашего сервиса - введите API key от вашего сервиса, куда будут отправляться webhook. Максимальная длина ключа — 80 символов.

screenshot6.pngscreenshot6.png

При аутентификации Basic: lava.top будет отправлять webhook-запросы по указанному URL, аутентифицированные при помощи basic (HTTP) аутентификации путем отправки запроса вида user:pass@example.com - для такого запроса может использоваться только https соединение.

При аутентификации по API Key: lava.top будет отправлять webhook-запросы по указанному URL, аутентифицированные при помощи ключа. Принимающая сторона должна получить ключ из http-заголовка «X-Api-Key».

Как добавить webhook для уже созданных ключей

Для этого нажмите на три точки рядом с нужным ключом и выберите Добавить Webhook.

screenshot7.pngscreenshot7.png

После выполнения этих шагов можно перейти к API документации и продолжить работу.

API документация

API документация

Для получения детального описания методов API используйте API документацию.

Документация представлена в формате Open API v3.0.0 (Swagger).

API Документация

Swagger документация с интерактивными примерами

Вы сможете подобрать API-метод по основным сценариям работы:

Products

Products - для работы с цифровыми продуктами: получение списка продуктов и изменение их параметров (например, цены).

Invoices

Invoices - для создания контрактов на покупку и проверку их статуса.

Reports

Reports - для получения данных для аналитики по продажам через API.

Subscriptions

Subscriptions - для управления подписками пользователей.

Donate

Donate - для получения ссылок на донат.

Интерактивность документации поможет протестировать методы и убедиться в их корректной работе.

Чтобы опробовать метод:
  1. укажите API key:
  • нажмите кнопку Authorize в верхнем углу страницы:

screenshot8.pngscreenshot8.png

  • заполните ApiKeyAuth (apiKey), (используйте API key, который вы получили в ЛК Автора в пользовательском интерфейсе lava.top Интеграции → Public API → Создать API key (более подробно рассказывали про это здесь)):

screenshot9.pngscreenshot9.png

  1. нажмите кнопку Try it out, введите необходимые данные и выберите опцию Execute:

screenshot10.pngscreenshot10.png

Библиотеки API

Библиотеки API

Мы подготовили несколько open source-библиотек, которые помогут вам быстрее и удобнее использовать возможности нашей платформы.

Наш API соответствует спецификации Open API (Swagger), которая может быть сложной для работы, и эти библиотеки помогут упростить процесс.

!Python

Python

Скачайте пакет с PyPI, обычно с помощью pip:

Установка
1.pip install lava-top-sdk

Убедитесь, что при установке библиотеки lava-top-sdk также устанавливаются все её зависимости.

!TypeScript

TypeScript

Доступно на npm

Установка
1.npm install --save lava-top-sdk

!Kotlin

Kotlin

Подключите пакет из репозитория Maven

Установка
1.<dependency>
2. <groupId>top.lava</groupId>
3. <artifactId>lava-top-kotlin-sdk</artifactId>
4. <version>1.0.0</version>
5.</dependency>

Клиенты и API keys

Клиенты и API keys

На платформе lava.top используются два типа API key:

Ключ для подписи запросов к lava.top

Этот ключ используется вашей системой для отправки запросов к lava.top. Так мы идентифицируем вас.

Ключ для подписи webhook от lava.top

Этот ключ создается на стороне вашего сервиса и передается lava.top. Lava.top использует его, добавляя в X-Api-Key заголовок HTTP запроса при отправке webhook на вашу сторону.

Оба ключа помогают выстроить надежную и безопасную интеграцию между вашей системой и lava.top.

Ошибки

Ошибки

Платформа lava.top использует HTTP-коды ответа для обозначения успешного выполнения или ошибки при обработке API-запросов.

Исходящие соединения происходят с IP-адреса 158.160.60.174

ВАЖНО: Добавьте себе этот адрес в белый список!
Политика повторов

Если webhook не были доставлены, система предпримет попытки повторно отправить их на указанный URL. Повторные попытки осуществляются по логике: сначала 1с, 5с, 15с, далее 10 попыток с интервалом в 1 мин, далее, если не удалось, еще 5 попыток с интервалом в 1 час.

Всего будет сделано до 20 попыток.

Наиболее популярные ошибки:

КодОписание
400Bad Request: Запрос некорректен. Проверьте синтаксис, параметры, ограничения по размеру и т. д.
401Unauthorized: Ошибка аутентификации. Проверьте API key, OAuth-токен, срок его действия и наличие нужных прав (scope).
403Forbidden: Доступ к ресурсу отклонён. Возможно, у вас недостаточно прав или вы обращаетесь к закрытому ресурсу.
404Not Found: Ресурс не найден. Проверьте URL, идентификатор объекта или его наличие в вашем аккаунте.
405Method Not Allowed: HTTP-метод не поддерживается для данного эндпоинта. Обратитесь к документации API.
406Not Acceptable: Неподдерживаемый формат запроса или ответа. API поддерживает только application/json.
408Request Timeout: Сервер не дождался завершения запроса. Повторите попытку с меньшим объёмом данных.
410Gone: Ресурс был безвозвратно удалён и больше недоступен.
429Too Many Requests: Превышен лимит обращений. Уменьшите частоту запросов.
500Internal Server Error: Ошибка на стороне сервера. Повторите попытку позже.
503Service Unavailable: Сервис временно недоступен из-за технических работ или перегрузки. Повторите попытку позже.

Ограничения по количеству запросов

Ограничения по количеству запросов

Платформа lava.top использует ограничение на частоту запросов для защиты от перегрузок и обеспечения стабильной работы API.

50
Текущий лимит: 50 запросов в секунду с одного IP-адреса.
Если лимит превышен, сервер вернет ошибку с кодом 429. В этом случае рекомендуется подождать и повторить запрос позже.
Для высоконагруженных проектов вы можете обратиться в поддержку: https://t.me/lava_sup_bot

Webhook

Webhook

Мы уже рассказывали, что в разделе «Интеграции» в основном меню есть возможность настраивать интеграцию с Public API, где можно создавать API keys и добавлять webhook.

Также там можно просматривать историю их отправки, статус и повторить отправку в случае ошибки доставки и/или обработки webkook.

!История webhooks

История webhooks

Историю можно найти в карточке аккаунта. Для этого перейдите в редактирование ИнтеграцииPublic APIИстория webhooks.

screenshot11.pngscreenshot11.png

Здесь фиксируются события, на которые настроены соответствующие webhook. Эти события различаются по типу, статусу и паре API Key+webhook. В деталях платежа можно увидеть тело запроса, отправленного в момент события, а также историю попыток отправки (при неудачном списании по подписке webhook приходит только по последней попытке списания (т.е. если было 3 попытки списания, то webhook придет только по третей), при возвратах webhook не отправляется). Чтобы просмотреть детали платежа, нужно кликнуть по строке webhook.

Чтобы найти нужный webhook можно использовать расширенные фильтры - искать по Почте покупателя, ID инвойса или Названию или ID продукта.

screenshot12.pngscreenshot12.png

!Типы событий

Типы событий

Каждое событие привязано к типу платежа и статусу контракта.

Типы платежей:

  • оплата (покупка цифрового продукта, курса, консультации или первый платёж по подписке);
  • рекуррентный платёж (продление или отмена подписки).

Статусы контракта:

  • success (успешный платёж);
  • failed (незавершённый платёж, например, недостаточно средств на балансе клиента);
  • cancelled (отменённый, в случае подписки).

Поэтому в истории можно встретить следующие Типы событий:

  • payment.successpayment.success — успешная покупка продуктов (не донатов) или первая оплата подписки;
  • payment.failedpayment.failed — неуспешная покупка продуктов (не донатов) или первая оплата подписки;
  • subscription.recurring.payment.successsubscription.recurring.payment.success — успешное продление подписки (второй, третий и последующие платежи);
  • subscription.recurring.payment.failedsubscription.recurring.payment.failed — неуспешное продление подписки (второй, третий и последующие платежи);
  • subscription.cancelledsubscription.cancelled — отмена ранее купленной подписки.

Чтобы получать эти события, нужно настроить соответствующие webhook. При их создании нужно выбрать один из двух типов событий:

  • Webhook с типом «Результат платежа» (принимает только события payment.successpayment.success и payment.failedpayment.failed .)
  • Webhook с типом «Регулярный платеж» (принимает только события subscription.recurring.payment.successsubscription.recurring.payment.success , subscription.recurring.payment.failedsubscription.recurring.payment.failed и subscription.cancelledsubscription.cancelled ).

screenshot13.pngscreenshot13.png

!Статус webhook

Статус webhook

Статус показывает был ли получен webhook.

screenshot14.pngscreenshot14.png

Может быть только два статуса:

  • DELIVERED (доставлено) — webhook успешно доставлен.
  • FAILED (не доставлено) — произошел сбой при доставке.

Статус webhook определяется HTTP-кодом, который поступает вместе с событием.

!Политика повторов

Политика повторов

Платформа lava.top использует HTTP-коды ответа для обозначения успешного выполнения или ошибки при обработке API-запросов.

В случае получения кода о неудачной доставке lava.top повторяет попытки отправки до 19 раз.

Если webhook не были доставлены, система предпримет попытки повторно отправить их на указанный URL. Повторные попытки осуществляются по логике: сначала 1с, 5с, 15с, далее 10 попыток с интервалом в 1 мин, далее, если не удалось, еще 5 попыток с интервалом в 1 час.

Всего будет сделано до 20 попыток.

При каждой попытке отправить webhook в историю будет добавляться событие с соответствующим HTTP-кодом. Если статус-код указывает на успех, то появится одно событие об успешной или неуспешной оплате. При неуспешном ответе может быть до 20 попыток (они прекращаются после успешной отправки или после 19 попыток). Все эти события можно просмотреть в разделе «История попыток отправки» в деталях webhook. 

screenshot15.pngscreenshot15.png

Наиболее популярные коды ответов:

  • Код 401 / Код 403 — неверные данные авторизации, нельзя получить доступ к методу принятия webhook;
  • Код 404 — в webhook прописан неверный URL
  • Код 500 — ошибка на стороне сервера автора, который принимает webhook.

screenshot16.pngscreenshot16.png

!Повторная отправка webhook

Повторная отправка webhook

С помощью кнопки стрелки каждый webhook можно отправить повторно.

screenshot17.pngscreenshot17.png

Нажмите и подтвердите отправку.

screenshot18.pngscreenshot18.png

История изменений

История изменений

Мы регулярно улучшаем возможности интеграции: добавляем новые функции, исправляем ошибки и обновляем документацию. Здесь вы можете следить за всеми изменениями.

Июль 2025
Последнее

Добавлена возможность оплаты подписок через Stripe.

Реализованы методы /api/v2/invoices и /api/v2/invoices/{id} с обновленной типизацией контрактов:

  • INVOICEINVOICE - оплата продуктов, консультаций, курсов,
  • SUBSCRIPTION_FIRST_INVOICESUBSCRIPTION_FIRST_INVOICE - первое списание по подписке,
  • SUBSCRIPTION_RENEWALSUBSCRIPTION_RENEWAL - рекуррентный платеж по подписке.
Апрель 2025

Добавлена возможность отправки донатов через Stripe.

Доработан запрос GET /invoices: теперь возвращается поле parentInvoiceId (ID родительской транзакции при оформлении подписки).

Февраль 2025

Добавлена возможностью оплаты через PayPal:

  • оплата подписок,
  • отправка доната.

Улучшен функционал работы с webkook:

  • возможность повторной отправки,
  • получение списка webhook,
  • добавление типа (события) в тело webhook,
  • возможность поиска webhook по Product ID в ЛК кабинете автора (Интеграции → Public API → История webhooks).
Январь 2025

Добавлена поддержка UTM-меток.

Декабрь 2024

Добавлена возможность оплаты цифровых продуктов через провайдера Stripe.

FAQs

FAQs

Здесь мы собрали наиболее частые вопросы, которые могут возникать у пользователей нашего API.

!Общие вопросы

Общие вопросы

!С какого IP-адреса будут приходить webhook?

С какого IP-адреса будут приходить webhook?

!Какой URL использовать для отправки запросов (LAVA_API_URL)?

Какой URL использовать для отправки запросов (LAVA_API_URL)?

!Как принимать платежи по API?

Как принимать платежи по API?

!Как правильно установить валюту и платежного провайдера?

Как правильно установить валюту и платежного провайдера?

!Нужно ли отвечать на webhook?

Нужно ли отвечать на webhook?

!Есть ли тестовая зона?

Есть ли тестовая зона?

!Каким параметром передается ключ на API?

Каким параметром передается ключ на API?

!Можно ли отправлять webhook на HTTP?

Можно ли отправлять webhook на HTTP?

!Необходимо ли пользователю вводить адрес электронной почты на стороне сервиса?

Необходимо ли пользователю вводить адрес электронной почты на стороне сервиса?

!Осуществляется ли проверка данных?

Осуществляется ли проверка данных?

!Клиент оплатил, но я не получил webhook. Почему?

Клиент оплатил, но я не получил webhook. Почему?

!Есть ли ограничения по времени у ссылки на оплату?

Есть ли ограничения по времени у ссылки на оплату?

!Можно ли передать свои данные при создании ссылки на оплату?

Можно ли передать свои данные при создании ссылки на оплату?

!Покупка/продажа продуктов

Покупка/продажа продуктов

!Как выглядят webhook при оплате продуктов?

Как выглядят webhook при оплате продуктов?

!Можно ли увидеть скрытый со страницы автора продукт через API?

Можно ли увидеть скрытый со страницы автора продукт через API?

!Подписки

Подписки

!Как создать рекуррентный платёж?

Как создать рекуррентный платёж?

!Как создать подписку с рекуррентными платежами более чем на один месяц?

Как создать подписку с рекуррентными платежами более чем на один месяц?

!Как принимать платежи по подписке с разными периодами оплаты?

Как принимать платежи по подписке с разными периодами оплаты?

!Какие есть периоды оплаты подписок?

Какие есть периоды оплаты подписок?

!В чём разница между contractId и parentContractId?

В чём разница между contractId и parentContractId?

!Как выглядят webhook при оплате подписки?

Как выглядят webhook при оплате подписки?

!Есть ли дополнительные попытки списания, если платеж не прошел?

Есть ли дополнительные попытки списания, если платеж не прошел?

!Как автор может отменить подписку клиента?

Как автор может отменить подписку клиента?

!Можно ли проверить статус подписки через API?

Можно ли проверить статус подписки через API?

!Можно ли оформить одну и ту же подписку дважды?

Можно ли оформить одну и ту же подписку дважды?

!Как обновить стоимость подписки?

Как обновить стоимость подписки?

!События webhook

События webhook

!Если webhook не был отправлен из-за ошибки, будет ли он отправлен позже?

Если webhook не был отправлен из-за ошибки, будет ли он отправлен позже?

!Нет события в истории webhook — что это значит?

Нет события в истории webhook — что это значит?

!Можно ли получить информацию по всем webhook за прошлый период?

Можно ли получить информацию по всем webhook за прошлый период?

!Как найти нужное событие в истории webhook через фильтр?

Как найти нужное событие в истории webhook через фильтр?

!Что значат HTTP-коды у webhook?

Что значат HTTP-коды у webhook?

!Можно отправить webhook повторно?

Можно отправить webhook повторно?

Готовы начать?

Создайте API key и начните интегрировать
платежи в ваш сервис уже сегодня