> For a complete page index, fetch https://docs.conduit.xyz/llms.txt

# eth_getProof

POST https://rpc.plume.org/YOUR_API_KEY
Content-Type: application/json

Returns the account and storage values including Merkle proof for the given account and storage keys at the specified block.

**Provider limits:** On OP Stack networks, Conduit-hosted RPCs limit `eth_getProof` to a recent history window. Requests for deep historical state may not be served. Katana networks are not affected.

⚡ Compute Units: [20 CU](https://docs.conduit.xyz/rpc-nodes/information/compute-units)

Reference: https://docs.conduit.xyz/rpc-nodes/json-rpc-reference/eth-get-proof

## Request

### Body (application/json)

This endpoint expects an object.

- `address` (string, required) — 20-byte address of the account
- `storageKeys` (list of string, required) — Array of storage keys to generate proofs for
- `blockIdentifier` (BlockNumberOrTagOrHash, required) — Block number, block hash, or one of "latest", "earliest", "pending", "finalized", "safe"

## Response

### 200

Proof object containing account and storage proofs

- `accountProof` (list of string, required)
- `balance` (string, required)
- `codeHash` (string, required)
- `nonce` (string, required)
- `storageHash` (string, required)
- `storageProof` (list of EthGetProofResultStorageProofItems, required)

## Types

### BlockNumberOrTagOrHash

### EthGetProofResultStorageProofItems

- `key` (string, optional) — Storage slot key (32-byte hex).
- `value` (string, optional) — Storage slot value as a quantity (hex-encoded integer). Zero values are typically encoded as "0x0", not 32 zero bytes.
- `proof` (list of string, optional)

## Examples

**Request**

```json
[
  "0xee03f376ad26948d24c2e3ae76c8d95c77930763",
  [
    "0x0000000000000000000000000000000000000000000000000000000000000000"
  ],
  "latest"
]
```

**Response**

```json
{
  "id": "1",
  "jsonrpc": "2.0",
  "result": {
    "accountProof": [
      "0xf90211a05144c49b23303f8df194202605f2ff14fa378d0eaa0756f9bea206471e4b2385a088f05cd990ac62f68b868e5ce1634a81dac0ed64bbbebb4042d49516e4349ed7a0ea9bf692f851e444b28b70da322c6442197112c1ca065c88e13be2b4a6db2e36a09a266da0e26d810639a138fc589ddad494e5a52784d1f095bf1a1e6250762ceba013079372231f7b025e710f58b5e803fb75225a21a9af4cf2257fa1a2064b15f1a025bdd88b3c0edc7e41c483d15622077d1b802936be93385d20c6cdbd4dbda227a0bd07ad6e0ba92873036c846a55b783369a1f80f00d50488120903b2d32aa5050a0623d9883096403491a8fe9d7ab7f1b94cf26f2c7a4e967d003ffdada4d15b8aea04048f545d0fb5af3836e5a47aceb212ca871a88748d1b9bbb8a618ed46ac8f03a0f938339743620247a01c753b8fb577b4da49e2ff6d3e3b63f4823301214a92a7a0ae2c958259e70d9ea1228bd30184107034906aa11de059401bd20a1a6bbb3c88a099e7a150eb2a4529525f0ae1c5b9dbf96e95b8d5f07abdaedef45ab7316e76c4a0f36c2608b6138d44d2c28f21ed122894abbad71ccf6a380a2ec46405722d0dbfa03c39e476f3b2a55b802f572d49e2bfba20325d85097c8be40a5c6918a3ea3f9fa07a0de04e0e9cacc9ec6395c564c3a3cf8b1b01c8a049fb608499a4f68ff22e25a0a4c640e48b59a341af72a0fc3f2977e3ff814ed6f5d0b29144d5ea576ebd995780",
      "0xf90211a0d89866b1d96e1b906f557e3b17a7282472f72353d0b2ba1c01aa0b015f4557aca05a267bb5f13756e57bcf59cc569065cdcdff78e7784e6e872dc2f7f32560c539a005afeb24d8b2de96af0eabbe8b940b032e3378ff08e4aafa26218c916165a2f5a06014a3a9eb11ab052041c8c4f8b1653f10f2417b6af7eab66489a548e1e71960a011097b1558842d23cc5b9952d8a0b0399866c0c0bb364da8b21403b59bf6efaca0c4fb31ebfc0902d4c1e4960e92ee05be57ab3331d60c567f5406d71231249e65a07575a66027e643dd4abae27bad09830bb833d4ed2a8b035a6a658d65792d1ae5a0bfe34721c1028574ea64f4398c47bd64efc59b1a898ebf952cae8315d3db5b31a082ee8a8bcfaada908e0cb29b1480b129ff514e8f1adc5395227611f85eb44b9ea03a2bf4c2e836277df3e1fa2c3ad39d9a2381cae9d0200c9518ff63866e3a13daa0614a8cfe6c1fa733ed53197675b1714435269a90b1fe3f94120799745426b69ea05488447844207f6bfed976a6ea1570c4c4bdd1c4ec8e62f645643f0984853614a094bae3f81ba68837bd7d484f86e87653489ef0f5bd84017ed38b331808656675a083c4b2afaaea4414de73557d66a3b3a3bcee4dceebbada0f907ec42ce7ec9a9aa04fe87b007240d3bef22f6baf5d23e024ea7c927a8883625174b834a3448fbcb0a0027750c6b73a8ca5c4c37e0cd9ee4b1de3486d43589aa55235568854b3e5802080",
      "0xf90211a04dbcaaa3bbd2ca5f2b6a3ca945281ade389867320f9be36a986b6a9083485a7da02faa4ef6615e2f386ebef7387caf905dde14e35af4b4beb1342a6d96978a93c0a0d643fc7f208c6b8dbf9942bc84be2e46a87d6fc721f53b550b8821ae3779a59ba06b5c0aafa632c265a18d4792d2dca7e8471371a5d53ed9445c24e21dd04eb5a5a071977f7f4b77f08dcd83e992b7e34eb3d28a81416abc8674996eebdec3f816c4a0ed49d061ea27560cb7fc14ecd0723978409d77ac47a5dbac2e561f2e16c2efa8a02c6e938d6c44d1afd462b842245e309c293e32dd170efe432806e0c7e3b2f8c8a0dec06cd6e75bc477de2a2cd2e9073b82a58c680bd1e1e44e4ed08288bc98b9a0a0a58d46ab8aa4ad08f4e37065cf64662d46a384e4c6bdfb710a7c06ab3d869c0ba0dfe803c878b30fcf147ca4032d608802f3908b2599981d36d23ef82b7b261494a034f97a10fa409a0c0e9af6b4036716ea243c737179773fc6c1adb1259c8c3049a065cd4e068b0bd0f3ca85390e92e07b1369fd84fecb47070d54128205bf4a0d28a052287007a79276898d88e405089ced05d42148b8049ea2d2ffd608cd425f32eca04a824abf4462618588af04de87ac9b8035dcdaa52fbe168f1ed733c9c2213665a0e11a76d1e27a85bacd2cf5e8f6707d590722ff71c9227fe2cc64ffcbd64e1ab4a02f6fda3ce565f9f3db251ab694475f35eacf07189a192b76e991f1a38832557680",
      "0xf90211a07a363be9296d74a0f5f3de93a54241fef3be5a3aaa84a9a713e33295ed6dd948a08297f6f39efa89d69b65ad99add871a11408892c4c41f6162b164d234f7f375aa0b4edf69e78f1aa0b5f8f917e6228d1f38acd6e95872c894d591e927ea5d690a4a0ff5645edb6cde379ac92252bb0cf88a9127a9cce7511f60dfac1c67c145487efa024c1286cc27b7198e94a79a10399cf983f6c94a7f2a3da078fa853e0d29d37aca03489a8a0cedbdc1757c2918d8666092f9855d98bc143d74f69f8122978cfecd9a0c5e1204cdc64dffd1ff659ecd8da948e60947ce5aab765bcd2ab2976892e1717a01113e28450c5c110942f51994006ec9be57ca49b7b06e5faa9745c199a38fb8da07aca14e5fc54665c9b99859f44723aaa7168c5c78ca9bbd81de94d6fb8f26279a0894490e50b1a81fdcbe9385356ebbbb488dfe9bb3f9ee5403fc70011ea150851a0d361ee3f054534942b9b2485cb4afdf03f512967478a0a6b4e0a22a000d1b593a0cd64091621d2ea499fef3afa11a2f4232f0a2abb072b82703b40438f913f63b3a020eb0d16d6f79d220aed4429c62755f0a88a7a04f5c4392f6b3a639074e86c2ca045aa5df3617bef40a00f5586352c77b3097b9ac9204b8652668976553937482ea05d07accd0dececf1b5e077e55ded8c336c3cef7bd0bef75558072f8009193296a044b07e19a91430a903f850cd0176edb2bc57a863113c9023a08216cf2fa5c30e80",
      "0xf90151a0c5752d0cd327901606ceba2aa254d48202edfef80a32e379acdf47e7589cfa05a09a3e83332f04d5c3bbf3a47a23889618c6ceedb652faf057975ad378c2d6f3e5a0c374563c67a132a39d827ec0b76fc0c840f1ca61e2312a4fcc6a8b49fe5a5a278080a079358297b66a2e549a64f6be9c1cf3af34129596c7436bfcab0704520cd990baa04867b9191892b6884660f815492f3e402fd4ceb858b3fd3a49d7fd2f04059dfea06c445dfabff2cc2e10735b5c465442e06de9954104c3baa3595eed4c598f0bd5a05de0e01109c1d627560c7313312e7f693675cf8050baef00dce323afe8cc814b80a0754f06159fc734a14d4e8bde51f35377dd6c655f745b1aa807cee0a7e7452d718080a074ce19904ad1965b5abd218f54957a5848769b2380d22d0236ad5bc8c554cb5080a058ea0ee7ef9e4c62325b679c55d8175e06e66d87877ffbaa3af9685b23624a8f80",
      "0xf8729e3a0c12f53b1113b9be7f7fc4f5454f15ab4e268d99043c703cbce1a4c413b851f84f820dbe890280b9b258e8c96df1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
    ],
    "address": "0xee03f376ad26948d24c2e3ae76c8d95c77930763",
    "balance": "0x280b9b258e8c96df1",
    "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
    "nonce": "0xdbe",
    "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "storageProof": [
      {
        "key": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "proof": [],
        "value": "0x0"
      }
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://rpc.plume.org/YOUR_API_KEY"

payload = ["0xee03f376ad26948d24c2e3ae76c8d95c77930763", ["0x0000000000000000000000000000000000000000000000000000000000000000"], "latest"]
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://rpc.plume.org/YOUR_API_KEY';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '["0xee03f376ad26948d24c2e3ae76c8d95c77930763",["0x0000000000000000000000000000000000000000000000000000000000000000"],"latest"]'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

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

func main() {

	url := "https://rpc.plume.org/YOUR_API_KEY"

	payload := strings.NewReader("[\n  \"0xee03f376ad26948d24c2e3ae76c8d95c77930763\",\n  [\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n  ],\n  \"latest\"\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(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://rpc.plume.org/YOUR_API_KEY")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "[\n  \"0xee03f376ad26948d24c2e3ae76c8d95c77930763\",\n  [\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n  ],\n  \"latest\"\n]"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://rpc.plume.org/YOUR_API_KEY")
  .header("Content-Type", "application/json")
  .body("[\n  \"0xee03f376ad26948d24c2e3ae76c8d95c77930763\",\n  [\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n  ],\n  \"latest\"\n]")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://rpc.plume.org/YOUR_API_KEY', [
  'body' => '[
  "0xee03f376ad26948d24c2e3ae76c8d95c77930763",
  [
    "0x0000000000000000000000000000000000000000000000000000000000000000"
  ],
  "latest"
]',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://rpc.plume.org/YOUR_API_KEY");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  \"0xee03f376ad26948d24c2e3ae76c8d95c77930763\",\n  [\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n  ],\n  \"latest\"\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["0xee03f376ad26948d24c2e3ae76c8d95c77930763", ["0x0000000000000000000000000000000000000000000000000000000000000000"], "latest"] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://rpc.plume.org/YOUR_API_KEY")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```