List policy changes
Each change contains a complete snapshot of the record at that
point in time, the action performed (create, update, or
drop), and a timestamp. Changes are returned newest first.
After a record is deleted, its change history remains accessible but must be queried using the record's LUID instead of its handle.
Usage Examples
curl -X GET "http://localhost:3000/v2/policies/<HANDLE>/changes" \ -H "x-ledger: <YOUR LEDGER HANDLE>"{
"hash": "3031e2302b29039916eac0c4a6872a88b934de3eb0ecf088568b48a3c790e764",
"data": [
{
"luid": "$plc.-01xK6wXyZ7iX9BC8",
"hash": "021af67fdd7a79e0f820f412eeefe62e8da2f6bc13824071008a0de5335eb232",
"data": {
"handle": "admin-policy",
"parent": "7cf05252a4472a155a39edc222a26cb8fc9f85d60ecb2841e028b02c379de963",
"schema": "access",
"record": "policy",
"values": [
{
"action": "any",
"signer": {
"$circle": "admin"
}
}
]
},
"meta": {
"status": "created",
"action": "update",
"change": 2,
"moment": "2025-04-05T14:30:00.220Z",
"owners": [
"AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8="
],
"proofs": [
{
"signer": "ach-admin",
"method": "ed25519-v2",
"digest": "5c8e9dd78391ec081f776d3c02fada943cad79da4933e5c23e1dbda2e822de6e",
"public": "AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8=",
"result": "XAd2A4Xzm5lZPD8/hO5p6LKMj1Xdo2BtSIkJgk8zrBUIip1W7mcrkGLpIpK0OUdd3wwAruIKD2/IkF5VbtdZDA==",
"custom": {
"moment": "2025-04-05T14:30:00.200Z"
}
},
{
"signer": "system",
"method": "ed25519-v2",
"digest": "cf5c2466e582a949a6369a020cc040627856eb71020b7e6062778271b11fc3ae",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "EHVnVWt9yMyUpGWMcIZ9YaV3rfIWT6amIiuH/s6GIlzmEqtzmVIsYOxuTIZpLXcIorDnt4lvzSQH/zQ4RL+CCw==",
"custom": {
"luid": "$plc.-01xK6wXyZ7iX9BC8",
"moment": "2025-04-05T14:30:00.220Z"
}
}
]
}
},
{
"luid": "$plc.-01xK6wXyZ7iX9BC8",
"hash": "7cf05252a4472a155a39edc222a26cb8fc9f85d60ecb2841e028b02c379de963",
"data": {
"handle": "admin-policy",
"schema": "access",
"record": "any",
"values": [
{
"action": "any",
"signer": {
"$circle": "admin"
}
}
]
},
"meta": {
"status": "created",
"action": "create",
"change": 1,
"moment": "2025-04-05T14:30:00.050Z",
"owners": [
"AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8="
],
"proofs": [
{
"signer": "ach-admin",
"method": "ed25519-v2",
"digest": "374422ed861753b7ae317172751fae081a8450e515387c120ed8eace1733b612",
"public": "AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8=",
"result": "2UOiiMOYmQFsduziE62Kg8F0lZ4mwZYYF6lXijqjGDMWxaqCv72mF42P8/bVsJMGQattLAXFrencq5/Mc7rVCQ==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z",
"status": "created"
}
},
{
"signer": "system",
"method": "ed25519-v2",
"digest": "582080899a94d868fc76331c26bf3bbe3de75fe1c140be5bb7cfe9ccb51fa629",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "SOn8asw27mPCGLkbaRkIcZhUWAv6uCAFRIqdWnBt+rNmVMqSLybMytGLTVGKGeglhfdPY/L7TQ3+KVvOenCtDQ==",
"custom": {
"luid": "$plc.-01xK6wXyZ7iX9BC8",
"moment": "2025-04-05T14:30:00.050Z",
"status": "created"
}
}
]
}
}
],
"page": {
"index": 0,
"limit": 20,
"total": 2
},
"meta": {
"moment": "2025-04-05T14:30:00.300Z",
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "7f685a1ec9c4d589f81ed94f612338db58c2aa2c85b3b939a9b31f73657f19ea",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "op90IO5txVJJzun8hEw9GLi0luW2+9/e22eid5LjjsS906/Q8i4lCqctwmGKxNSUCq4nFjqJjjhCKb5nm7IhBw==",
"custom": {
"moment": "2025-04-05T14:30:00.100Z"
}
}
]
}
}{
"hash": "b7eb7ccf5ffc126951e13e29a8dcfdaf95db859715d4edfc2d16f59a79d4cd58",
"data": {
"reason": "auth.unauthorized",
"detail": "Invalid token."
},
"meta": {
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "3acece870c4118bfe4223118e4d2f3cfd5b8947a7093785b66d49aa57fa2890a",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "gnK63DqqWDY/UXvnZHixDKPKS6tfeGHgdARylnPiJLwQGyYxuD97TYbSg2wrzsf/bDrHwQYZaf8Gu5ryYP0UAA==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z"
}
}
]
}
}{
"hash": "9ec02726b50650add8acfd124c6defeb978a9ac252a5de888f9493ddc701e927",
"data": {
"reason": "auth.forbidden",
"detail": "Request is not authorized"
},
"meta": {
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "4f8cbdc38d73348de0c31805c783c84a0fecc6be736d7e187004ba68cd00e675",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "P3hRnveehtuobb4AIO56XBmiduvmYJbpdmOHltG/IifBEH7QSWdv/0pqled4SO9x1Ne3oXuWxJy40DzMvx1MBA==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z"
}
}
]
}
}{
"hash": "d6c59a6df7165fa4a75159799ca5f5e26e544cbb8769eced3d35d8021f6f7935",
"data": {
"reason": "record.not-found",
"detail": "Signer not found"
},
"meta": {
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "78cf86f34aefcf9da6ed4167a38aac0a2739f68f7bafb1d3e033c01ed1b6cdf1",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "9Ledk+/iAAtj+uLjGe2afq4kID7n8UQD6UpRpLBCujxFjxddq0uZ2tnYRTAXmYdHDkbF0uXqtNM9qO3xhEtpAA==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z"
}
}
]
}
}{
"hash": "1c084e8dcfb9bb84bc8ea96e9e137b149a34b2bbd85f8e60b4263f5aba980476",
"data": {
"custom": {
"errors": [
{
"instancePath": "/handle",
"schemaPath": "#/properties/handle/pattern",
"keyword": "pattern",
"params": {
"pattern": "^[a-zA-Z0-9_\\-+.]+$"
},
"message": "must match pattern \"^[a-zA-Z0-9_\\-+.]+$\""
}
]
},
"reason": "record.schema-invalid",
"detail": "Schema validator error: data.handle must match pattern \"^[a-zA-Z0-9_\\-+.]+$\""
},
"meta": {
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "7a5febb431719b6f43d7e88e79211308e16ac651b71b339276373fdb4e7c3760",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "2/1zYw4AaIzsIHfOIC6V/CHw6owbjYHt48cwmFOig0ibeT0IbojLmj1RCRi8W00ka0udPa9WsacWDd7ObMY8CA==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z"
}
}
]
}
}{
"hash": "93a5f4d97a42c2df97f827c58ff7768d02568c15aca931e22b81fa3160ba0df3",
"data": {
"reason": "api.unexpected-error",
"detail": "An unexpected error occurred"
},
"meta": {
"proofs": [
{
"signer": "system",
"method": "ed25519-v2",
"digest": "efaf5360143b586917d9636779ad6e08571c5b06909a20dd0f5eba4bf3be7eae",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "hERh6Aecj59iR+Fb25OQsHJScOi4t8EiffKSfjlMQdjHMccTnfDlgZFdaJzXzUtpSwy/NHq0l+7ydh3HSWCoAg==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z"
}
}
]
}
}Path Parameters
The unique identifier of the record - it is luid or handle (address).
Query Parameters
Pagination options. Set limit and index to page through results.
Filter by field values using dot notation (e.g. data.handle=value). Operators like $in and $regex are optional — equality is the default.
Header Parameters
The unique identifier of ledger in context for multi tenant requests.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
Check policy access POST
Evaluates access policies for the calling signer and returns the resolved permissions. The request body specifies the action and optionally the record type to check against.
Get policy change GET
Returns a single change by its sequence number. The change includes a full record snapshot as it existed at that point.