Add signer proof
Appends a signed proof to the record. The proof must be signed against the record's current hash. Use proofs to change status, update labels, or record custom data — see About Proofs for details.
Returns the updated record with the new proof in meta.proofs.
Broadcasts the signer-proofs-added signal. Use
effects to subscribe.
Usage Examples
curl -X POST "http://localhost:3000/v2/signers/<HANDLE>/proofs" \ -H "x-ledger: <YOUR LEDGER HANDLE>" \ -H "Content-Type: application/json" \ -d '{ "method": "ed25519-v2", "public": "AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8=", "digest": "1fb7e4c33ce4a380b1fbdc330a52a880397f994dbfefecb0978057fd7c58cb76", "result": "uDXIHiXOprf9w+598d78NKhDsqdhCm5Av7N+iZIhZV5dAOQ7SN7V1vyHsud8HvaFUDlbY4T7Z0XmsgzhEBUOBg==", "custom": { "moment": "2025-04-05T14:30:10.000Z", "status": "active" } }'{
"luid": "$snr.-01xK0qRsS1cR3vW2",
"hash": "f66c97de69f4a5adf04ea8f53133d44ff44295d3de26e0751934a37acfa2ecb7",
"data": {
"handle": "tesla-bank-admin",
"public": "dsZvr0rEw9sIffHlv1VP65x1NB8GeXezIv6HONk1SIk=",
"format": "ed25519-raw"
},
"meta": {
"status": "active",
"moment": "2025-04-05T14:30:10.020Z",
"owners": [
"AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8="
],
"proofs": [
{
"signer": "ach-admin",
"method": "ed25519-v2",
"digest": "01d46b4475721c0ed4f482fbbfd31f6bd15a0646578e177ca52416b72f0c5f9c",
"public": "AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8=",
"result": "rqvAX7Z/pjLbpcTHe8Kk48uGHRjX+RPXNZ3es3v+gimsUXpV65CGYL0c5JVJ+HW6PhKTMWTEewmi1GHxlZT4Aw==",
"custom": {
"moment": "2025-04-05T14:30:00.000Z",
"status": "created"
}
},
{
"signer": "system",
"method": "ed25519-v2",
"digest": "abd28fa9ceab7b95e6762449f65894bd4077b1db2b58310ce9d08b3a58be21e3",
"public": "bctQzN7mjMUNBIx4aSC8WYn03GJWoJjL/KrDb38oU5c=",
"result": "1Evc27DzOcv8zcVJgAAMC7vy2+MiyqqdJxipBAtNxWXcBARf9g7KXMzF+RVH/6VNGqg3LIDtF+v44FDqdK47Bg==",
"custom": {
"luid": "$snr.-01xK0qRsS1cR3vW2",
"moment": "2025-04-05T14:30:00.050Z",
"status": "created"
}
},
{
"signer": "ach-admin",
"method": "ed25519-v2",
"digest": "1fb7e4c33ce4a380b1fbdc330a52a880397f994dbfefecb0978057fd7c58cb76",
"public": "AN6XpZ7T8FDCkjbSpIVE2cioQ7hajp8DBTOioz/TSZ8=",
"result": "uDXIHiXOprf9w+598d78NKhDsqdhCm5Av7N+iZIhZV5dAOQ7SN7V1vyHsud8HvaFUDlbY4T7Z0XmsgzhEBUOBg==",
"custom": {
"moment": "2025-04-05T14:30:10.000Z",
"status": "active"
}
}
]
}
}{
"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).
Header Parameters
The unique identifier of ledger in context for multi tenant requests.
Request Body
application/json
Proof body
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
Update signer PUT
The request must include the current record hash in `data.parent` to prevent conflicts from concurrent updates. If the parent hash does not match the record's current hash, the request is rejected with a 422 error. Broadcasts the `signer-updated` signal. Use [effects](/ledger/reference/api/effect) to subscribe.
Create signer factor POST
Supported factor types include `key-pair` for cryptographic key authentication and `oauth-client-credentials` for OAuth 2.0 token exchange. Each factor stores the credentials needed to verify the signer's identity. Secrets such as private keys and client secrets are encrypted at rest and never returned in API responses. Broadcasts the `signer-factor-created` signal. Use [effects](/ledger/reference/api/effect) to subscribe.