# getAccountChanges

## getAccountChanges — Paginated per-write change history for one pubkey

> Paginated change history for one pubkey in \`\[fromSlot, toSlot]\`, newest first.\
> \
> \*\*Parameters\*\*\
> \
> 0\. \`pubkey\` (required) — base58 pubkey.\
> 1\. \`config\` (required) — see fields below.\
> \
> Filter on \`dataChanged: true\` for a fast "show me only the writes that mutated bytes" view without paying to hydrate data blobs.<br>

```json
{"openapi":"3.0.3","info":{"title":"Rewind RPC: getAccountChanges","version":"1.0.0"},"tags":[{"name":"Rewind","description":"Historical account state and per-write change history."}],"servers":[{"url":"https://basic.rpc.solanavibestation.com","description":"Basic tier"},{"url":"https://ultra.rpc.solanavibestation.com","description":"Ultra tier"},{"url":"https://elite.rpc.solanavibestation.com","description":"Elite tier"},{"url":"https://epic.rpc.solanavibestation.com","description":"Epic tier"}],"security":[{},{"AuthHeader":[]},{"URLParameter":[]}],"components":{"securitySchemes":{"AuthHeader":{"type":"apiKey","in":"header","name":"Authorization","description":"Pass `Authorization: <api-key>` on each request."},"URLParameter":{"type":"apiKey","in":"query","name":"api_key","description":"Pass `?api_key=<api-key>` on t"}},"schemas":{"DataSlice":{"type":"object","required":["offset","length"],"properties":{"offset":{"type":"integer","format":"int64","minimum":0},"length":{"type":"integer","format":"int64","minimum":0}}},"Anchor":{"type":"object","required":["signature"],"description":"Per-tx resume cursor. The named transaction is looked up in the archive index and used as the boundary:\n- `position: \"before\"` (default) — page starts with the most recent write strictly older than the named tx.\n- `position: \"after\"` — page starts with the named tx's own writes (inclusive), then walks older.","properties":{"signature":{"type":"string"},"position":{"type":"string","enum":["before","after"],"default":"before"}}},"JsonRpcEnvelope":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]}}},"RewindContext":{"type":"object","required":["apiVersion","slot"],"properties":{"apiVersion":{"type":"string"},"slot":{"type":"integer","format":"int64","description":"For this method, echoes `toSlot`."}}},"Change":{"type":"object","required":["slot","lamports","owner","executable","rentEpoch","space","dataHash","dataChanged"],"properties":{"slot":{"type":"integer","format":"int64","description":"Slot the write committed in."},"lamports":{"type":"integer","format":"int64","description":"Lamport balance after this write."},"owner":{"type":"string","description":"Owning program after this write (base58)."},"executable":{"type":"boolean"},"rentEpoch":{"type":"integer","format":"int64"},"space":{"type":"integer","format":"int64","description":"Original (pre-`dataSlice`) byte length."},"dataHash":{"type":"string","description":"Lowercase hex of the stored content hash. Stable identifier for byte-equal data versions."},"txnSignature":{"type":"string","nullable":true,"description":"Base58 signature that produced the write, or `null` for system / sysvar updates and the small fraction of writes the upstream stream emits without per-tx attribution."},"dataChanged":{"type":"boolean","description":"`true` if this write actually mutated bytes vs. its predecessor; `false` if only metadata (lamports/owner/etc.) changed."},"data":{"oneOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"object","additionalProperties":true}],"description":"Only present when `includeData=true`. Same shape as `getAccountInfo`."}}},"Gap":{"type":"object","required":["fromSlot","toSlot","status"],"properties":{"fromSlot":{"type":"integer","format":"int64"},"toSlot":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["missing","unknown"]}}},"JsonRpcErrorResponse":{"type":"object","required":["jsonrpc","id","error"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"error":{"$ref":"#/components/schemas/JsonRpcError"}}},"JsonRpcError":{"type":"object","required":["code","message"],"description":"Rewind codes specific to this method: `-32014` `toSlot` past `latestSlot` (hard error — no soft-clipping); `-32015` `fromSlot` before `earliestSlot`; `-32016` signature not found. `-32018` is **not** returned here — gaps are surfaced inline via `value.gaps[]`.\n","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","additionalProperties":true}}}},"responses":{"UnauthorizedError":{"description":"Authentication required or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcErrorResponse"}}}},"ForbiddenError":{"description":"Insufficient permissions for the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcErrorResponse"}}}},"TooManyRequestsError":{"description":"Rate limit exceeded for this tier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcErrorResponse"}}}},"InternalServerError":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcErrorResponse"}}}}}},"paths":{"/rewind":{"post":{"operationId":"getAccountChanges","summary":"getAccountChanges — Paginated per-write change history for one pubkey","tags":["Rewind"],"description":"Paginated change history for one pubkey in `[fromSlot, toSlot]`, newest first.\n\n**Parameters**\n\n0. `pubkey` (required) — base58 pubkey.\n1. `config` (required) — see fields below.\n\nFilter on `dataChanged: true` for a fast \"show me only the writes that mutated bytes\" view without paying to hydrate data blobs.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getAccountChanges"]},"params":{"type":"array","description":"Positional parameters [pubkey, config].","minItems":2,"maxItems":2,"items":{"anyOf":[{"title":"pubkey","type":"string","description":"Account pubkey, base58."},{"title":"config","type":"object","required":["fromSlot","toSlot"],"properties":{"fromSlot":{"type":"integer","format":"int64","description":"Lower bound (inclusive). Must satisfy `fromSlot <= toSlot`."},"toSlot":{"type":"integer","format":"int64","description":"Upper bound (inclusive)."},"limit":{"type":"integer","format":"int32","default":100,"minimum":1,"description":"Capped at 1000 (`includeData=false`) or 50 (`includeData=true`)."},"includeData":{"type":"boolean","default":false},"encoding":{"type":"string","enum":["base64","base64+zstd","base58"],"description":"Required when `includeData=true`. `jsonParsed` is not supported."},"dataSlice":{"$ref":"#/components/schemas/DataSlice"},"before":{"type":"string","description":"Resume cursor. Pass back the value from a prior response's `value.next` to continue strictly older. Mutually exclusive with `anchor`."},"anchor":{"$ref":"#/components/schemas/Anchor"}}}]}}}}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/JsonRpcEnvelope"},{"type":"object","required":["result"],"properties":{"result":{"type":"object","required":["context","value"],"properties":{"context":{"$ref":"#/components/schemas/RewindContext"},"value":{"type":"object","required":["changes","truncatedByBytes","gaps"],"properties":{"changes":{"type":"array","items":{"$ref":"#/components/schemas/Change"}},"next":{"type":"string","nullable":true,"description":"Opaque resume cursor. `null` when the last page has been returned; otherwise pass back as `before` on the next call."},"truncatedByBytes":{"type":"boolean","description":"True if the 10 MiB response cap was reached. `next` is overridden to point at the first entry that didn't fit."},"gaps":{"type":"array","description":"Every MISSING/UNKNOWN coverage gap inside `[fromSlot, toSlot]`. SKIPPED ranges are filtered out.","items":{"$ref":"#/components/schemas/Gap"}}}}}}}}]}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/TooManyRequestsError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.solanavibestation.com/developers/rewind/overview/getaccountchanges.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
