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

# Bắt đầu nhanh với Parsed Events

> Phân tích giao dịch đầu tiên, truy xuất lịch sử địa chỉ đã phân tích và duyệt qua các trang kết quả. Kèm theo tài liệu tham chiếu REST cho cả hai endpoint.

<Tip>
  Bạn mới làm quen với Parsed Events? Trước tiên, hãy đọc [mô hình tư duy](/docs/vi/parsed-streams#mô-hình-tư-duy) của Parsed Streams — Parsed Events trả về cùng các lệnh đã giải mã qua REST.
</Tip>

## Bắt đầu nhanh

<Steps>
  <Step title="Get Access">
    Parsed Events có trên tất cả các gói với chi phí 10 tín dụng cho mỗi yêu cầu. Lấy khóa API từ [Helius Dashboard](https://dashboard.helius.dev) và gửi yêu cầu đến `https://mainnet.helius-rpc.com`.

    Xác thực bằng khóa API của dự án, được truyền dưới dạng tham số truy vấn `api-key`.
  </Step>

  <Step title="Parse a Transaction">
    Truyền các chữ ký trong trường nội dung `transactions` của `POST /v1/parsed-events/transactions`:

    <Tabs>
      <Tab title="JavaScript">
        ```javascript theme={"system"}
        const parseTransactions = async () => {
          const url = "https://mainnet.helius-rpc.com/v1/parsed-events/transactions?api-key=YOUR_API_KEY";

          const response = await fetch(url, {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
            },
            body: JSON.stringify({
              transactions: [
                "5xSKzM8bvpudE521jikHqASzMr23Ms4X4ieY3K8oFPFrJWCSSgYocJmHznrR8b12voDxKDH8ykdCLXSRrx6duVLH",
              ],
              includeRawTransaction: false,
            }),
          });

          const data = await response.json();
          console.log(data);
        };

        parseTransactions();
        ```
      </Tab>

      <Tab title="cURL">
        ```bash theme={"system"}
        curl -X POST "https://mainnet.helius-rpc.com/v1/parsed-events/transactions?api-key=YOUR_API_KEY" \
          -H "content-type: application/json" \
          -d '{
            "transactions": [
              "5xSKzM8bvpudE521jikHqASzMr23Ms4X4ieY3K8oFPFrJWCSSgYocJmHznrR8b12voDxKDH8ykdCLXSRrx6duVLH"
            ],
            "includeRawTransaction": false
          }'
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="Read the Result">
    Phản hồi chứa một kết quả cho mỗi chữ ký được yêu cầu, theo thứ tự đầu vào. Mỗi kết quả bao gồm `signature`, `parserStatus` và một trong hai trường `parsed` hoặc `parserError`:

    ```json [expandable] theme={"system"}
    [
      {
        "signature": "5xSKzM8bvpudE521jikHqASzMr23Ms4X4ieY3K8oFPFrJWCSSgYocJmHznrR8b12voDxKDH8ykdCLXSRrx6duVLH",
        "parserStatus": "OK",
        "parsed": {
          "slot": 433950192,
          "blockTime": 1784487060,
          "fee": 2005000,
          "feePayer": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
          "transactionStatus": "OK",
          "nativeTransfers": [
            {
              "fromUserAccount": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
              "toUserAccount": "teBPkZtsnaKDpGHTy1KUZeh1PbVtbrKXhzruYpRiUUs",
              "amount": 1500000000000
            }
          ],
          "tokenTransfers": [
            {
              "fromUserAccount": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
              "toUserAccount": "7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE",
              "fromTokenAccount": "teBPkZtsnaKDpGHTy1KUZeh1PbVtbrKXhzruYpRiUUs",
              "toTokenAccount": "2oL6my4QDDCfpgJZX1bZV1NgbmuNptKdgcE8wJm6efgk",
              "rawTokenAmount": 1498500000000,
              "decimals": 9,
              "tokenStandard": "Fungible",
              "mint": "So11111111111111111111111111111111111111112"
            }
          ],
          "summary": {
            "type": "swap",
            "description": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52 swapped 1500 SOL for 64672839.26195 pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn via Jupiter",
            "parsedData": {
              "type": "swap",
              "protocol": "jupiter",
              "kind": "swap",
              "in_amount": "1500000000000",
              "actual_out_amount": "64672839261950",
              "input_mint": "So11111111111111111111111111111111111111112",
              "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
              "inner_swaps": [
                {
                  "amm_program_id": "",
                  "amm_program_name": null,
                  "input_amount": "470229300000",
                  "output_amount": "35579021038",
                  "input_mint": "So11111111111111111111111111111111111111112",
                  "output_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                },
                {
                  "amm_program_id": "",
                  "amm_program_name": null,
                  "input_amount": "1028270700000",
                  "output_amount": "77798063361",
                  "input_mint": "So11111111111111111111111111111111111111112",
                  "output_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                },
                {
                  "amm_program_id": "",
                  "amm_program_name": null,
                  "input_amount": "14625643887",
                  "output_amount": "8348494812168",
                  "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                  "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
                },
                {
                  "amm_program_id": "",
                  "amm_program_name": null,
                  "input_amount": "35566391375",
                  "output_amount": "20283004384731",
                  "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                  "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
                },
                {
                  "amm_program_id": "",
                  "amm_program_name": null,
                  "input_amount": "63185049137",
                  "output_amount": "36041340065051",
                  "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                  "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
                }
              ]
            }
          },
          "instructions": [
            {
              "instructionIndex": 5,
              "innerInstructionIndex": 2,
              "stackHeight": 3,
              "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              "rawAccounts": [
                "2oL6my4QDDCfpgJZX1bZV1NgbmuNptKdgcE8wJm6efgk",
                "ATRsNGv2nDw7hSMfkUTBoVUDsFDwN7po7KbecyiGWNB4",
                "7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE"
              ],
              "rawData": "3JvpRSxKFyKV",
              "summary": {
                "type": "transfer",
                "description": "7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE transferred 470.2293 SOL from 7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE to 8FnX3xo2yYw3EUE6w3nQA4GfXGS9wpK6oj3veJpbFzLo",
                "parsedData": null
              },
              "programName": "token",
              "instructionName": "transfer",
              "decoded": {
                "args": {
                  "amount": "470229300000"
                },
                "accounts": [
                  {
                    "name": "source_account",
                    "pubkey": "2oL6my4QDDCfpgJZX1bZV1NgbmuNptKdgcE8wJm6efgk",
                    "isSigner": false,
                    "isWritable": true
                  },
                  {
                    "name": "destination_account",
                    "pubkey": "ATRsNGv2nDw7hSMfkUTBoVUDsFDwN7po7KbecyiGWNB4",
                    "isSigner": false,
                    "isWritable": true
                  },
                  {
                    "name": "owner_or_delegate",
                    "pubkey": "7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE",
                    "isSigner": true,
                    "isWritable": false
                  }
                ]
              }
            },
            {
              "instructionIndex": 5,
              "innerInstructionIndex": 1,
              "stackHeight": 2,
              "programId": "BiSoNHVpsVZW2F7rx2eQ59yQwKxzU5NvBcmKshCSUypi",
              "rawAccounts": [
                "7iWnBRRhBCiNXXPhqiGzvvBkKrvFSWqqmxRyu9VyYBxE",
                "8FnX3xo2yYw3EUE6w3nQA4GfXGS9wpK6oj3veJpbFzLo",
                "ATRsNGv2nDw7hSMfkUTBoVUDsFDwN7po7KbecyiGWNB4",
                "2Y7HATmn9aJBcxCskE5V2U2epmjvkZmB51zTJBbhj4cU",
                "2oL6my4QDDCfpgJZX1bZV1NgbmuNptKdgcE8wJm6efgk",
                "EpdaePzdqRkMtdZJquVPUWgyoJ5YEEpYALki6dv9VBrt",
                "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
                "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
                "Sysvar1nstructions1111111111111111111111111",
                "J1to1yufRnoWn81KYg1XkTWzmKjnYSnmE2VY8DGUJ9Qv"
              ],
              "rawData": "67t827t7UwAMHa6U18HnBBLj",
              "summary": null,
              "programName": "bison_fi",
              "instructionName": null,
              "decoded": null
            }
          ]
        }
      }
    ]
    ```

    Ví dụ được rút gọn còn hai lệnh: một lần chuyển token đã giải mã bên trong tuyến và một lệnh AMM có chương trình được danh mục nhận diện nhưng không thể giải mã. Do đó, `instructionName` có giá trị `null`, trong khi `rawData` và `rawAccounts` vẫn khả dụng. Xem [Phản hồi đã phân tích](/docs/vi/parsed-events/parsed-response) để biết tất cả các trường và xem ví dụ phản hồi đầy đủ.
  </Step>

  <Step title="Fetch Address History">
    `POST /v1/parsed-events/transaction-history` trả về các kết quả đã phân tích giống như trên cho mọi giao dịch liên quan đến một địa chỉ, mặc định sắp xếp mới nhất trước:

    <Tabs>
      <Tab title="JavaScript">
        ```javascript theme={"system"}
        const fetchTransactionHistory = async () => {
          const url = "https://mainnet.helius-rpc.com/v1/parsed-events/transaction-history?api-key=YOUR_API_KEY";

          const response = await fetch(url, {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
            },
            body: JSON.stringify({
              address: "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
              limit: 100,
              sortOrder: "desc",
              commitment: "confirmed",
            }),
          });

          const page = await response.json();
          console.log(page.data);
          console.log(page.paginationToken);
        };

        fetchTransactionHistory();
        ```
      </Tab>

      <Tab title="cURL">
        ```bash theme={"system"}
        curl -X POST "https://mainnet.helius-rpc.com/v1/parsed-events/transaction-history?api-key=YOUR_API_KEY" \
          -H "content-type: application/json" \
          -d '{
              "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
              "limit": 100,
              "sortOrder": "desc",
              "commitment": "confirmed"
            }'
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="Paginate">
    Phản hồi lịch sử bọc kết quả trong một đối tượng trang. Truyền lại `paginationToken` trong yêu cầu tiếp theo để tiếp tục. Nếu không có `paginationToken`, dịch vụ đã đến cuối phạm vi trang khả dụng.
  </Step>
</Steps>

## Hướng dẫn

<CardGroup cols={2}>
  <Card title="Fetch Pump.fun Mints" icon="rocket" href="/docs/vi/parsed-events/guides/fetch-pumpfun-mints">
    Duyệt qua từng trang để xem mọi token mà một ví đã triển khai trên Pump.fun.
  </Card>

  <Card title="Migrate from Enhanced Transactions" icon="arrow-right" href="/docs/vi/parsed-events/guides/migrate-from-enhanced-transactions">
    Ánh xạ endpoint, tham số và phản hồi từ API cũ.
  </Card>
</CardGroup>

## Tài liệu tham chiếu REST

Cả hai phương thức REST đều chấp nhận nội dung JSON qua `POST` trong `/v1/parsed-events/` tại `https://mainnet.helius-rpc.com` và được xác thực bằng tham số truy vấn `api-key`. Nội dung yêu cầu từ chối các trường không xác định, vì vậy lỗi đánh máy sẽ được báo rõ thay vì bị âm thầm bỏ qua.

### Phân tích giao dịch

`POST /v1/parsed-events/transactions` truy xuất đầy đủ các giao dịch Solana theo chữ ký, giải mã chúng bằng cùng bộ giải mã lệnh dựa trên IDL được dùng cho [Parsed Streams](/docs/vi/parsed-streams) và trả về một `TransactionResult` cho mỗi chữ ký được yêu cầu.

Thứ tự phản hồi khớp với thứ tự đầu vào, kể cả các chữ ký trùng lặp. Các giao dịch bị thiếu và lỗi bộ phân tích trên từng mục được trả về dưới dạng kết quả `parserStatus: "ERROR"` ở cấp mục:

```json theme={"system"}
[
  {
    "signature": "5xSKzM8bvpudE521jikHqASzMr23Ms4X4ieY3K8oFPFrJWCSSgYocJmHznrR8b12voDxKDH8ykdCLXSRrx6duVLH",
    "parserStatus": "ERROR",
    "parserError": {
      "code": "transaction_not_found",
      "message": "transaction was not found"
    }
  }
]
```

#### Nội dung yêu cầu

<ParamField body="transactions" type="string[]" required>
  Các chữ ký giao dịch cần phân tích. Kích thước lô tối đa là 100.
</ParamField>

<ParamField body="commitment" type="string" default="confirmed">
  Mức cam kết được sử dụng khi truy xuất giao dịch.

  * `confirmed`
  * `finalized`
</ParamField>

<ParamField body="includeRawTransaction" type="boolean" default="false">
  Khi `true`, bao gồm tải trọng giao dịch Solana thô dưới dạng `rawTransaction` trong mỗi kết quả.
</ParamField>

#### Lưu ý

* Không hỗ trợ mức cam kết `processed`.
* `rawTransaction` bị lược bỏ trừ khi `includeRawTransaction` là `true`.
* Các giao dịch thực thi thất bại vẫn có thể được phân tích. Trong trường hợp đó, `parsed.transactionStatus` là `ERROR` và lỗi giao dịch được cung cấp trong `parsed.error` khi có.
* Lỗi xác thực ở cấp yêu cầu trả về phản hồi lỗi thay vì kết quả ở cấp mục.

### Lịch sử giao dịch đã phân tích

`POST /v1/parsed-events/transaction-history` trả về lịch sử giao dịch đã phân tích cho một địa chỉ. Phương thức này hỗ trợ phân trang, giới hạn chữ ký, giới hạn slot, giới hạn thời gian khối, thứ tự sắp xếp và tùy chọn bao gồm giao dịch thô.

Không giống endpoint địa chỉ [Enhanced Transactions](/docs/vi/enhanced-transactions/transaction-history) cũ, các tham số yêu cầu được gửi trong nội dung JSON thay vì dưới dạng tham số chuỗi truy vấn.

#### Nội dung yêu cầu

<ParamField body="address" type="string" required>
  Địa chỉ cần truy xuất lịch sử giao dịch.
</ParamField>

<ParamField body="limit" type="number" default="100">
  Số lượng giao dịch cần trả về. Phải nằm trong khoảng từ `1` đến `100`.
</ParamField>

<ParamField body="beforeSignature" type="string">
  Trả về các giao dịch trước chữ ký này.
</ParamField>

<ParamField body="afterSignature" type="string">
  Trả về các giao dịch sau chữ ký này.
</ParamField>

<ParamField body="paginationToken" type="string">
  Con trỏ do phản hồi trước trả về.
</ParamField>

<ParamField body="sortOrder" type="string" default="desc">
  Thứ tự sắp xếp cho các giao dịch được trả về.

  * `asc`
  * `desc`
</ParamField>

<ParamField body="commitment" type="string" default="confirmed">
  Mức cam kết được sử dụng để truy xuất lịch sử.

  * `confirmed`
  * `finalized`
</ParamField>

<ParamField body="includeRawTransaction" type="boolean" default="false">
  Khi `true`, bao gồm tải trọng giao dịch Solana thô dưới dạng `rawTransaction` trong mỗi kết quả.
</ParamField>

<ParamField body="slot" type="object">
  Các giới hạn so sánh slot. Mỗi giới hạn đều là tùy chọn: `gt`, `gte`, `lt`, `lte`.
</ParamField>

<ParamField body="time" type="object">
  Các giới hạn so sánh thời gian khối theo giây Unix. Mỗi giới hạn đều là tùy chọn: `gt`, `gte`, `lt`, `lte`.
</ParamField>

#### Phân trang

Phản hồi có cấu trúc sau. Mỗi mục `data` sử dụng cùng định dạng `TransactionResult` do Phân tích giao dịch trả về:

```json [expandable] theme={"system"}
{
  "data": [
    {
      "signature": "5xSKzM8bvpudE521jikHqASzMr23Ms4X4ieY3K8oFPFrJWCSSgYocJmHznrR8b12voDxKDH8ykdCLXSRrx6duVLH",
      "parserStatus": "OK",
      "parsed": {
        "slot": 433950192,
        "blockTime": 1784487060,
        "fee": 2005000,
        "feePayer": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
        "transactionStatus": "OK",
        "nativeTransfers": [],
        "tokenTransfers": [],
        "summary": {
          "type": "swap",
          "description": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52 swapped 1500 SOL for 64672839.26195 pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn via Jupiter",
          "parsedData": {
            "type": "swap",
            "protocol": "jupiter",
            "kind": "swap",
            "in_amount": "1500000000000",
            "actual_out_amount": "64672839261950",
            "input_mint": "So11111111111111111111111111111111111111112",
            "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
            "inner_swaps": [
              {
                "amm_program_id": "",
                "amm_program_name": null,
                "input_amount": "470229300000",
                "output_amount": "35579021038",
                "input_mint": "So11111111111111111111111111111111111111112",
                "output_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
              },
              {
                "amm_program_id": "",
                "amm_program_name": null,
                "input_amount": "1028270700000",
                "output_amount": "77798063361",
                "input_mint": "So11111111111111111111111111111111111111112",
                "output_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
              },
              {
                "amm_program_id": "",
                "amm_program_name": null,
                "input_amount": "14625643887",
                "output_amount": "8348494812168",
                "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
              },
              {
                "amm_program_id": "",
                "amm_program_name": null,
                "input_amount": "35566391375",
                "output_amount": "20283004384731",
                "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
              },
              {
                "amm_program_id": "",
                "amm_program_name": null,
                "input_amount": "63185049137",
                "output_amount": "36041340065051",
                "input_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
              }
            ]
          }
        },
        "instructions": []
      }
    }
  ],
  "paginationToken": "433950192:0"
}
```

Truyền lại `paginationToken` trong yêu cầu tiếp theo để tiếp tục. Nếu không có `paginationToken`, dịch vụ đã đến cuối phạm vi trang khả dụng.
