Skip to main content

Обзор

Заявки на прием платежей (direction: "in") позволяют принимать оплату от клиентов за товары и услуги. При создании заявки система автоматически назначает трейдера, замораживает средства и предоставляет реквизиты для оплаты.
Время жизни: Заявка действительна 10 минут. После истечения средства автоматически размораживаются.

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

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

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

ПараметрТипОписание
internalIdstringУникальный идентификатор заявки в вашей системе для защиты от дубликатов. Используется для идемпотентности - повторные запросы с тем же internalId вернут существующую заявку. Пример: "order-12345", "payment-uuid-123"
directionstringНаправление платежа. Для приема используйте "in". Допустимые значения: "in" (входящий), "out" (исходящий)
amountnumberСумма платежа в рублях (НЕ в копейках). Примеры: 1000 = 1000 RUB
currencystringКод валюты ISO 4217. Пока доступно: "RUB"
startDealbooleanКритически важно! Флаг автоматического старта сделки. true - автоматически назначить трейдера и заморозить средства (рекомендуется для production). false - создать без трейдера (требует ручного назначения)
notificationUrlstringURL для webhook уведомлений о смене статуса заявки. Требования: валидный HTTPS URL. Пример: "https://your-site.com/webhooks/meridian"
notificationTokenstringСекретный токен для HMAC-SHA256 подписи webhook. Требования: 32-255 символов

Опциональные параметры

ПараметрТипОписание
paymentMethodstringМетод платежа: "SBP" (Система быстрых платежей, рекомендуется), "TO_CARD" (перевод на карту)
paymentOptionstringБанк для платежа (зависит от доступности реквизитов): "sberbank", "tinkoff", "alfa", "vtb", "raiffeisen"

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

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: 'order-12345',
  direction: 'in',
  amount: 1000,
  currency: 'RUB',
  startDeal: true, 
  paymentMethod: 'SBP',
  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": "in",
  "status": "new",
  "paymentMethod": "SBP",
  "paymentOption": "sberbank",
  "amount": "1000",
  "currency": "RUB",
  "expireAt": "2025-11-03T15:10:00.000Z",
  "requisiteId": "req_abc123xyz789",
  "dealRequisites": "{\"bankName\":\"Sberbank\",\"cardNumber\":\"**** 1234\",\"fullName\":\"Ivan Ivanov\"}",
  "dealRate": "95.50",
  "createdAt": "2025-11-03T15:00:00.000Z",
  "updatedAt": "2025-11-03T15:00:00.000Z",
  "internalId": "order-12345",
  "merchantName": "MerchantName"
}

Примеры ошибок

Ошибка: Нет доступных реквизитов

HTTP Status: 503 Service Unavailable Эта ошибка возникает когда все трейдеры с подходящими реквизитами заняты
{
  "error": "Нет доступных реквизитов"
}

Поля ответа

ПолеТипОписание
idstringУникальный идентификатор заявки в системе Meridian. Используйте для проверки статуса через GET /api/v1/invoices/:id
directionstringНаправление платежа: "in" (входящий) или "out" (исходящий)
statusstringТекущий статус заявки. Для direction="in": "new" (создана, ожидает трейдера), "paid" (оплачена, средства распределены), "expired" (истек срок 10 мин), "canceled" (отменена), "dispute" (открыт спор). Следите за: newprocessingpaid
amountstringСумма заявки в указанной валюте (строка для точности)
currencystringКод валюты: "RUB", "USD", "EUR", "USDT"
paymentMethodstringМетод платежа: "SBP" или "TO_CARD"
paymentOptionstringВыбранный банк для платежа (например, "sberbank", "tinkoff")
requisiteIdstringID назначенного реквизита (только если startDeal=true)
dealRequisitesstringJSON-строка с реквизитами для оплаты (номер карты, счет, имя получателя). Важно: Передайте эту информацию клиенту для совершения платежа
dealRatestringКурс обмена USDT/RUB на момент создания заявки
expireAtstringВремя истечения заявки ISO 8601. Для IN: истекает через 10 минут. После истечения средства автоматически размораживаются
createdAtstringВремя создания заявки в формате ISO 8601
updatedAtstringВремя последнего обновления заявки в формате ISO 8601
internalIdstringУникальный идентификатор заявки в вашей системе (тот же, что был передан при создании). Используйте для сопоставления с вашими внутренними записями
merchantNamestringОтображаемое имя мерчанта (ваша организация)