Skip to main content

Обзор

Заявки на выплаты (direction: "out") позволяют отправлять USDT клиентам на их криптокошельки для возвратов, вывода средств или выплаты вознаграждений. При создании заявки система проверяет баланс мерчанта и создает задачу на выплату для трейдеров.
Время жизни: Заявка действительна 5 часов. После истечения средства возвращаются на баланс мерчанта.

Создание заявки

Endpoint для создания заявки на выплату:
POST https://api.meridian.vip/api/v1/invoices

Обязательные параметры

ПараметрТипОписание
internalIdstringУникальный идентификатор заявки в вашей системе для защиты от дубликатов. Используется для идемпотентности - повторные запросы с тем же internalId вернут существующую заявку. Пример: "order-12345", "payment-uuid-123"
directionstringНаправление платежа. Для выплат используйте "out". Допустимые значения: "in" (входящий), "out" (исходящий)
amountnumberСумма платежа в рублях (НЕ в копейках). Примеры: 1000 = 1000 RUB
currencystringКод валюты ISO 4217. Пока доступно: "RUB"
paymentRequisitesobject|stringОбязательно для выплат! Реквизиты получателя платежа (клиента). Можно передать как объект или JSON-строку.

Обязательные поля:
fullName (string) - ФИО получателя
cardNumber (string) - номер карты ИЛИ phoneNumber (string) - телефон для СБП

Примеры:
• Для карты: {"fullName": "Иван Иванов", "cardNumber": "1234567890123456"}
• Для СБП: {"fullName": "Иван Иванов", "phoneNumber": "+79001234567"}
paymentMethodstringОбязательно для выплат! Метод платежа: "SBP" (Система быстрых платежей, рекомендуется), "TO_CARD" (перевод на карту)
paymentOptionstringОбязательно для выплат! Банк для платежа (зависит от доступности реквизитов): "sberbank", "tinkoff", "alfa", "vtb", "raiffeisen"
notificationUrlstringURL для webhook уведомлений о смене статуса заявки. Требования: валидный HTTPS URL. Пример: "https://your-site.com/webhooks/meridian"
notificationTokenstringСекретный токен для HMAC-SHA256 подписи webhook. Требования: 32-255 символов

Пример запроса

const crypto = require('crypto');

// Функция для расчета подписи
function calculateSignature(method, url, body, secret) {
  const stringToSign = method + url + (body || '');
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(stringToSign);
  return hmac.digest('base64');
}

// Данные заявки
const method = 'POST';
const url = 'https://api.meridian.vip/api/v1/invoices';
const body = JSON.stringify({
  internalId: 'payout-12345',
  direction: 'out',
  amount: 1000,
  currency: 'RUB',
  // Реквизиты получателя (клиента) - ОБЯЗАТЕЛЬНО для выплат
  // Вариант 1: Перевод на карту
  paymentRequisites: {
    fullName: 'Иван Иванов',
    cardNumber: '1234567890123456'
  },
  // ИЛИ Вариант 2: СБП (используйте номер телефона):
  // paymentRequisites: {
  //   fullName: 'Иван Иванов',
  //   phoneNumber: '+79001234567'
  // },
  paymentMethod: 'TO_CARD',
  paymentOption: 'sberbank',
  notificationUrl: 'https://your-site.com/webhooks/meridian',
  notificationToken: 'your-secret-webhook-token-min-32-chars'
});

// Ваш API ключ
const apiKey = 'luma_abc123...:luma_xyz789...';
const [keyId, secret] = apiKey.split(':');
const signature = calculateSignature(method, url, body, secret);

// Отправка запроса
const response = await fetch(url, {
  method,
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': apiKey,
    'X-Signature': signature
  },
  body
});

const result = await response.json();
console.log(result);

Пример ответа

HTTP Status: 200 OK
{
  "id": "cm3k8x7y80001z8j4k5m6n7o8",
  "direction": "out",
  "status": "new",
  "paymentMethod": "TO_CARD",
  "paymentOption": "sberbank",
  "amount": "1000",
  "currency": "RUB",
  "newStatusExpiresAt": "2025-11-03T20:00:00.000Z",
  "dealRequisites": {
    "fullName": "Иван Иванов",
    "cardNumber": "1234567890123456"
  },
  "dealRate": "95.50",
  "createdAt": "2025-11-03T15:00:00.000Z",
  "updatedAt": "2025-11-03T15:00:00.000Z",
  "internalId": "payout-12345",
  "merchantName": "MerchantName"
}

Поля ответа

ПолеТипОписание
idstringУникальный идентификатор заявки в системе Meridian. Используйте для проверки статуса через GET /api/v1/invoices/:id
directionstringНаправление платежа: "out" (исходящий - выплата клиенту)
statusstringТекущий статус заявки. Для direction="out": "new" (создана, ожидает трейдера), "processing" (трейдер взял в работу), "review" (ожидает проверки админом), "paid" (выплачена), "canceled" (отменена), "dispute" (открыт спор). Типичный путь: newprocessingreviewpaid
amountstringСумма заявки в указанной валюте (строка для точности)
currencystringКод валюты: "RUB", "USD", "EUR", "USDT"
paymentMethodstringМетод платежа: "SBP" (Система быстрых платежей) или "TO_CARD" (перевод на карту)
paymentOptionstringВыбранный банк для платежа (например, "sberbank", "tinkoff")
dealRequisitesobjectОбъект с реквизитами получателя. Содержит fullName (ФИО) и либо cardNumber (номер карты) либо phoneNumber (телефон для СБП). Это реквизиты клиента, которому нужно выплатить средства
dealRatestringКурс обмена USDT/RUB на момент создания заявки
newStatusExpiresAtstringВремя истечения заявки в статусе "new" (ISO 8601). Для OUT: истекает через 5 часов. После истечения средства возвращаются на баланс мерчанта
transactionProofUrlstring (optional)Presigned S3 URL для доступа к доказательству оплаты (скриншот/чек), загруженному трейдером. Присутствует только в статусах review и paid. URL действителен 14 дней
rejectionReasonstring (optional)Причина отклонения выплаты администратором. Присутствует после отклонения - выплата возвращается в статус new для повторной обработки трейдером
createdAtstringВремя создания заявки в формате ISO 8601
updatedAtstringВремя последнего обновления заявки в формате ISO 8601
internalIdstringУникальный идентификатор заявки в вашей системе (тот же, что был передан при создании). Используйте для сопоставления с вашими внутренними записями
merchantNamestringОтображаемое имя мерчанта (ваша организация)