> ## 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.

# トランザクション API 概要

> Solana スワップトランザクションのサーバー側ビルダー

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/api-reference/route-api-v2/overview)
</Info>

## トランザクション API とは

Raydium トランザクション API（Route V2）は、クライアントが RPC 接続を維持したり Raydium SDK 全体をバンドルしたりすることなく、シリアライズされた Solana スワップトランザクションを構築するサーバー側サービスです。以下の統合を大幅に簡素化します。

* ローカル RPC クライアントを実行できない Web フロントエンド
* リソースが限定されたモバイルアプリケーション
* ヘッドレストレーディングボット
* アグリゲーターとウォレットプロバイダー

クライアント側で複雑なプールルーティングとトランザクション構築を行う代わりに、API からスワップクォートとトランザクション構築をリクエストし、任意の Solana RPC を使用して結果に署名してブロードキャストします。

## ワークフロー概要

トランザクション API は関心を 2 つのフェーズに分けます。

### 1. コンピュートフェーズ：クォートを取得

`/compute/swap-base-in` または `/compute/swap-base-out` を呼び出して、現在のプール状態に基づいて予想されるスワップ出力（または必要な入力）を受け取ります。このエンドポイントは**読み取り専用**で、署名は必要ありません。

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

レスポンスに含まれるもの：

* 予想される出力量
* ルートの詳細（どのプールとリクイディティソースが使用されているか）
* プライスインパクト

### 2. トランザクションフェーズ：構築して署名

コンピュートレスポンスを取得したら、それを（ウォレットと設定とともに）`/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. ユーザーのキーペアで署名
3. 任意の Solana RPC を通じてブロードキャスト
4. 確認を待機

## コンピュートエンドポイント

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

**ユースケース**：ユーザーが入力量を指定し、出力を計算します。

**必須クエリパラメータ**：

* `inputMint` – 送信するトークンのミントアドレス
* `outputMint` – 必要なトークンのミントアドレス
* `amount` – ラムポートでの入力量（最小単位）
* `slippageBps` – 最大許容スリッページをベーシスポイントで指定（0～10000）
* `txVersion` – `V0` または `LEGACY`

**オプション**：

* `referrerBps` – リファラー権限がある場合、リファラー手数料として収集する出力のベーシスポイント

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

**ユースケース**：ユーザーが必要な出力を指定し、必要な入力を計算します。

**必須クエリパラメータ**：

* `inputMint`、`outputMint`、`amount`（必要な出力）、`slippageBps`、`txVersion`

**注**：base-out ではリファラーベーシスポイントはサポートされていません（まだ実装されていません）。

## トランザクションエンドポイント

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

固定入力量のトランザクションを構築します。

**必須ボディ**：

* `wallet` – 署名するウォレットアドレス
* `swapResponse` – コンピュートレスポンスオブジェクト全体
* `txVersion` – トランザクションバージョン
* `computeUnitPriceMicroLamports` – マイクロラムポート単位のプライオリティ手数料

**オプション**：

* `wrapSol` – true の場合、入力用のネイティブ SOL をラップ
* `unwrapSol` – true の場合、出力で WSOL をネイティブ SOL にアンラップ
* `inputAccount` – 入力用のトークンアカウント（SOL をラップしない場合は必須）
* `outputAccount` – 出力用のトークンアカウント
* `nonceInfo` – オフライン署名用の Durable Nonce
* `jitoInfo` – Jito MEV 保護バンドルパラメータ
* `referrerWallet` – 手数料収集用のリファラーウォレット

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

固定出力量のトランザクションを構築します。

**base-in と同じパラメータ**、ただし以下の例外：

* `referrerInfo` フィールドは現在コメントアウトされています（まだ実装されていません）

## レスポンスエンベロープ

すべてのエンドポイントは標準エンベロープを返します。

```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**：アドレスルックアップテーブル（ALT）を使用した最新の Solana トランザクション。シリアライズサイズが小さく、手数料が低い。
* **LEGACY**：ALT 以前のトランザクション形式。サイズが大きいですが、すべての RPC エンドポイントで機能します。

可能な場合は **V0** を選択。RPC またはウォレットが ALT をサポートしない場合は **LEGACY** にフォールバック。

### `computeUnitPriceMicroLamports`

ブロック включぬ取を高速化するプライオリティ手数料。プライオリティ手数料なしの場合は `0`、またはネットワークが混雑している場合は競争するためにより高い値（例：`1000`）を設定します。単位はコンピュートユニットあたりのマイクロラムポート。

### `slippageBps`

最大スリッページ許容度をベーシスポイント単位で指定。`100` = 1%、`50` = 0.5%。

* ほとんどの安定したスワップに低い値（例：25～50 bps）を使用
* 変動性が高いまたは流動性が低いペアの場合は増加させる

### `wrapSol` と `unwrapSol`

* **wrapSol**：`true` の場合、API がネイティブ SOL を WSOL にラップします。`inputAccount` は不要です。
* **unwrapSol**：`true` の場合、API が出力 WSOL をネイティブ SOL にアンラップします。`outputAccount` は不要です。

両方が `false` の場合は、明示的なトークンアカウントを提供する必要があります。

## ネットワークエンドポイント

| ネットワーク | Mainnet                     | Devnet                             |
| ------ | --------------------------- | ---------------------------------- |
| ホスト    | `transaction-v1.raydium.io` | `transaction-v1-devnet.raydium.io` |
| プロトコル  | HTTPS                       | HTTPS                              |

## エラーコード

一般的なエラーメッセージ：

| コード                       | 意味                                   |
| ------------------------- | ------------------------------------ |
| `REQ_SLIPPAGE_BPS_ERROR`  | スリッページが無効または範囲外                      |
| `REQ_INPUT_MINT_ERROR`    | 入力ミントアドレスが無効                         |
| `REQ_OUTPUT_MINT_ERROR`   | 出力ミントアドレスが無効                         |
| `REQ_AMOUNT_ERROR`        | 金額が有効な数値ではない                         |
| `REQ_TX_VERSION_ERROR`    | txVersion は V0 または LEGACY である必要があります |
| `REQ_WALLET_ERROR`        | ウォレットアドレスが無効                         |
| `REQ_INPUT_ACCOUT_ERROR`  | 入力トークンアカウントが見つからないか無効                |
| `REQ_OUTPUT_ACCOUT_ERROR` | 出力トークンアカウントが見つからないか無効                |
| `UNKNOWN_ERROR`           | サーバー側エラー。リクエストパラメータを確認してください         |

## 関連ドキュメント

* [OpenAPI 仕様](/ja/api-reference/openapi/route-api-v2.yaml)
* [アグリゲーター統合ガイド](/ja/integration-guides/aggregator)
