# getAssetProofBatch_v2

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

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

Returns merkle proofs for multiple compressed Solana NFTs in a single batch request. The response is an object keyed by asset ID, where each value is the corresponding merkle proof.


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

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| ids | string[] | Yes | An array of compressed asset IDs (mint addresses) to retrieve merkle proofs for. |

## Result

**Merkle proof batch** (object): Returns an object keyed by asset ID, with each value being the corresponding merkle proof.

## Example

### Request

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

### Response

```json
{
  "jsonrpc": "2.0",
  "result": {
    "Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss": {
      "last_indexed_slot": 365750752,
      "root": "2o6Y6EiY3WXhoaEpei2pHmHLYnHDcEQVhgD89GrGHDBH",
      "proof": [
        "EmJXiXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosZjK",
        "7NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ",
        "6dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks"
      ],
      "node_index": 16384,
      "leaf": "6YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv",
      "tree_id": "2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7",
      "burnt": false
    },
    "8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo": {
      "last_indexed_slot": 365750752,
      "root": "3wUvxFmVdX5rEcHNM8vT4bnZjQyaXvBzUWnyKfg9SVep",
      "proof": [
        "AbF4iXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosXyZ",
        "8NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ",
        "7dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks"
      ],
      "node_index": 16385,
      "leaf": "7YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv",
      "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": "getAssetProofBatch_v2",
  "params": [
    [
      "Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss",
      "8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo"
    ]
  ]
}'
```

### JavaScript

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

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": "getAssetProofBatch_v2",
    "params": [["Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss", "8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo"]]
}
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\": \"getAssetProofBatch_v2\",\n  \"params\": [\n    [\n      \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\",\n      \"8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo\"\n    ]\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\": \"getAssetProofBatch_v2\",\n  \"params\": [\n    [\n      \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\",\n      \"8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo\"\n    ]\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\": \"getAssetProofBatch_v2\",\n  \"params\": [\n    [\n      \"Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss\",\n      \"8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo\"\n    ]\n  ]\n}", false);
var response = await client.PostAsync(request);

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

```


## OpenRPC Method Specification

```yaml
name: getAssetProofBatch_v2
description: |
  Returns merkle proofs for multiple compressed Solana NFTs in a single batch request. The response is an object keyed by asset ID, where each value is the corresponding merkle proof.
x-compute-units: 480
x-rate-limit-cus: 200
paramStructure: by-name
params:
  - name: ids
    required: true
    description: An array of compressed asset IDs (mint addresses) to retrieve merkle proofs for.
    schema:
      type: array
      items:
        title: Asset ID
        type: string
        description: The ID of the asset, typically a base-58 encoded string (mint address).
examples:
  - name: getAssetProofBatch_v2 example
    params:
      - name: ids
        value:
          - Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss
          - 8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo
    result:
      name: Merkle proof batch
      value:
        Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss:
          last_indexed_slot: 365750752
          root: 2o6Y6EiY3WXhoaEpei2pHmHLYnHDcEQVhgD89GrGHDBH
          proof:
            - EmJXiXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosZjK
            - 7NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ
            - 6dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks
          node_index: 16384
          leaf: 6YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv
          tree_id: 2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7
          burnt: false
        8vw7tdLGE3FBjaetsJrZAbbyssUrXai1aBJbUnj5S5uo:
          last_indexed_slot: 365750752
          root: 3wUvxFmVdX5rEcHNM8vT4bnZjQyaXvBzUWnyKfg9SVep
          proof:
            - AbF4iXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosXyZ
            - 8NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ
            - 7dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks
          node_index: 16385
          leaf: 7YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv
          tree_id: 2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7
          burnt: false
result:
  name: Merkle proof batch
  description: Returns an object keyed by asset ID, with each value being the corresponding merkle proof.
  schema:
    title: Merkle proof batch
    type: object
    description: |
      A batch of merkle proofs keyed by asset ID. The response is an object where each key is a requested asset ID and each value is the corresponding `MerkleProof` (or null if not found).
    additionalProperties:
      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.
```
