Разработчикам / Публичный API API v1

Публичный API для безопасной интеграции платёжных сценариев.

VPOS.am связывает сервер продавца с платёжным интерфейсом банка или лицензированного провайдера. Деньги принимает и перечисляет этот банк или провайдер по отдельному договору; VPOS.am не работает со средствами покупателей.

  • Bearer-токен продавца хранится только на сервере.
  • Возврат покупателя с платёжной страницы не подтверждает оплату.
  • Повторные Webhook-события обрабатываются идемпотентно.
Разделы

Границы публичного API

Что входит

Создание платёжной сессии, проверка статуса платежа, публичная проверка готовности сервиса, Webhook-события и идемпотентные повторы запросов.

Что не входит

Методы консоли и административного API, операторские токены, учётные данные банков и провайдеров, сведения о выплатах и внутренние механизмы сверки.

Доступ к рабочей среде

Доступ к рабочей среде одобряется для конкретной установки и маршрута провайдера после проверки продавца и домена, подтверждения договора и учётных данных провайдера, проверки URL обратного вызова и необходимых результатов в песочнице. Подтверждение процедур возврата средств (refund), отмены (void/cancel) и сверки требуется, если маршрут поддерживает эти операции.

Не вызывайте методы API продавца из браузера и не встраивайте секреты в мобильное приложение. Bearer-токены и секреты подписи Webhook должны храниться только на доверенном сервере.

Авторизация и формат запросов

Запросы к API продавца авторизуются с помощью Bearer-токена, привязанного к конкретной установке. Эта серверная привязка определяет продавца, канал, режим, маршрут провайдера и учётные данные; тело запроса не может её переопределить.

Базовый URL
https://api.vpos.am
Авторизация
Authorization: Bearer <merchant_api_token>
Тело запроса
application/json
Версия API
v1

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

Быстрый старт

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

  1. Создайте платёжную сессию с постоянным значением merchantOrderId и заголовком Idempotency-Key.
  2. Перенаправьте покупателя на checkoutUrl, который вернул VPOS.am.
  3. Исполняйте заказ только после статуса paid, подтверждённого Webhook-событием или серверным запросом статуса.

Возврат покупателя по returnUrl не подтверждает оплату. Это только событие интерфейса. Выдавать товар или менять статус заказа можно после серверной проверки или подписанного Webhook-события.

Основные методы API

Карточки описывают основной платёжный сценарий продавца. Полный перечень публичных операций и схем приведён в спецификации OpenAPI 3.1.

GET/api/health
Публичный #

Возвращает публичный статус готовности сервиса для мониторинга и проверки интеграции. JSON-ответ может содержать причины неготовности, но их текст не является стабильной частью контракта.

СтатусЗначение
200Сервис отвечает; готовность указана в теле JSON-ответа.
405HTTP-метод не поддерживается.
GET/v1/capabilities
Bearer-токен #

Возвращает консервативную матрицу возможностей провайдера. Используйте её, чтобы включать PayLink, QR, возвраты, фискализацию и токенизацию только для готового маршрута.

ПолеПравила
providers[].capabilitiesПризнаки поддержки и включения для каждого маршрута провайдера.
connectors.statusSyncНормализованные статусы VPOS и сопоставление со статусами платформ. Возврат из браузера не подтверждает оплату.
payment_links, qr_presentationВключаются только для маршрута, способного создавать платежные сессии.
refund, capture, void, tokenization, subscriptionsОперации доступны только при включённой возможности провайдера; иначе API возвращает явную ошибку disabled/not-configured.
POST/api/widget/checkout
Публичный #

Создаёт платёжную страницу по публичному ключу виджета для Webflow, Squarespace, Wix, Ucraft и простых лендингов. Браузер не получает токен продавца или банковские учётные данные: VPOS.am на сервере сопоставляет ключ, разрешённый источник запроса, продавца и маршрут провайдера.

ПолеПравила
publicKeyПубличный ключ установки виджета, привязанный на сервере к точному списку разрешённых источников запросов.
productIdНастроенный идентификатор товара. По умолчанию сумма берётся из реестра VPOS.am.
clientReferenceСозданный браузером идентификатор попытки для идемпотентной обработки.
returnUrlДолжен принадлежать разрешённому источнику запросов для установки виджета.
POST/v1/payment-sessions
Bearer-токен #

Создаёт нормализованную платёжную сессию и возвращает URL платёжной страницы, если выбранный маршрут провайдера может создать платёжную сессию.

ПолеПравила
merchantOrderIdОбязательный идентификатор заказа в системе продавца. Используйте стабильное значение для сверки.
amountMinorОбязательная целая сумма в минимальных единицах валюты.
currencyЗначения enum API: AMD, USD, EUR. Фактический набор валют определяется маршрутом провайдера и учётными данными, привязанными к установке.
returnUrlАбсолютный HTTPS URL для возврата покупателя с платёжной страницы.
customerПоля email, phone и name необязательны. Передавайте только данные, необходимые бизнес-процессу.
POST/v1/payments/{paymentId}/refunds
POST/v1/payments/{paymentId}/capture
POST/v1/payments/{paymentId}/void
Bearer-токен #

Защищённые методы refund, capture, void, fiscal retry, tokenization и subscriptions требуют Idempotency-Key. Активный маршрут провайдера выполняет операцию на сервере; локальный статус платежа меняется только после проверки итогового статуса у провайдера.

ПолеПравила
Idempotency-KeyОбязателен для каждой операции, меняющей состояние платежа.
refundТребует подтверждённого платежа со статусом paid или partially_refunded, значения amountMinor, совпадающей currency и параметра reason.
capture, voidОперация capture требует статуса authorized. Операция void/cancel допускается только для статуса, который поддерживает выбранный провайдер.
tokenizationДанные карты отклоняются; требуется токенизация на стороне провайдера и подтверждённое согласие клиента.
subscriptionsДо включения нужны токен провайдера и проверенный сценарий неуспешного продления.
GET/v1/payments?paymentId={paymentId}
Bearer-токен #

Возвращает текущее нормализованное состояние ранее созданного платежа.

СтатусРекомендованные действия
created, pending_*, authorizedНе исполняйте заказ. Продолжайте опрос статуса или ожидайте Webhook-событие.
paidЗаказ можно исполнить после проверки amount, currency и merchantOrderId.
failed, cancelled, expiredПокажите ошибку или создайте новую попытку оплаты.
refunded, partially_refunded, reversed, disputedСинхронизируйте бухгалтерию, CRM и процессы поддержки.

Webhook-события

Доставка Webhook-событий настраивается отдельно для каждой установки продавца. Ваша конечная точка API должна проверить HMAC-подпись, сохранить идентификатор события, быстро вернуть ответ и передать обработку бизнес-операций в очередь.

JSON
{
  "id": "evt_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
  "type": "payment.status_changed",
  "livemode": false,
  "createdAt": "2026-05-25T08:00:00.000Z",
  "trigger": "provider_callback",
  "data": {
    "payment": {
      "id": "pay_abcdef012345678901",
      "merchantOrderId": "order-1001",
      "provider": "ameriabank_vpos",
      "amountMinor": 15000,
      "currency": "AMD",
      "status": "paid",
      "fiscalStatus": "not_required"
    }
  }
}

Формат заголовка подписи: X-VPOS-Signature: t=<unix_timestamp>,v1=<hex_hmac_sha256>. Рассчитайте HMAC-SHA256 для строки <timestamp>.<raw_request_body> с секретом Webhook продавца и применяйте стандартный допуск timestamp в пять минут. Во время ротации секрета заголовок может содержать несколько значений v1; принимайте событие, если любой кандидат безопасно совпал с текущим или ещё действующим секретом переходного периода. Доставка также передаёт X-VPOS-Event-Id, X-VPOS-Event-Type и X-VPOS-Webhook-Timestamp.

Идемпотентность

Используйте Idempotency-Key для повторяемых операций, включая создание платежной сессии. Храните ключ вместе с заказом и попыткой оплаты: повтор сетевого запроса не должен создавать второй счёт или платёж.

  • Используйте стабильный ключ для каждой попытки оплаты заказа, а не новый случайный ключ при каждом повторе.
  • Для отдельных попыток, запущенных пользователем, создавайте разные ключи.
  • Логируйте вместе paymentId, merchantOrderId, amountMinor и currency.

Ошибки

HTTP-статусЗначениеДействие интегратора
401Bearer-токен продавца отсутствует или неверен.Не повторяйте запрос вслепую. Проверьте или перевыпустите учётные данные.
403Источник запроса не разрешён.Используйте запрос между серверами или зарегистрируйте источник серверного приложения.
422Запрос не прошёл валидацию.Исправьте данные до повторной отправки.
429Превышен лимит запросов.Увеличьте задержку и повторите запрос со случайным разбросом времени.
503Провайдер, хранилище или сервис авторизации не готовы.Повторите позже или обратитесь в поддержку, если это блокирует рабочую среду.

Правила безопасности

  • Не раскрывайте Bearer-токен продавца, секрет подписи Webhook и учётные данные провайдера в клиентском коде.
  • Используйте только HTTPS и проверяйте сертификаты сервера в серверных клиентах.
  • Считайте платёж завершённым только после серверного подтверждения статуса.
  • Проверяйте amount, currency и merchantOrderId перед изменением заказа, CRM или ERP.
  • Сохраняйте идентификаторы Webhook-событий и исключайте повторное выполнение бизнес-операций.
  • Логируйте ошибки проверки подписи и неожиданные переходы статуса без лишних персональных данных.

Эта публичная страница намеренно не содержит рабочие токены, внутренние маршруты консоли, закрытые обратные вызовы провайдеров, сведения о базе данных или банковские учётные данные.

CMS и конструкторы сайтов

Для Tilda, WooCommerce, OpenCart и CS-Cart VPOS.am остаётся техническим серверным интеграционным слоем. Сайт получает только настройки канала и публичные URL перенаправления; учётные данные банка или лицензированного платёжного провайдера хранятся только в защищённой среде VPOS.am.

  • Для Tilda VPOS.am выдаёт логин продавца, секрет HMAC и URL оплаты через Universal payment gateway; банковские ClientID, login и password в Tilda не вводятся.
  • Перед включением рабочего режима оператор проверяет готовность сайта, подпись данных платёжной формы, привязку маршрута провайдера, обработку обратного вызова и тестовый платёж в песочнице.
  • Переход в рабочую среду выполняет оператор только после подтверждения договора продавца с банком или лицензированным платёжным провайдером, маршрута провайдера и результатов тестирования.

Получение доступа

Чтобы запросить пилотный доступ или доступ к рабочей среде, отправьте на info@vpos.am название компании, адрес сайта, тип интеграции, предполагаемый банк или лицензированного платёжного провайдера, валюты, URL обратного вызова и данные технического контактного лица.

Перед выдачей доступа к рабочей среде VPOS.am проверяет данные продавца, владение доменом, безопасность URL обратного вызова, результаты тестового платежа, процессы возврата и сверки, а также ответственных за поддержку.