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

# Trade API

> Điểm cuối swap được xây dựng trên máy chủ của Raydium: quote, build, sign, send. Mô hình tích hợp cho các ứng dụng muốn định tuyến qua Raydium mà không cần SDK — những gì nó trả về, cách nó khác với SDK và cách các aggregator sử dụng nó.

<Info>
  **Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.**

  [Xem bản tiếng Anh →](/sdk-api/trade-api)
</Info>

<Info>
  **Trade API** là một bộ điểm cuối đơn giản trên `transaction-v1.raydium.io` (và một số đường dẫn được sao chép trên `api-v3.raydium.io`) giúp lấy giá swap, xây dựng giao dịch Solana đã ký, và trả về nó trong một lần làm tròn. Đây là cùng một giao diện mà Raydium UI sử dụng. Hãy sử dụng nó khi bạn muốn định tuyến Raydium mà không cần bao gồm TS SDK — backends, Blinks handlers, chatbot Telegram, ứng dụng bên thứ ba.
</Info>

## Khi nào sử dụng Trade API so với SDK

| Bạn muốn…                                                                                               | Sử dụng                                                    |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| Tích hợp swap vào backend không thể bao gồm npm packages (ví dụ: bot Python, dịch vụ Go, dịch vụ Rust)  | **Trade API**                                              |
| Render swap Blink trong bài viết xã hội                                                                 | **Trade API**                                              |
| Xây dựng ứng dụng trình duyệt nơi tiết kiệm kilobyte là quan trọng                                      | **Trade API**                                              |
| Nhúng logic định tuyến bên trong chương trình Solana khác (CPI)                                         | Không — sử dụng [`sdk-api/rust-cpi`](/vi/sdk-api/rust-cpi) |
| Xây dựng client giống DEX đầy đủ với xem trước tuyến tùy chỉnh, lớp phủ biểu đồ, heuristics phí ưu tiên | **TS SDK**                                                 |
| Cần định giá ngoại tuyến xác định mà không có lượt vòng mạng                                            | **TS SDK** (với trạng thái pool cục bộ)                    |

SDK phong phú hơn; Trade API đơn giản hơn. Cả hai bao bọc các chương trình CPMM/CLMM/AMM v4 cơ bản giống nhau, vì vậy lệnh swap trên chuỗi kết quả là giống hệt nhau.

## Ba điểm cuối

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

Với một số tiền đầu vào, chọn một tuyến và trả về một báo giá.

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

Phản hồi:

```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..." }
    ]
  }
}
```

Trường `id` là một xử lý báo giá không rõ được chuyển đến điểm cuối tiếp theo. Báo giá ổn định trong khoảng 30 giây; sau đó, hãy lấy giá lại.

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

Dạng đảo: "Tôi muốn nhận chính xác N của đầu ra; hãy báo giá cho tôi đầu vào cần thiết."

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

Hình dạng phản hồi đối xứng với `swap-base-in`; ngữ nghĩa trường `amount` lật ngược.

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

Lấy báo giá từ bước 1 và trả về giao dịch phiên bản đã ký sẵn sàng:

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

{
  "computeUnitPriceMicroLamports": "50000",
  "swapResponse": { ... paste the data object from swap-base-in ... },
  "txVersion": "V0",
  "wallet": "<user_pubkey>",
  "wrapSol": true,
  "unwrapSol": false,
  "inputAccount": "<optional_token_account>",
  "outputAccount": "<optional_token_account>"
}
```

Phản hồi:

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

Nhiều giao dịch có thể được trả về nếu swap yêu cầu thiết lập (ví dụ: tạo ATA, bao SOL). Ký và gửi chúng theo thứ tự.

## Ví dụ đầu cuối tối thiểu (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}")
```

Đây là khoảng 20 dòng. Phương pháp tương đương với TS SDK là khoảng 30 dòng nhưng cung cấp cho bạn kiểm soát phong phú hơn (bộ chọn tuyến tùy chỉnh, ngân sách Compute Unit trên mỗi pool, siêu dữ liệu lỗi chi tiết).

## Định tuyến và lựa chọn pool

Trade API định tuyến trên **tất cả** chương trình Raydium (CPMM, CLMM, AMM v4) và chọn thực thi tốt nhất cho kích thước được báo giá. Đặc điểm:

* **Hỗ trợ multi-hop.** Swap SOL→USDC có thể định tuyến qua wSOL→JUP→USDC nếu đó là giá rẻ hơn.
* **Chia nhỏ nhiều pool cùng chương trình không được hỗ trợ.** Một báo giá duy nhất đi qua chính xác một tuyến; nếu bạn muốn chia nhỏ kích thước trên các pool, hãy làm điều đó phía client (hai báo giá, hai txs).
* **Ổn định so với tập trung.** Bộ định tuyến ưu tiên sử dụng CLMM khi thanh khoản nằm trong phạm vi đủ, quay lại CPMM cho các cặp đuôi dài.
* **Bao gồm AMM v4.** Các pool AMM v4 được bao gồm trong định tuyến nhưng chỉ được chọn khi chúng cung cấp giá tốt hơn các giải pháp CPMM/CLMM.

Để buộc định tuyến thông qua một pool cụ thể, hãy sử dụng SDK thay vì — Trade API không public một tham số pool-pin.

## Tham số referrer

Thêm `&referrer=<wallet_pubkey>` vào điểm cuối tính toán để lấy 1% cắt giá giới thiệu trên swap. Xem [`user-flows/referrals-and-blinks`](/vi/user-flows/referrals-and-blinks) cho ngữ nghĩa. Khi có:

* `referrerAmount` trong phản hồi báo giá là số tiền tuyệt đối (trong mint đầu vào) sẽ được định tuyến đến người giới thiệu.
* Giao dịch cuối cùng chứa một chuyển token SPL bổ sung đến ATA của người giới thiệu.

## Phí ưu tiên

`computeUnitPriceMicroLamports` trong yêu cầu xây dựng đặt phí ưu tiên cho giao dịch được trả về. Nguyên tắc chung:

* `50_000` (0.00005 lamports/CU × 200k CU ≈ 0.00001 SOL): tối thiểu, tốt cho những khoảnh khắc không tắc nghẽn.
* `200_000`: tắc nghẽn vừa phải.
* `1_000_000`: tắc nghẽn nặng.

Để điều chỉnh thích ứng, hãy gọi `getRecentPrioritizationFees` trên RPC của bạn trước tiên và chuyển giá trị trung bình. Xem [`integration-guides/priority-fee-tuning`](/vi/integration-guides/priority-fee-tuning).

## Phiên bản giao dịch

* `"V0"` trả về giao dịch phiên bản (`MessageV0`) với bảng tra cứu cho các tài khoản chung. Nhỏ hơn, nhanh hơn. **Được khuyến cáo.**
* `"LEGACY"` trả về giao dịch legacy. Lớn hơn; chỉ sử dụng nếu ví/cơ sở hạ tầng của bạn không xử lý V0.

## Hình dạng lỗi

API trả về HTTP 200 với `success: false` cho các lỗi logic, HTTP 4xx/5xx cho các lỗi vận chuyển / cơ sở hạ tầng.

Lỗi logic phổ biến:

* `"No route found"` — không có đường dẫn giữa hai mint ở kích thước này. Giảm `amount` hoặc xem xét lại cặp.
* `"Insufficient liquidity"` — một tuyến tồn tại nhưng sẽ vượt quá `slippageBps`. Mở rộng slippage.
* `"Quote expired"` — `swapResponse` cũ hơn 30 giây. Lấy giá lại.
* `"Unsupported mint"` — mint không nằm trong vũ trụ Raydium (không được liệt kê hoặc trên chương trình không dùng nữa).

## Giới hạn tốc độ

* **Điểm cuối báo giá:** 120 req/phút trên mỗi IP.
* **Điểm cuối xây dựng:** 60 req/phút trên mỗi IP (chi phí cao hơn trên máy chủ).
* Vượt quá giới hạn trả về HTTP 429 với tiêu đề `Retry-After`.

Để có thông lượng cao hơn, hãy liên hệ với các quan hệ nhà phát triển Raydium; khóa cấp aggregator có sẵn.

## Mô hình kiến trúc cho những người tích hợp

```
┌─────────────┐   quote   ┌───────────────┐   build   ┌───────────────┐   sign/send   ┌──────────┐
│ Your front  │──────────►│ Trade API     │──────────►│ Trade API     │──────────────►│ Solana   │
│   end       │◄──────────│ /compute/...  │◄──────────│ /transaction/ │               │   RPC    │
└─────────────┘           └───────────────┘           └───────────────┘               └──────────┘
                              (stateless)                 (stateless)
```

Tất cả đều không có trạng thái — điều duy nhất bạn cần truyền giữa cuộc gọi báo giá và cuộc gọi xây dựng là chính nội dung phản hồi báo giá.

## Bước tiếp theo

* [`sdk-api/typescript-sdk`](/vi/sdk-api/typescript-sdk) — giao diện lập trình phong phú hơn với các chương trình cơ bản giống nhau.
* [`sdk-api/rest-api`](/vi/sdk-api/rest-api) — điểm cuối phía đọc (thông tin pool, thông tin mint) để bổ sung phía viết của Trade API.
* [`user-flows/swap`](/vi/user-flows/swap) — luồng swap UI đầu cuối.
* [`integration-guides/aggregator`](/vi/integration-guides/aggregator) — mô hình cho các aggregator định tuyến trên nhiều DEX.

Nguồn:

* `transaction-v1.raydium.io` điểm cuối trực tiếp.
* Kiểm tra thẻ mạng Raydium UI (cùng một bề mặt được tiêu thụ).
