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 МСК)
Допустимые адреса Только верифицированные кошельки. При использовании нескольких адресов — предварительно согласуйте с финансовым отделом
block
Вывод на площадки, находящиеся под санкциями, запрещён. Такие транзакции будут отклонены.

История операций

Раздел отображает полную историю движения средств по вашему балансу.

Доступные фильтры:

Данные в таблице:

Столбец Описание
ID Уникальный идентификатор операции (UUID)
Дата Дата и время создания операции
Тип Тип операции: CREDIT, DEBIT, DEPOSIT, WITHDRAW, FREEZE, UNFREEZE, DEDUCT
Сумма Сумма операции в USDT
Баланс до Состояние баланса до операции
Баланс после Состояние баланса после операции
Тип баланса Категория баланса: WORKING (рабочий) или FROZEN (замороженный)
Описание Описание операции и номер связанного ордера

Финансовая отчётность (экспорт)

Выгрузка статистики в формате Excel за произвольный период.

Как выгрузить:

  1. Откройте Dashboard → Отчётность
  2. Укажите период (начальная и конечная дата)
  3. Нажмите «Экспорт»

Состав отчёта:


История транзакций

Раздел содержит все транзакции в финальном статусе: Успешно или Отклонено.

Типичные причины отклонения:

Доступные фильтры: дата, статус, способ оплаты, внешний 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)

Видеозапись экрана

Банковская выписка

Аудиозапись звонка в банк


Процедура рассмотрения апелляций

analytics Диаграмма процесса (см. описание ниже)

Подача апелляции

Мерчант создаёт апелляцию через API (рекомендуется) или через Портал апелляций. Апелляция поступает трейдеру на рассмотрение.

lightbulb
Рекомендация: прикладывайте видеозапись экрана сразу при создании апелляции. Это ускоряет рассмотрение и позволяет закрыть спор на первом этапе — без промежуточных запросов.

Рассмотрение трейдером

Вторичная апелляция (2 этапа)

Вторичная апелляция возможна только при отклонении по причине «Платёж не обнаружен». Следующие причины отклонения являются окончательными и не подлежат вторичной апелляции:

warning
Максимальное количество раундов по одной транзакции — 2 (первичная апелляция → вторичная апелляция). После этого вопрос закрыт.

Иерархия веса доказательств (от слабого к сильному):

Приоритет Тип доказательства
1 (низший) Чек плательщика (PDF)
2 Банковская выписка (трейдера или плательщика)
3 Видеозапись плательщика
4 (высший) Видеозапись трейдера

Этап 1. Первичная апелляция

Мерчант создаёт апелляцию и прикладывает чек плательщика. Апелляция поступает трейдеру.

Действия трейдера:

warning
Важно: при отклонении трейдер обязан приложить банковскую выписку, подтверждающую отсутствие поступления. Отклонение без выписки не принимается системой.

После отклонения апелляция передаётся саппорту — саппорт проверяет документы трейдера и пересылает их мерчанту с запросом дополнительных доказательств (видео).

Действия мерчанта (ожидание ответа):

lightbulb
Шорткат: если мерчант приложил видеозапись (а не чек) сразу при создании первичной апелляции, трейдер может отклонить её только приложив встречное видео. Вторичная апелляция в этом случае исключается — вопрос решается сразу.

Этап 2. Вторичная апелляция

Трейдер получает вторичную апелляцию с видео плательщика.

Действия трейдера:

info
Почему 3 банковских дня?
  • Платёж может находиться на проверке службой безопасности банка
  • Банку требуется до 3 рабочих дней на рассмотрение
  • За это время платёж либо зачислится, либо вернётся отправителю
lightbulb
Рекомендация: прикладывайте видеозапись плательщика сразу при создании первичной апелляции. Это позволяет закрыть спорную ситуацию быстрее — без промежуточных этапов и дополнительных запросов.
warning
Апелляция считается активной только после того, как связанная транзакция перейдёт в финальный статус «Отклонено». До этого момента заявка не рассматривается.

Сроки рассмотрения (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 и др.). Курс обновляется в реальном времени.

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


Формула начислений

При зачислении средств на баланс мерчанта из суммы платежа удерживается комиссия. Расчёт производится в три этапа.

Исходные данные:

Все промежуточные значения округляются до 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.

vpn_key

Аутентификация

API-ключ выдаётся администратором. Передавайте его в заголовке X-API-Key

webhook

Вебхуки

POST на ваш callbackUrl при изменении статуса ордера. HMAC-SHA256 подпись.

dns

Базовый URL

https://api.vangardpay.com

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

Четыре шага, чтобы начать принимать платежи:

ШагДействиеПодробнее
1Получите доступ к Merchant Dashboard от вашего менеджера
2Получите X-API-Key у администратора VangardPayКлюч выдаётся вручную
3Выполните тестовый платёж в Sandbox-средеH2H API или Payment Page
4Переключитесь на Production и начните приём платежейDashboard → Настройки

Способы интеграции

code

Host-to-Host (H2H)

Прямое создание ордеров через API. Вы сами строите платёжную форму. Полный контроль над UX.

→ Перейти к H2H API

web

Платёжная страница

Создание сессии → редирект на страницу VangardPay. Клиент выбирает сумму и метод сам.

→ Перейти к Payment Page API

Формат ответов

Все ответы в формате JSON. Успешные запросы возвращают данные напрямую. При ошибке — стандартный объект ошибки.

Коды ошибок

HTTP коды ошибок
ПолеТипОбяз.Описание
401UnauthorizedдаНеверный или отсутствующий X-API-Key
400Bad RequestдаОшибка валидации входных данных
404Not FoundдаРесурс не найден (ордер, апелляция)
429Too Many RequestsдаПревышен лимит запросов (login: 20/15 мин)
500Internal 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/.

POST /api/v1/orders
Создание нового ордера
Тело запроса CreateOrderDto
ПолеТипОбяз.Описание
typeenum (DEPOSIT | WITHDRAWAL)даТип операцииПример: "DEPOSIT"
amountnumberдаСумма (0.01–300 000)Пример: 5000
currencystringнетВалюта (по умолчанию RUB)Пример: "RUB"
methodenum (SBP | CARD_NUMBER | ACCOUNT_TRANSFER | CASH | TRANSGOV)нетМетод оплатыПример: "SBP"
bankstringнетКод банкаПример: "SBERBANK"
invIdstringнетВаш внутренний ID заказа (генерируется если не указан)Пример: "ORDER_123"
callbackUrlstringнетURL для вебхук-уведомленийПример: "https://your-site.com/webhook"
ttlnumberнетВремя жизни ордера в секундах (300–86400)Пример: 3600
phoneNumberstringнетТелефон для СБППример: "+79991234567"
cardNumberstringнетНомер карты получателяПример: "4111111111111111"
recipientFiostringнетФИО получателяПример: "Иванов Иван Иванович"
Пример запроса
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"
  }'
Пример ответа 201 Created
{
  "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"
}
GET /api/v1/orders/:invId/status
Получение статуса ордера по invId

Параметр :invId — ваш внутренний ID заказа, который был задан при создании.

Пример запроса
curl -X GET https://api.vangardpay.com/api/v1/orders/ORDER_123/status \
  -H "X-API-Key: YOUR_API_KEY"
Пример ответа 200 OK
{
  "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"
}
GET /api/v1/balance
Баланс мерчанта
Пример запроса
curl -X GET https://api.vangardpay.com/api/v1/balance \
  -H "X-API-Key: YOUR_API_KEY"
Пример ответа 200 OK
{
  "merchantId": "m-abc123",
  "balance": 15250.75,
  "frozenBalance": 3000.00,
  "disputeBalance": 500.00,
  "displayName": "My Store",
  "currency": "USDT"
}
GET /api/v1/banks
Список поддерживаемых банков

Возвращает список банков, доступных для создания ордеров.

Пример запроса
curl -X GET https://api.vangardpay.com/api/v1/banks \
  -H "X-API-Key: YOUR_API_KEY"
Пример ответа 200 OK
[
  { "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"] }
]
POST /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"}'
Пример ответа 201 Created
{
  "id": "payout-xyz789",
  "amount": 10000,
  "status": "PENDING",
  "method": "CARD_NUMBER",
  "createdAt": "2026-03-16T18:00:00.000Z"
}

web Платёжная страница

Создайте платёжную сессию и перенаправьте клиента на страницу VangardPay. Клиент сам выберет сумму (в заданном диапазоне) и метод оплаты.

info
Поток: Создать сессию → получить paymentUrlредирект клиента → клиент платит → вебхук на ваш сервер
POST /api/v1/payment-sessions
Создание платёжной сессии
Тело запроса CreatePaymentSessionDto
ПолеТипОбяз.Описание
minAmountnumberнетМинимальная сумма платежаПример: 100
maxAmountnumberнетМаксимальная сумма платежаПример: 100000
currencystringнетВалюта (по умолчанию RUB)Пример: "RUB"
allowedMethodsstringнетJSON-массив разрешённых методов оплатыПример: ["CARD_NUMBER", "SBP"]
useDeltabooleanнетИспользовать дельту для уникализации суммы (по умолчанию true)Пример: true
callbackUrlstringнетURL для вебхук-уведомленийПример: "https://merchant.com/webhook"
successUrlstringнетURL редиректа после успешной оплатыПример: "https://merchant.com/success"
failUrlstringнетURL редиректа при ошибке/отменеПример: "https://merchant.com/fail"
externalIdstringнетВаш внешний ID заказаПример: "ORDER_123"
metadatastringнетJSON с произвольными даннымиПример: {"userId": "123"}
ttlnumberнетВремя жизни сессии в секундах (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"
  }'
Пример ответа 201 Created
{
  "token": "ps_a1b2c3d4e5f6",
  "paymentUrl": "https://pay.vangardpay.com/payment/ps_a1b2c3d4e5f6",
  "expiresAt": "2026-03-16T19:00:00.000Z"
}

gavel Апелляции

Если ордер завершился некорректно (клиент оплатил, но статус не подтвердился), создайте апелляцию.

POST /api/v1/appeals
Создание апелляции
Тело запроса CreateAppealDto
ПолеТипОбяз.Описание
orderIdstringнетUUID ордера в системеПример: "550e8400-e29b-41d4-a716-446655440000"
invIdstringнетВаш публичный ID заказа (альтернатива orderId)Пример: "INV-12345"
reasonstringдаПричина апелляцииПример: "Платёж не зачислен"
commentstringнетПодробный комментарий к ситуацииПример: "Клиент отправил деньги, приложил чек"
imagesstring[]нетМассив URL загруженных изображений
videosstring[]нетМассив URL загруженных видео
documentsstring[]нетМассив URL загруженных документов
lightbulb
Сначала загрузите файлы через POST /api/v1/appeals/upload, затем передайте полученные 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"]
  }'
Пример ответа 201 Created
{
  "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"
}
POST /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"
Пример ответа 200 OK
{
  "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 файл(ов)"
}
GET /api/v1/appeals
Список апелляций мерчанта

Возвращает список апелляций с пагинацией. Мерчант видит только свои апелляции.

Query-параметры
ПолеТипОбяз.Описание
pagenumberнетНомер страницыПример: 1
limitnumberнетКоличество на страницеПример: 20
statusstringнетФильтр по статусуПример: "PENDING"
orderIdstringнетФильтр по UUID ордера
Пример запроса
curl -X GET "https://api.vangardpay.com/api/v1/appeals?page=1&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"
Пример ответа 200 OK
{
  "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
  }
}
GET /api/v1/appeals/:id
Детали апелляции

Возвращает полную информацию об апелляции, включая прикреплённые файлы и историю изменений.

Пример запроса
curl -X GET https://api.vangardpay.com/api/v1/appeals/APPEAL_UUID \
  -H "X-API-Key: YOUR_API_KEY"
Пример ответа 200 OK
{
  "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.

Формат вебхука

Payload (JSON)
ПолеТипОбяз.Описание
invIdstringдаВаш внутренний ID заказаПример: "ORDER_123"
statusstringдаНовый статус ордераПример: "COMPLETED"
amountnumberдаЗапрошенная суммаПример: 5000
factAmountnumberнетФактическая полученная суммаПример: 4997.5
currencystringдаВалютаПример: "RUB"
timestampstringдаВремя события (ISO 8601)Пример: "2026-03-15T12:00:00.000Z"
signaturestringда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');
}

// Обработка события...

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

warning
Если ваш сервер не ответил 200 OK, вебхук будет отправлен повторно до 3 раз с интервалом 60 секунд. После 3 неудачных попыток уведомление прекращается.

Статусы ордеров

Возможные статусы
ПолеТипОбяз.Описание
PENDINGнетОрдер создан, ожидает назначения трейдера
AWAITING_PAYMENTнетТрейдер назначен, клиент должен оплатить
COMPLETEDнетПлатёж подтверждён
CANCELLEDнетОрдер отменён
EXPIREDнетИстёк таймаут ордера
FAILEDнетОшибка обработки