# Выплаты 2.0

Выплаты 2.0 позволяют производить выводы с **выплатных** и **головных** адресов.

Возможности:

* прямой вывод
* вывод между сетями
* вывод с конвертацией монет

## Схема взаимодействия с API

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Onchainpay: Создание вывода
Onchainpay ->> Merchant: Тело вывода

```
Note over Onchainpay: Обработка операции

Onchainpay -->> Merchant: Вебхук с результатом вывода" %}
```

### Подбор адреса

Для проведения операции подбирается наиболее подходящий адрес

Пример подбора адреса:

У вас есть несколько адресов

| Монета | Сеть     | Баланс | Эквивалент |
| ------ | -------- | ------ | ---------- |
| USDT   | tron     | 100    | ..         |
| USDT   | ethereum | 100    | ..         |
| BNB    | bsc      | 100    | ..         |

* Вы хотите вывести **10 USDT tron**
  * Прямой вывод. Будет взят адрес **USDT tron** так как у вас уже есть адрес с этом монетой и в этой сети, и на нем достаточно средств
* Вы хотите вывести **10 BNB bsc**
  * Прямой вывод. Будет взят адрес **BNB bsc** так как у вас уже есть адрес с этом монетой и в этой сети, и на нем достаточно средств
* Вы хотите вывести **10 USDT bsc**
  * Вывод между сетями. Будет взят адрес **USDT tron** так как подходящего адреса у вас нет
* Вы хотите вывести **1 BTC bitcoin**
  * Вывод с конвертацией монет. Будет взят адрес **USDT tron** так как подходящего адреса у вас нет

> Обратите внимание
>
> Операции *вывод между сетями* и *вывод с конвертацией монет* работают только с адресами токенов (USDT, USDC)\
> Адреса нативных монет будут браться только для *прямого вывода*

Адрес берется среди всех **PAY\_OUT** (выплатные) и **COLLECT** (головные) адресов.\
Ищется адрес с балансом покрывающим запрошенную сумму и с наиболее низкой комиссией сети.\
Приоритет операций: вывод, вывод между сетями, вывод с конвертацией монет.

### Комиссии

При проведении операции будет взят тариф в зависимости от типа операции

| Тип операции               | Тариф                      |
| -------------------------- | -------------------------- |
| Прямой вывод               | Вывод с выплатного баланса |
| Вывод между сетями         | Блокчейн мост API          |
| Вывод с конвертацией монет | Обмен API                  |

> Операции **вывод между сетями**, **вывод с конвертацией монет** проводятся через\
> провайдера услуг, комиссия сети за отправку монет провайдеру компенсируется сервисом
>
> Комиссия сервиса за операцию всегда берется с авансового баланса
>
> Комиссия сети за отправку от провайдера взимается **из суммы если исходящая нативная монета**,**с авансового баланса если исходящая монета является токеном**

### Параметр `feeInAmount`

Параметр позволяет указать, что комиссия сети за отправку монет от провайдера на конечный адрес\
будет взята из суммы (пользователь получит сумму меньше указанной на размер комиссии сети)

> Если исходящая монета нативная, и указан параметр `feeInAmount=false`, то комиссия сети будет\
> добавлена к сумме, чтобы пользователь получил указанную сумму

### Описание полей

В ответ на запрос придет тело со следующими полями

| Имя                     | Тип                                                      | Описание                                                                    |
| ----------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
| `id`                    | `string`                                                 | Идентификатор операции                                                      |
| `organizationId`        | `string`                                                 | Идентификатор организации                                                   |
| `type`                  | `enum(WITHDRAWAL, BRIDGE, SWAP)`                         | Тип                                                                         |
| `status`                | `enum(PENDING, WITHDRAWING, PROCESSED, REJECTED, ERROR)` | Статус                                                                      |
| `message`               | `string or null`                                         | Сообщение при отклонении                                                    |
| `addressRiskLevel`      | `enum(Low, Medium, High, Severe) or null`                | Уровень риска конечного адреса                                              |
| `addressFromId`         | `string`                                                 | Идентификатор исходящего адреса                                             |
| `addressFrom`           | `string`                                                 | Исходящий адрес                                                             |
| `addressTo`             | `string`                                                 | Конечный адрес                                                              |
| `amountFrom`            | `string`                                                 | Исходящая сумма                                                             |
| `amountFromUSD`         | `string`                                                 | Исходящая сумма в USD                                                       |
| `amountTo`              | `string`                                                 | Сумма после операции                                                        |
| `amountToUSD`           | `string`                                                 | Сумма после операции в USD                                                  |
| `amountToReceive`       | `string`                                                 | Сумма, которая придет на конечный адрес                                     |
| `amountToReceiveUSD`    | `string`                                                 | Сумма, которая придет на конечный адрес в USD                               |
| `rate`                  | `string`                                                 | Курс обмена                                                                 |
| `blockchainFeeFrom`     | `string`                                                 | Комиссия сети за отправку провайдеру                                        |
| `blockchainFeeFromUSD`  | `string`                                                 | Комиссия сети за отправку провайдеру в USD                                  |
| `blockchainFeeToSource` | `enum(ADVANCED, AMOUNT)`                                 | Источник списания комиссии сети за отправку от провайдера на конечный адрес |
| `blockchainFeeTo`       | `string`                                                 | Комиссии сети за отправку от провайдера на конечный адрес                   |
| `blockchainFeeToUSD`    | `string`                                                 | Комиссии сети за отправку от провайдера на конечный адрес в USD             |
| `serviceFee`            | `string`                                                 | Комиссия сервиса за проведение операции                                     |
| `webhookUrl`            | `string or null`                                         | URL для отправки вебхука                                                    |
| `txId`                  | `string or null`                                         | Хэш транзакции отправки монет на конечный адрес                             |
| `createdAt`             | `string (Date in ISO 8601)`                              | Дата создания                                                               |
| `updatedAt`             | `string (Date in ISO 8601)`                              | Дата последнего обновления                                                  |

***

Поле `type`

| Имя          | Описание                   |
| ------------ | -------------------------- |
| `WITHDRAWAL` | Обмен                      |
| `BRIDGE`     | Обмен между сетями         |
| `SWAP`       | Обмен с конвертацией монет |

***

Поле `status`

| Имя           | Описание                              |
| ------------- | ------------------------------------- |
| `PENDING`     | В процессе обработки                  |
| `WITHDRAWING` | В процессе отправки на конечный адрес |
| `PROCESSED`   | Завершен с успехом                    |
| `REJECTED`    | Отклонен системой                     |
| `ERROR`       | Ошибка при обработке                  |

***

Поле `blockchainFeeToSource`

| Имя        | Описание         |
| ---------- | ---------------- |
| `ADVANCED` | Авансовый баланс |
| `AMOUNT`   | Сумма            |

***

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

```json
{
  "success": true,
  "response": {
    "id": "31a3b86b-e350-4906-9d3e-cc2fca054821",
    "organizationId": "1f07eb01-5fd8-4e05-89b5-bebcd1d1fc39",
    "userId": null,
    "type": "WITHDRAWAL",
    "status": "PENDING",
    "message": null,
    "addressRiskLevel": "Low",
    "addressFromId": "25a8de42-a359-47f1-bb82-bc9f6c20f1b9",
    "addressFrom": "0xD65D24ABCd85165a243C33Cf8133ffBaaa98255D",
    "addressTo": "0x22aECc7ff5b435E38be5457C8538256918783F67",
    "amountFrom": "3",
    "amountFromUSD": "3.00",
    "amountTo": "3",
    "amountToUSD": "3.00",
    "amountToReceive": "3",
    "amountToReceiveUSD": "3.00",
    "rate": "0",
    "blockchainFeeFrom": "0",
    "blockchainFeeFromUSD": "0",
    "blockchainFeeToSource": "ADVANCED",
    "blockchainFeeTo": "0.12",
    "blockchainFeeToUSD": "0.12",
    "serviceFee": "0.09",
    "webhookUrl": "https://example.com/webhook-url",
    "txId": null,
    "createdAt": "2024-09-09T15:43:32.986Z",
    "updatedAt": "2024-09-09T15:43:34.073Z"
  }
}
```

### Webhook

При смене статуса операции будет отправлен вебхук на указанный URL

Пример тела вебхука

```json
{
  "id": "31a3b86b-e350-4906-9d3e-cc2fca054821",
  "organizationId": "1f07eb01-5fd8-4e05-89b5-bebcd1d1fc39",
  "userId": null,
  "type": "WITHDRAWAL",
  "status": "PENDING",
  "message": null,
  "addressRiskLevel": "Low",
  "addressFromId": "25a8de42-a359-47f1-bb82-bc9f6c20f1b9",
  "addressFrom": "0xD65D24ABCd85165a243C33Cf8133ffBaaa98255D",
  "addressTo": "0x22aECc7ff5b435E38be5457C8538256918783F67",
  "amountFrom": "3",
  "amountFromUSD": "3.00",
  "amountTo": "3",
  "amountToUSD": "3.00",
  "amountToReceive": "3",
  "amountToReceiveUSD": "3.00",
  "rate": "0",
  "blockchainFeeFrom": "0",
  "blockchainFeeFromUSD": "0",
  "blockchainFeeToSource": "ADVANCED",
  "blockchainFeeTo": "0.12",
  "blockchainFeeToUSD": "0.12",
  "serviceFee": "0.09",
  "webhookUrl": "https://example.com/webhook-url",
  "txId": null,
  "createdAt": "2024-09-09T15:43:32.986Z",
  "updatedAt": "2024-09-09T15:43:34.073Z"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.onchainpay.io/ru/api-reference/auto-withdrawals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
