> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meridian.vip/llms.txt
> Use this file to discover all available pages before exploring further.

# Вывод средств

## Обзор

Заявки на вывод средств позволяют мерчантам переводить накопленные USDT с основного баланса Meridian на свой криптокошелек. Средства замораживаются сразу при создании заявки и выводятся после одобрения администратором.

<Info>
  **Статус заявки**: Заявка проходит этапы `pending` → `completed` (или `cancelled` при отклонении).
</Info>

<Warning>
  **Доступный баланс**: Вы можете выводить только доступный баланс (основной минус замороженный). Замороженные средства включают активные заявки на вывод и суммы по открытым спорам.
</Warning>

<Note>
  **Комиссия за вывод**: Каждый мерчант имеет индивидуальную комиссию за вывод средств. Комиссия вычитается из запрошенной суммы. В ответе указывается размер комиссии и итоговая сумма перевода.
</Note>

***

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

Endpoint для создания заявки на вывод средств:

```
POST https://api.meridian.vip/api/v1/merchants/withdraw
```

### Обязательные параметры

| Параметр             | Тип      | Описание                                                                           |
| -------------------- | -------- | ---------------------------------------------------------------------------------- |
| `amount`             | `number` | Сумма вывода в USDT. Минимум: `10` USDT. Пример: `100` = 100 USDT                  |
| `destinationAddress` | `string` | Адрес вашего USDT кошелька (TRC20). Пример: `"TN3W4H6rK2ce4vX9YnFxx6HZwMENXLBcMN"` |

***

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

<CodeGroup>
  ```javascript Node.js theme={null}
  const crypto = require('crypto');

  // Функция для расчета подписи
  function calculateSignature(method, url, body, secret) {
    const stringToSign = method + url + (body || '');
    const hmac = crypto.createHmac('sha256', secret);
    hmac.update(stringToSign);
    return hmac.digest('base64');
  }

  // Данные заявки на вывод
  const method = 'POST';
  const url = 'https://api.meridian.vip/api/v1/merchants/withdraw';
  const body = JSON.stringify({
    amount: 500, // 500 USDT
    destinationAddress: 'TN3W4H6rK2ce4vX9YnFxx6HZwMENXLBcMN' // Ваш USDT кошелек (TRC20)
  });

  // Ваш API ключ
  const apiKey = 'luma_abc123...:luma_xyz789...';
  const [keyId, secret] = apiKey.split(':');
  const signature = calculateSignature(method, url, body, secret);

  // Отправка запроса
  const response = await fetch(url, {
    method,
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': apiKey,
      'X-Signature': signature
    },
    body
  });

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

  ```python Python theme={null}
  import hmac
  import hashlib
  import base64
  import requests
  import json

  # Функция для расчета подписи
  def calculate_signature(method, url, body, secret):
      string_to_sign = method + url + (body or '')
      signature = hmac.new(
          secret.encode('utf-8'),
          string_to_sign.encode('utf-8'),
          hashlib.sha256
      ).digest()
      return base64.b64encode(signature).decode('utf-8')

  # Данные заявки на вывод
  method = 'POST'
  url = 'https://api.meridian.vip/api/v1/merchants/withdraw'
  body = json.dumps({
      'amount': 500,  # 500 USDT
      'destinationAddress': 'TN3W4H6rK2ce4vX9YnFxx6HZwMENXLBcMN'  # Ваш USDT кошелек (TRC20)
  })

  # Ваш API ключ
  api_key = 'luma_abc123...:luma_xyz789...'
  key_id, secret = api_key.split(':')
  signature = calculate_signature(method, url, body, secret)

  # Отправка запроса
  response = requests.post(
      url,
      headers={
          'Content-Type': 'application/json',
          'X-API-Key': api_key,
          'X-Signature': signature
      },
      data=body
  )

  result = response.json()
  print(result)
  ```

  ```php PHP theme={null}
  <?php

  function calculateSignature($method, $url, $body, $secret) {
      $stringToSign = $method . $url . ($body ?? '');
      $signature = hash_hmac('sha256', $stringToSign, $secret, true);
      return base64_encode($signature);
  }

  // Данные заявки на вывод
  $method = 'POST';
  $url = 'https://api.meridian.vip/api/v1/merchants/withdraw';
  $body = json_encode([
      'amount' => 500, // 500 USDT
      'destinationAddress' => 'TN3W4H6rK2ce4vX9YnFxx6HZwMENXLBcMN' // Ваш USDT кошелек (TRC20)
  ]);

  // Ваш API ключ
  $apiKey = 'luma_abc123...:luma_xyz789...';
  list($keyId, $secret) = explode(':', $apiKey);
  $signature = calculateSignature($method, $url, $body, $secret);

  // Отправка запроса
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'X-API-Key: ' . $apiKey,
      'X-Signature: ' . $signature
  ]);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $response = curl_exec($ch);
  curl_close($ch);

  $result = json_decode($response, true);
  print_r($result);
  ?>
  ```
</CodeGroup>

***

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

```json theme={null}
{
    "id": "cm3kaz1x30003z8j6m7n8o9p0",
    "ownerId": "cm2abc123def456ghi789jkl0",
    "amountUsdt": "500.000000",
    "withdrawalFeeUsdt": "5.000000",
    "netAmountUsdt": "495.000000",
    "sourceAccountType": "main",
    "destinationAddress": "TN3W***************cMN",
    "status": "pending",
    "requestedAt": "2025-11-03T16:00:00.000Z"
}
```

### Поля ответа

| Поле                 | Описание                                                                                      |
| -------------------- | --------------------------------------------------------------------------------------------- |
| `id`                 | Уникальный ID заявки на вывод в системе Meridian                                              |
| `ownerId`            | ID владельца в системе Meridian                                                               |
| `amountUsdt`         | Запрошенная сумма вывода в USDT (строка для точности)                                         |
| `withdrawalFeeUsdt`  | Комиссия за вывод в USDT (индивидуальная для каждого мерчанта)                                |
| `netAmountUsdt`      | Итоговая сумма к переводу в USDT (`amountUsdt` - `withdrawalFeeUsdt`)                         |
| `sourceAccountType`  | Тип счета-источника (`"main"`, `"commission"`)                                                |
| `destinationAddress` | Замаскированный адрес кошелька (безопасность)                                                 |
| `status`             | Статус заявки: `pending` (ожидает одобрения), `completed` (выполнена), `canceled` (отклонена) |
| `requestedAt`        | Время создания заявки                                                                         |

***

## Проверка баланса

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

```
GET https://api.meridian.vip/api/v1/merchants/balance
```

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

```json theme={null}
{
  "main": 2500.00,
  "reserved": 500.00,
  "available": 2000.00,
  "accounts": {
    "main": {
      "id": "cm2abc123def456ghi789jkl1",
      "balance": "2500.000000"
    },
    "reserved": {
      "id": "cm2abc123def456ghi789jkl2",
      "balance": "500.000000"
    }
  }
}
```

**Важно**: `available` (доступный баланс) = `main` (основной) - `reserved` (замороженный)
