Parallel

Создание апелляций

Оспаривание платежных заявок при проблемах с оплатой

Обзор

Апелляции (споры) позволяют мерчантам оспаривать платежные заявки при возникновении проблем с оплатой. При создании апелляции средства автоматически замораживаются до разрешения спора.

Важно: после создания апелляции заявка переходит в статус dispute, и все средства замораживаются.

Создание апелляции

Endpoint для создания спора по существующей заявке:

POST/api/v1/invoices/:invoiceId/disputes

Параметры запроса

invoiceId в пути — идентификатор заявки, например cm3k8x7y80001z8j4k5m6n7o8. Тело — multipart/form-data, набор полей зависит от reason.

Неверная сумма (invalid_sum)

Клиент перевёл не ту сумму — укажите фактическую в disputeReasonData.

Поле

Тип

Остальные причины

Поле

Тип

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

const fs = require('fs');

const invoiceId = 'cm3k8x7y80001z8j4k5m6n7o8';

const formData = new FormData();
formData.append('reason', 'invalid_sum');
formData.append('description', 'Клиент отправил 500 RUB вместо 1000 RUB');
formData.append('disputeReasonData', JSON.stringify({ amount: 500 }));
// Уберите эту строку, если файла нет
formData.append('attachment', new Blob([fs.readFileSync('/path/to/screenshot.jpg')]), 'screenshot.jpg');

const response = await fetch(`https://api.parallel-pay.com/api/v1/invoices/${invoiceId}/disputes`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.PARALLEL_TOKEN}`
  },
  body: formData
});

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

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

{
    "id": "disp_abc123xyz789",
    "invoiceId": "cm3k8x7y80001z8j4k5m6n7o8",
    "reason": "invalid_sum",
    "description": "Клиент отправил 500 RUB вместо 1000 RUB",
    "disputeReasonData": {
        "amount": 500
    },
    "attachmentUrl": "https://files.parallel-pay.com/disp_abc123xyz789/screenshot.jpg",
    "attachmentFilename": "screenshot.jpg",
    "status": "open",
    "resolution": null,
    "resolutionNotes": null,
    "createdAt": "2025-11-03T15:10:00+03:00",
    "resolvedAt": null,
    "autoResolveAt": "2025-11-03T16:10:00+03:00",
    "amount": "1000.0000",
    "currency": "RUB",
    "paymentMethod": "SBP",
    "paymentOption": "sberbank",
    "requisites": {
        "bankName": "sberbank",
        "phoneNumber": "79099966512",
        "fullName": "Ivan Ivanov"
    },
    "internalId": "order-12345",
    "merchantName": "MerchantName"
}

Объект спора

Этот же объект приходит в ответе на открытие спора, в проверке статуса и в теле webhook-уведомления.

Поле

Тип

Автоматическое разрешение спора

Важно: Если спор не будет разрешен в течение 60 минут (1 часа), система автоматически разрешит его в пользу мерчанта (merchant_win).

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

После создания спора вы можете проверить его статус через webhook уведомления или через GET endpoint:

GET/api/v1/disputes/:disputeId

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

const disputeId = 'disp_abc123xyz789';

const response = await fetch(`https://api.parallel-pay.com/api/v1/disputes/${disputeId}`, {
  headers: {
    'Authorization': `Bearer ${process.env.PARALLEL_TOKEN}`
  }
});

const dispute = await response.json();
console.log('Status:', dispute.status);
console.log('Resolution:', dispute.resolution);

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

{
  "id": "disp_abc123xyz789",
  "invoiceId": "cm3k8x7y80001z8j4k5m6n7o8",
  "reason": "invalid_sum",
  "description": "Клиент отправил 500 RUB вместо 1000 RUB",
  "disputeReasonData": {
    "amount": 500
  },
  "attachmentUrl": "https://files.parallel-pay.com/disp_abc123xyz789/screenshot.jpg",
  "attachmentFilename": "screenshot.jpg",
  "status": "open",
  "resolution": null,
  "resolutionNotes": null,
  "createdAt": "2025-11-03T15:10:00+03:00",
  "resolvedAt": null,
  "autoResolveAt": "2025-11-03T16:10:00+03:00",
  "amount": "1000.0000",
  "currency": "RUB",
  "paymentMethod": "SBP",
  "paymentOption": "sberbank",
  "requisites": {
    "bankName": "sberbank",
    "phoneNumber": "79099966512",
    "fullName": "Ivan Ivanov"
  },
  "internalId": "order-12345",
  "merchantName": "MerchantName"
}

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