# Авторизация

**Для авторизации необходимо получить публичный и приватный ключ в личном кабинете**

**Публичный ключ** передается в заголовке запросов `x-api-public-key`\
**Приватный ключ** используется для формирования подписи запроса и передается в заголовке `x-api-signature`

Пример такой пары ключей:

**public:**

`a9biVHtyP71VxuItAd88tuN+WyNGxVR41j9lGLj7zc0DjtGHkNRAKQWS/fiCnJPomY9i+hETCLiQvR5l+siKug==`

**secret:**

`RbWMG0rT6NSDQPKXs44gau/97OTsMW1+EakuQA8gb+IwjIUAdx56Fl3Oa7a8dw5L3soWK/o6UFfqlzh/6LXPDA==`


# Подпись запросов

Вам нужно указать свой **secret\_key**, применить шифрование `SHA256` к вашей полезной нагрузке и преобразовать результат в формат `HEX`.

## Использование одноразового номера

Вы должны передавать параметр `nonce` в теле каждого запроса к этому API. `nonce` может быть числом или строкой, каждый запрос должен сопровождаться уникальным значением. В противном случае запрос не будет выполнен.

Мы будем использовать Unix TimeStamp в качестве значения `nonce` для отправки запросов в этом документе.

## Пример создания подписи запроса `NodeJS`

Допустим, мы хотим получить курс `ETH/USDT` (метод `/price-rate`)

**1. Формируем тело запроса**

```javascript
const payload = { from: 'ETH', to: 'USDT' };
```

**2. Добавьте `nonce` параметр к телу запроса, чтобы избежать дублирования запросов.**

Используя временную метку unix в качестве параметра «nonce», мы удовлетворим требованиям использования числа и его увеличения для каждого нового запроса.

```javascript
payload.nonce = Date.now(); // 1643881172430
```

**3. Приводим тело запроса к формату строки.**

```javascript
const stringPayload = JSON.stringify(payload); // {"из":"ETH","в":"USDT","nonce":1643881172430}
```

**4. Создаем подпись:**

Пример с модулем `crypto-js`:

```javascript
const CryptoJS = require("crypto-js");
const sign = CryptoJS.HmacSHA256(stringPayload, __PRIVATE_KEY__).toString(CryptoJS.enc.Hex)
```

Пример с модулем `crypto`:

```javascript
const crypto = require('crypto');
const sign = crypto.createHmac('SHA256', __PRIVATE_KEY__).update(stringPayload).digest('hex');
```

**5. Отправляем запрос с обязательными заголовками:**

```javascript
const axios = require('axios'); // библиотека для HTTP-запросов
const response = await axios.post(__BASE_URL__ + '/price-rate', stringPayload,
{
     headers:
         {
             'x-api-public-key': __PUBLIC_KEY__,
             'x-api-signature': sign
         }
});
```

**6. Ответ:**

```javascript
console.log(response); // {"success":true,"response":"2751.51000000"}
```


# Список кодов ошибок

Код ошибки находится в теле ответа с ошибкой

```json
{
    "success":false,
    "error": { 
        "name":"...",
        "message":"...",
        "code": "..."
    },
    "requestId":"..."
}
```

| Код     | Описание                                                                                |
| ------- | --------------------------------------------------------------------------------------- |
| 1001    | Не указан обязательный параметр `currency`                                              |
| 1002    | Параметр `currency` имеет некорректное значение                                         |
| 1003    | Не указан обязательный параметр `amount`                                                |
| 1004    | Параметр `amount` имеет некорректное значение                                           |
| 1005    | Параметр `amount` должен быть больше 0                                                  |
| 1006    | Не указан обязательный параметр `errorWebhook`                                          |
| 1007    | Параметр `errorWebhook` имеет некорректное значение                                     |
| 1008    | Не указан обязательный параметр `successWebhook`                                        |
| 1009    | Параметр `successWebhook` имеет некорректное значение                                   |
| 1010    | Параметр `availableTill` имеет некорректное значение                                    |
| 1012    | Не указан обязательный параметр `address`                                               |
| 1013    | Параметр `address` имеет некорректное значение                                          |
| 1015    | Не указан обязательный параметр `amount`                                                |
| 1016    | Параметр `amount` имеет некорректное значение                                           |
| 1017    | Параметр `amount` должен быть больше 0                                                  |
| 1018    | Не удалось провалидировать данные получателя, проверьте корректность переданных данных  |
| 1019    | Указанная монет или валюта не существует                                                |
| 1020    | Недостаточно средств для проведения операции                                            |
| 1021    | Недостаточно средств для проведения операции                                            |
| 1023    | Не указан обязательный параметр `currencyFrom`                                          |
| 1024    | Параметр `currencyFrom` имеет некорректное значение                                     |
| 1025    | Не указан обязательный параметр `currencyTo`                                            |
| 1026    | Параметр `currencyTo` имеет некорректное значение                                       |
| 1027    | Не указан обязательный параметр `amountFrom`                                            |
| 1028    | Параметр `amountFrom` имеет некорректное значение                                       |
| 1029    | Параметр `amountFrom` должен быть больше 0                                              |
| 1030    | Указанная исходящая монета не существует                                                |
| 1031    | Указанная входящая монета не существует                                                 |
| 1032    | Не указан обязательный параметр `orderId`                                               |
| 1033    | Параметр `orderId` имеет некорректное значение                                          |
| 1042    | Параметр `returnUrl` имеет некорректное значение                                        |
| 1043    | Параметр `order` имеет значение больше допустимого (макс 255)                           |
| 1044    | Параметр `description` имеет значение больше допустимого (макс 255)                     |
| 1045    | Не указан обязательный параметр `networkId`                                             |
| 1046    | Параметр `networkId` имеет некорректное значение                                        |
| 1047    | Не указан обязательный параметр `advancedBalanceId`                                     |
| 1048    | Параметр `advancedBalanceId` имеет некорректное значение                                |
| 1049    | Не указан обязательный параметр `addressId`                                             |
| 1050    | Параметр `addressId` имеет некорректное значение                                        |
| 1051    | Не указан обязательный параметр `feeToken`                                              |
| 1052    | Параметр `feeToken` имеет некорректное значение                                         |
| 1053    | Баланс авансового баланса меньше запрошенной комиссии                                   |
| 1054    | Сумма вывода меньше минимальной суммы вывода                                            |
| 1055    | Не указан обязательный параметр `network`                                               |
| 1056    | Параметр `network` имеет некорректное значение                                          |
| 1057    | Источник списания комиссии не имеет баланса для покрытия комиссии                       |
| 1058    | Токен комиссии истек                                                                    |
| 1059    | Токен комиссии был сгенерирован для другого авансового баланса                          |
| 1060    | Токен комиссии имеет некорректное значение                                              |
| 1061    | Ошибка приведения BCH адреса к Legacy формату                                           |
| 1062    | Параметр `lifetime` имеет некорректное значение                                         |
| 1063    | Не указан обязательный параметр `lifetime`                                              |
| 1064    | Payout адрес не найден                                                                  |
| 1065    | Не указан обязательный параметр `registryId`                                            |
| 1066    | Параметр `registryId` имеет некорректное значение                                       |
| 1067    | Не указан обязательный параметр `title`                                                 |
| 1068    | Параметр `title` имеет некорректное значение                                            |
| 1069    | Указанная сеть не найдена                                                               |
| 1070    | Указанный реестр не найден                                                              |
| 1071    | Ошибка формирования комиссии                                                            |
| 1072    | Ошибка получения реестра                                                                |
| 1073    | Ошибка получения реестра                                                                |
| 1076    | Некорректный данные для вывода                                                          |
| 1077    | Некорректный формат .csv                                                                |
| 1078    | Некорректный формат .csv                                                                |
| 1079    | Некорректный формат .csv                                                                |
| 1080    | Указанный авансовый баланс принадлежит другому пользователю                             |
| 1081    | Указанный ордер принадлежит другому пользователю                                        |
| 1082    | Указанный авансовый баланс принадлежит другой организации                               |
| 1083    | Указанная монета недоступна для операций                                                |
| 1084    | Указанная сеть недоступна для операций                                                  |
| 1085    | Вывод монеты недоступен в данный момент                                                 |
| 1086    | Вывод в сети недоступен в данный момент                                                 |
| 1087    | Указанная сеть не найдена                                                               |
| 1088    | Прием монет в сети в данный момент недоступен                                           |
| 1089    | Параметр `lifetime` имеет недопустимое значение                                         |
| 1090    | Указанная сеть не найдена                                                               |
| 1091    | Указанный адрес не принадлежит указанному авансовому балансу                            |
| 1092    | .csv реестр имеет длину больше допустимой                                               |
| 1093    | Размер файла больше допустимого                                                         |
| 1094    | Параметр `insurancePercent` имеет некорректное значение                                 |
| 1095    | Параметр `slippagePercent` имеет некорректное значение                                  |
| 1096    | Параметр `currencies` имеет некорректное значение                                       |
| 1097    | Попытка повторного выполнения операции                                                  |
| 1098    | Не указан обязательный параметр `invoiceId`                                             |
| 1099    | Параметр `invoiceId` имеет некорректное значение                                        |
| 1100    | Счет не найден                                                                          |
| 1101    | Не указан обязательный параметр `organizationId`                                        |
| 1102    | Параметр `organizationId` имеет некорректное значение                                   |
| 1103    | Указанный адрес не найден                                                               |
| 1104    | Не указан обязательный параметр `address`                                               |
| 1105    | Параметр `address` имеет некорректное значение                                          |
| 1106    | Не указан обязательный параметр `networks`                                              |
| 1107    | Параметр `networks` имеет некорректное значение                                         |
| 1108    | Не указан обязательный параметр `networkFrom`                                           |
| 1109    | Параметр `networkFrom` имеет некорректное значение                                      |
| 1110    | Исходящая сеть недоступна для операций                                                  |
| 1111    | Не указан обязательный параметр `networkTo`                                             |
| 1112    | Параметр `networkTo` имеет некорректное значение                                        |
| 1113    | Входящая сеть недоступна для операций                                                   |
| 1114    | Указанная монета недоступна для операций                                                |
| 1115    | Параметр `clientId` имеет некорректное значение                                         |
| 1116    | Не указан обязательный параметр `id`                                                    |
| 1117    | Параметр `id` имеет некорректное значение                                               |
| 1118    | Не указан обязательный параметр `name`                                                  |
| 1119    | Параметр `name` имеет некорректное значение                                             |
| 1120    | Параметр `logoUrl` имеет некорректное значение                                          |
| 1121    | Не указан обязательный параметр `email`                                                 |
| 1122    | Параметр `email` имеет некорректное значение                                            |
| 1123    | Не указан обязательный параметр `merchantId`                                            |
| 1124    | Параметр `merchantId` имеет некорректное значение                                       |
| 1125    | Не указан обязательный параметр `clientId`                                              |
| 1126    | Параметр `clientId` имеет некорректное значение                                         |
| 1127    | Указанный мерчант не найден                                                             |
| 1128    | Параметр `webhookUrl` имеет некорректное значение                                       |
| 1130    | Не указан обязательный параметр `billingLinkId`                                         |
| 1131    | Параметр `billingLinkId` имеет некорректное значение                                    |
| 1132    | Не указан обязательный параметр `title`                                                 |
| 1133    | Параметр `title` имеет некорректное значение                                            |
| 1134    | Параметр `description` имеет некорректное значение                                      |
| 1135    | Не указан обязательный параметр `spendInterval`                                         |
| 1136    | Параметр `spendInterval` имеет некорректное значение                                    |
| 1137    | Не указан обязательный параметр `subscriptionId`                                        |
| 1138    | Параметр `subscriptionId` имеет некорректное значение                                   |
| 1139    | Не указан обязательный параметр `initializer`                                           |
| 1140    | Параметр `initializer` имеет некорректное значение, должен быть "merchant" или "client" |
| 1141    | Платежная связка не найдена                                                             |
| 1142    | Платежная связка имеет неподходящий статус для проведения операции                      |
| 1143    | Параметр `spendInterval` меньше минимального допустимого значения                       |
| 1144    | Сумма платежа выше максимальной, для увеличения сумма платежа свяжитесь с поддержкой    |
| 1145    | Подписка не найдена                                                                     |
| 1146    | Подписка уже отменена                                                                   |
| 1147    | Что-то пошло не так, свяжитесь с поддержкой                                             |
| 1148    | Превышена максимальная месячная сумма операций                                          |
| 1149    | Сумма превышает сумму разрешенную пользователем                                         |
| 1150    | У пользователя недостаточно средств для проведения операции                             |
| 1151    | Пользователь не найден                                                                  |
| 1152    | Параметр `renewAddress` имеет некорректное значение                                     |
| 1154    | Параметр `offset` должен быть числом                                                    |
| 1155    | Параметр `limit` должен быть числом                                                     |
| 1156    | Пользователь с указанным идентификатором уже существует                                 |
| 1157    | Не передан обязательный параметр `userId`                                               |
| 1158    | Параметр `userId` имеет некорректное значение                                           |
| 1159    | Не передан обязательный параметр `action`                                               |
| 1160    | Параметр `action` имеет некорректное значение                                           |
| 1161    | Параметр `comment` должен быть строкой.                                                 |
| 1162    | Указанный тариф не найден                                                               |
| 1163    | Не передан обязательный параметр `alias`                                                |
| 1164    | Параметр `alias` должен быть строкой                                                    |
| 1165    | Не передан обязательный параметр `offset`                                               |
| 1166    | Не передан обязательный параметр `limit`                                                |
| 1167    | Не передан обязательный параметр `keyId`                                                |
| 1168    | Параметр `keyId` должен быть строкой                                                    |
| 1169    | API-ключ не найден по указанному `keyId`                                                |
| 1170    | Не передан обязательный параметр `advancedBalanceId`                                    |
| 1172    | Авансовый баланс не найден                                                              |
| 1173    | Параметр `status` имеет некорректное значение, должен быть массив строк                 |
| 1174    | Организация не найдена                                                                  |
| 1175    | Параметр `advancedBalanceId` должен быть строкой                                        |
| 1176    | Не передан обязательный параметр `outputAddress`                                        |
| 1177    | Параметр `outputAddress` имеет некорректное значение                                    |
| 1178    | Не передан обязательный параметр `tx`                                                   |
| 1179    | Параметр `tx` имеет некорректное значение                                               |
| 1180    | Не передан обязательный параметр `direction`                                            |
| 1181    | Параметр `direction` имеет некорректное значение                                        |
| 1182    | Пользователь с этим адресом электронной почты существует                                |
| 1183    | Параметр `alias` должен быть строкой                                                    |
| 1184    | Параметр `type` имеет некорректное значение                                             |
| 1185    | Не передан обязательный параметр `addressTo`                                            |
| 1186    | Параметр `addressTo` имеет некорректное значение                                        |
| 1187    | Настройки сбора уже существуют                                                          |
| 1188    | Настройки сбора не найдены                                                              |
| 1189    | Указанная сумма сбора меньше минимальной                                                |
| 1191    | Необходимо указать ID вебхука                                                           |
| 1192    | Некорректный ID вебхука                                                                 |
| 1193    | Ошибка получения данных по вебхуку                                                      |
| 1194    | Некорректное значение поля `fields`. Должен быть массив строк                           |
| 1195    | Некорректное значение поля `checkRisks`. Должен быть `boolean`                          |
| 1196    | Некорректное значение поля `comment`. Должна быть строка не более 255 символов          |
| 1197    | Сиротская транзакция не найдена                                                         |
| 1198    | Операция недоступна на текущей стадии сиротской транзакции                              |
| 1199    | Вывод уже был инициализирован по сиротской транзакции                                   |
| 2005    | Параметр `lifetime` имеет значение ниже допустимого для сети                            |
| 2006    | Параметр `lifetime` имеет значение выше допустимого для сети                            |
| 3001    | Обмен недоступен в данный момент                                                        |
| 3005    | Сеть в данный момент недоступна для операций, попробуйте повторить операцию позднее     |
| 3007    | Операции ввода/вывода в данный момент недоступны для данной монеты                      |
| 3008    | Данный тип адреса нельзя пересоздать                                                    |
| 3009    | Некорректный статус реестра для проведения операции                                     |
| 3010    | Нельзя использовать один адрес для данной операции                                      |
| 3011    | Сумма ниже минимальной для проведения операции                                          |
| 3012    | Сумма выше максимальной для данной операции                                             |
| 3013    | Адрес нельзя использовать в данный момент, попробуйте повторить операцию позднее        |
| 3014    | У организации нет доступа до данного функционала                                        |
| 3015    | Для данной операции необходимо пройти процедуру KYB (Know Your Business)                |
| 3016    | Нет доступа к данному функционалу                                                       |
| <= 1000 | Ошибка сервера, обратитесь в поддержку                                                  |


# Webhooks

## Описание

Вы можете настроить отправку уведомлений в любую систему, которая принимает входящие вебхуки по протоколу HTTP/HTTPS. Для этого необходимо указать Webhook URL **при создании ордера**, на который будут отправляться уведомления об ордере.

Если Вы не ответите статусом 200, то мы продолжим слать запрос: первые 6 с интервалом 10 секунд, следующие 5 с интервалом 30 минут, потом 4 с интервалом 2 часа и последние 3 с интервалом 12 часов.

Если Webhook URL был указан через API, то в запросе будут присланы следующие дополнительные заголовки:

* `x-api-public-key` - публичный ключ, с помощью которого был выполнен запрос с указанием Webhook URL
* `x-api-signature` - подись, созданная по принципу, описанному в п. "Формирование подписи запроса"

**IP-адреса сервера:** 92.62.137.125

## Webhook статуса ордера

#### Webhook URL пример

"successWebhook": "[https://example.com/success-webhook-url"](https://example.com/success-webhook-url)

"errorWebhook": "[https://example.com/error-webhook-url"](https://example.com/error-webhook-url)

> #### Внимание
>
> Обратите внимание, что статусы `processed`, `expired`, `partial`, `overpaid` **не являются конечными**
>
> При обработке вебхука вам стоит отдельно обрабатывать массив полученных транзакций для корректной обработки суммы платежа

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

```json
{
  id: 'a020272e-b97a-4ed8-ab74-696426913627',
  advancedBalanceId: '316a59ea-be39-4eaa-9392-6fda708f24d8',
  currency: 'USDT',
  network: 'tron',
  status: 'processed',
  order: '#12345',
  description: null,
  address: 'TCpyHjEF7weWw2284sy7yYX5KUo9GTs6R6',
  tag: null,
  amount: '0.2',
  received: '0.20000000',
  transactions: [
    {
      id: '9812eb5f-b8b7-4e33-90e7-c8139d7cf46d',
      status: 'processed',
      currency: 'USDT',
      network: 'tron',
      amount: '0.1',
      tx: '86464a34fbecb77d67bda0604a883a796ddc3ccd54854637cd6fa0b95ccf1f3f',
      confirmations: '10',
      sender: 'TUdtD3oXvX37NM5mH5W561p6GSeDHeUDTD',
      priceUSD: '1',
      amountUSD: '0.1'
    },
    {
      id: '87fa47d7-9d83-42d0-9dc9-aba52b9869a3',
      status: 'processed',
      currency: 'USDT',
      network: 'tron',
      amount: '0.1',
      tx: 'fbc94452bc9f2a097a73ade40eada72125224f3a4c39965941a431d641493399',
      confirmations: '10',
      sender: 'TUdtD3oXvX37NM5mH5W561p6GSeDHeUDTD',
      priceUSD: '1',
      amountUSD: '0.1'
    }
  ],
  link: 'https://payment.domain/a020272e-b97a-4ed8-ab74-696426913627',
  successWebhook: 'https://merchant.domain/success',
  errorWebhook: 'https://merchant.domain/error',
  returnUrl: null,
  expiresAt: '2022-07-05T15:40:29.837Z',
  createdAt: '2022-07-05T13:39:26.006Z',
  updatedAt: '2022-07-05T13:42:00.588Z',
  webhookId: "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

## Webhook статуса счета

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

```json
{
  "id": "fd1dbab8-06c2-4e0e-88fb-32f5e97cc0e2",
  "advancedBalanceId": "316a59ea-be39-4eaa-9392-6fda708f24d8",
  "externalId": "external-merchant-id-1234",
  "orderId": "87fa47d7-9d83-42d0-9dc9-aba52b9869a3",
  "orderLink": "https://payment.domain/87fa47d7-9d83-42d0-9dc9-aba52b9869a3",
  "invoiceLink": "https://invoices.domain/fd1dbab8-06c2-4e0e-88fb-32f5e97cc0e2",
  "status": "PROCESSED",
  "order": "Payment #1234",
  "description": "Payment for ...",
  "currency": "USD",
  "amount": "100",
  "receivedNetwork": "ethereum",
  "receivedCurrency": "USDT",
  "receivedAmount": "101.12",
  "receivedAmountInInvoiceCurrency": "100.92",
  "rate": "0.998",
  "includeFee": true,
  "additionalFees": ["SEPA_WITHDRAWAL"],
  "insurancePercent": "1",
  "slippagePercent": "2.5",
  "transactions": [
    {
      "id": "9812eb5f-b8b7-4e33-90e7-c8139d7cf46d",
      "status": "processed",
      "currency": "USDT",
      "network": "tron",
      "amount": "101.12",
      "tx": "86464a34fbecb77d67bda0604a883a796ddc3ccd54854637cd6fa0b95ccf1f3f",
      "confirmations": "10",
      "sender": "TUdtD3oXvX37NM5mH5W561p6GSeDHeUDTD",
      "priceUSD": "1",
      "amountUSD": "100"
    }
  ],
  "webhookUrl": "https://merchant.domain/webhooks/invoice",
  "returnUrl": "https://merchant.domain/",
  "expiresAt": "2023-09-04T09:00:00.960Z",
  "createdAt": "2023-09-04T06:39:01.960Z",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}
```

Возможные значения `status`:

* `CREATED` - создан
* `INIT` - пользователь перешел к оплате
* `PENDING` - ожидаение полной суммы или ожидание подтверждений транзакции в блокчейне
* `PROCESSED` - исполнен
* `PARTIAL` - частичная оплата
* `REJECTED` - инвойс отклонен, свяжитесь с поддержкой для уточнения
* `ERROR` - ошибка в процессе создания или обработки
* `EXPIRED` - скрок действия инвойса истек

## Webhook статуса вывода

При завершения вывода присылается вебхук со статусом этого платежа на URL адрес `webhookUrl`, указанный при создании вывода.

* `addressId` - персональный адрес, на который пришел депозит
* `userId` - идентификатор пользователя, владеющего персональным адресом

#### Пример

```json
{
  "id": "fd1dbab8-06c2-4e0e-88fb-32f5e97cc0e2",
  "addressId": "a3018d42-aa59-42f3-a0f9-6d47e461d344",
  "amount": "0.32",
  "currency": "USDT",
  "network": "tron",
  "status": "processed",
  "tx": "46f4c1bafd9925de3d61d8a86d83851e73e",
  "createdAt": "2023-03-21T13:50:48.603Z",
  "updatedAt": "2023-03-21T13:51:14.018Z",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

Возможные значения `status`:

* `ERROR` - во время вывода произошла ошибка
* `PROCESSED` - успешный вывод

## Webhook статуса платежной связки

При изменении статуса платежной связки высылается вебхук на адрес, указанный при создании этой связки.

```json
{
  "id": "e457d90c-2321-4f9c-9f71-7a16fecc9b66",
  "merchantId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",
  "clientId": "199933300",
  "network": "bsc",
  "currency": "USDT",
  "address": "0x1d9e9703",
  "status": "SUCCESS",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

## Webhook статуса подписки

При изменении статуса подписки или при проведения платежа высылается вебхук на адрес, указанный при создании подписки.

#### Пример

```json
{
  "id": "d5743dea-5a78-4096-ae07-95b1f10bc5dd",
  "merchantId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",
  "billingLinkId": "e7e7a111-2d24-4aa3-afae-540f313c738b",
  "title": "Flixnet/monthly",
  "description": "Flixnet monthly subscription / HD quality",
  "currency": "USDT",
  "amount": "2.0000000",
  "spendInterval": 120,
  "message": null,
  "webhookUrl": "https://site.com/webhook",
  "status": "ACTIVE",
  "createdAt": "2023-02-27T11:50:53.710Z",
  "updatedAt": "2023-03-01T19:29:04.090Z",
  "paymentEvent": {
    "id": "9c06e989-9d19-461b-bd94-e94032012407",
    "merchantId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",
    "billingLinkId": "e7e7a111-2d24-4aa3-afae-540f313c738b",
    "amount": "2",
    "status": "PROCESSED",
    "tx": "0xdabd91e979122bb78d0a5cf1e5174dff3e10b906a31adbfd625ff80cca14e8c2",
    "createdAt": "2023-03-01T13:11:57.662Z",
    "updatedAt": "2023-03-01T13:14:32.868Z"
  },
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

При изменении статуса подписки высылается вебхук с объектом подписки. При этом `paymentEvent` заполняется только если событие вебхука связано с проведением платежа.

Возможные значения `status`:

* `ACTIVE` - подписка активна/возобновлена
* `ERROR` - неуспешный платеж по подписке
* `DECLINE` - невозможно выполнить платеж (напр. нехватка денег)
* `CANCEL` - подписка отменена

Комментарий к статусу может содержаться в поле `message`

После проведения платежа высылается вебхук с объектом этого платежа в поле `paymentEvent`. Возможные значения поля `paymentEvent.status`:

* `PROCESSED` - успешный платеж
* `ERROR` - неуспешный платеж

## Webhook статуса платежа со свободной суммой

При завершения платежа присылается вебхук со статусом этого платежа (тот же объект, что и в поле `paymentEvent` вебхука со статусом подписки) на адрес, указанный при запросе на платеж.

#### Пример

```json
{
  "id": "2fa68ddf-2479-47cb-9e66-ae91139c3063",
  "merchantId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",
  "billingLinkId": "6196a1f2-b6b5-40a5-a672-f1ffd70fdd7d",
  "amount": "0.005",
  "status": "PROCESSED",
  "tx": "0x5b9b3b55b366266025e",
  "createdAt": "2023-03-02T06:58:00.365Z",
  "updatedAt": "2023-03-02T07:01:50.693Z",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

Возможные значения `status`:

* `PROCESSED` - успешный платеж
* `ERROR` - неуспешный платеж

## Webhook статуса операции кроссчейн моста

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

```json
{
  "id": "816a19eb-be39-4eaa-9392-6fda708f24d8",
  "clientId": "...",
  "advancedBalanceId": "316a59ea-be39-4eaa-9392-6fda708f24d8",
  "currency": "USDT",
  "networkFrom": "bsc",
  "networkTo": "tron",
  "status": "PENDING",
  "rejectMessage": null,
  "addressFromId": "fa475cfa-15e8-c31d-7469-5f1168052cd6",
  "addressToId": "607976c9-0270-59a3-a528-0d92489c3fc8",
  "amount": "10000",
  "amountUSD": "10000",
  "blockchainFee": "1.80",
  "blockchainFeeUSD": "1.80",
  "serviceFeeUSD": "1.50",
  "webhookUrl": "https://my-show.com/...",
  "createdAt": "2022-02-02T06:07:34.067Z",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

Доступные статусы

| **Статус** | **Описание**                 |
| ---------- | ---------------------------- |
| CREATED    | Запрос зарегистрирован       |
| PENDING    | Обрабатывается               |
| ERROR      | Ошибка в процессе исполнения |
| REJECTED   | Запрос отклонен              |
| PROCESSED  | Успех                        |

## Webhook статуса кроссчейн обмена

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

```json
{
        "id": "816a19eb-be39-4eaa-9392-6fda708f24d8",
        "clientId": "...",
        "advancedBalanceId": "316a59ea-be39-4eaa-9392-6fda708f24d8",
        "currencyFrom": "TRX",
        "currencyTo": "USDT",
        "networkFrom": "tron",
        "networkTo": "bsc",
        "status": "PENDING",
        "rejectMessage": null,
        "addressFromId": "fa475cfa-15e8-c31d-7469-5f1168052cd6",
        "addressToId": "607976c9-0270-59a3-a528-0d92489c3fc8",
        "amountFrom": "100000",
        "amountTo": "10000",
        "price": "0.1",
        "serviceBlockchainFeeSource": "ADDRESS",
        "serviceBlockchainFee": "1.80",
        "serviceBlockchainFeeUSD": "1.80",
        "providerBlockchainFeeSource": "AMOUNT",
        "providerBlockchainFee": "1.80",
        "providerBlockchainFeeUSD": "1.80",
        "serviceFeeSource": "ADVANCE",
        "serviceFee": "1.80",
        "serviceFeeUSD": "1.80",
        "webhookUrl": "https://my-show.com/...",
        "createdAt": "2022-02-02T06:07:34.067Z",
        "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

Доступные статусы

| **Статус** | **Описание**                 |
| ---------- | ---------------------------- |
| CREATED    | Запрос зарегистрирован       |
| PENDING    | Обрабатывается               |
| ERROR      | Ошибка в процессе исполнения |
| REJECTED   | Запрос отклонен              |
| PROCESSED  | Успех                        |

## Webhook статуса депозита на персональный адрес

При завершения платежа присылается вебхук со статусом этого платежа на URL адрес `depositWebhookUrl`, указанный при создании пользователя.

* `addressId` - персональный адрес, на который пришел депозит
* `userId` - идентификатор пользователя (внутренний), владеющего персональным адресом
* `clientId` - идентификатор пользователя (внешний, в вашей системе), владеющего персональным адресом

#### Пример

```json
{
  "id": "2fa68ddf-2479-47cb-9e66-ae91139c3063",
  "addressId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",
  "userId": "6196a1f2-b6b5-40a5-a672-f1ffd70fdd7d",
  "clientId": "133357",
  "amount": "0.005",
  "currency": "USDT",
  "network": "bsc",
  "addressFrom": ["0x....", "0x...."],
  "addressTo": "0x....",
  "status": "PROCESSED",
  "confirmations": 10,
  "tx": "0x5b9b3b55b366266025e",
  "risks": {"level": "yellow", "categories": [{ "level": "yellow", "usdAmount": 41159.8, "category": "stolen funds", "service": "Reported as stolen funds bc1qlf4vel", "exposure": "DIRECT" }],
  "createdAt": "2023-03-02T06:58:00.365Z",
  "updatedAt": "2023-03-02T07:01:50.693Z",
  "webhookId": "b614475d-aa39-49be-b3bf-1622e357a267"
}

```

Возможные значения `status`:

* `PENDING` - платеж в обработке
* `PROCESSED` - успешный платеж

## Webhook статуса авто-обмена

#### Пример

```json
{
    "id":"25e2d6ab-44a2-4a7f-9898-a1fc8b27ee19",
    "organizationId":"1f07eb01-5fd8-4e05-89b5-bebcd1d1fc39",
    "userId":null,
    "status":"PROCESSED",
    "currencyFrom":"USDT",
    "currencyTo":"BTC",
    "networkFrom":"tron",
    "networkTo":"bitcoin",
    "addressFromId":"5cb5fefa-7e08-453c-8910-3dc268b16e52",
    "addressFrom":"TF4pfwhPsKzHB1bEV6kGt5T3jejLANW2T3",
    "addressTo":"bc1q9zqj930c0ehss7rsg9sg3nhcccys068c5s3max",
    "amountFrom":"31.56426000",
    "amountFromUSD":"31.56",
    "amountTo":"0.00044955",
    "amountToUSD":"31.59",
    "amountToReceive":"0.00020955",
    "rate":"70213.01301301",
    "blockchainFeeFrom":"2.64000000",
    "blockchainFeeFromUSD":"2.64",
    "blockchainFeeTo":"0.00024000",
    "blockchainFeeToUSD":"16.87",
    "serviceFee":"1.5",
    "webhookUrl":"https://...",
    "createdAt":"2024-03-27T12:12:31.688Z",
    "updatedAt":"2024-03-27T12:19:33.768Z",
    "webhookId":"2636d60c-a3f5-4938-bbd6-ca15d365279a"
}

```

Возможные значения `status`:

| Статус        | Описание                            |
| ------------- | ----------------------------------- |
| `PENDING`     | В обработке                         |
| `WITHDRAWING` | Ожидание отправки на конечный адрес |
| `PROCESSED`   | Успешно                             |
| `REJECTED`    | Отклонен                            |
| `ERROR`       | Ошибка при обработке                |


# IFrame ордер

## Описание

Данный функционал позволяет создавать платежи без обращения к нашему API путем встраивания на своей странице `iframe`.

## Параметры

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

| Параметр    | Обязательный | Описание                                                                              |
| ----------- | ------------ | ------------------------------------------------------------------------------------- |
| apiKey      | НЕТ          | Публичная часть API-ключа (используется для подписи вебхуков о платеже)               |
| theme       | НЕТ          | Тема оформления (light/dark)                                                          |
| lang        | НЕТ          | Язык (ru, en, kr, lv, lt, de, pl, tp, tr, ua, fi, fr, ee, jp, bg, gr, es, it, cn, bn) |
| orderId     | ДА           | Идентификатор платежа                                                                 |
| description | НЕТ          | Описание платежа                                                                      |
| currency    | НЕТ          | Монета оплаты                                                                         |
| network     | НЕТ          | Сеть оплаты                                                                           |
| amount      | НЕТ          | Сумма к оплате                                                                        |
| email       | НЕТ          | Почта плательщика (будет предзаполнена)                                               |

> В разделе **"Интеграция" -> "Настройки интеграции"** в личном кабинете можете настроить параметры по умолчанию для создания ордера
>
> Например, можете заполнить адреса для отправки вебхуков

## Пример

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

* Идентификатор организации: `817f197e-3b00-4359-8298-6097aeb52c69`
* `apiKey: odz2fn1+JhC...8J0fac4TnT6jew==`
* `orderId: Payment #1234`
* `description: Some payment description`
* `currency: USDT`
* `network: ethereum`

> Параметры ордера указываются в `query`

В результате получим следующий URL

```
https://iframe-order.apollopayment.io/817f197e-3b00-4359-8298-6097aeb52c69?
    apiKeyId=odz2fn1%2BJhC...8J0fac4TnT6jew%3D%3D&
    orderId=Payment%20%231234&
    description=Some%20payment%20description&
    currency=USDT&
    network=ethereum
```

> Для вставки данных в `query` их необходимо экранировать. В JavaScript это можно сделать с помощью функции `encodeURIComponent`
>
> const apikeyId = encodeURIComponent('odz2fn1+JhC...8J0fac4TnT6jew==');

Итоговый код для вставки будет следующим:

```html
<iframe 
    allow="clipboard-read; clipboard-write"
    src="https://iframe-order.apollopayment.io/817f197e-3b00-4359-8298-6097aeb52c69?apiKeyId=odz2fn1%2BJhC...8J0fac4TnT6jew%3D%3D&orderId=Payment%20%231234&description=Some%20payment%20description&currency=USDT&network=ethereum"
></iframe>
```

> Атрибут `allow="clipboard-read; clipboard-write"` необходим чтобы ваши клиенты могли скопировать адрес платежа нажатием кнопки "Скопировать"


# Виджет приема оплаты

## Описание

Виджет позволяет настроить прием платежей с минимальной интеграцией. С вашей стороны необходимо будет настроить прием вебхуков и разместить виджет на странице своего приложения.

### Приема оплат

> В зависимости от выбранного типа приема платежей, мы будем отправлять соответствующий тип вебхука
>
> [Вебхук при оплате счета](/webhooks#webhook-statusa-scheta)\
> [Вебхук при пополнении персонального адреса](/webhooks#webhook-statusa-depozita-na-personalnyi-adres)

> **Вебхук сиротской транзакции**. Для того, чтобы обработать случаи отправки платежа с неправильной валютой, обратитесь к персональному менеджеру для выставления вебхука о сиротской транзакции

#### Счета

Для каждого нового платежа пользователь получает новый счет с уникальным адресом, который действует ограниченное время. Счет может быть выставлен в крипто или фиатной валюте, с фиксированной суммой или без нее для свободной оплаты.

{% @mermaid/diagram content="sequenceDiagram
Клиент->>Мерчант: Переходит к оплате
Мерчант->>Мерчант: Размещает iframe-виджет

```
alt виджет
    Клиент->>Мерчант: Выбирает монету/сеть
    Мерчант ->> Apollopayment: Создание счета на оплату
    Мерчант ->> Клиент: Показ адреса оплаты
end

Apollopayment-->>Мерчант: Отправка вебхука

Note over Клиент: Клиент отправляет монеты

Note over Apollopayment: Увидели транзакцию в блокчейне

Apollopayment-->>Мерчант: Отправка вебхука" %}
```

***

#### Персональные адреса

Прием платежей позволяет формировать список крипто адресов под каждого плательщика. Эти адреса навсегда закрепляются за пользователем.

{% @mermaid/diagram content="sequenceDiagram
Клиент->>Мерчант: Переходит к оплате
Мерчант->>Мерчант: Размещает iframe-виджет

```
alt виджет
    Клиент->>Мерчант: Выбирает монету/сеть
    Мерчант ->> Apollopayment: Получение персонального адреса
    Мерчант ->> Клиент: Показ адреса оплаты
end

Note over Клиент: Клиент отправляет монеты

Note over Apollopayment: Увидели транзакцию в блокчейне

Apollopayment-->>Мерчант: Отправка вебхука" %}
```

### Выплаты

Через виджет можно осуществлять выплаты.

{% @mermaid/diagram content="sequenceDiagram
alt Перед выводом надо добавить адреса, куда пользователю можно делать вывод
Клиент->>Мерчант: Добавляет адрес для вывода
Мерчант->>Apollopayment: POST /api-gateway/personal-addresses/add-trusted-address
end

```
Клиент->>Мерчант: Переходит к выплате
Мерчант->>Мерчант: Размещает iframe-виджет

alt виджет
    Клиент->>Мерчант: Выбирает монету/сеть
    Мерчант ->> Apollopayment: Создание выплаты
    Мерчант ->> Клиент: Страница ожидания завершения вывода
end

Note left of Apollopayment: Монеты не уходят сразу, мы отправляем вебхук со статусом WAIT_APPROVE
Apollopayment-->>Мерчант: Отправка вебхука
Мерчант->>Apollopayment: POST /api-gateway/auto-withdrawals/approve

Note over Apollopayment: Отправка монет клиенту

Apollopayment-->>Мерчант: Отправка вебхука

alt виджет
    Мерчант ->> Клиент: Страница успеха
end" %}
```

## Подключение

Подключение происходит при помощи HTML-тега `<iframe/>`

Пример:

```html
<iframe 
    allow="clipboard-read; clipboard-write"
    src="https://widget.apollopayment.io/181a197e-3b00-4359-8298-6097aeb52c69"
></iframe>
```

> Атрибут `allow="clipboard-read; clipboard-write"` необходим чтобы ваши клиенты могли скопировать адрес платежа нажатием кнопки "Скопировать"

## Доступные параметры

Параметры передаются в `query`

> Для вставки данных в `query` их необходимо экранировать. В JavaScript это можно сделать с помощью функции `encodeURIComponent`
>
> const payinCryptoInvoiceId = encodeURIComponent('#12345');

### Параметры для приема платежей с помощью счетов

| Параметр                     | Пример                            | Описание                           |
| ---------------------------- | --------------------------------- | ---------------------------------- |
| payinCryptoInvoiceAmount     | (decimal) `123.45`                | Сумма к оплате                     |
| payinCryptoInvoiceCurrencies | (string) `USD,EUR`                | Валюта к пересчету                 |
| payinCryptoInvoiceId         | (string) `#12345`                 | Идентификатор платежа              |
| payinCryptoInvoiceDesc       | (string) `Оплата платежа 12345`   | Описание платежа                   |
| payinCryptoCurrenciesTo      | (string) `USDT_bsc,BNB,USDD_tron` | Список монет доступных для оплаты  |
| extUserId                    | (string) `user1234567`            | ID плательщика на стороне мерчанта |

> Если не передать параметр `payinCryptoInvoiceCurrencies`, то пользователю будет предложен\
> выбор из всех доступных валют для пересчета его суммы
>
> В параметр можно передать несколько валют через запятую, тогда пользователю будет предложен выбор\
> только из указанных валют
>
> Можно передать одну валюту, тогда она будет выбрана, без возможности для смены пользователем

> Параметр `payinCryptoInvoiceAmount` будет работать если в `payinCryptoInvoiceCurrencies` передана одна валюта

> В параметр можно указывать несколько монет/сетей через запятую
>
> Доступно указание только тикера монеты, в таком случае будут доступны все сети, в которых эта монета есть\
> Пример: `USDT,BNB,ETH`
>
> Доступно указание монеты в конкретной сети, разделитель - нижнее подчеркивание\
> Пример: `USDT_tron,BNB_bsc,ETH_ethereum`

> При указании параметр `payinCryptoInvoicePayerEmailRequired=true` поле `payinCryptoInvoicePayerEmailAllow` игнорируется

> При указании параметра `extUserId` резервируется персональный адрес для указанного пользователя, при этом задействуется функционал счетов. Если указанного персонального пользователя нет, то он будет создан

***

### Параметры для оплаты персональным адресом

| Параметр  | Пример                 | Описание                                                   |
| --------- | ---------------------- | ---------------------------------------------------------- |
| extUserId | (string) `user1234567` | ID плательщика на стороне мерчанта (параметр обязательный) |

> Создаваемые персональные пользователи из виджетов будут изолированны между виджетами
>
> *Если получить адрес оплаты для пользователя **X** из виджета **A**, то он не будет таким же как для того же пользователя **X** из виджета **B***
>
> ***
>
> Если вы хотите получить пользователя **X** через API персональных платежей, то вы должны добавить ID виджета в начало
>
> Пользователь **X**: `user12345`\
> ID виджета: `00000000-0000-0000-0000-000000000000`
>
> ID клиента для получения через API будет таким: `00000000-0000-0000-0000-000000000000@user12345`


# Telegram MiniApp

Теперь в Telegram можно принимать криптовалютные платежи через сеть TON с помощью нашего мини-приложения. Оно легко подключается, позволяет работать с клиентами прямо в Telegram и открывает новые возможности для бизнеса в экосистеме TON.

***

## Параметры

Для управления создаваемым платежом доступны следующие параметры:

| Параметр           | Обязательный | Описание                                                                |
| ------------------ | ------------ | ----------------------------------------------------------------------- |
| **apiKey**         | НЕТ          | Публичная часть API-ключа (используется для подписи вебхуков о платеже) |
| **orderId**        | ДА           | Идентификатор платежа                                                   |
| **description**    | НЕТ          | Описание платежа                                                        |
| **organizationId** | ДА           | Id организации                                                          |
| **amount**         | НЕТ          | Сумма к оплате                                                          |
| **payerEmail**     | НЕТ          | Почта плательщика                                                       |
| **returnUrl**      | НЕТ          | URL возврата после успешного платежа                                    |

> API ключ вы можете получить в личном кабинете в разделе интеграции

***

## Подключение

Доступно два удобных способа подключения нашего мини-приложения для приема крипто платежей.

### 1. Платежная кнопка через скрипт

Вы можете интегрировать платежную систему на ваш сервис или мини-приложение, добавив готовый скрипт кнопки. Это удобное решение, которое позволяет быстро настроить процесс оплаты через сеть TON в самых используемых кошельках.

### Подключение скрипта

Для работы платежной кнопки нужно подключить скрипт на ваш сервис

```html
<script src="https://cdn.apollopayment.io/images/PaymentButtonMiniApp.js"></script>
```

Пример тега платежной кнопки с необходимыми параметрами:

```html
<payment-button
    data-orderid="test"
    data-organizationid="your_organization_id"
    data-description="test"
    data-payeremail="email@test.mail"
    data-apikey="your_public_api_key"
    data-label="Оплатить"
    data-accentcolor="red"
    data-returnurl="https://example.com/success"
>
</payment-button>
```

> Обратите внимание! data-атрибуты должны быть написаны в lowercase

***

### Параметры тэга платежной кнопки

#### `data-label`

Текст, отображаемый на кнопке.

Пример: `data-label="Оплатить"`

#### `data-accentcolor`

Цвет кнопки. Доступные значения: `purple, orange, green, red, yellow, blue`

### 2. Прямая ссылка

В качестве альтернативы можно использовать прямую ссылку, которую необходимо вставить на ваш сервис или мини-приложение. Эта ссылка перенаправит пользователя на наше приложение оплаты внутри Telegram.

> Для того чтобы открыть мини-приложение оплаты, вам необходимо сформировать из параметров `base64` строку и вставить в query-параметр `startapp`

#### Пример формирования base64 строки на JavaScript:

```js
const encodeObjectToUrlString = (obj) => { 
  const jsonString = JSON.stringify(obj); // Преобразуем объект в строку JSON 
  return encodeURIComponent(btoa(jsonString)); // Кодируем в Base64 и делаем безопасным для URL 
};

// Пример использования:
const params = {
  apiKey: "apiKey",
  orderId: "Payment#1234",
  description: "Some payment description",
  organizationId: "organizationId",
  payerEmail: "email@mail.ru",
  returnUrl: "https://example.com/success"
};

const base64Params = encodeObjectToUrlString(params);
```

#### Пример ссылки:

```
https://t.me/apollopayment_app_bot/apollopayment?startapp=${base64Params}
```

Ссылку доступно открыть через `window.open` функцию

```js
window.open(`https://t.me/apollopayment_app_bot/apollopayment?startapp=${base64Params}`)
```

> Вставьте результат из функции в base64Params в строке.

***

> Доступные валюты для оплаты USDT (TON), TON (TON)

> Обратите внимание! При открытии мини-приложения оплаты, ваше мини приложение закроется


# Базовый функционал


# Проверка корректности подписи x-api-signature

Метод позволяет проверить корректность подписи x-api-signature

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/test-signature" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение монет доступных для приема/отправки транзакций

Метод позволяет получить информацию о доступных валютах. Возвращает список доступных валют.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/available-currencies" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Запрос текущей цены

Метод позволяет получить текущую цену актива по отношению к другому

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/price-rate" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Поиск операции по TX-хешу

Метод позволяет найти операцию в системе по адресу транзакции в блокчейне

В ответе будет указан тип операции, направление транзакции, адрес, который использовался для операции и тело операции в записимости от типа

Доступные типы операций:

| Тип                 | Описание                                                                                                   |
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
| ORDER               | Адрес транзакции был найден во входящих транзакциях ордера                                                 |
| INVOICE             | Адрес транзакции был найден во входящих транзакциях ордера созданного для исполнения счета                 |
| ORPHAN\_TRANSACTION | Адрес транзакции был во входящих транзакция адреса созданного для иной монеты или сети                     |
| WITHDRAWAL          | Адрес транзакции был найден среди операций вывода                                                          |
| DEPOSIT             | Адрес транзакции был найден во входящих транзакция адреса как "свободное пополнение"                       |
| PERSONAL\_DEPOSIT   | Адрес транзакции был найден во входящих транзакциях по адресу системы "персональных адресов пользователей" |

Доступные направления транзакций:

| Направление | Описание             |
| ----------- | -------------------- |
| IN          | Входящая транзакция  |
| OUT         | Исходящая транзакция |

Пример тела адреса:

```json
{
  "id": "cf95ea41-20c5-4528-b689-c21f4da6359f", // идентификатор адреса
  "type": "PAY_IN" // тип адреса: PAY_IN, PERSONAL, PAY_OUT, BUSINESS, RECURRENT
}

```

В теле результата модет быть несколько записей, поэтому результат представлен в виде массива:

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

```json
{
  "success": true,
  "response": [
    {
      "type": "OUT",
      "source": "WITHDRAWAL",
      "address": {
        ... // тело адреса
      },
      "result": {
        ... // тело для WITHDRAWAL
      }
    },
    {
      "type": "IN",
      "source": "DEPOSIT",
      "address": {
        ... // тело адреса
      },
      "result": {
        ... // тело для DEPOSIT 
      }
    }
  ]
}

```

***

Пример тела операции `PERSONAL_DEPOSIT`:

```json
{                                                       // тело идентично телу отправляемому в вебхуке
  "id": "2fa68ddf-2479-47cb-9e66-ae91139c3063",         // идентификатор персонального депозита
  "addressId": "dcb1a9fe-4b8d-40f6-baf6-241dc88436d9",  // идентификатор адреса получателя
  "userId": "6196a1f2-b6b5-40a5-a672-f1ffd70fdd7d",     // идентификатор пользователя в системе для которого был создан адрес
  "amount": "0.005",                                    // сумма депозита
  "currency": "USDT",                                   // монета депозита
  "addressFrom": ["0x....", "0x...."],                  // массив адресов отправителей
  "addressTo": "0x....",                                // адрес получатель
  "network": "bsc",                                     // сети депозита
  "status": "PROCESSED",                                // статус, доступные значение: PROCESSED
  "tx": "0x5b9b3b55b366266025e...",                        // адрес транзакции в блокчейне
  "createdAt": "2023-03-02T06:58:00.365Z",
  "updatedAt": "2023-03-02T07:01:50.693Z"
}

```

***

Пример тела операции `DEPOSIT`:

```json
{                                                       // тело идентично телу отправляемому в вебхуке
  "id": "2fa68ddf-2479-47cb-9e66-ae91139c3063",         // идентификатор записи
  "status": "processed",                                // статус, доступные значение: processed, error, rejected, pending
  "addressType": "BUSINESS",                            // тип адреса: PAY_IN, PERSONAL, PAY_OUT, BUSINESS, RECURRENT
  "addressFrom": "0x5b9b3b55b366266025e...",            // адреса отправителя в блокчейне
  "addressTo": "0x3f4e3d79a244189e25e...",              // адрес получателя в блокчейне
  "type": "deposit",                                    // тип операции: withdrawal, deposit
  "amount": "0.005",                                    // сумма депозита
  "currency": "USDT",                                   // монета депозита
  "network": "bsc",                                     // сети депозита
  "txId": "0x5b9b3b55b366266025e...",                   // адрес транзакции в блокчейне
  "alias": "My address",                                // имя адреса указанное при создании
  "comment": null,                                      // комментарий к операции
  "createdAt": "2023-03-02T06:58:00.365Z",
  "updatedAt": "2023-03-02T07:01:50.693Z"
}

```

***

Пример тела операции `WITHDRAWAL`:

```json
{                                                               // тело ответа идентично телу ответа при получении данных вывода
  "id": "2a2d464b-231a-baf3-6f8a-7b9dc0f8cef7",                 // идентификатор вывода в системе
  "advancedBalanceId": "017f444f-a6ce-487f-0f80-9777199a6ff5",  // идентификатор авансого баланса
  "addressId": "5bcb11d2-cfe8-3a09-0c51-dd7be7243c5d",          // идентификатор адреса отправителя
  "currency": "ETH",                                            // монета отправки
  "network": "ethereum",                                        // сеть отправки
  "tx": "0x00000000000000000000c8950e52aa3...",                 // адрес транзакции в блокчейне
  "status": "processed",                                        // статус вывода: init, error, pending, processed, rejected
  "address": "0x000000000c8950e52aa315030efedc861da658e2",      // адрес получателя в блокчейне
  "tag": null,
  "amount": "2.12345",                                          // сумма вывода
  "feeAmount": "0.005",                                         // сумма комиссии
  "createdAt": "2023-03-02T07:01:50.693Z"
}

```

***

Пример тела операции `ORDER`:

```json
{                                                               // тело ответа идентично телу ответа запроса получения информации об ордере
  "id": "d01d03e2-15dc-b03a-b34e-46cad2345b92",                 // ид ордера
  "advancedBalanceId": "c6e7d8dc-ce10-637d-147b-2dda3015b8a4",  // ид авансового баланса
  "currency": "ETH",                                            // монета оплаты
  "network": "etehereum",                                       // сеть оплаты
  "link": "https://payment.domain/...",                         // ссылка на оплату
  "status": "processed",                                        // статус: init, error, processed, pending, expired, partial
  "order": "#123456789",
  "description": "Order #123456789",
  "address": "0x000000000c8950e52aa315030efedc861da658e2",      // адрес для приема оплаты
  "addressId": "8eae79cf-1db2-4858-9023-aca473d805e2",          // ид адреса в сисетеме
  "tag": null,                                                  // тег адреса
  "amount": "0.84",                                             // сумма к оплате
  "received": "0.86",                                           // полученная сумма
  "transactions": [
    {
      "id": "f0b22f11-007c-4f65-bb9b-265432ab64c3",
      "status": "processed",
      "currency": "BNB",
      "network": "bsc",
      "amount": "0.0001",
      "tx": "0x8fb0d40678d1bb4b6c0b2095c18d9280aa8ccf966e778e6b209f4f71c7f1e835",
      "confirmations": "15",
      "sender": "0xcD62a4E08513f16F86C1c0AF0860DD6b3De1B83d",
      "priceUSD": "212.90000000",
      "amountUSD": "0.02129"
    },
    {
      "id": "a2a7ed3b-a8af-42c4-900c-d21e1d9eda3c",
      "status": "processed",
      "currency": "BNB",
      "network": "bsc",
      "amount": "0.0006",
      "tx": "0x60032c394fcc7a103bc2826f9b81e5086be90628331e1ce163e1c576c64baf06",
      "confirmations": "15",
      "sender": "0x54936CE809bBccC7f1378c7ec88F5504cE49605C",
      "priceUSD": "212.70000000",
      "amountUSD": "0.12762"
    }
  ],
  "orphanDeposits": [
    {
      "id": "7cd20ea9-0e2c-46c5-8e12-82b0485d5ba1",
      "organizationId": "1f07eb01-5fd8-4e05-89b5-bebcd1d1fc39",
      "orderId": "d01d03e2-15dc-b03a-b34e-46cad2345b92",
      "stage": "WITHDRAWAL",
      "status": "PROCESSED",
      "message": null,
      "currency": "BNB",
      "network": "bsc",
      "amount": "0.00000001",
      "canWithdrawal": true,
      "inTransaction": {
        "addressType": "PAY_IN",
        "addressId": "8519ba89-68d5-4914-9a0f-d99e77dc88ea",
        "address": "0x68f8a74b5fD0b687369536607214acfA3b1572Ff",
        "txId": "0x6751285829e38b1bb53d1df887dde750182f08e230b58a5a2d3e867ba7327362",
        "amount": "0.00000001",
        "status": "processed",
        "createdAt": "2023-05-30T14:10:27.276Z"
      },
      "outTransaction": {
        "withdrawalId": "4429ba89-68d5-4914-9a0f-d99e77dc88ea",
        "address": "0x68f8a74b5fD0b687369536607214acfA3b1572Ff",
        "txId": "0x5511285829e38b1bb53d1df887dde750182f08e230b58a5a2d3e867ba7327362",
        "amount": "0.00000001",
        "status": "processed",
        "createdAt": "2023-05-30T14:10:27.276Z"
      },
      "createdAt": "2023-05-30T14:10:27.283Z"
    }
  ],
  "successWebhook": "https://example.com/success-webhook-url",
  "errorWebhook": "https://example.com/error-webhook-url",
  "returnUrl": "null",
  "expiresAt": "2021-05-23T15:00:00Z",
  "createdAt": "2021-05-23T15:00:00Z",
  "updatedAt": "2021-05-23T15:00:00Z"
}

```

***

Пример тела операции `INVOICE`:

```json
{ // тело ответа идентично телу ответа запроса получения данных счета
  "id": "fe31e1f3-bd23-4c89-bced-7fecc60cbb34", // ID счета
  "advancedBalanceId": "1cabe6ba-52b8-42bf-88a4-b3c953c3fd36", // ID авансового баланса
  "orderId": "ae31e1f3-bd23-4c89-bced-7fecc60cbb31", // ID ордера (до статуса INIT будет null)
  "orderLink": "https://payment.domain/...", // ссылка на ордер (до статуса INIT будет null)
  "invoiceLink": "https://invoices.domain/...", // ссылка счета
  "status": "PENDING", // статус счета (CREATED - создан, INIT - выбрана монета для оплаты, PENDING - пользователь сделал транзакцию, PROCESSED - оплачен, PARTIAL - частичная оплата, ERROR - ошибка, EXPIRED - срок жизни счета истек)
  "order": "Order #1234",
  "description": "Buy 1 Bitcoin",
  "currency": "USD",
  "amount": "3000",
  "receivedCurrency": "USDT", // выбраная монета для оплаты (до статуса INIT будет null)
  "receivedAmount": "123", // полученная сумма
  "includeFee": true,
  "insurancePercent": "2",
  "slippagePercent": "3.5",
  "webhookURL": "https://my-shop.com/api/webhooks",
  "returnURL": "https://my-shop.com/",
  "currencies": [
    {
      "currency": "USDT",
      "networks": [
        {
          "name": "tron",
          "amount": "3030.123" // конечная сумма к оплате для USDT в сети tron
        },
        {
          "name": "bsc",
          "amount": "3030.123"
        }
      ]
    }
  ],
  "expiresAt": "2022-12-16T08:36:38.130Z",
  "createdAt": "2022-12-16T07:36:38.130Z"
}

```

***

Пример тела операции `ORPHAN_DEPOSIT`:

```json
{ // тело ответа идентично телу ответа запроса получения данных депозита
  "id": "7cd20ea9-0e2c-46c5-8e12-82b0485d5ba1",
  "organizationId": "1f07eb01-5fd8-4e05-89b5-bebcd1d1fc39",
  "orderId": "4db8ba00-20f8-4e3f-8292-301dd66618af",
  "stage": "WITHDRAWAL",
  "status": "PROCESSED",
  "message": null,
  "currency": "BNB",
  "network": "bsc",
  "amount": "0.00000001",
  "canWithdrawal": true,
  "inTransaction": {
    "addressType": "PAY_IN",
    "addressId": "8519ba89-68d5-4914-9a0f-d99e77dc88ea",
    "address": "0x68f8a74b5fD0b687369536607214acfA3b1572Ff",
    "txId": "0x6751285829e38b1bb53d1df887dde750182f08e230b58a5a2d3e867ba7327362",
    "amount": "0.00000001",
    "status": "processed",
    "createdAt": "2023-05-30T14:10:27.276Z"
  },
  "outTransaction": {
    "withdrawalId": "4429ba89-68d5-4914-9a0f-d99e77dc88ea",
    "address": "0x68f8a74b5fD0b687369536607214acfA3b1572Ff",
    "txId": "0x5511285829e38b1bb53d1df887dde750182f08e230b58a5a2d3e867ba7327362",
    "amount": "0.00000001",
    "status": "processed",
    "createdAt": "2023-05-30T14:10:27.276Z"
  },
  "createdAt": "2023-05-30T14:10:27.283Z"
}

```

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/find-tx" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Проверка корректности адреса

Проверка корректности формата адреса в указанной сети

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/utils/validate-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение истории транзакций

Метод позволяет получить историю транзакций в организации.

## Фильтры

Доступны фильтры:

* по типу транзакции (`enum type`)
* по дате (параметр `date`)
* по монете (параметр `currency`)
* по сети (параметр `network`)

## Пагинация

Пагинация осуществляется с помощью параметров `limit`, `offset`. Доступна сортировка по дате (параметр `sortDate`)

* `limit` - количество элементов для отображения в результате запроса (не меньше 100 и не больше 1000, по умолчанию 100)
* `offset` - количество элементов для пропуска

## Описание `enum basis`

| Тип                | Описание     |
| ------------------ | ------------ |
| `order`            | Ордер        |
| `withdrawal`       | Вывод        |
| `deposit`          | Депозит      |
| `transfer`         | Перевод      |
| `collecting`       | Сбор прибыли |
| `kyt`              | KYT          |
| `exchange_AUTO`    | Обмен API    |
| `payout_auto_swap` | Авто обмен   |

## Описание `enum type`

| Тип                               | Описание                                  |
| --------------------------------- | ----------------------------------------- |
| `commission`                      | Комиссия                                  |
| `commission_create_order`         | Комиссия за создание ордера               |
| `commission_execute_order`        | Комиссия за транзакцию по ордеру          |
| `commission_wallet_deposit`       | Комиссия за депозит на кошелек            |
| `commission_recurrent_deposit`    | Комиссия за депозит на рекуррентный адрес |
| `commission_personal_deposit`     | Комиссия за депозит на персональный адрес |
| `commission_payout_deposit`       | Комиссия за депозит на выплатной баланс   |
| `commission_wallet_withdrawal`    | Комиссия за вывод с кошелька              |
| `commission_recurrent_withdrawal` | Комиссия за вывод с рекуррентного адреса  |
| `commission_personal_withdrawal`  | Комиссия за вывод с персонального адреса  |
| `commission_collect_withdrawal`   | Комиссия за вывод с головного адреса      |
| `commission_payout_withdrawal`    | Комиссия за вывод с выплатного баланса    |
| `bridge_internal_fee`             | Комиссия за блокчейн мост                 |
| `bridge_external_fee`             | Комиссия за блокчейн мост API             |
| `bridge_internal`                 | Блокчейн мост                             |
| `bridge_external`                 | Блокчейн мост API                         |
| `exchange_internal`               | Обмен                                     |
| `exchange_auto`                   | Обмен API                                 |
| `exchange_internal_fee`           | Комиссия за обмен                         |
| `exchange_auto_fee`               | Комиссия за обмен API                     |
| `network_fee`                     | Комиссия сети                             |
| `deposit`                         | Пополнение авансового баланса             |
| `withdrawal`                      | Вывод                                     |
| `commission_withdrawal`           | Комиссия вывода                           |
| `order_transaction`               | Транзакция ордера                         |
| `deposit_payout_balance`          | Пополнение выплатного баланса             |
| `deposit_wallet`                  | Пополнение кошелька                       |
| `deposit_recurrent`               | Пополнение рекуррентного адреса           |
| `deposit_personal`                | Пополнение персонального адреса           |
| `deposit_collect`                 | Пополнение головоного адреса              |
| `kyt_transaction_fee`             | Риски транзакции                          |
| `kyt_withdrawal_address_fee`      | Риски вывода                              |
| `kyt_address_fee`                 | Риски адреса                              |
| `payout_auto_swap`                | Авто-обмен                                |
| `payout_auto_swap_fee`            | Комиссия за авто-обмен                    |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/get-transaction-history" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Авансовый счет


# Получение аккаунтов текущего пользователя

Метод позволяет получить список аккаунтов пользователя.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/advanced-balances" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение аккаунта по его ID

Метод позволяет получить информацию по данному аккаунту.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/advanced-balance" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение адреса для пополнения баланса аккаунта

Метод позволяет получить адрес для пополнения аккаунта.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/advanced-balance-deposit-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Блокчейн-адреса


# Поиск по ID

Метод позволяет найти адрес принадлежащий организации по его ID вне зависимости от его типа.\
При ненахождении адреса ответ будет успешным, пример:

```json
{
  "success": true,
  "response": null
}
```

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

| Поле         | Тип                                                    | Описание                                                                  |
| ------------ | ------------------------------------------------------ | ------------------------------------------------------------------------- |
| `id`         | `string`                                               | Идентификатор адреса в системе                                            |
| `type`       | `enum(PAY_IN, BUSINESS, PAY_OUT, PERSONAL, RECURRENT)` | Тип адреса                                                                |
| `alias`      | `string or null`                                       | Имя адреса. Устанавливается мерчантов                                     |
| `comment`    | `string or null`                                       | Комментарий адреса. Устанавливается мерчантом                             |
| `currency`   | `string`                                               | Монета адреса                                                             |
| `network`    | `string`                                               | Сеть адреса                                                               |
| `balance`    | `string`                                               | Баланс адреса                                                             |
| `address`    | `string`                                               | Адрес в блокчейне                                                         |
| `tag`        | `string or null`                                       | Тег (MEMO) адреса. Доступно для сетей поддерживающих тег, например Ripple |
| `meta`       | `any`                                                  | Мета данные. Свободное поле, устанавливается мерчантом                    |
| `isArchived` | `boolean`                                              | Адрес находится в архиве                                                  |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/addresses/find-by-id" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Поиск по адресу

Метод позволяет найти адреса принадлежащие организации по адресу в блокчейне, вне зависимости от типа и сети. Возвращает найденных массив адресов

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

| Поле         | Тип                                                    | Описание                                                                  |
| ------------ | ------------------------------------------------------ | ------------------------------------------------------------------------- |
| `id`         | `string`                                               | Идентификатор адреса в системе                                            |
| `type`       | `enum(PAY_IN, BUSINESS, PAY_OUT, PERSONAL, RECURRENT)` | Тип адреса                                                                |
| `alias`      | `string or null`                                       | Имя адреса. Устанавливается мерчантов                                     |
| `comment`    | `string or null`                                       | Комментарий адреса. Устанавливается мерчантом                             |
| `currency`   | `string`                                               | Монета адреса                                                             |
| `network`    | `string`                                               | Сеть адреса                                                               |
| `balance`    | `string`                                               | Баланс адреса                                                             |
| `address`    | `string`                                               | Адрес в блокчейне                                                         |
| `tag`        | `string or null`                                       | Тег (MEMO) адреса. Доступно для сетей поддерживающих тег, например Ripple |
| `meta`       | `any`                                                  | Мета данные. Свободное поле, устанавливается мерчантом                    |
| `isArchived` | `boolean`                                              | Адрес находится в архиве                                                  |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/addresses/find-by-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Мета-данные

Метод позволяет установить мета-данные для адреса. Тип поля свободный, установить можно любое значение

Примеры тела запроса:

```json
{
  "id": "...",
  "meta": 199
}
```

```json
{
  "id": "...",
  "meta": [1,2,3,4]
}
```

```json
{
  "id": "...",
  "meta": "some str"
}
```

```json
{
  "id": "...",
  "meta": ["one", "two"]
}
```

```json
{
  "id": "...",
  "meta": {
    "arr": ["1","2"],
    "some": "field"
  }
}
```

```json
{
  "id": "...",
  "meta": null
}
```

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/addresses/set-meta" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Транзакции адреса

Метод позволяет получить список транзакций по адресу.

## Фильтры

Доступны фильтры:

* по типу транзакции: `withdrawal`, `deposit`
* по нескольким статусам: `processed`, `error`, `rejected`, `pending`

## Пагинация

Пагинация осуществляется с помощью параметров `limit`, `offset`.

* `limit` - количество элементов для отображения в результате запроса (не меньше 100 и не больше 1000, по умолчанию 100)
* `offset` - количество элементов для пропуска

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

| Поле              | Тип                                         | Описание                                      |
| ----------------- | ------------------------------------------- | --------------------------------------------- |
| `id`              | `string`                                    | Идентификатор транзакции                      |
| `status`          | `enum(processed, error, rejected, pending)` | Статус транзакции                             |
| `type`            | `enum(withdrawal, deposit)`                 | Тип транзакции                                |
| `currrency`       | `string`                                    | Монета                                        |
| `network`         | `string`                                    | Сеть                                          |
| `addressFrom`     | `string`                                    | Адрес, с которого были отправлены монеты      |
| `addressTo`       | `string`                                    | Адрес, который получил монеты                 |
| `amount`          | `string`                                    | Сумма операции                                |
| `tx`              | `string`                                    | Хеш в блокчейне                               |
| `feeCurrency`     | `string or null`                            | (При выводе) Монета комиссии                  |
| `feeAmount`       | `string or null`                            | (При выводе) Сумма комиссии                   |
| `feeAmountUSD`    | `string or null`                            | (При выводе) Сумма комиссии в пересчете к USD |
| `withdrawalId`    | `string or null`                            | Идентификатор вывода в системе                |
| `orphanDepositId` | `string or null`                            | Идентификатор сиротской транзакции в системе  |
| `createdAt`       | `string`                                    | Дата получения транзакции                     |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/addresses/transactions" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Последняя транзакция адреса

Метод позволяет получить последнюю транзакцию по адресу.

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

| Поле              | Тип                                         | Описание                                      |
| ----------------- | ------------------------------------------- | --------------------------------------------- |
| `id`              | `string`                                    | Идентификатор транзакции                      |
| `status`          | `enum(processed, error, rejected, pending)` | Статус транзакции                             |
| `type`            | `enum(withdrawal, deposit)`                 | Тип транзакции                                |
| `currrency`       | `string`                                    | Монета                                        |
| `network`         | `string`                                    | Сеть                                          |
| `addressFrom`     | `string`                                    | Адрес, с которого были отправлены монеты      |
| `addressTo`       | `string`                                    | Адрес, который получил монеты                 |
| `amount`          | `string`                                    | Сумма операции                                |
| `tx`              | `string`                                    | Хеш в блокчейне                               |
| `feeCurrency`     | `string or null`                            | (При выводе) Монета комиссии                  |
| `feeAmount`       | `string or null`                            | (При выводе) Сумма комиссии                   |
| `feeAmountUSD`    | `string or null`                            | (При выводе) Сумма комиссии в пересчете к USD |
| `withdrawalId`    | `string or null`                            | Идентификатор вывода в системе                |
| `orphanDepositId` | `string or null`                            | Идентификатор сиротской транзакции в системе  |
| `createdAt`       | `string`                                    | Дата получения транзакции                     |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/addresses/last-transaction" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка PayIn адресов

Метод позволяет получить данные PayIn адресов (адрес, баланс, идентификатор и тд)

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/account-addresses" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка бизнес адресов

Метод позволяет получить балансы по данному аккаунту.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/business-addresses" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение рекуррентных адресов

Метод позволяет получить балансы по данному аккаунту.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrent-addresses" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка PayOut адресов

Метод позволяет получить балансы по данному аккаунту.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/payout-balances" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание нового адрес бизнес кошелька

Метод позволяет создать новый бизнес адрес.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/business-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание нового адрес PayOut кошелька

Метод позволяет создать новый PayOut адрес.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/create-payout-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Персональные адреса

Этот раздел позволяет создавать внешним сервисам персональные адреса для своих пользователей в любой имеющейся сети

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

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Apollopayment: Создание пользователя
Apollopayment ->> Merchant: Пользователь
Merchant ->> Apollopayment: Получение адреса
Apollopayment ->> Merchant: Адрес" %}


# Создание пользователя

Метод позволяет:

* создать пользователя персональных адресов.
* обновить данные ранее созданного пользователя при указании того же `clientId`. Присланные значения параметров перезаписывают предыдущие данные.

При депозите на персональный адрес пользователя присылается [вебхук](#webhooks), на указанный в запросе `depositWebhookUrl`. При выводе (общий метод "Создание вывода" /make-withdrawal) с персонального адреса ответ со статусом приходит сразу.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/create-user" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение адреса

Метод позволяет:

* Получить адрес для пользователя в указанной монете и сети. При повторном запросе возвращается ранее созданный адрес, имеющий `isActive: true`
* Сгенерировать новый адрес для пользователя в указанной монете и сети, при указании параметра `renewAddress`. Новый адрес будет иметь `isActive: true`, а ранее выданные адреса с этой же монетой и сетью будут иметь `isActive: false`

Примечание: в любой момент у пользователя может быть только один активный адрес в одной монете и сети. Депозиты и выводы работают на всех адресах, вне зависимости от параметра `isActive`

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/get-user-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка адресов

Метод позволяет получить список адресов

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/get-user-addresses" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение пользователя

Метод позволяет получить данные пользователя по его `id` или `clientId`

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/get-user" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Добавление доверенного адреса

Добавление адреса в список доверенных для получения возможности вывода с помощью платежного виджета

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/add-trusted-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка доверенных адресов

Получение списка доверенных адресов пользавателя, на которые может быть произведена выплата с помощью платежного виджета

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/get-trusted-addresses" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Удаление доверенного адреса

Удаления адреса из списка доверенных адресов пользователя

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/personal-addresses/del-trusted-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Ордера

В данном разделе описаны методы для создания ордеров и получения информации о них

Функционал ордеров позволяет принимать платежи в указанной монете и сети

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

{% @mermaid/diagram content="sequenceDiagram
Client ->> Merchant: Запрос оплаты
Merchant ->> Apollopayment: Создание ордера
Apollopayment ->> Merchant: Ордер
Merchant ->> Client: Адрес для оплаты или ссылка на оплату

```
Note over Client: Отправляет монеты

Apollopayment -->> Merchant: Вебхук о поступлении платежа" %}
```

## Возможные статусы

| Статус      | Описание                                |
| ----------- | --------------------------------------- |
| `init`      | Ордер создан                            |
| `error`     | Ошибка при создании или при исполнении  |
| `processed` | Упешная оплата ордера                   |
| `pending`   | При поступлении первой оплаты           |
| `expired`   | Истекло время жизни ордера              |
| `partial`   | Ордер истёк, но был частично оплачен    |
| `overpaid`  | Ордер был оплачен сверх указанной суммы |

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

Подробнее о вебхуке можно узнать в разделе **Webhooks**

> #### Внимание
>
> Обратите внимание, что статусы `processed`, `expired`, `partial`, `overpaid` **не являются конечными**
>
> При обработке вебхука вам стоит отдельно обрабатывать массив полученных транзакций для корректной обработки суммы платежа

## Срок жизни ордера

При создании ордера выделяется адрес из пула `PAY_IN` адресов организации.\
Этот адрес будет недоступен для других операций в течении всего срока жизни ордера.

В зависимости от сети оплаты минимальное и максимальное время жизни ордера может меняться.

Минимальное и максимальное значения для сетей:

| Сеть          | Минимальное значение | Максимальное значение |
| ------------- | -------------------- | --------------------- |
| `ton`         | 1800                 | 43200                 |
| `bitcoin`     | 7200                 | 43200                 |
| `bitcoincash` | 7200                 | 43200                 |
| `bsc`         | 1800                 | 43200                 |
| `tron`        | 1800                 | 43200                 |
| `ethereum`    | 1800                 | 43200                 |
| `fantom`      | 1800                 | 43200                 |
| `litecoin`    | 3600                 | 43200                 |

## Потерянные транзакции

В некоторых случаях плательщик может отправить на адрес монеты в другой сети или монете.\
Такие транзакции будут отображаться в отдельном поле `orphanDeposits` при получении вебхука\
или получении информации об ордере через API.

Вы можете увидеть эти транзакции в личном кабинете в разделе **Платежи —> Сиротские транзакции**.\
В этом разделе будет доступен вывод этих монет на сторонний адрес.


# Создание ордера

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

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/make-order" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение информации об ордере

Метод позволяет получить информацию по ранее созданному ордеру по его идентификатору в системе

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/order" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка ордеров

Метод позволяет получить список ордеров

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/orders" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Выводы

В данном разделе описаны методы для создания выводов и получения информации о них

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

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Apollopayment: Запрос токена комиссии
Apollopayment ->> Merchant: Токен комиссии
Merchant ->> Apollopayment: Создание вывода
Apollopayment ->> Merchant: Тело вывода

```
Note over Apollopayment: Обработка вывода

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


# Получение комиссии для проведения вывода

Метод позволяет полученить данные о комиссии, которая будет списана при проведении вывода

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/withdrawal-fee-token" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# (DEPRECATED) Синхронный вывод

> DEPRECATED
>
> Данный метод устарел из-за ненадежности и долгого ожидания операции, метод будет отключен в будещем

Метод позволяет создать запрос на вывод монет с адреса

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/make-withdrawal" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Асинхронный вывод

Метод позволяет создать запрос на вывод монет с адреса и получить результат исполнения на указанный URL в параметре **webhookUrl**

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/make-withdrawal-async" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение информации о выводе

Метод позволяет получить инвормацию о выводе

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/get-withdrawal" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Счета

В данном разделе описаны методы для создания счетов и получения информации о счетах

Функционал счетов позволяет принимать оплату в указанном эквиваленте, а монету и сеть выбирает плательщик

Наример, вы можете создать счет на оплату 100 USD, плательщику будет предложено выбрать\
монету и сеть в которой ему будет удобнее оплатить, например, в USDT, TRX, BNB и других.\
Сумма к оплате пересчитается по курсу автоматически

Вы так же можете при оплате дополнительно указать процент к оплате (поле `insurancePercent`),\
в таком случае плательщику будет показа сумма к оплате 100 USD, но к сумме оплаты, например, в USDT будет равнятся`<СУММА К ОПЛАТЕ> * <КУРС USDT/USD> + <insurancePercent>`\
Пример: вы создали счет на оплату 75 USD и указали `insurancePercent` равным 5. При выборе монеты оплаты, например, USDT (условно примем, что курс USDT/USD 1=1), плательщику будет предложено оплатить 78.75 USDT (5% от 75 = 3.75)

Так же вы можете указать чтобы плательщик оплачивал комиссию сети указав параметр `includeFee: true`.\
В таком случае к конечной сумме оплаты будет добавлена комиссия, выбраной плательщиком, сети

Есть возможность указать процент проскальзывания цены (поле `slippagePercent`).\
Если оно будет указанно, то если плательщик при оплате отправит сумму больше или меньше суммы оплаты на указанный процент, то счет будет считаться закрытым.\
Пример: плательщику надо оплатить 100 USDT, вы указали процент проскальзывания 0.5%.\
В таком случае если плательщик отправит сумму 99.99 USDT (от 99.5 и до 100.5) счет будет считаться исполненным

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

{% @mermaid/diagram content="sequenceDiagram
Client ->> Merchant: Запрос оплаты
Merchant ->> Apollopayment: Создание инвойса
Apollopayment ->> Merchant: Инвойс
Merchant ->> Client: Ссылка на оплату

```
Note over Client: Выбирает монету/сеть оплаты
Note over Client: Отправляет монеты

Apollopayment -->> Merchant: Вебхук о поступлении платежа" %}
```

## Возможные статусы

| Статус      | Описание                                                                 |
| ----------- | ------------------------------------------------------------------------ |
| `INIT`      | Пользователь перешел к оплате                                            |
| `ERROR`     | Ошибка в процессе создания или обработки                                 |
| `PROCESSED` | Исполнен                                                                 |
| `PENDING`   | Ожидаение полной суммы или ожидание подтверждений транзакции в блокчейне |
| `EXPIRED`   | Скрок действия инвойса истек                                             |
| `PARTIAL`   | Частичная оплата                                                         |
| `OVERPAID`  | Счет был оплачен сверх указанной суммы                                   |
| `REJECTED`  | Инвойс отклонен, свяжитесь с поддержкой для уточнения                    |

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

Подробнее о вебхуке можно узнать в разделе **Webhooks**

## Срок жизни счета

Указанный срок жизни счета распространяется на промежут от *создания счета* и до *выбора плательщиком монет и сети для оплаты*

После выбора монеты и сети плательщиком будет создан ордер с максимальным временем жизни доступным выбранной сети.

Подробнее можно узнать в разделе ордеров.


# Создание счета на оплату

Метод позволяет создать счет на оплату без строгого указания монеты и сети, вы можете указать оплату 30 USD и список доступных к оплате монет/сетей, пользователь сам выберет в чем ему удобнее оплатить. Сумма автоматически пересчитается в выбранную монету для оплаты

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/make-invoice" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Запрос получения информации об инвойсе

Метод позволяет получить информацию об инвойсе

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/get-invoice" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка счетов

Метод позволяет получить список счетов

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/get-invoices" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Авто обмены

Функционал авто-обменов позволит вам делать выводы клиентам во всех доступных монетах и сетях.

Для начала работы вам необходимо создать PAY\_OUT адрес и выбрать его в качестве адреса для авто-обменов.\
Все операции будут расходовать средства с этого адреса для обмена в конечную монету и отправку клиенту.

Для создания авто-обмена вам достаточно указать какую монету и сеть хотите получить на выходе и адрес для отправки.

Для обмена вы можете указать как исходящую сумму, которую хотите потратить с адреса, так и конечную сумму, которую хотите получить.

* Если указываете исходящую сумму, то с адреса будет списана указанная сумма, но конечная сумма может измениться в результате обмена
* Если указываете конечную сумму, то на адресе будет заблокирована рассчетная сумма списания +5%, которая будет откорректирована в результате обмена

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

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

```
Note over Apollopayment: Совершение обмена

Apollopayment -->> Merchant: Вебхук с результатом обмена" %}
```


# Создание авто-обмена

Метод создает запрос на авто-обмен

На создание распространяются лимиты сумм:

* сумма должна быть **больше $20 в эквиваленте**
* сумма должна быть **в два раза больше комиссии сети конечной монеты/сети** (*см. метод получения доступных монет*)

## Описание параметров запроса

| Параметр      | Тип       | Обязательно | Описание                                           |
| ------------- | --------- | ----------- | -------------------------------------------------- |
| `address`     | `string`  | yes         | Адрес назначения                                   |
| `currency`    | `string`  | yes         | Монета к получению                                 |
| `network`     | `string`  | yes         | Сеть к получению                                   |
| `amountFrom`  | `string`  | no          | Сумма, которую хотите поменять и отправить         |
| `amountTo`    | `string`  | no          | Сумма, которую хотите получить                     |
| `feeInAmount` | `boolean` | no          | Закладывать комиссию сети в сумму обмена           |
| `webhookUrl`  | `string`  | no          | URL для отправки уведомлений при изменении статуса |

> Обязательно надо отправить один из параметров: `amountFrom` или `amountTo`\
> При указании двух параметров приоритет будет иметь `amountFrom`

### Закладывать комиссию сети в сумму обмена

Указывая параметр `feeInAmount` в значении `true` с адреса будет списана **указанная сумма + комиссия сети**

* Если указывате `amountFrom` - возможно проскальзывание конечной суммы `amountTo` (может отличаться от указаной после запроса создания)
* Если указываете `amountTo` - будет заблокирована расчетная сумма списания с адреса + процент для покрытия страховки проскальзывания.\
  После завершения обмена сумма будет откорректирована, до той, которая была израсходована для проведения обмена.\
  *Возможно небольшое проскальзывание (≈ 0.1%) конечной суммы из-за наложения фильтров обмена на сумму к получению*

## Описание параметров ответа

| Параметр               | Тип      | Описание                                                                           |
| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
| `id`                   | `string` | Идентификатор авто-обмена                                                          |
| `organizationId`       | `string` | Идентификатор организации                                                          |
| `status`               | `enum`   | Статус                                                                             |
| `currencyFrom`         | `string` | Исходящая монета адреса выбранного для проведения авто-обменов                     |
| `networkFrom`          | `string` | Исходящая сеть адреса выбранного для проведения авто-обменов                       |
| `currencyTo`           | `string` | Конечная монета, которая будет отправлена клиенту                                  |
| `networkTo`            | `string` | Конечная сеть, которая будет отправлена клиенту                                    |
| `amountFrom`           | `string` | Сумма потраченная для проведения операции                                          |
| `amountFromUSD`        | `string` | Сумма потраченная для проведения операции в пересчете к USD                        |
| `amountTo`             | `string` | Конечная сумма после обмена                                                        |
| `amountToUSD`          | `string` | Конечная сумма после обмена в пересчете к USD                                      |
| `amountToReceive`      | `string` | Сумма, которую получит клиент                                                      |
| `rate`                 | `string` | Курс обмена                                                                        |
| `blockchainFeeFrom`    | `string` | Комиссия сети за отправку монет провайдеру для совершения обмена                   |
| `blockchainFeeFromUSD` | `string` | Комиссия сети за отправку монет провайдеру для совершения обмена в пересчете к USD |
| `blockchainFeeTo`      | `string` | Комиссия сети за отправку монет от провайдера на адрес клиента                     |
| `blockchainFeeToUSD`   | `string` | Комиссия сети за отправку монет от провайдера на адрес клиента в пересчете к USD   |
| `serviceFee`           | `string` | Комиссия сервиса за проведение операции                                            |
| `webhookUrl`           | `string` | URL для отправки уведомления об изменении статуса                                  |
| `createdAt`            | `string` | Дата создания авто-обмена                                                          |
| `updatedAt`            | `string` | Дата последнего обновления изменения                                               |

Статусы:

| Статус        | Описание                            |
| ------------- | ----------------------------------- |
| `PENDING`     | В обработке                         |
| `WITHDRAWING` | Ожидание отправки на конечный адрес |
| `PROCESSED`   | Успешно                             |
| `REJECTED`    | Отклонен                            |
| `ERROR`       | Ошибка при обработке                |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/auto-swaps/create" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Поиск авто-обмена по ID

Получение данных авто-обмена по его ID

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/auto-swaps/get" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Выплаты 2.0

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

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

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

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

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

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

Apollopayment -->> 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"
}
```


# Создание авто-вывода

Метод создает запрос на авто-вывод

На создание распространяются лимиты сумм:

* сумма должна быть **больше $20 в эквиваленте**
* сумма должна быть **в два раза больше комиссии сети конечной монеты/сети** (*см. метод получения доступных монет*)

## Описание параметров запроса

| Параметр      | Тип       | Обязательно | Описание                                           |
| ------------- | --------- | ----------- | -------------------------------------------------- |
| `address`     | `string`  | yes         | Адрес назначения                                   |
| `currency`    | `string`  | yes         | Монета к получению                                 |
| `network`     | `string`  | yes         | Сеть к получению                                   |
| `amountFrom`  | `string`  | no          | Сумма, которую хотите поменять и отправить         |
| `amountTo`    | `string`  | no          | Сумма, которую хотите получить                     |
| `feeInAmount` | `boolean` | no          | Закладывать комиссию сети в сумму обмена           |
| `webhookUrl`  | `string`  | no          | URL для отправки уведомлений при изменении статуса |

> Обязательно надо отправить один из параметров: `amountFrom` или `amountTo`\
> При указании двух параметров приоритет будет иметь `amountFrom`

### Закладывать комиссию сети в сумму обмена

Указывая параметр `feeInAmount` в значении `true` с адреса будет списана **указанная сумма + комиссия сети**

* Если указывате `amountFrom` - возможно проскальзывание конечной суммы `amountTo` (может отличаться от указаной после запроса создания)
* Если указываете `amountTo` - будет заблокирована расчетная сумма списания с адреса + процент для покрытия страховки проскальзывания.\
  После завершения обмена сумма будет откорректирована, до той, которая была израсходована для проведения обмена.\
  *Возможно небольшое проскальзывание (≈ 0.1%) конечной суммы из-за наложения фильтров обмена на сумму к получению*

### Дополнительное подтверждение

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

В теле вебхука будет указан пользователь запросивший вывод, запрошенная сумма, запрошенная монет и пересчет к выбранной для вывода монете.\
Вы можете подтвердить или отклонить вывод отправил соответствующее значение в запросе

Дополнительные поля в теле ответа:

| Имя                               | Описание                                                              |
| --------------------------------- | --------------------------------------------------------------------- |
| `approveUrl`                      | Урл отправки вебхука для подтверждения                                |
| `approveResult`                   | Данные о подтверждении                                                |
| `approveResult.apiKey`            | Данные об API-ключе                                                   |
| `approveResult.apiKey.public`     | Публичная часть API-ключа, с которого пришло подтверждение            |
| `approveResult.request`           | Данные о запросе                                                      |
| `approveResult.request.ip`        | IP адрес, с которого пришел запрос                                    |
| `approveResult.request.userAgent` | User-Agent, с которого пришел запрос                                  |
| `approveResult.approve`           | Подтвержден или отклонен                                              |
| `approveResult.time`              | Время запроса                                                         |
| `requestedClientId`               | Идентификатор пользователя в системе мерчанта, который запросил вывод |
| `requestedCurrency`               | Запрошенная монета при создании вывода                                |
| `requestedAmount`                 | Запрошенная сумма при создании вывода                                 |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/auto-withdrawals/create" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Поиск авто-вывода по ID

Получение данных авто-вывода по его ID

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/auto-withdrawals/get" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Дополнительное подтверждение вывода

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

В теле вебхука будет указан пользователь, запросивший вывод, запрошенная сумма, запрошенная монет и пересчет к выбранной для вывода монете.\
Вы можете подтвердить или отклонить вывод отправил соответствующее значение в запросе

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/auto-withdrawals/approve" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Мост

Кроссчейн мост - это обмен актива между сетями. Например у вас есть **USDT** в сети **Ethereum**, а вы хотите чтоб они были в сети **Tron**.

Для проведения обмена актива между сетями необходимо убедить что эта услуга доступна в выбранных вами сетях. Для этого запросите [список доступных монет](#95445bae-0a11-4a88-8c6c-84323c840424), найдите нужную вам монету, у нее будет список сетей `networks`, убедитесь что у нужных вам сетей флаг `allowCrosschainBridge` раняется `true`

Узнайте [допустимый лимит](#8c4e1ce5-7060-4204-99e7-efb5c1ed441e) для суммы операции. Обратите внимание, что суммы лимитов указаны в **USD**, курсы таких стейблкойнов как **USDT**, **BUSD** etc не значительно отличаются от курса **USD**, а если вы хотите обменять другую монету, то вам надо будет получить курс к **USD** чтоб убедиться что ваша сумма удовлетворяет указанным лимитам.

Запросите [превью комиссии](#fd67b275-4134-45fa-b55c-6b5e194c2bb2) чтобы получить `token`, его надо будет указать при [запросе создания операции](#ba429068-ddd5-4e4f-a296-0b9bb27da935) как `feeToken`.

Операция не исполняется сразу после запроса, необходимо подождать 1-3 минуты. Вы можете самостоятельно [узнать статус исполнения операции](#9ce98d0a-6568-43b2-aab5-7345cbe19a9d), а можете указать URL для получения [вебхука](#webhooks) в поле `webhookUrl` при создании.

Доступные статусы

| **Статус** | **Описание**                 |
| ---------- | ---------------------------- |
| CREATED    | Запрос зарегистрирован       |
| PENDING    | Обрабатывается               |
| ERROR      | Ошибка в процессе исполнения |
| REJECTED   | Запрос отклонен              |
| PROCESSED  | Успех                        |

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

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Apollopayment: Запрос токена комиссии
Apollopayment ->> Merchant: Токен комиссии
Merchant ->> Apollopayment: Создание операции
Apollopayment ->> Merchant: Тело операции

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

Apollopayment -->> Merchant: Вебхук с результатом операции" %}
```


# Получение лимиов для кроссчейн перевода

Метод позволяет получить лимиты для суммы блокчейн перевода

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/bridge/limit" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение информации о кроссчейн переводе

Метод позволяет получить информацию по ранее созданному кроссчейн переводу

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/bridge/get" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Формирование токена комисси

Метод позволяет получить токен комиссии для проведения кроссчейн перевода

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/bridge/fee-token" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание кроссчейн перевода

Метод позволяет создать кроссчейн перевод. Кроссчейн перевод позволяет перевести свои активы из одной сети в другую

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/bridge/create" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Обмены

Кроссчейн обмен - это обмен одного актива на другой.

Для проведения обмена актива необходимо убедить что эта услуга доступна в выбранных вами сетях. Для этого запросите [список доступных монет](#95445bae-0a11-4a88-8c6c-84323c840424), найдите нужную вам монету, у нее будет список сетей `networks`, убедитесь что у сети актива, который вы хотите обменять флаг `allowCrosschainSwapFrom` раняется `true`, а у сети актива, который хотите получить `allowCrosschainSwapTo` равняется `true`.

Например:\
У вас есть **ETH** в сети **Ethereum**, в списте доступных монет вы должны найти монету **ETH**, далее у нее в списке `networks` найти сеть `ethereum` у нее должно быть `"allowCrosschainSwapFrom": true`

```json
{
  "success": true,
  "response": [
    ...
    {
      "currency": "ETH",
      ...
      "networks": [
        ...
        {
          "name": "ethereum",
          ...
          "allowCrosschainSwapFrom": true,
          ...
        }
        ...
      ]
    },
    ...
  ]
}

```

Вы хотети обменять его в **USDT** в сети **Tron**, в списте доступных монет вы должны найти монету **USDT**, далее у нее в списке `networks` найти сеть `tron` у нее должно быть `"allowCrosschainSwapTo": true`

```json
{
  "success": true,
  "response": [
    ...
    {
      "currency": "USDT",
      ...
      "networks": [
        ...
        {
          "name": "tron",
          ...
          "allowCrosschainSwapTo": true,
          ...
        }
        ...
      ]
    },
    ...
  ]
}

```

Узнайте [допустимый лимит](#8a0a5146-91bc-46f3-9b23-4afe6cbeca07) для суммы операции. Обратите внимание, что суммы лимитов указаны в **USD**, курсы таких стейблкойнов как **USDT**, **BUSD** etc не значительно отличаются от курса **USD**, а если вы хотите обменять другую монету, то вам надо будет получить курс к **USD** чтоб убедиться что ваша сумма удовлетворяет указанным лимитам.

Запросите [превью комиссии](#a620e864-114e-4a45-9a44-3a0522a6d7dc) чтобы получить `token`, его надо будет указать при [запросе создания операции](#b017e259-d4e7-41f7-ad60-d536fac2f14f) как `feeToken`.

Операция не исполняется сразу после запроса, необходимо подождать 1-3 минуты. Вы можете самостоятельно [узнать статус исполнения операции](#1566d2f4-6218-4235-9d15-29c0de888e55), а можете указать URL для получения [вебхука](#webhooks) в поле `webhookUrl` при создании.

Доступные статусы

| **Статус** | **Описание**                 |
| ---------- | ---------------------------- |
| CREATED    | Запрос зарегистрирован       |
| PENDING    | Обрабатывается               |
| ERROR      | Ошибка в процессе исполнения |
| REJECTED   | Запрос отклонен              |
| PROCESSED  | Успех                        |

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

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Apollopayment: Запрос токена комиссии
Apollopayment ->> Merchant: Токен комиссии
Merchant ->> Apollopayment: Создание операции
Apollopayment ->> Merchant: Тело операции

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

Apollopayment -->> Merchant: Вебхук с результатом операции" %}
```


# Получение лимитов для кроссчейн обмена

Метод позволяет получить лимиты для суммы блокчейн обмена

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/swaps/limit" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение информации о кроссчейн обмене

Метод позволяет получить информацию по ранее созданному кроссчейн обмена

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/swaps/get" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Формирование токена комисси

Метод позволяет получить токен комиссии для проведения кроссчейн обмена

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/swaps/fee-token" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание кроссчейн обмена

Метод позволяет создать кроссчейн обмен. Кроссчейн обмен позволяет обменять один актив на другой

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/swaps/create" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Рекуррентные платежи

Алгоритм взаимодействия с методами из раздела "Рекурренты" и подключения подписчиков к сервису.

1. В личном кабинете, в разделе "Рекурренты" необходимо создать мерчанта
2. На страничке мерчанта будет доступен его идентификатор. Далее в методах API он должен передаваться в обязательном порядке в поле `merchantId`
3. Вызывается метод создания ссылки для привязки платежного метода (create-subscriber-billing-link)
4. Полученную в ответе ссылку необходимо отправить пользователю
5. Пользователь переходит по ссылке и с помощью подключения своего кошелька (web3) привязывает к сервису свой адрес с определенной сетью и токеном
6. После успешного создания платежной связки на указанный `webhookUrl` придет информация о созданной связке

Затем платежную связку можно использовать двумя способами:

* Создать подписку (назначить периодическое списание) - списание фиксированной суммы в указанный период
* Вызывать метод свободного списания - по запросу списать указанную сумму с адреса пользователя

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

### Подключение пользователя

{% @mermaid/diagram content="sequenceDiagram
Client ->> Merchant: Запрос платежа
Merchant ->> Apollopayment: Запрос создание платежной связки
Apollopayment ->> Merchant: Ссылка для создания платежной связки
Merchant ->> Client: Ссылка для создания платежной связки

```
Note over Client: Переходит по ссылке
Note over Client: Привязывает свой кошелек

Apollopayment -->> Merchant: Вебхук с данными о платежной связке

Note over Merchant: Сохранить ID платежной связки для дальнейшего взаимодействия" %}
```

### Создание подписки

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

{% @mermaid/diagram content="sequenceDiagram
Client ->> Merchant: Выбирает подписку

```
Note over Merchant: Получить доступные платежные связки пользователя
Note over Merchant: Выбрать связку с подходящей монетой/сетью, которую ранее создал пользователь

Merchant ->> Apollopayment: Создание подписки
Apollopayment ->> Merchant: Данные подписки
Merchant ->> Client: Уведомление об успешном создании подписки

Note over Apollopayment: Попытка оплаты с кошелька пользователя

Apollopayment -->> Merchant: Вебхук об изменении статуса подписки
Merchant ->> Client: Уведомление об успешной оплате или об ошибке при оплате" %}
```

### Свободный платеж

{% @mermaid/diagram content="sequenceDiagram
Merchant ->> Apollopayment: Создание платежа
Apollopayment ->> Merchant: Тело платежа

```
Note over Apollopayment: Попытка оплаты с кошелька пользователя

Apollopayment -->> Merchant: Вебхук об изменении статуса платежа" %}
```


# Создание платежной связки

Метод создает временную ссылку для подключения пользователя. Пользователь должен перейти по ссылку и дать разрешение на трату монет с его адреса. После этого вы получите вебхук со статусом и идентификатором платежной связки

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/create-subscriber-billing-link" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение платежной связки

Метод позволяет получить данные платежной связки

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/get-billing-link" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение платежных связок по пользователю

Метод позволяет получить список платежных связок по конкретному пользователю

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/get-billing-links-by-subscriber" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Отключение платежной связки

Метод позволяет отключить платежную связку. Вы больше не сможете подключать подписки и производить платежи по этой платежной связке

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/disable-subscriber-billing-link" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание подписки

Метод позволяет подключить подписку

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/create-subscription" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение подписки

Метод позволяет получить информацию о подписке

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/get-subscription" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Отключение подписки

Метод позволяет отключить ранее подключенную подписку

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/cancel-subscription" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание платежа

Метод позволяет создать платеж с произвольной суммой в монете, в которой был подключен адрес

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/recurrents/make-payment" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# KYT


# Проверка рисков транзакции

Метод позволяет проверить риски совершенной транзакции.

Данный запрос может выполняться несколько секунд. Не рекомендуется ставить timeout меньше 15 секунд.

### Запрос:

| **Параметр**  | **Обязателен** | **Тип** | **Описание**                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------- | -------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| tx            | Да             | Строка  | Хеш транзакции                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| currency      | Да             | Строка  | Монета                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| network       | Да             | Строка  | Сеть                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| outputAddress | Да             | Строка  | Адрес-получатель монет                                                                                                                                                                                                                                                                                                                                                                                                                                |
| direction     | Да             | Строка  | <p>Сторона для проверки рисков. Принимает значение <code>sent</code> или <code>received</code>.<br><br>Значение <code>sent</code> следует передавать, если была совершена транзакция вывода с вашего адреса: тогда будут проверены риски совершенной транзакции со стороны отправителя<br><br>Значение <code>received</code> следует передавать, если был совершен депозит на ваш адрес: тогда будут проверены риски получения монет на ваш адрес</p> |

### Ответ:

| **Параметр**         | **Тип**         | **Описание**                                                                                                                                                                                                                                                              |
| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| level                | Строка          | Уровень риска                                                                                                                                                                                                                                                             |
| categories           | Строка          | Массив с разбиением риска по категориям                                                                                                                                                                                                                                   |
| categories.level     | Строка          | Уровень риска в этой категории                                                                                                                                                                                                                                            |
| categories.usdAmount | Число           | Сумма в USD, которая связана с этой категорией риска                                                                                                                                                                                                                      |
| categories.category  | Строка или null | Название категории                                                                                                                                                                                                                                                        |
| categories.service   | Строка или null | Сервис, который связан с данной категорией риска                                                                                                                                                                                                                          |
| categories.exposure  | Строка          | <p><code>DIRECT</code> - прямая связь ("грязные" монеты были отправлены с адреса злоумышленника на адрес получателя напрямую)<br><br><code>INDIRECT</code> - косвенная связь (полученные монеты когда-то были помечены рискованными, но прошли через цепочку адресов)</p> |

Параметр `level` может принимать следующие значения:

* `white` - нет риска
* `green` - минимальный риск
* `yellow` - средний риск
* `red` - высокий риск
* `black` - критический риск

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/kyt/check-transfer" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Проверка рисков вывода

Метод позволяет проверить риски вывода, перед его совершением.

Данный запрос может выполняться несколько секунд. Не рекомендуется ставить timeout меньше 15 секунд.

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**           |
| ------------ | -------------- | ------- | ---------------------- |
| currency     | Да             | Строка  | Монета                 |
| network      | Да             | Строка  | Сеть                   |
| address      | Да             | Строка  | Адрес-получатель монет |
| amount       | Да             | Строка  | Сумма вывода           |

### Ответ:

| **Параметр**         | **Тип**         | **Описание**                                                                                                                                                                                                                                                              |
| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| level                | Строка          | Уровень риска                                                                                                                                                                                                                                                             |
| categories           | Строка          | Массив с разбиением риска по категориям                                                                                                                                                                                                                                   |
| categories.level     | Строка          | Уровень риска в этой категории                                                                                                                                                                                                                                            |
| categories.usdAmount | Число           | Сумма в USD, которая связана с этой категорией риска                                                                                                                                                                                                                      |
| categories.category  | Строка или null | Название категории                                                                                                                                                                                                                                                        |
| categories.service   | Строка или null | Сервис, который связан с данной категорией риска                                                                                                                                                                                                                          |
| categories.exposure  | Строка          | <p><code>DIRECT</code> - прямая связь ("грязные" монеты были отправлены с адреса злоумышленника на адрес получателя напрямую)<br><br><code>INDIRECT</code> - косвенная связь (полученные монеты когда-то были помечены рискованными, но прошли через цепочку адресов)</p> |

Параметр `level` может принимать следующие значения:

* `white` - нет риска
* `green` - минимальный риск
* `yellow` - средний риск
* `red` - высокий риск
* `black` - критический риск

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/kyt/check-withdrawal-address" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Проверка риска вывода на указанный адрес

Метод позволяет получить информацию об уровне риска вывода на адрес

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/kyt/withdrawal-address-screening" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Партнерское API


# Создание пользователя

Метод позволяет создать пользователя. Если пользователь с таким `email`, уже зарегистрирован - метод вернет соответствующую ошибку.

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**       |
| ------------ | -------------- | ------- | ------------------ |
| email        | Да             | Строка  | Email пользователя |

### Ответ:

| **Параметр** | **Тип**         | **Описание**                                              |
| ------------ | --------------- | --------------------------------------------------------- |
| id           | Строка          | Идентификатор пользователя                                |
| email        | Строка          | Email пользователя                                        |
| password     | Строка          | Сгенерированный пароль (показывается только при создании) |
| lastLoginAt  | Строка или null | Дата последнего входа пользователя через веб интерфейс    |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/create-user" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение пользователя

Метод позволяет получить пользователя

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**               |
| ------------ | -------------- | ------- | -------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя |

### Ответ:

| **Параметр** | **Тип**         | **Описание**                                                                 |
| ------------ | --------------- | ---------------------------------------------------------------------------- |
| id           | Строка          | Идентификатор пользователя                                                   |
| email        | Строка          | Email пользователя                                                           |
| utm          | Строка или null | Данные о utm-метке (если пользователь зарегистрировался через веб интерфейс) |
| createdAt    | Строка          | Дата регистрации пользователя                                                |
| confirmedAt  | Строка или null | Дата подтверждения почты пользователя                                        |
| lastLoginAt  | Строка          | Дата последнего входа пользователя через веб интерфейс                       |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-user" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение всех пользователей

Метод позволяет получить всех пользователей

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**                               |
| ------------ | -------------- | ------- | ------------------------------------------ |
| userId       | Да             | Строка  | Идентификатор пользователя                 |
| limit        | Да             | Число   | Лимит на количество пользователей в ответе |
| offset       | Да             | Число   | Сдвиг (для пагинации)                      |

### Ответ:

| **Параметр** | **Тип** | **Описание**                   |
| ------------ | ------- | ------------------------------ |
| users        | Массив  | Массив объектов пользователя   |
| total        | Число   | Общее количество пользователей |

**Объект пользователя:**

| **Параметр** | **Тип**         | **Описание**                                                                 |
| ------------ | --------------- | ---------------------------------------------------------------------------- |
| id           | Строка          | Идентификатор пользователя                                                   |
| email        | Строка          | Email пользователя                                                           |
| utm          | Строка или null | Данные о utm-метке (если пользователь зарегистрировался через веб интерфейс) |
| createdAt    | Строка          | Дата регистрации пользователя                                                |
| confirmedAt  | Строка или null | Дата подтверждения почты пользователя                                        |
| lastLoginAt  | Строка          | Дата последнего входа пользователя через веб интерфейс                       |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-users" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание организации

Метод позволяет создать организацию для пользователя

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/create-user-organization" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение списка организаций

Метод позволяет получить список организаций

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-user-organizations" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение авансовых балансов пользователя

Метод позволяет получить авансовые балансы пользователя

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**               |
| ------------ | -------------- | ------- | -------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя |

### Ответ:

| **Параметр**                  | **Тип**      | **Описание**                                              |
| ----------------------------- | ------------ | --------------------------------------------------------- |
| advancedBalanceId             | Строка       | Идентификатор авансового баланса                          |
| currency                      | Строка       | Монета баланса                                            |
| balance                       | Строка       | Баланс                                                    |
| availableCurrenciesForDeposit | Массив строк | Массив монет, доступных для пополнения авансового баланса |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-organization-advanced-balances" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Пополнение авансового баланса пользователя

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

### Запрос:

| **Параметр**      | **Обязателен** | **Тип** | **Описание**                                                                                                         |
| ----------------- | -------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| userId            | Да             | Строка  | Идентификатор пользователя                                                                                           |
| advancedBalanceId | Да             | Строка  | Идентификатор авансового баланса                                                                                     |
| amount            | Да             | Строка  | Сумма пополнения. Число должно содержать не больше двух знаков после запятой (т.е. '5.25' подходит, а '5.529' - нет) |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/top-up-advanced-balance" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение общих тарифов

Метод позволяет получить все общие тарифы на сервисе. Если для пользователя не указан индивидуальный тариф, то при списании комиссии применяется общий тариф для всех пользователей

### Ответ:

В ответе представлен массив объектов тарифов:

| **Параметр** | **Тип**         | **Описание**                                                                                                                                                                                        |
| ------------ | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id           | Строка          | Идентификатор тарифа                                                                                                                                                                                |
| action       | Строка          | Целевое действие по тарифу                                                                                                                                                                          |
| amount       | Строка          | Доля комиссии от суммы операции (например, 0.01 означает комиссию в 1% от суммы операции)                                                                                                           |
| minAmount    | Строка или null | <p>Минимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не менее чем <code>minAmount</code>)<br><br><code>null</code> - без ограничений</p>  |
| maxAmount    | Строка или null | <p>Максимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не более чем <code>maxAmount</code>)<br><br><code>null</code> - без ограничений</p> |

Параметр `action` может принимать следующие значения:

| **Тариф**             | **Описание**                                 |
| --------------------- | -------------------------------------------- |
| INTERNAL\_TRANSFER    | Внутренний перевод                           |
| ORDER\_DEPOSIT        | Пополнение по ордеру                         |
| WALLET\_DEPOSIT       | Пополнение кошелька                          |
| WALLET\_WITHDRAWAL    | Вывод с кошелька                             |
| PAYOUT\_DEPOSIT       | Пополнение выплатного баланса                |
| PAYOUT\_WITHDRAWAL    | Вывод с выплатного баланса                   |
| PERSONAL\_DEPOSIT     | Пополнение персональных адресов              |
| PERSONAL\_WITHDRAWAL  | Вывод с персонального адреса                 |
| COLLECT\_WITHDRAWAL   | Вывод с головного адреса                     |
| RECURRENT\_DEPOSIT    | Пополнение рекурентного адреса (по подписке) |
| RECURRENT\_WITHDRAWAL | Вывод с рекурентного адреса                  |
| BRIDGE\_INTERNAL      | Блокчейн мост                                |
| BRIDGE\_EXTERNAL      | Блокчейн мост через API                      |
| EXCHANGE\_INTERNAL    | Обмен                                        |
| EXCHANGE\_AUTO        | Обмен через API                              |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-default-tariffs" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание/обновление индивидуального тарифа

Метод позволяет создать или обновить индивидуальный тариф.

Если для данного `userId` и `action` уже существует тариф, то остальные указанные данные перезапишут этот тариф

### Запрос:

| **Параметр** | **Обязателен** | **Тип**         | **Описание**                                                                                                                                                                                        |
| ------------ | -------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| userId       | Да             | Строка          | Идентификатор пользователя                                                                                                                                                                          |
| action       | Да             | Строка          | Целевое действие по тарифу                                                                                                                                                                          |
| amount       | Да             | Строка          | Доля комиссии от суммы операции (например, 0.01 означает комиссию в 1% от суммы операции)                                                                                                           |
| minAmount    | Нет            | Строка или null | <p>Минимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не менее чем <code>minAmount</code>)<br><br><code>null</code> - без ограничений</p>  |
| maxAmount    | Нет            | Строка или null | <p>Максимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не более чем <code>maxAmount</code>)<br><br><code>null</code> - без ограничений</p> |
| comment      | Нет            | Строка или null | Пользовательский комментарий/заметка для тарифа                                                                                                                                                     |

Параметр `action` может принимать следующие значения:

| **Тариф**             | **Описание**                                 |
| --------------------- | -------------------------------------------- |
| INTERNAL\_TRANSFER    | Внутренний перевод                           |
| ORDER\_DEPOSIT        | Пополнение по ордеру                         |
| WALLET\_DEPOSIT       | Пополнение кошелька                          |
| WALLET\_WITHDRAWAL    | Вывод с кошелька                             |
| PAYOUT\_DEPOSIT       | Пополнение выплатного баланса                |
| PAYOUT\_WITHDRAWAL    | Вывод с выплатного баланса                   |
| PERSONAL\_DEPOSIT     | Пополнение персональных адресов              |
| PERSONAL\_WITHDRAWAL  | Вывод с персонального адреса                 |
| COLLECT\_WITHDRAWAL   | Вывод с головного адреса                     |
| RECURRENT\_DEPOSIT    | Пополнение рекурентного адреса (по подписке) |
| RECURRENT\_WITHDRAWAL | Вывод с рекурентного адреса                  |
| BRIDGE\_INTERNAL      | Блокчейн мост                                |
| BRIDGE\_EXTERNAL      | Блокчейн мост через API                      |
| EXCHANGE\_INTERNAL    | Обмен                                        |
| EXCHANGE\_AUTO        | Обмен через API                              |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/set-organization-tariff" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение индвидуальных тарифов

Метод позволяет получить все индивидуальные тарифы. Если для пользователя указан индвидуальный тариф, то комиссия по указанной операции будет списываться по индивидуальному тарифу

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**               |
| ------------ | -------------- | ------- | -------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя |

### Ответ:

В ответе представлен массив объектов тарифов:

| **Параметр**      | **Тип**         | **Описание**                                                                                                                                                                                        |
| ----------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                | Строка          | Идентификатор тарифа                                                                                                                                                                                |
| advancedBalanceId | Строка          | Идентификатор авансового баланса пользователя                                                                                                                                                       |
| action            | Строка          | Целевое действие по тарифу                                                                                                                                                                          |
| amount            | Строка          | Доля комиссии от суммы операции (например, 0.01 означает комиссию в 1% от суммы операции)                                                                                                           |
| minAmount         | Строка или null | <p>Минимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не менее чем <code>minAmount</code>)<br><br><code>null</code> - без ограничений</p>  |
| minAmount         | Строка или null | <p>Максимальная комиссия, для списания (например, при совершении операции будет списан 1% от суммы операции, но не более чем <code>maxAmount</code>)<br><br><code>null</code> - без ограничений</p> |
| comment           | Строка или null | Комментарий/заметка к тарифу                                                                                                                                                                        |
| createdAt         | Строка          | Дата создания тарифа                                                                                                                                                                                |
| updatedAt         | Строка          | Дата обновление тарифа                                                                                                                                                                              |

Параметр `action` может принимать следующие значения:

| **Тариф**             | **Описание**                                 |
| --------------------- | -------------------------------------------- |
| INTERNAL\_TRANSFER    | Внутренний перевод                           |
| ORDER\_DEPOSIT        | Пополнение по ордеру                         |
| WALLET\_DEPOSIT       | Пополнение кошелька                          |
| WALLET\_WITHDRAWAL    | Вывод с кошелька                             |
| PAYOUT\_DEPOSIT       | Пополнение выплатного баланса                |
| PAYOUT\_WITHDRAWAL    | Вывод с выплатного баланса                   |
| PERSONAL\_DEPOSIT     | Пополнение персональных адресов              |
| PERSONAL\_WITHDRAWAL  | Вывод с персонального адреса                 |
| COLLECT\_WITHDRAWAL   | Вывод с головного адреса                     |
| RECURRENT\_DEPOSIT    | Пополнение рекурентного адреса (по подписке) |
| RECURRENT\_WITHDRAWAL | Вывод с рекурентного адреса                  |
| BRIDGE\_INTERNAL      | Блокчейн мост                                |
| BRIDGE\_EXTERNAL      | Блокчейн мост через API                      |
| EXCHANGE\_INTERNAL    | Обмен                                        |
| EXCHANGE\_AUTO        | Обмен через API                              |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-organization-tariffs" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Создание API ключа

Метод позволяет создать API ключ для пользователя

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**               |
| ------------ | -------------- | ------- | -------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя |
| alias        | Да             | Строка  | Название API ключа         |

### Ответ:

| **Параметр** | **Тип** | **Описание**            |
| ------------ | ------- | ----------------------- |
| id           | Строка  | Идентификатор API ключа |
| public       | Строка  | Публичный ключ          |
| secret       | Строка  | Приватный ключ          |
| alias        | Строка  | Название API ключа      |
| createdAt    | Строка  | Дата создания ключа     |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/create-api-keys" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение API ключей

Метод позволяет получить API ключи пользователя

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**                        |
| ------------ | -------------- | ------- | ----------------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя          |
| limit        | Да             | Число   | Лимит на количество ключей в ответе |
| offset       | Да             | Число   | Сдвиг (для пагинации)               |

### Ответ:

| **Параметр** | **Тип**         | **Описание**                             |
| ------------ | --------------- | ---------------------------------------- |
| keys         | Массив объектов | Массив объектов API ключей               |
| total        | Число           | Общей количество API ключей пользователя |

Параметр `keys` является массивом следующих объектов:

| **Параметр** | **Тип** | **Описание**            |
| ------------ | ------- | ----------------------- |
| id           | Строка  | Идентификатор API ключа |
| public       | Строка  | Публичный ключ          |
| secret       | Строка  | Часть приватного ключа  |
| alias        | Строка  | Название API ключа      |
| createdAt    | Строка  | Дата создания ключа     |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/get-api-keys" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Удаление API ключа

Метод позволяет удалить API ключ пользователя

### Запрос:

| **Параметр** | **Обязателен** | **Тип** | **Описание**               |
| ------------ | -------------- | ------- | -------------------------- |
| userId       | Да             | Строка  | Идентификатор пользователя |
| keyId        | Да             | Строка  | Идентификатор ключа        |

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/partner/api/delete-api-keys" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Вебхуки


# Получение вебхука

Метод позволяет получить оригинальное тело вебхука.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/webhooks/get" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Получение вебхука (расширенный)

Метод позволяет получить полную информацию по вебхуку.

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/webhooks/get-verbose" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}


# Сиротские транзакции

В этом разделе представлены методы для получения и вывода сиротских транзакций.

**Сиротские транзакции** - это транзакции случайно отправленный на адрес, который\
был создан для другой монеты.

При обнаружении такой транзакции вы можете вывести полученные монеты на указанный адрес.\
У транзакций есть две стадии `DEPOSIT` и `WITHDRAWAL`. Вывод можно создать когда транзакция\
находиться на стадии `DEPOSIT` и в статусе `PROCESSED`, так же в теле транзакции есть параметр`canWithdrawal` на который можно ориентироваться при попытке вывода.

После вывода вам придет вебхук на указанный URL при запросе вывода (тело вебхука будет идентично телу вывода).\
Так же в теле сиротской транзакции появится исходящая транзакция в поле `outTransaction`

## Описание полей транзакции

| Поле             | Описание                                                                               |
| ---------------- | -------------------------------------------------------------------------------------- |
| `id`             | Идентификатор транзакции в системе                                                     |
| `organizationId` | Идентификатор организации, которой принадлежит адрес                                   |
| `orderId`        | Идентификатор ордера, к которому был привязан адрес в момент обнаружения транзакции    |
| `stage`          | Текущая стадия транзакции. Доступно 2 значени: `DEPOSIT` и `WITHDRAWAL`                |
| `status`         | Статус текущей стадии тразакции                                                        |
| `message`        | Сообщение при отклонении операции                                                      |
| `currency`       | Монета транзакции                                                                      |
| `network`        | Сеть транзакции                                                                        |
| `amount`         | Сумма транзакции                                                                       |
| `canWithdrawal`  | Доступен ли вывод монет. (Доступно только на стадии `DEPOSIT` и в статусе `PROCESSED`) |
| `inTransaction`  | Данные входящей транзакции                                                             |
| `outTransaction` | Данные исходящей транзакции если был запрошен вывод                                    |
| `createdAt`      | Дата обноружения транзакции                                                            |

***

Входящая тразакция:

| Поле          | Описание                                 |
| ------------- | ---------------------------------------- |
| `addressType` | Тип адреса, на который пришла транзакция |
| `addressId`   | Идентификатор адреса в системе           |
| `address`     | Адрес в блокчейне                        |
| `txId`        | Идентификатор транзакции в блокчейне     |
| `amount`      | Сумма транзакции                         |
| `status`      | Статус транзакции                        |
| `createdAt`   | Дата обнарущения транзакции              |

Исходящая тразакция тразакция:

| Поле           | Описание                                      |
| -------------- | --------------------------------------------- |
| `address`      | Адрес в блокчейне                             |
| `txId`         | Идентификатор транзакции в блокчейне          |
| `amount`       | Сумма транзакции                              |
| `status`       | Статус транзакции                             |
| `feeAmount`    | Комиссия сети за транзакцию                   |
| `feeAmountUSD` | Комиссия сети за транзакцию в пересчете к USD |
| `withdrawalId` | Идентификатор вывода в системе                |
| `createdAt`    | Дата создания запроса на вывод                |

***

Описание поля `addressType`:

| Значение    | Описание                        |
| ----------- | ------------------------------- |
| `PAY_IN`    | Адрес для платежей              |
| `PAY_OUT`   | Выплатной адрес                 |
| `BUSINESS`  | Бизнек кошелек                  |
| `RECURRENT` | Адрес для рекуррентных платежей |
| `PERSONAL`  | Персональный адрес              |

Описание поля `status`:

| Значение    | Описание                          |
| ----------- | --------------------------------- |
| `init`      | Транзакция была создана в системе |
| `processed` | Успешно обработана                |
| `error`     | Ошибка в процессе обработки       |
| `rejected`  | Отклонена системой                |
| `pending`   | В процессе обработки              |

***

Стадии транзакции:

| Стадия       | Описание                                                                           |
| ------------ | ---------------------------------------------------------------------------------- |
| `DEPOSIT`    | Был получен депозит, для вывода необходимо дождаться перехода в статус `PROCESSED` |
| `WITHDRAWAL` | Был запрошен вывод полученных монет.                                               |

***

Статусы транзакции:

| Статус      | Описание                                                                                                                                                             |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PENDING`   | Операция в процессе исполнения. Для стадии `DEPOSIT` - ожидание подтверждений входящей транзакции. Для стадии `WITHDRAWAL` - ожидание отправки транзакции в блокчейн |
| `PROCESSED` | Операция успешно исполнена. Для стадии `DEPOSIT` - входящая транзакция подтверждена. Для стадии `WITHDRAWAL` - транзакция успешно отправлена                         |
| `ERROR`     | Ошибка при обработке операции                                                                                                                                        |
| `REJECTED`  | Операция отклонена                                                                                                                                                   |

## Токен комиссии

Для запроса токена комиссии необходимо указать идентификатор сиротской транзкции. Токен формируется для сумма, которая пришла на адрес в полном обьеме.

| Поле               | Описание                                                                                           |
| ------------------ | -------------------------------------------------------------------------------------------------- |
| `currency`         | Монета вывода                                                                                      |
| `network`          | Сеть вывода                                                                                        |
| `feeSource`        | Источник списания комиссии. Доступно 2 значения: `ADDRESS`, `ADVANCE`                              |
| `blockchainFee`    | Комиссия сети в монете транзакции                                                                  |
| `blockchainFeeUSD` | Комиссия сети в пересчете к USD                                                                    |
| `serviceFee`       | Комиссия сервиса                                                                                   |
| `serviceFeeUSD`    | Комиссия сервиса в USD                                                                             |
| `amount`           | Сумма вывода                                                                                       |
| `amountTo`         | Сумма, которую получит исходящий адрес после вывода (за вычетом комиссий при `feeSource: ADDRESS`) |
| `price`            | Курс пересчета комиссии сети к USD                                                                 |
| `token`            | Токена вывода                                                                                      |
| `expiresAt`        | Дата истечения токена                                                                              |

***

Описание поля `feeSource`:

| Значение  | Описание                                                                                                                                                            |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ADDRESS` | Источник списания комиссии сети за вывод - адрес. В данном случае `blockchainFee` будет взята из суммы вывода, поэтому поля `amount` и `amountTo` будут отличаться. |
| `ADVANCE` | Источник списания комиссии сети за вывод - авансовый баланс. В данном случае с авансового баланса будет списана `blockchainFeeUSD` + `blockchainFeeUSD`.            |


# Получение транзакции

Получение информации о сиротской транзакции по ее ID

{% openapi src="/files/X1afO3tUwak9QdphOSjI" path="/api-gateway/orphan-deposits/get-deposit" method="post" %}
[openapi.json](https://2137468372-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyOhoj9DD5mXL8tljp4Kp%2Fuploads%2Fgit-blob-c7502c7186093d67358d3eddf6a9a3abb7fd07f9%2Fopenapi.json?alt=media)
{% endopenapi %}




---

[Next Page](/llms-full.txt/1)

