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

# Обзор Transaction API

> Серверный конструктор транзакций обмена для Solana.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/api-reference/route-api-v2/overview)
</Info>

## Что такое Transaction API?

Raydium Transaction API (Route V2) — это серверный сервис, который создаёт сериализованные транзакции обмена Solana без необходимости поддерживать RPC-соединение на клиенте или включать весь Raydium SDK. Это значительно упрощает интеграцию для:

* Веб-фронтенда, который не может запустить локального RPC-клиента
* Мобильных приложений с ограниченными ресурсами
* Автоматических торговых ботов
* Агрегаторов и провайдеров кошельков

Вместо выполнения сложной маршрутизации пулов и конструирования транзакций на клиенте вы запрашиваете котировки обмена и построение транзакций у нашего API, а затем подписываете и транслируете результат, используя любой Solana RPC.

## Обзор рабочего процесса

Transaction API разделяет задачи на две фазы:

### 1. Фаза вычислений: получение котировки

Вызовите `/compute/swap-base-in` или `/compute/swap-base-out`, чтобы получить ожидаемый результат обмена (или требуемый вход) на основе текущих состояний пулов. Этот endpoint **доступен только для чтения** и не требует подписей:

```bash theme={null}
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
```

Ответ включает:

* Ожидаемый объём выходного токена
* Разбор маршрута (какие пулы и источники ликвидности используются)
* Влияние на цену

### 2. Фаза транзакции: построение и подпись

После получения ответа от вычислительного endpoint передайте его (вместе с кошельком и конфигурацией) в `/transaction/swap-base-in` или `/transaction/swap-base-out`:

```bash theme={null}
POST /transaction/swap-base-in
Content-Type: application/json

{
  "wallet": "YourWalletAddress",
  "swapResponse": { ...response from /compute/swap-base-in },
  "txVersion": "V0",
  "computeUnitPriceMicroLamports": "1000",
  "wrapSol": false,
  "unwrapSol": false,
  "inputAccount": "TokenAccount1...",
  "outputAccount": "TokenAccount2..."
}
```

Ответ содержит:

* Закодированную в base64 версионированную транзакцию, готовую к подписи
* Адреса таблиц поиска адресов (если txVersion=V0)

Ваш клиент затем:

1. Декодирует транзакцию
2. Подписывает её с помощью keypair пользователя
3. Транслирует её через любой Solana RPC
4. Ожидает подтверждения

## Вычислительные endpoint

### `GET /compute/swap-base-in`

**Случай использования**: пользователь указывает сумму входа, мы вычисляем выход.

**Обязательные параметры запроса**:

* `inputMint` – адрес mint входного токена
* `outputMint` – адрес mint желаемого токена
* `amount` – сумма входа в lamports (наименьшая единица)
* `slippageBps` – максимально допустимое проскальзывание в базовых пунктах (0–10000)
* `txVersion` – `V0` или `LEGACY`

**Опционально**:

* `referrerBps` – если у вас есть авторитет рефferrера, базовые пункты выхода, которые нужно собрать в виде комиссии рефferrера

### `GET /compute/swap-base-out`

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

**Обязательные параметры запроса**:

* `inputMint`, `outputMint`, `amount` (желаемый выход), `slippageBps`, `txVersion`

**Примечание**: нет базовых пунктов рефферера для base-out (ещё не реализовано).

## Endpoint транзакций

### `POST /transaction/swap-base-in`

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

**Обязательное содержимое**:

* `wallet` – адрес вашего подписывающего кошелька
* `swapResponse` – весь объект вычислительного ответа
* `txVersion` – версия транзакции
* `computeUnitPriceMicroLamports` – плата за приоритет в микро-lamports

**Опционально**:

* `wrapSol` – если true, обернуть нативный SOL для входа
* `unwrapSol` – если true, развернуть WSOL в SOL на выходе
* `inputAccount` – аккаунт токена для входа (обязателен, если не оборачивается SOL)
* `outputAccount` – аккаунт токена для выхода
* `nonceInfo` – долговечный nonce для автономной подписи
* `jitoInfo` – параметры пакета защиты от MEV Jito
* `referrerWallet` – кошелёк рефferера для сбора комиссии

### `POST /transaction/swap-base-out`

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

**Те же параметры, что и base-in**, за исключением:

* поле `referrerInfo` в настоящее время закомментировано (ещё не реализовано)

## Конверт ответа

Все endpoint возвращают стандартный конверт:

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
```

При ошибке `success` имеет значение `false`, а `msg` содержит код ошибки (например, `REQ_WALLET_ERROR`, `REQ_SLIPPAGE_BPS_ERROR`).

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

Успешный ответ транзакции выглядит так:

```json theme={null}
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64-кодированная транзакция
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // Только для V0
  }
}
```

## Пример интеграции

Вот типичный поток в псевдокоде:

```typescript theme={null}
// 1. Получить котировку
const quote = await fetch(
  'https://transaction-v1.raydium.io/compute/swap-base-in?' +
  'inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0'
).then(r => r.json());

// 2. Проверить котировку
if (!quote.success) {
  throw new Error(quote.msg);
}

// 3. Построить транзакцию
const tx = await fetch(
  'https://transaction-v1.raydium.io/transaction/swap-base-in',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      wallet: userWalletAddress,
      swapResponse: quote,
      txVersion: 'V0',
      computeUnitPriceMicroLamports: '1000',
      inputAccount: userInputTokenAccount,
      outputAccount: userOutputTokenAccount,
    }),
  }
).then(r => r.json());

// 4. Декодировать и подписать
const transaction = VersionedTransaction.deserialize(
  Buffer.from(tx.data.transaction, 'base64')
);
transaction.sign([userKeypair]);

// 5. Отправить через RPC
const rpc = new Connection('https://api.mainnet-beta.solana.com');
const sig = await rpc.sendTransaction(transaction);
await rpc.confirmTransaction(sig);
```

## Объяснение ключевых параметров

### `txVersion`

* **V0**: современная транзакция Solana с таблицами поиска адресов (ALTs). Меньший размер сериализации, более низкие комиссии.
* **LEGACY**: формат транзакции до ALT. Больше, но работает со всеми RPC endpoint.

Выбирайте **V0** по возможности; переходите на **LEGACY**, если ваш RPC или кошелёк не поддерживает ALT.

### `computeUnitPriceMicroLamports`

Плата за приоритет для более быстрого включения в блок. Установите на `0` для отсутствия платы за приоритет или на более высокие значения (например, `1000`) для конкуренции в перегруженных сетях. Единицы — микро-lamports за вычислительную единицу.

### `slippageBps`

Максимальная толерантность к проскальзыванию в базовых пунктах. `100` = 1%, `50` = 0,5%.

* Используйте более низкие значения (например, 25–50 bps) для большинства стабильных обменов
* Увеличивайте для волатильных или низколиквидных пар

### `wrapSol` и `unwrapSol`

* **wrapSol**: если `true`, API оборачивает ваш нативный SOL в WSOL. `inputAccount` не требуется.
* **unwrapSol**: если `true`, API разворачивает выходной WSOL обратно в нативный SOL. `outputAccount` не требуется.

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

## Сетевые endpoint

| Сеть     | Mainnet                     | Devnet                             |
| -------- | --------------------------- | ---------------------------------- |
| Host     | `transaction-v1.raydium.io` | `transaction-v1-devnet.raydium.io` |
| Протокол | HTTPS                       | HTTPS                              |

## Коды ошибок

Распространённые сообщения об ошибках:

| Код                       | Значение                                                          |
| ------------------------- | ----------------------------------------------------------------- |
| `REQ_SLIPPAGE_BPS_ERROR`  | Проскальзывание недействительно или выходит за допустимые пределы |
| `REQ_INPUT_MINT_ERROR`    | Адрес входного mint недействителен                                |
| `REQ_OUTPUT_MINT_ERROR`   | Адрес выходного mint недействителен                               |
| `REQ_AMOUNT_ERROR`        | Сумма не является допустимым числом                               |
| `REQ_TX_VERSION_ERROR`    | txVersion должен быть V0 или LEGACY                               |
| `REQ_WALLET_ERROR`        | Адрес кошелька недействителен                                     |
| `REQ_INPUT_ACCOUT_ERROR`  | Аккаунт входного токена отсутствует или недействителен            |
| `REQ_OUTPUT_ACCOUT_ERROR` | Аккаунт выходного токена отсутствует или недействителен           |
| `UNKNOWN_ERROR`           | Ошибка на сервере; проверьте параметры вашего запроса             |

## См. также

* [Спецификация OpenAPI](/ru/api-reference/openapi/route-api-v2.yaml)
* [Руководство по интеграции агрегатора](/ru/integration-guides/aggregator)
