Обзор
Заявки на прием платежей (direction: "in") позволяют принимать оплату от клиентов за товары и услуги. При создании заявки система автоматически назначает трейдера, замораживает средства и предоставляет реквизиты для оплаты.
Время жизни: Заявка действительна 10 минут. После истечения средства автоматически размораживаются.
Создание заявки
Endpoint для создания заявки на прием платежа:
POST https://api.meridian.vip/api/v1/invoices
Обязательные параметры
| Параметр | Тип | Описание |
|---|
internalId | string | Уникальный идентификатор заявки в вашей системе для защиты от дубликатов. Используется для идемпотентности - повторные запросы с тем же internalId вернут существующую заявку. Пример: "order-12345", "payment-uuid-123" |
direction | string | Направление платежа. Для приема используйте "in". Допустимые значения: "in" (входящий), "out" (исходящий) |
amount | number | Сумма платежа в рублях (НЕ в копейках). Примеры: 1000 = 1000 RUB |
currency | string | Код валюты ISO 4217. Пока доступно: "RUB" |
startDeal | boolean | Критически важно! Флаг автоматического старта сделки. true - автоматически назначить трейдера и заморозить средства (рекомендуется для production). false - создать без трейдера (требует ручного назначения) |
notificationUrl | string | URL для webhook уведомлений о смене статуса заявки. Требования: валидный HTTPS URL. Пример: "https://your-site.com/webhooks/meridian" |
notificationToken | string | Секретный токен для HMAC-SHA256 подписи webhook. Требования: 32-255 символов |
Опциональные параметры
| Параметр | Тип | Описание |
|---|
paymentMethod | string | Метод платежа: "SBP" (Система быстрых платежей, рекомендуется), "TO_CARD" (перевод на карту) |
paymentOption | string | Банк для платежа (зависит от доступности реквизитов): "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": "Нет доступных реквизитов"
}
Поля ответа
| Поле | Тип | Описание |
|---|
id | string | Уникальный идентификатор заявки в системе Meridian. Используйте для проверки статуса через GET /api/v1/invoices/:id |
direction | string | Направление платежа: "in" (входящий) или "out" (исходящий) |
status | string | Текущий статус заявки. Для direction="in": "new" (создана, ожидает трейдера), "paid" (оплачена, средства распределены), "expired" (истек срок 10 мин), "canceled" (отменена), "dispute" (открыт спор). Следите за: new → processing → paid |
amount | string | Сумма заявки в указанной валюте (строка для точности) |
currency | string | Код валюты: "RUB", "USD", "EUR", "USDT" |
paymentMethod | string | Метод платежа: "SBP" или "TO_CARD" |
paymentOption | string | Выбранный банк для платежа (например, "sberbank", "tinkoff") |
requisiteId | string | ID назначенного реквизита (только если startDeal=true) |
dealRequisites | string | JSON-строка с реквизитами для оплаты (номер карты, счет, имя получателя). Важно: Передайте эту информацию клиенту для совершения платежа |
dealRate | string | Курс обмена USDT/RUB на момент создания заявки |
expireAt | string | Время истечения заявки ISO 8601. Для IN: истекает через 10 минут. После истечения средства автоматически размораживаются |
createdAt | string | Время создания заявки в формате ISO 8601 |
updatedAt | string | Время последнего обновления заявки в формате ISO 8601 |
internalId | string | Уникальный идентификатор заявки в вашей системе (тот же, что был передан при создании). Используйте для сопоставления с вашими внутренними записями |
merchantName | string | Отображаемое имя мерчанта (ваша организация) |