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

> Raydium 的服务端构建交换事务端点：报价、构建、签名、发送。适用于想要 Raydium 路由但不想打包 SDK 的应用的集成模式 — 返回内容、与 SDK 的差异以及聚合器如何使用它。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/sdk-api/trade-api)
</Info>

**交易 API** 是部署在 `transaction-v1.raydium.io`（以及 `api-v3.raydium.io` 上的某些镜像路径）上的一组轻量级端点，可在一次往返中报价交换、构建已签名的 Solana 事务并返回。这正是 Raydium UI 使用的接口。当你想要 Raydium 路由但不想打包 TS SDK 时，使用它 — 适用于后端、Blinks 处理程序、Telegram 机器人、第三方应用。

## 何时使用交易 API vs SDK

| 你想要…                                             | 使用                                                  |
| ------------------------------------------------ | --------------------------------------------------- |
| 将交换集成到无法打包 npm 包的后端中（如 Python 机器人、Go 服务、Rust 服务） | **交易 API**                                          |
| 在社交帖子中渲染交换 Blink                                 | **交易 API**                                          |
| 构建一个字节数很重要的浏览器应用                                 | **交易 API**                                          |
| 在另一个 Solana 程序中嵌入路由逻辑（CPI）                       | 都不用 — 使用 [`sdk-api/rust-cpi`](/zh/sdk-api/rust-cpi) |
| 构建一个功能完整的 DEX 类客户端，包含自定义路由预览、图表覆盖层、优先级费启发式算法     | **TS SDK**                                          |
| 需要确定的离线报价而不需要网络往返                                | **TS SDK**（带本地池状态）                                  |

SDK 功能更丰富；交易 API 更简洁。两者都包装相同的底层 CPMM/CLMM/AMM v4 程序，因此生成的链上交换是相同的。

## 三个端点

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

给定一个输入金额，选择一条路由并返回报价。

```
GET https://transaction-v1.raydium.io/compute/swap-base-in
  ?inputMint=So11111111111111111111111111111111111111112
  &outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
  &amount=1000000000
  &slippageBps=50
  &txVersion=V0
```

响应：

```json theme={null}
{
  "id": "b2e4...",
  "success": true,
  "version": "V1",
  "data": {
    "swapType": "BaseIn",
    "inputMint":  "So11111111111111111111111111111111111111112",
    "inputAmount":  "1000000000",
    "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "outputAmount": "165234567",
    "otherAmountThreshold": "164408394",
    "slippageBps": 50,
    "priceImpactPct": 0.0012,
    "referrerAmount": "0",
    "routePlan": [
      { "poolId": "58oQ...", "inputMint": "So11...", "outputMint": "USDC...", "feeAmount": "2500000", "feeMint": "So11..." }
    ]
  }
}
```

`id` 字段是一个不透明的报价句柄，传递给下一个端点。报价的有效期约为 30 秒；超过该时间后，需要重新报价。

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

反向形式：「我想精确收到 N 个输出；告诉我所需的输入。」

```
GET /compute/swap-base-out
  ?inputMint=<MINT_IN>
  &outputMint=<MINT_OUT>
  &amount=<DESIRED_OUTPUT_AMOUNT>
  &slippageBps=50
  &txVersion=V0
```

响应形状对称于 `swap-base-in`；`amount` 字段的语义相反。

### 3. `POST /transaction/swap-base-in` 和 `/transaction/swap-base-out`

获取第 1 步的报价并返回已签名的版本化事务：

```
POST https://transaction-v1.raydium.io/transaction/swap-base-in
Content-Type: application/json

{
  "computeUnitPriceMicroLamports": "50000",
  "swapResponse": { ... 粘贴 swap-base-in 的 data 对象 ... },
  "txVersion": "V0",
  "wallet": "<user_pubkey>",
  "wrapSol": true,
  "unwrapSol": false,
  "inputAccount": "<optional_token_account>",
  "outputAccount": "<optional_token_account>"
}
```

响应：

```json theme={null}
{
  "id": "9f1c...",
  "success": true,
  "version": "V1",
  "data": [
    { "transaction": "<base64-encoded-versioned-transaction>" }
  ]
}
```

如果交换需要设置（如创建 ATA、包装 SOL），可能会返回多个事务。按顺序签名和发送。

## 最小化端到端示例（Python）

```python theme={null}
import base64, requests
from solders.transaction import VersionedTransaction
from solders.keypair import Keypair
from solana.rpc.api import Client

rpc = Client("https://api.mainnet-beta.solana.com")
kp = Keypair.from_bytes(bytes([...]))    # your signer

SOL  = "So11111111111111111111111111111111111111112"
USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"

quote = requests.get(
    "https://transaction-v1.raydium.io/compute/swap-base-in",
    params={
        "inputMint": SOL, "outputMint": USDC,
        "amount": 1_000_000_000, "slippageBps": 50, "txVersion": "V0",
    },
).json()

built = requests.post(
    "https://transaction-v1.raydium.io/transaction/swap-base-in",
    json={
        "computeUnitPriceMicroLamports": "50000",
        "swapResponse": quote,
        "txVersion": "V0",
        "wallet": str(kp.pubkey()),
        "wrapSol": True,
        "unwrapSol": False,
    },
).json()

for entry in built["data"]:
    raw = base64.b64decode(entry["transaction"])
    tx = VersionedTransaction.from_bytes(raw)
    tx.sign([kp])
    sig = rpc.send_raw_transaction(bytes(tx)).value
    print(f"Sent: {sig}")
```

这大约 20 行。等效的 TS SDK 代码约 30 行，但给你更丰富的控制（自定义路由选择器、每个池的计算单位预算、详细的错误元数据）。

## 路由和池选择

交易 API 路由跨**所有** Raydium 程序（CPMM、CLMM、AMM v4）并为报价的大小选择最佳执行。特征：

* **支持多跳。** SOL→USDC 交换可以通过 wSOL→JUP→USDC 路由，如果这样更便宜的话。
* **不支持单程序多池拆分。** 单个报价恰好通过一条路径；如果你想跨池拆分大小，在客户端执行（两个报价，两个事务）。
* **稳定 vs 集中。** 路由器在链内流动性充足时优先使用 CLMM，对于长尾对则回退到 CPMM。
* **AMM v4 包含。** AMM v4 池被包含在路由中，但仅当它们提供比 CPMM/CLMM 替代方案更好的定价时才被选择。

要强制通过特定池进行路由，请改用 SDK — 交易 API 不公开池固定参数。

## 推荐人参数

在计算端点上追加 `&referrer=<wallet_pubkey>` 以从交换中获得 1% 的推荐费。参见 [`user-flows/referrals-and-blinks`](/zh/user-flows/referrals-and-blinks) 了解语义。当出现时：

* 报价响应中的 `referrerAmount` 是将路由到推荐人的绝对金额（以输入薄荷为单位）。
* 最终事务包含对推荐人 ATA 的额外 SPL 代币转账。

## 优先级费

构建请求中的 `computeUnitPriceMicroLamports` 设置返回事务的优先级费。经验法则：

* `50_000`（0.00005 lamports/CU × 200k CU ≈ 0.00001 SOL）：最少，在非拥堵时刻很好。
* `200_000`：中等拥堵。
* `1_000_000`：严重拥堵。

对于自适应调整，先在 RPC 上调用 `getRecentPrioritizationFees`，然后传递中位数。参见 [`integration-guides/priority-fee-tuning`](/zh/integration-guides/priority-fee-tuning)。

## 事务版本

* `"V0"` 返回一个版本化的（`MessageV0`）事务，具有常见账户的查找表。更小，更快。**推荐。**
* `"LEGACY"` 返回一个旧式事务。更大；仅在你的钱包/基础设施不处理 V0 时使用。

## 错误形状

API 返回 HTTP 200，`success: false` 用于逻辑错误，HTTP 4xx/5xx 用于传输/基础设施错误。

常见逻辑错误：

* `"No route found"` — 此大小的两个薄荷之间没有路径。减少 `amount` 或重新考虑对。
* `"Insufficient liquidity"` — 路由存在但会超过 `slippageBps`。扩大滑点。
* `"Quote expired"` — `swapResponse` 超过 30 秒。重新报价。
* `"Unsupported mint"` — 薄荷不在 Raydium 的范围内（未列出，或在已弃用的程序上）。

## 速率限制

* **报价端点：** 每 IP 每分钟 120 个请求。
* **构建端点：** 每 IP 每分钟 60 个请求（服务器上成本更高）。
* 超过限制返回 HTTP 429，带 `Retry-After` 标头。

如需更高吞吐量，请联系 Raydium 开发者关系；提供聚合器级密钥。

## 集成商的架构模式

```
┌─────────────┐   报价   ┌───────────────┐   构建   ┌───────────────┐   签名/发送   ┌──────────┐
│ 你的前端    │──────────►│ 交易 API      │──────────►│ 交易 API      │──────────────►│ Solana   │
│             │◄──────────│ /compute/...  │◄──────────│ /transaction/ │               │   RPC    │
└─────────────┘           └───────────────┘           └───────────────┘               └──────────┘
                              （无状态）                  （无状态）
```

一切都是无状态的 — 你需要在报价调用和构建调用之间线程化的唯一内容是报价响应体本身。

## 接下来去哪里

* [`sdk-api/typescript-sdk`](/zh/sdk-api/typescript-sdk) — 具有相同底层程序的更丰富的编程接口。
* [`sdk-api/rest-api`](/zh/sdk-api/rest-api) — 读端点（池信息、薄荷信息）补充交易 API 的写端。
* [`user-flows/swap`](/zh/user-flows/swap) — 端到端 UI 交换流。
* [`integration-guides/aggregator`](/zh/integration-guides/aggregator) — 跨许多 DEX 路由的聚合器模式。

来源：

* `transaction-v1.raydium.io` 实时端点。
* Raydium UI 网络选项卡检查（相同的使用接口）。
