VangardPay — Merchant Portal 1.0
Единый портал для мерчантов VangardPay — руководство по работе с платформой, управлению балансом и разрешению апелляций.
menu_book VangardPay — Merchant Portal
├── rocket_launch Быстрый старт
├── work Личный кабинет
│ ├── Депозит (ввод USDT)
│ ├── История операций
│ ├── Финансовая отчётность
│ └── Портал апелляций
├── balance Апелляции
│ ├── Типы апелляций
│ ├── Требования к доказательствам
│ ├── Процедура рассмотрения
│ └── Сроки (SLA)
├── currency_exchange Расчёты и конвертация
│ ├── Курсообразование
│ └── Формула начислений
├── gavel Правила и ответственность
│ ├── Условия сотрудничества
│ ├── Комплаенс-требования
│ └── Защита от парсинга
├── integration_instructions API Reference
│ ├── Аутентификация
│ ├── Баланс
│ ├── Pay-In
│ ├── Pay-Out
│ ├── Апелляции
│ └── Справочники
└── edit_note Changelog
work Merchant Dashboard
Вывод средств
Доступный баланс отображается на главном экране Dashboard. Для вывода нажмите «Вывести».
| Параметр | Значение |
|---|---|
| Комиссия за вывод | 3.5 USDT за операцию |
| Время обработки | до 60 минут в рабочие часы (10:00–00:00 МСК) |
| Допустимые адреса | Только верифицированные кошельки. При использовании нескольких адресов — предварительно согласуйте с финансовым отделом |
История операций
Раздел отображает полную историю движения средств по вашему балансу.
Доступные фильтры:
- Тип операции: все / входящие (CREDIT, DEPOSIT) / исходящие (DEBIT, WITHDRAW)
- Сортировка: по дате, сумме, типу
Данные в таблице:
| Столбец | Описание |
|---|---|
| ID | Уникальный идентификатор операции (UUID) |
| Дата | Дата и время создания операции |
| Тип | Тип операции: CREDIT, DEBIT, DEPOSIT, WITHDRAW, FREEZE, UNFREEZE, DEDUCT |
| Сумма | Сумма операции в USDT |
| Баланс до | Состояние баланса до операции |
| Баланс после | Состояние баланса после операции |
| Тип баланса | Категория баланса: WORKING (рабочий) или FROZEN (замороженный) |
| Описание | Описание операции и номер связанного ордера |
Финансовая отчётность (экспорт)
Выгрузка статистики в формате Excel за произвольный период.
Как выгрузить:
- Откройте Dashboard → Отчётность
- Укажите период (начальная и конечная дата)
- Нажмите «Экспорт»
Состав отчёта:
- Сводка по аккаунту за выбранный период
- Входящие платежи (Pay-In) — все успешные операции приёма
- Исходящие платежи (Pay-Out) — все успешные операции отправки
- Депозиты — успешные пополнения баланса
- Выводы — успешные операции вывода средств
История транзакций
Раздел содержит все транзакции в финальном статусе: Успешно или Отклонено.
Типичные причины отклонения:
- Сумма платежа не совпала с суммой в ордере — это может привести к потере средств
- Плательщик использовал неверные реквизиты (при оплате через СБП возврат практически невозможен)
- Истекло время ожидания оплаты — транзакция закрыта автоматически
Доступные фильтры: дата, статус, способ оплаты, внешний ID (ExtID), внутренний ID.
Данные в таблице:
| Столбец | Описание |
|---|---|
| Статус | Успешно / Отклонено |
| Баланс (USDT) | Баланс после операции |
| Сумма (USDT) | Эквивалент в USDT |
| Курс | Курс конвертации |
| Сумма (фиат) | Сумма в локальной валюте |
| Реквизиты | Маскированные данные получателя |
| Дата | Дата и время создания |
| Метод | Способ оплаты (Card / SBP / QR) |
| #ID | Уникальный идентификатор транзакции |
balance Апелляции
Если плательщик выполнил перевод корректно (верная сумма, верные реквизиты, в установленный срок), транзакция закрывается автоматически. В остальных случаях требуется ручное разбирательство — апелляция.
Классификация апелляций
Категория A. Ошибка плательщика
Качество информирования плательщика на платёжной форме напрямую влияет на количество апелляций. Рекомендуем максимально проработать UX вашей платёжной страницы.
| Код | Тип | Описание |
|---|---|---|
| A-1 | Неполная оплата | Плательщик перевёл сумму меньше указанной в ордере. Распространённые причины: удержание комиссии банком, невнимательность, ошибка ввода |
| A-2 | Избыточная оплата | Перечислена сумма больше указанной. При значительном превышении (например, реквизиты на 5 000, оплата 500 000) существует высокий риск, что средства не будут зачислены |
| A-3 | Просроченная оплата | Перевод выполнен после истечения срока действия ордера. Платформа не несёт ответственности за такие переводы |
| A-4 | Устаревшие реквизиты | Плательщик использовал реквизиты из предыдущего ордера для оплаты нового |
| A-5 | Неверный банк-получатель | При оплате через СБП указан конкретный банк, но перевод направлен в другой. Средства могут поступить на заблокированный счёт |
| A-6 | Дробление платежа | Оплата одного ордера несколькими переводами. Автоматическое сопоставление невозможно — требуется ручная обработка |
Категория B. Фрод
| Код | Тип | Описание |
|---|---|---|
| B-1 | Поддельное подтверждение | Предоставлен сфальсифицированный чек или скриншот |
| B-2 | Повторное использование чека | Один чек используется для подтверждения нескольких разных ордеров |
| B-3 | Прочее | Иные случаи мошенничества. Детали предоставляются в рамках индивидуального разбора |
Категория C. Техническая ошибка
В редких случаях автоматика платформы может не обработать корректный платёж. Причины: сбой на стороне банка, задержка SMS-подтверждения, проблемы со связью. VangardPay постоянно совершенствует систему для минимизации таких случаев.
Требования к доказательствам
Для успешного рассмотрения апелляции необходимо предоставить подтверждающие документы в одном из следующих форматов:
Банковский чек (PDF)
- Финальный статус перевода — «Успешно» или «Исполнено»
- Данные получателя — видно, на чей счёт поступил перевод
- Точная сумма перевода
- Дата и время операции
- Без посторонних персональных данных
Видеозапись экрана
- Начало записи — с момента входа в интернет-банк (после ввода пароля)
- Видна операция с подтверждённым статусом
- Чётко отображены: сумма, дата, реквизиты получателя
- Отсутствует информация, не относящаяся к платежу
Банковская выписка
- Чётко разделены приходные и расходные операции
- Видны суммы, даты и время каждой транзакции
- Указан номер карты, счёта или привязанного телефона
Аудиозапись звонка в банк
- Запись ведётся с отдельного устройства — в кадре виден номер телефона горячей линии
- Оператор банка озвучивает название кредитной организации
- В ходе разговора уточняются: реквизиты, дата, время и сумма перевода
- Запрашивается информация о статусе перевода и возможных задержках
Процедура рассмотрения апелляций
Подача апелляции
Мерчант создаёт апелляцию через API (рекомендуется) или через Портал апелляций. Апелляция поступает трейдеру на рассмотрение.
Рассмотрение трейдером
- Платёж найден и не привязан к другому ордеру → трейдер подтверждает → апелляция одобрена
- Платёж не найден → трейдер отклоняет с банковской выпиской → апелляция передаётся на проверку саппорту → возможна вторичная апелляция (см. ниже)
- Платёж зачтён по другому ордеру → окончательное отклонение, вторичная апелляция невозможна
Вторичная апелляция (2 этапа)
Вторичная апелляция возможна только при отклонении по причине «Платёж не обнаружен». Следующие причины отклонения являются окончательными и не подлежат вторичной апелляции:
- Зачтён по другому ордеру — платёж уже привязан к другой операции
- Фрод (категория B) — повторные попытки могут привести к блокировке
Иерархия веса доказательств (от слабого к сильному):
| Приоритет | Тип доказательства |
|---|---|
| 1 (низший) | Чек плательщика (PDF) |
| 2 | Банковская выписка (трейдера или плательщика) |
| 3 | Видеозапись плательщика |
| 4 (высший) | Видеозапись трейдера |
Этап 1. Первичная апелляция
Мерчант создаёт апелляцию и прикладывает чек плательщика. Апелляция поступает трейдеру.
Действия трейдера:
- Платёж найден, не зачислен по другому ордеру → трейдер подтверждает → апелляция одобрена
- Платёж не найден → трейдер отклоняет с приложением банковской выписки → апелляция передаётся на проверку саппорту
После отклонения апелляция передаётся саппорту — саппорт проверяет документы трейдера и пересылает их мерчанту с запросом дополнительных доказательств (видео).
Действия мерчанта (ожидание ответа):
- Мерчант не отправляет документы в течение 24 часов → апелляция отклонена
- Мерчант не согласен и плательщик прикладывает видео списания → апелляция переходит на вторичное рассмотрение
Этап 2. Вторичная апелляция
Трейдер получает вторичную апелляцию с видео плательщика.
Действия трейдера:
- Трейдер предоставляет встречное видео → решение в пользу трейдера → апелляция отклонена (видео трейдера имеет наибольший вес)
- Трейдер не предоставляет видео в течение 3 банковских дней или вручную подтверждает апелляцию → апелляция закрывается в пользу мерчанта
- Платёж может находиться на проверке службой безопасности банка
- Банку требуется до 3 рабочих дней на рассмотрение
- За это время платёж либо зачислится, либо вернётся отправителю
Сроки рассмотрения (SLA)
Служба апелляций работает круглосуточно, 7 дней в неделю.
| Возраст транзакции | Время суток (МСК) | Максимальный срок ответа |
|---|---|---|
| 0–48 часов | 10:00–23:59 | 45 минут |
| 0–48 часов | 00:00-10:00 | До 10:00 утра |
| 2–14 дней | любое | 5 банковских дней |
| Вторичная апелляция (срок ответа трейдера) | любое | 3 банковских дня |
| Ответ мерчанта на доказательства трейдера | любое | 24 часа |
| Старше 14 дней | — | Не принимается |
currency_exchange Расчёты и конвертация
Курсообразование
Все расчёты на платформе выполняются по рыночному курсу, сформированному на основе агрегированных данных P2P-площадок (ByBit, Rapira и др.). Курс обновляется в реальном времени.
Детальная методика курсообразования для каждой поддерживаемой валютной пары предоставляется по запросу через вашего менеджера.
Формула начислений
При зачислении средств на баланс мерчанта из суммы платежа удерживается комиссия. Расчёт производится в три этапа.
Исходные данные:
- fee — ваша комиссия (%)
- rate — текущий курс фиатной валюты к USDT
- amount — сумма платежа в фиатной валюте
Все промежуточные значения округляются до 2 знаков после запятой по стандартным математическим правилам (≥ 0.005 → вверх).
| Этап | Формула | Пример (amount=10 000₽, rate=95.53, fee=12%) |
|---|---|---|
| 1. Конвертация в USDT | usdt = round(amount / rate, 2) |
round(10000 / 95.53, 2) = 104.68 |
| 2. Расчёт комиссии | commission = round(usdt × fee / 100, 2) |
round(104.68 × 12 / 100, 2) = 12.56 |
| 3. Зачисление на баланс | credit = usdt − commission |
104.68 − 12.56 = 92.12 USDT |
gavel Правила и ответственность
Настоящий раздел определяет обязательства мерчанта при работе с платформой VangardPay. Нарушение условий может повлечь финансовую ответственность в соответствии с заключённым договором.
1. Соответствие согласованным параметрам трафика
Изменение типа или географии трафика без предварительного согласования с VangardPay не допускается. При выявлении несоответствия между фактическими параметрами трафика и условиями договора платформа вправе применить штрафные санкции.
2. Раскрытие информации об источниках трафика
Мерчант обязан предоставлять полные и достоверные сведения обо всех источниках трафика. Сокрытие информации или предоставление ложных данных влечёт ответственность согласно условиям договора.
3. Добросовестность транзакций
Мерчант несёт ответственность за качество предоставляемых заявок. Намеренная подача недобросовестных или фиктивных ордеров является грубым нарушением условий сотрудничества.
4. Комплаенс при обменных операциях
Использование платформы для приобретения плательщиком товаров, предметов или услуг, запрещённых законодательством соответствующей юрисдикции, строго запрещено.
5. Компенсация убытков
Если действия мерчанта или плательщиков, действующих от имени мерчанта, привели к материальному ущербу для трейдеров платформы, мерчант обязан возместить убытки в полном объёме. Возмещение производится путём списания средств с баланса после предоставления платформой обоснованных доказательств.
Ежемесячно (30-го числа) VangardPay направляет мерчанту акт сверки с детализацией всех случаев.
6. Информирование плательщиков
Мерчант обязан доводить до плательщиков правила совершения платежей и последствия их нарушения. Рекомендуется размещать краткую инструкцию непосредственно на платёжной форме.
7. Защита от автоматизированных атак
Мерчант обязан реализовать на своей стороне защиту от парсинга и перебора платёжных реквизитов (rate limiting, CAPTCHA, мониторинг аномалий).
API Reference
Полная техническая документация для интеграции с платёжной платформой VangardPay. Все запросы выполняются через HTTPS.
Аутентификация
API-ключ выдаётся администратором. Передавайте его в заголовке X-API-Key
Вебхуки
POST на ваш callbackUrl при изменении статуса ордера. HMAC-SHA256 подпись.
Базовый URL
https://api.vangardpay.com
rocket_launch Быстрый старт
Четыре шага, чтобы начать принимать платежи:
| Шаг | Действие | Подробнее |
|---|---|---|
| 1 | Получите доступ к Merchant Dashboard от вашего менеджера | — |
| 2 | Получите X-API-Key у администратора VangardPay | Ключ выдаётся вручную |
| 3 | Выполните тестовый платёж в Sandbox-среде | H2H API или Payment Page |
| 4 | Переключитесь на Production и начните приём платежей | Dashboard → Настройки |
Способы интеграции
Host-to-Host (H2H)
Прямое создание ордеров через API. Вы сами строите платёжную форму. Полный контроль над UX.
Платёжная страница
Создание сессии → редирект на страницу VangardPay. Клиент выбирает сумму и метод сам.
Формат ответов
Все ответы в формате JSON. Успешные запросы возвращают данные напрямую. При ошибке — стандартный объект ошибки.
Коды ошибок
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
401 | Unauthorized | да | Неверный или отсутствующий X-API-Key |
400 | Bad Request | да | Ошибка валидации входных данных |
404 | Not Found | да | Ресурс не найден (ордер, апелляция) |
429 | Too Many Requests | да | Превышен лимит запросов (login: 20/15 мин) |
500 | Internal Server Error | да | Внутренняя ошибка сервера |
Примеры ошибок:
// 401 — Неверный API-ключ
{
"statusCode": 401,
"message": "Invalid API key",
"error": "Unauthorized"
}
// 400 — Ошибка валидации
{
"statusCode": 400,
"message": ["amount must not be greater than 300000", "type must be a valid enum value"],
"error": "Bad Request"
}
// 404 — Ордер не найден
{
"statusCode": 404,
"message": "Order not found",
"error": "Not Found"
}
// 429 — Слишком много запросов
{
"statusCode": 429,
"message": "Слишком много попыток входа. Попробуйте позже через 15 минут.",
"error": "Too Many Requests"
}
code Host-to-Host интеграция
Прямое создание ордеров через API с заголовком X-API-Key. Все эндпоинты имеют префикс /api/v1/.
/api/v1/orders
CreateOrderDto| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
type | enum (DEPOSIT | WITHDRAWAL) | да | Тип операцииПример: "DEPOSIT" |
amount | number | да | Сумма (0.01–300 000)Пример: 5000 |
currency | string | нет | Валюта (по умолчанию RUB)Пример: "RUB" |
method | enum (SBP | CARD_NUMBER | ACCOUNT_TRANSFER | CASH | TRANSGOV) | нет | Метод оплатыПример: "SBP" |
bank | string | нет | Код банкаПример: "SBERBANK" |
invId | string | нет | Ваш внутренний ID заказа (генерируется если не указан)Пример: "ORDER_123" |
callbackUrl | string | нет | URL для вебхук-уведомленийПример: "https://your-site.com/webhook" |
ttl | number | нет | Время жизни ордера в секундах (300–86400)Пример: 3600 |
phoneNumber | string | нет | Телефон для СБППример: "+79991234567" |
cardNumber | string | нет | Номер карты получателяПример: "4111111111111111" |
recipientFio | string | нет | ФИО получателяПример: "Иванов Иван Иванович" |
curl -X POST https://api.vangardpay.com/api/v1/orders \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "DEPOSIT",
"amount": 5000,
"method": "SBP",
"bank": "SBERBANK",
"callbackUrl": "https://your-site.com/webhook"
}'{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"invId": "INV-1710528000-A1B2",
"status": "PENDING",
"type": "DEPOSIT",
"amount": 5000,
"currency": "RUB",
"method": "SBP",
"bank": "SBERBANK",
"callbackUrl": "https://your-site.com/webhook",
"expiresAt": "2026-03-16T19:00:00.000Z",
"createdAt": "2026-03-16T18:00:00.000Z"
}/api/v1/orders/:invId/status
Параметр :invId — ваш внутренний ID заказа, который был задан при создании.
curl -X GET https://api.vangardpay.com/api/v1/orders/ORDER_123/status \
-H "X-API-Key: YOUR_API_KEY"{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"invId": "ORDER_123",
"status": "COMPLETED",
"type": "DEPOSIT",
"amount": 5000,
"factAmount": 4997.50,
"currency": "RUB",
"method": "SBP",
"completedAt": "2026-03-16T18:15:00.000Z",
"createdAt": "2026-03-16T18:00:00.000Z"
}/api/v1/balance
curl -X GET https://api.vangardpay.com/api/v1/balance \
-H "X-API-Key: YOUR_API_KEY"{
"merchantId": "m-abc123",
"balance": 15250.75,
"frozenBalance": 3000.00,
"disputeBalance": 500.00,
"displayName": "My Store",
"currency": "USDT"
}/api/v1/banks
Возвращает список банков, доступных для создания ордеров.
curl -X GET https://api.vangardpay.com/api/v1/banks \
-H "X-API-Key: YOUR_API_KEY"[
{ "code": "SBERBANK", "name": "Сбербанк", "methods": ["CARD_NUMBER", "SBP", "ACCOUNT_TRANSFER"] },
{ "code": "TINKOFF", "name": "Тинькофф", "methods": ["CARD_NUMBER", "SBP"] },
{ "code": "ALFABANK", "name": "Альфа-Банк", "methods": ["CARD_NUMBER", "SBP"] },
{ "code": "VTB", "name": "ВТБ", "methods": ["CARD_NUMBER", "ACCOUNT_TRANSFER"] }
]/api/v1/payouts
Создание заявки на вывод средств с баланса мерчанта.
curl -X POST https://api.vangardpay.com/api/v1/payouts \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount": 10000, "method": "CARD_NUMBER", "cardNumber": "4111111111111111"}'{
"id": "payout-xyz789",
"amount": 10000,
"status": "PENDING",
"method": "CARD_NUMBER",
"createdAt": "2026-03-16T18:00:00.000Z"
}web Платёжная страница
Создайте платёжную сессию и перенаправьте клиента на страницу VangardPay. Клиент сам выберет сумму (в заданном диапазоне) и метод оплаты.
paymentUrl → редирект клиента → клиент платит → вебхук на ваш сервер/api/v1/payment-sessions
CreatePaymentSessionDto| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
minAmount | number | нет | Минимальная сумма платежаПример: 100 |
maxAmount | number | нет | Максимальная сумма платежаПример: 100000 |
currency | string | нет | Валюта (по умолчанию RUB)Пример: "RUB" |
allowedMethods | string | нет | JSON-массив разрешённых методов оплатыПример: ["CARD_NUMBER", "SBP"] |
useDelta | boolean | нет | Использовать дельту для уникализации суммы (по умолчанию true)Пример: true |
callbackUrl | string | нет | URL для вебхук-уведомленийПример: "https://merchant.com/webhook" |
successUrl | string | нет | URL редиректа после успешной оплатыПример: "https://merchant.com/success" |
failUrl | string | нет | URL редиректа при ошибке/отменеПример: "https://merchant.com/fail" |
externalId | string | нет | Ваш внешний ID заказаПример: "ORDER_123" |
metadata | string | нет | JSON с произвольными даннымиПример: {"userId": "123"} |
ttl | number | нет | Время жизни сессии в секундах (300–86400)Пример: 3600 |
curl -X POST https://api.vangardpay.com/api/v1/payment-sessions \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"minAmount": 500,
"maxAmount": 50000,
"allowedMethods": "[\\"SBP\\", \\"CARD_NUMBER\\"]",
"callbackUrl": "https://your-site.com/webhook",
"successUrl": "https://your-site.com/success",
"failUrl": "https://your-site.com/fail",
"externalId": "ORDER_456"
}'{
"token": "ps_a1b2c3d4e5f6",
"paymentUrl": "https://pay.vangardpay.com/payment/ps_a1b2c3d4e5f6",
"expiresAt": "2026-03-16T19:00:00.000Z"
}gavel Апелляции
Если ордер завершился некорректно (клиент оплатил, но статус не подтвердился), создайте апелляцию.
/api/v1/appeals
CreateAppealDto| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
orderId | string | нет | UUID ордера в системеПример: "550e8400-e29b-41d4-a716-446655440000" |
invId | string | нет | Ваш публичный ID заказа (альтернатива orderId)Пример: "INV-12345" |
reason | string | да | Причина апелляцииПример: "Платёж не зачислен" |
comment | string | нет | Подробный комментарий к ситуацииПример: "Клиент отправил деньги, приложил чек" |
images | string[] | нет | Массив URL загруженных изображений |
videos | string[] | нет | Массив URL загруженных видео |
documents | string[] | нет | Массив URL загруженных документов |
images, videos, documents.curl -X POST https://api.vangardpay.com/api/v1/appeals \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"invId": "ORDER_123",
"reason": "Платёж не зачислен",
"comment": "Клиент отправил 5000 руб, приложен чек",
"images": ["https://api.vangardpay.com/uploads/appeals/appeal-123.jpg"]
}'{
"id": "appeal-uuid-123",
"orderId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"invId": "ORDER_123",
"status": "PENDING",
"reason": "Платёж не зачислен",
"comment": "Клиент отправил 5000 руб, приложен чек",
"images": ["https://api.vangardpay.com/uploads/appeals/appeal-123.jpg"],
"deadline": "2026-03-19T18:00:00.000Z",
"createdAt": "2026-03-16T18:00:00.000Z"
}/api/v1/appeals/upload
Загрузка до 10 файлов (макс. 50 МБ каждый). Поддерживаемые форматы: JPEG, PNG, GIF, WebP, MP4, AVI, PDF, DOC, DOCX, TXT, ZIP, XLS, XLSX.
curl -X POST https://api.vangardpay.com/api/v1/appeals/upload \
-H "X-API-Key: YOUR_API_KEY" \
-F "files=@screenshot.png" \
-F "files=@receipt.pdf"{
"files": [
{
"type": "image",
"path": "https://api.vangardpay.com/uploads/appeals/appeal-1710528000-123.png",
"mime_type": "image/png",
"originalName": "screenshot.png",
"size": 245760
},
{
"type": "document",
"path": "https://api.vangardpay.com/uploads/appeals/appeal-1710528000-456.pdf",
"mime_type": "application/pdf",
"originalName": "receipt.pdf",
"size": 102400
}
],
"message": "Загружено 2 файл(ов)"
}/api/v1/appeals
Возвращает список апелляций с пагинацией. Мерчант видит только свои апелляции.
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
page | number | нет | Номер страницыПример: 1 |
limit | number | нет | Количество на страницеПример: 20 |
status | string | нет | Фильтр по статусуПример: "PENDING" |
orderId | string | нет | Фильтр по UUID ордера |
curl -X GET "https://api.vangardpay.com/api/v1/appeals?page=1&limit=10" \
-H "X-API-Key: YOUR_API_KEY"{
"data": [
{
"id": "appeal-uuid-123",
"orderId": "a1b2c3d4",
"invId": "ORDER_123",
"status": "PENDING",
"reason": "Платёж не зачислен",
"deadline": "2026-03-19T18:00:00.000Z",
"createdAt": "2026-03-16T18:00:00.000Z"
}
],
"meta": {
"page": 1,
"limit": 10,
"total": 3,
"totalPages": 1
}
}/api/v1/appeals/:id
Возвращает полную информацию об апелляции, включая прикреплённые файлы и историю изменений.
curl -X GET https://api.vangardpay.com/api/v1/appeals/APPEAL_UUID \
-H "X-API-Key: YOUR_API_KEY"{
"id": "appeal-uuid-123",
"orderId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"invId": "ORDER_123",
"status": "SUPPORT_REVIEW",
"reason": "Платёж не зачислен",
"comment": "Клиент отправил 5000 руб",
"images": ["https://api.vangardpay.com/uploads/appeals/appeal-123.jpg"],
"videos": [],
"documents": [],
"deadline": "2026-03-19T18:00:00.000Z",
"order": {
"id": "a1b2c3d4",
"invId": "ORDER_123",
"amount": 5000,
"status": "CANCELLED"
},
"statusHistory": [
{ "status": "PENDING", "comment": null, "createdAt": "2026-03-16T18:00:00.000Z" },
{ "status": "SUPPORT_REVIEW", "comment": "Трейдер отклонил, передано в поддержку", "createdAt": "2026-03-17T10:00:00.000Z" }
],
"createdAt": "2026-03-16T18:00:00.000Z"
}webhook Вебхуки
При каждом изменении статуса ордера VangardPay отправляет POST-запрос на ваш callbackUrl.
Формат вебхука
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
invId | string | да | Ваш внутренний ID заказаПример: "ORDER_123" |
status | string | да | Новый статус ордераПример: "COMPLETED" |
amount | number | да | Запрошенная суммаПример: 5000 |
factAmount | number | нет | Фактическая полученная суммаПример: 4997.5 |
currency | string | да | ВалютаПример: "RUB" |
timestamp | string | да | Время события (ISO 8601)Пример: "2026-03-15T12:00:00.000Z" |
signature | string | да | HMAC-SHA256 подпись |
Проверка подписи
Подпись формируется из конкатенации 4 полей:
dataString = invId + status + amount + timestamp
signature = HMAC-SHA256(dataString, callbackSecret)
Пример проверки на Node.js:
const crypto = require('crypto');
app.post('/webhook', (req, res) => {
const { invId, status, amount, timestamp, signature } = req.body;
const dataString = invId + status + amount + timestamp;
const expected = crypto
.createHmac('sha256', CALLBACK_SECRET)
.update(dataString)
.digest('hex');
if (expected !== signature) {
return res.status(403).json({ error: 'Invalid signature' });
}
// Обработка события...
if (status === 'COMPLETED') {
// Зачислить средства пользователю
}
res.json({ ok: true });
});
Пример проверки на PHP:
$data = json_decode(file_get_contents('php://input'), true);
$dataString = $data['invId'] . $data['status'] . $data['amount'] . $data['timestamp'];
$expected = hash_hmac('sha256', $dataString, $callbackSecret);
if (!hash_equals($expected, $data['signature'])) {
http_response_code(403);
exit('Invalid signature');
}
// Обработка события...
Политика повторов
200 OK, вебхук будет отправлен повторно до 3 раз с интервалом 60 секунд. После 3 неудачных попыток уведомление прекращается.Статусы ордеров
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
PENDING | — | нет | Ордер создан, ожидает назначения трейдера |
AWAITING_PAYMENT | — | нет | Трейдер назначен, клиент должен оплатить |
COMPLETED | — | нет | Платёж подтверждён |
CANCELLED | — | нет | Ордер отменён |
EXPIRED | — | нет | Истёк таймаут ордера |
FAILED | — | нет | Ошибка обработки |