Границы публичного 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-событие.
- Создайте платёжную сессию с постоянным значением merchantOrderId и заголовком Idempotency-Key.
- Перенаправьте покупателя на checkoutUrl, который вернул VPOS.am.
- Исполняйте заказ только после статуса paid, подтверждённого Webhook-событием или серверным запросом статуса.
Возврат покупателя по returnUrl не подтверждает оплату. Это только событие интерфейса. Выдавать товар или менять статус заказа можно после серверной проверки или подписанного Webhook-события.
Основные методы API
Карточки описывают основной платёжный сценарий продавца. Полный перечень публичных операций и схем приведён в спецификации OpenAPI 3.1.
/api/healthВозвращает публичный статус готовности сервиса для мониторинга и проверки интеграции. JSON-ответ может содержать причины неготовности, но их текст не является стабильной частью контракта.
| Статус | Значение |
|---|---|
| 200 | Сервис отвечает; готовность указана в теле JSON-ответа. |
| 405 | HTTP-метод не поддерживается. |
/v1/capabilitiesВозвращает консервативную матрицу возможностей провайдера. Используйте её, чтобы включать PayLink, QR, возвраты, фискализацию и токенизацию только для готового маршрута.
| Поле | Правила |
|---|---|
providers[].capabilities | Признаки поддержки и включения для каждого маршрута провайдера. |
connectors.statusSync | Нормализованные статусы VPOS и сопоставление со статусами платформ. Возврат из браузера не подтверждает оплату. |
payment_links, qr_presentation | Включаются только для маршрута, способного создавать платежные сессии. |
refund, capture, void, tokenization, subscriptions | Операции доступны только при включённой возможности провайдера; иначе API возвращает явную ошибку disabled/not-configured. |
/api/widget/checkoutСоздаёт платёжную страницу по публичному ключу виджета для Webflow, Squarespace, Wix, Ucraft и простых лендингов. Браузер не получает токен продавца или банковские учётные данные: VPOS.am на сервере сопоставляет ключ, разрешённый источник запроса, продавца и маршрут провайдера.
| Поле | Правила |
|---|---|
publicKey | Публичный ключ установки виджета, привязанный на сервере к точному списку разрешённых источников запросов. |
productId | Настроенный идентификатор товара. По умолчанию сумма берётся из реестра VPOS.am. |
clientReference | Созданный браузером идентификатор попытки для идемпотентной обработки. |
returnUrl | Должен принадлежать разрешённому источнику запросов для установки виджета. |
/v1/payment-linksСоздаёт идемпотентную платёжную ссылку на основе платёжной сессии. QR-код содержит только URL; итоговый статус оплаты подтверждается Webhook-событием или сверкой.
| Поле | Правила |
|---|---|
Idempotency-Key | Обязательный заголовок. Используйте тот же ключ при повторе запроса, чтобы не создать вторую ссылку. |
amount, currency | Сумма в основных единицах и валюта AMD/USD/EUR. Для AMD требуется целое значение. |
description | Обязательное описание платежа для покупателя. |
expiresAt | Необязательная будущая дата и время ISO. Истечение ссылки не подтверждает результат платежа. |
provider | Необязательная проверка ожидаемого провайдера. Маршрут и учётные данные выбираются по API-ключу, привязанному к конкретной установке; несовпадение отклоняется. |
/v1/payment-sessionsСоздаёт нормализованную платёжную сессию и возвращает URL платёжной страницы, если выбранный маршрут провайдера может создать платёжную сессию.
| Поле | Правила |
|---|---|
merchantOrderId | Обязательный идентификатор заказа в системе продавца. Используйте стабильное значение для сверки. |
amountMinor | Обязательная целая сумма в минимальных единицах валюты. |
currency | Значения enum API: AMD, USD, EUR. Фактический набор валют определяется маршрутом провайдера и учётными данными, привязанными к установке. |
returnUrl | Абсолютный HTTPS URL для возврата покупателя с платёжной страницы. |
customer | Поля email, phone и name необязательны. Передавайте только данные, необходимые бизнес-процессу. |
/v1/payments/{paymentId}/refunds/v1/payments/{paymentId}/capture/v1/payments/{paymentId}/voidЗащищённые методы 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 | До включения нужны токен провайдера и проверенный сценарий неуспешного продления. |
/v1/payments?paymentId={paymentId}Возвращает текущее нормализованное состояние ранее созданного платежа.
| Статус | Рекомендованные действия |
|---|---|
created, pending_*, authorized | Не исполняйте заказ. Продолжайте опрос статуса или ожидайте Webhook-событие. |
paid | Заказ можно исполнить после проверки amount, currency и merchantOrderId. |
failed, cancelled, expired | Покажите ошибку или создайте новую попытку оплаты. |
refunded, partially_refunded, reversed, disputed | Синхронизируйте бухгалтерию, CRM и процессы поддержки. |
По этому фильтру методы не найдены.
Webhook-события
Доставка Webhook-событий настраивается отдельно для каждой установки продавца. Ваша конечная точка API должна проверить HMAC-подпись, сохранить идентификатор события, быстро вернуть ответ и передать обработку бизнес-операций в очередь.
{
"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-статус | Значение | Действие интегратора |
|---|---|---|
401 | Bearer-токен продавца отсутствует или неверен. | Не повторяйте запрос вслепую. Проверьте или перевыпустите учётные данные. |
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 обратного вызова, результаты тестового платежа, процессы возврата и сверки, а также ответственных за поддержку.