# getAssetProof_v2

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

POST https://solana-mainnet.g.alchemy.com/v2/{apiKey}

Returns the cryptographic merkle proof for a compressed Solana NFT. The proof is required to validate a compressed asset's existence and data integrity on-chain (for transfers, burns, and other operations) without storing the full asset data.


Reference: https://www.alchemy.com/docs/reference/alchemy-das-apis-for-solana-v2/solana-das-api-v2-endpoints/get-asset-proof-v-2

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| id | string | Yes | The unique identifier (mint address) of the compressed NFT to retrieve the merkle proof for. |

## Result

**Merkle proof** (object): Returns the merkle proof for the specified compressed asset.

## Example

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "getAssetProof_v2",
  "params": [
    "Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss"
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "result": {
    "last_indexed_slot": 365750752,
    "root": "2o6Y6EiY3WXhoaEpei2pHmHLYnHDcEQVhgD89GrGHDBH",
    "proof": [
      "EmJXiXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosZjK",
      "7NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ",
      "6dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks",
      "A9AACJ5m7UtaVz4HxzhDxGjYaY88rc2XPoFvnoTvgYBj",
      "2VG5cKeBZdqozwhHGGzs13b9tzy9TXt9kPfN8MzSJ1Sm",
      "3E1uFze4pi6BnTZXMsQbeh3jQCeDi966Zax9aMbYgg2D",
      "Bx9PdctdWCeC1WfU6dwP49idsXCYhqyxbRLyLwwGhr61",
      "HSbJ8quT4vuXFgf5FnjzeUuFfAtLKsq6W1Frj8y1qrif",
      "GJMLzL4F4hY9yFHY1EY6XRmW4wpuNGeBZTiv7vM2mYra",
      "FYPtEiqmRx6JprHQvWeEWEuVp3WA7DPRCE4VbhFRVuAj",
      "6MJKrpnK1GbYsnEzwMRWStNGkTjAZF23NhzTQSQVXsD3",
      "HjnrJn5vBUUzpCxzjjM9ZnCPuXei2cXKJjX468B9yWD7",
      "4YCF1CSyTXm1Yi9W9JeYevawupkomdgy2dLxEBHL9euq",
      "E3oMtCuPEauftdZLX8EZ8YX7BbFzpBCVRYEiLxwPJLY2"
    ],
    "node_index": 16384,
    "leaf": "6YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv",
    "tree_id": "2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7",
    "burnt": false
  },
  "id": 1
}
```

## Code Examples

### cURL

```bash
curl --request POST \
  --url https://solana-mainnet.g.alchemy.com/v2/docs-demo \
  --header 'Content-Type: application/json' \
  --data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getAssetProof_v2",
  "params": [
    "Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss"
  ]
}'
```

### JavaScript

```javascript
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getAssetProof_v2',
    params: ['Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss']
  })
};

fetch('https://solana-mainnet.g.alchemy.com/v2/docs-demo', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://solana-mainnet.g.alchemy.com/v2/docs-demo"

payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAssetProof_v2",
    "params": ["Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss"]
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

### Go

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://solana-mainnet.g.alchemy.com/v2/docs-demo"

	payload := strings.NewReader("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"getAssetProof_v2\",\n  \"params\": [\n    \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\"\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
```

### Java

```java
HttpResponse<String> response = Unirest.post("https://solana-mainnet.g.alchemy.com/v2/docs-demo")
  .header("Content-Type", "application/json")
  .body("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"getAssetProof_v2\",\n  \"params\": [\n    \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\"\n  ]\n}")
  .asString();
```

### C#

```csharp
using RestSharp;


var options = new RestClientOptions("https://solana-mainnet.g.alchemy.com/v2/docs-demo");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"getAssetProof_v2\",\n  \"params\": [\n    \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\"\n  ]\n}", false);
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);

```


## OpenRPC Method Specification

```yaml
name: getAssetProof_v2
description: |
  Returns the cryptographic merkle proof for a compressed Solana NFT. The proof is required to validate a compressed asset's existence and data integrity on-chain (for transfers, burns, and other operations) without storing the full asset data.
x-compute-units: 160
x-rate-limit-cus: 200
paramStructure: by-name
params:
  - name: id
    required: true
    description: The unique identifier (mint address) of the compressed NFT to retrieve the merkle proof for.
    schema:
      title: Asset ID
      type: string
      description: The ID of the asset, typically a base-58 encoded string (mint address).
examples:
  - name: getAssetProof_v2 example
    params:
      - name: id
        value: Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss
    result:
      name: Merkle proof
      value:
        last_indexed_slot: 365750752
        root: 2o6Y6EiY3WXhoaEpei2pHmHLYnHDcEQVhgD89GrGHDBH
        proof:
          - EmJXiXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosZjK
          - 7NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ
          - 6dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks
          - A9AACJ5m7UtaVz4HxzhDxGjYaY88rc2XPoFvnoTvgYBj
          - 2VG5cKeBZdqozwhHGGzs13b9tzy9TXt9kPfN8MzSJ1Sm
          - 3E1uFze4pi6BnTZXMsQbeh3jQCeDi966Zax9aMbYgg2D
          - Bx9PdctdWCeC1WfU6dwP49idsXCYhqyxbRLyLwwGhr61
          - HSbJ8quT4vuXFgf5FnjzeUuFfAtLKsq6W1Frj8y1qrif
          - GJMLzL4F4hY9yFHY1EY6XRmW4wpuNGeBZTiv7vM2mYra
          - FYPtEiqmRx6JprHQvWeEWEuVp3WA7DPRCE4VbhFRVuAj
          - 6MJKrpnK1GbYsnEzwMRWStNGkTjAZF23NhzTQSQVXsD3
          - HjnrJn5vBUUzpCxzjjM9ZnCPuXei2cXKJjX468B9yWD7
          - 4YCF1CSyTXm1Yi9W9JeYevawupkomdgy2dLxEBHL9euq
          - E3oMtCuPEauftdZLX8EZ8YX7BbFzpBCVRYEiLxwPJLY2
        node_index: 16384
        leaf: 6YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv
        tree_id: 2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7
        burnt: false
result:
  name: Merkle proof
  description: Returns the merkle proof for the specified compressed asset.
  schema:
    title: Merkle proof
    type: object
    description: Merkle proof information for a compressed asset.
    properties:
      last_indexed_slot:
        type: integer
        description: All on-chain data up to and including this slot is guaranteed to have been indexed.
      root:
        type: string
        description: The root hash of the state-compression merkle tree containing this compressed NFT.
      proof:
        type: array
        description: The array of merkle proof hashes needed to cryptographically verify this compressed NFT exists in the tree.
        items:
          type: string
      node_index:
        type: integer
        description: The position index of this compressed NFT in the merkle tree structure.
      leaf:
        type: string
        description: The leaf hash representing this compressed NFT's data in the merkle tree.
      tree_id:
        type: string
        description: The unique identifier of the merkle tree where this compressed NFT is stored.
      burnt:
        type: boolean
        description: Whether the asset has been burnt.
```
