> For the complete documentation index, see [llms.txt](https://docs.solanavibestation.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solanavibestation.com/api-reference/rewind/getaccountchanges.md).

# 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"}}}}}}
```
