Parallel

Создание заявок на выплаты

Выплаты клиентам на карту или по СБП через Parallel API

Обзор

Заявка на выплату (direction: "out") переводит рубли вашему клиенту на карту или по СБП, например когда игрок выводит выигрыш. Выплата оплачивается с вашего USDT-баланса в Parallel: при создании заявки сумма amount / dealRate USDT замораживается, после выплаты списывается, а если выплата истекла или отменена — возвращается на баланс.

Время жизни: выплату должны выплатить до newStatusExpiresAt. Срок задаётся для магазина при подключении, по умолчанию 5 часов. Не выплаченная к сроку целиком выплата переходит в expired, а USDT возвращаются на баланс: paid после срока не бывает. Первые 5 минут после создания выплату не начинают, и её гарантированно можно отменить.

Баланс: на балансе должно быть доступно не меньше amount / dealRate USDT, иначе заявка не создастся (400 «Недостаточно доступных средств»). Проверить баланс: GET /api/v1/merchants/balance.

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

Выплаты создаются тем же endpoint, что и заявки на приём, с direction: "out":

POST/api/v1/invoices

Параметры

Поле

Тип

internalId общий для приёма и выплат. Если выплата получит internalId уже существующей заявки на приём, в ответ придёт та заявка на приём (direction: "in"), а выплата не создастся. Используйте разные префиксы, например deposit-… и payout-…, и сверяйте direction в ответе.

Реквизиты получателя

paymentRequisites — объект или JSON-строка с тем же объектом. Обязательны ФИО и реквизит под paymentMethod: телефон для SBP, номер карты для TO_CARD.

Поле

Тип

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

const response = await fetch('https://api.parallel-pay.com/api/v1/invoices', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${process.env.PARALLEL_TOKEN}`
  },
  body: JSON.stringify({
    internalId: 'payout-12345',
    direction: 'out',
    amount: 1000,
    currency: 'RUB',
    // Перевод на карту
    paymentRequisites: {
      fullName: 'Иван Иванов',
      cardNumber: '2200700012345673'
    },
    // ИЛИ СБП:
    // paymentRequisites: { fullName: 'Иван Иванов', phoneNumber: '+79001234567' },
    // paymentMethod: 'SBP',
    paymentMethod: 'TO_CARD',
    paymentOption: 'tbank',
    notificationUrl: 'https://your-site.com/webhooks/parallel',
    notificationToken: 'your-secret-webhook-token-min-32-chars'
  })
});

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

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

HTTP Status: 201 Created

Повторный запрос с тем же internalId вернёт ту же заявку с кодом 200 OK.

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

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

Ошибка: Недостаточно средств

HTTP Status: 400 Bad Request

Доступного баланса не хватает на amount / dealRate USDT. Пополните баланс приёмом платежей или уменьшите сумму.

{
  "error": "Недостаточно доступных средств"
}

Ошибка: Неверные реквизиты

HTTP Status: 400 Bad Request

Нет ФИО, нет реквизита под paymentMethod (телефона для SBP, номера карты для TO_CARD) или реквизит в неверном формате.

{
  "error": "Для paymentMethod SBP нужен paymentRequisites.phoneNumber"
}

Ошибка: Выплаты временно недоступны

HTTP Status: 503 Service Unavailable

Сейчас выплату некому провести. Повторите запрос позже с тем же internalId: повтор не создаст вторую выплату.

{
  "error": "Выплаты временно недоступны, повторите позже"
}

Ошибка: Курс недоступен

HTTP Status: 503 Service Unavailable

Курс USDT/RUB сейчас получить не удалось, заявка не создана. Повторите запрос позже с тем же internalId.

{
  "error": "Курс USDT/RUB временно недоступен, повторите позже"
}

Статусы выплаты

СтатусЧто происходит
newЗаявка создана, USDT заморожены, выплату ещё не начали
processingВыплата идёт: получателю переводят деньги, возможно несколькими переводами
reviewЧеки на всю сумму загружены и проверяются. Если все чеки уже проверены, заявка переходит из processing сразу в paid, минуя review
paidВыплачена, USDT списаны с баланса. Чеки — в transactionProofUrl и transactionProofUrls
expiredК newStatusExpiresAt выплата не выплачена целиком, USDT вернулись на баланс. Статус окончательный
canceledОтменена до начала выплаты, USDT вернулись на баланс. Статус окончательный
disputeПо выплате открыт спор

Если администратор Parallel отклонил чек, заявка возвращается в new с причиной в rejectionReason, и отклонённую часть переводят заново. Такую заявку уже нельзя отменить: часть денег могла дойти до получателя.

О каждом переходе в review, paid, expired и canceled приходит webhook-уведомление с объектом выплаты, кроме возврата в paid после спора: тогда приходит только dispute.resolved. Об открытии и решении спора приходят dispute.created и dispute.resolved с объектом спора. Заявка в статусе paid может прийти без предшествующего review. О возврате из review в new после отклонения чека webhook не приходит: если выплата долго остаётся в review, проверьте её статус запросом.

Объект выплаты

Этот же объект приходит в ответе на создание, в проверке статуса и в теле webhook-уведомления. В отличие от заявки на приём, в нём нет expireAt и requisiteId, а dealRequisites — объект, а не JSON-строка.

Поле

Тип

Проверка статуса выплаты

GET/api/v1/invoices/:id

Возвращает выплату в том же формате, что и при создании, с текущим статусом. Используйте, если webhook-уведомление не дошло.

curl "https://api.parallel-pay.com/api/v1/invoices/cm3k8x7y80001z8j4k5m6n7o8" \
  -H "Authorization: Bearer $PARALLEL_TOKEN"

Отмена выплаты

POST/api/v1/invoices/:id/cancel

Отменяет выплату, которую ещё не начали: статус new без rejectionReason. Первые 5 минут после создания выплату не начинают, поэтому в это время отмена проходит всегда. Заявка переходит в canceled, USDT возвращаются на баланс. Ответ — объект выплаты. Начатую выплату отменить нельзя, даже если после отклонения чека она вернулась в new:

HTTP Status: 409 Conflict

{
  "error": "Действие недоступно: заявка в статусе processing"
}

На этой странице