{"templateId":"markdown","versions":[{"version":"v1.40","label":"v1.40 STS","link":"/products/custody/governance/intents/sign-and-store-payloads","default":true,"active":false,"folderId":"c15a2701"},{"version":"v1.39","label":"v1.39 STS","link":"/products/custody/v1.39/governance/intents/sign-and-store-payloads","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.38","label":"v1.38 STS","link":"/products/custody/v1.38/governance/intents/sign-and-store-payloads","default":false,"active":true,"folderId":"c15a2701"},{"version":"v1.34","label":"v1.34 LTS","link":"/products/custody/v1.34/governance/intents/sign-and-store-payloads","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.26","label":"v1.26 LTS","link":"/products/custody/v1.26/governance/intents/sign-and-store-payloads","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.19","label":"v1.19 LTS","link":"/products/custody/v1.19/governance/intents/sign-and-store-payloads","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.15","label":"v1.15 LTS","link":"/products/custody/v1.15/governance/intents/sign-and-store-payloads","default":false,"active":false,"folderId":"c15a2701"}],"sharedDataIds":{"sidebar":"sidebar-products/custody/@v1.15/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","partial"]},"type":"markdown"},"seo":{"title":"Sign and store arbitrary payloads","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"sign-and-store-arbitrary-payloads","__idx":0},"children":["Sign and store arbitrary payloads"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can use the following two API intent types for payload signature and storage:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Sign a manifest: An intent that signs an arbitrary payload."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Notarize data: An intent that securely stores a payload."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sign-a-manifest","__idx":1},"children":["Sign a manifest"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There are three types of manifests you can sign:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["EIP-191: Payload signature based on the Ethereum EIP-191 standard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["JSON Web Token (JWT): Signature of a constructed JWT."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Unsafe: Signature of any arbitrary payload, including a message that represents a real transaction. To use this type, you need to enable it first by setting environment variable ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HMZ_NOTARY_ENABLE_UNSAFE_SIGN_MANIFESTS = TRUE"]}," in the notary container."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The primary purpose of this feature is to enable signature of any arbitrary message. Transactions broadcast on ledgers using ","Ripple Custody"," with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SignManifest"]}," route may result in unexpected product behavior."," ","For more information, contact the Ripple support team."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Prerequisite"},"children":["Prerequisite"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Additional information"},"children":["Additional information"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ID of the source account whose private key will produce the signature.",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"For EIP-191 manifests, this must be an Ethereum account."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/v1.38/accounts-and-assets/accounts/manage-accounts-api#view-account-details"},"children":["View account details"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A new intent ID, in a standard UUID format"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"sign-the-manifest","__idx":3},"children":["Sign the manifest"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"System change process"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All new requests to change the system state follow the same process. To familiarize yourself with this process first, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/v1.38/governance/intents/manage-intents-and-approvals"},"children":["Manage intents and approvals"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To sign a manifest, follow the steps in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/v1.38/governance/intents/manage-intents-and-approvals#submit-an-intent-with-the-api"},"children":["Submit an intent with the API"]},", with a payload similar to one of the following examples."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"payload-examples","__idx":4},"children":["Payload examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"sign-a-payload-with-a-eip-191-signature","__idx":5},"children":["Sign a payload with a EIP-191 signature"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"payload\":{\n        \"id\": \"b4446c6b-448c-48c6-b0c5-27fb2af441cd\",\n        \"accountId\": \"d259d90a-9050-4849-ad8a-4072ac509d9a\",\n        \"content\": {\n            \"value\": \"0x19457468657265756d205369676e6564204d6573736167653a0a33333957656c636f6d6520746f204f70656e536561210a0a436c69636b20746f207369676e20696e20616e642061636365707420746865204f70656e536561205465726d73206f6620536572766963653a2068747470733a2f2f6f70656e7365612e696f2f746f730a0a5468697320726571756573742077696c6c206e6f742074726967676572206120626c6f636b636861696e207472616e73616374696f6e206f7220636f737420616e792067617320666565732e0a0a596f75722061757468656e7469636174696f6e207374617475732077696c6c20726573657420616674657220323420686f7572732e0a0a57616c6c657420616464726573733a0a3078333662353163666135303637356661636332393038336362326330393361363237346230346639330a0a4e6f6e63653a0a63336561316363662d653032302d343430652d613935302d623462326139383862653433\",\n            \"type\": \"EIP-191\"\n        },\n        \"customProperties\": {},\n        \"type\": \"v0_SignManifest\"\n    }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fields of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payload"]}," block to note are as follows:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of intent, in this case ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v0_SignManifest"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of signature"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.value"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A hexidecimal string in format ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0x19 <1 byte version> <version specific data> <data to sign>"]},", where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<1 byte version>"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["00"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["01"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["45"]},", depending on the formatting the bytes must use. For example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["01"]}," means you can also sign messages in the EIP-712 standard format. You must check the formatting carefully, as no additional validation is performed by ","Ripple Custody","."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"sign-a-payload-with-a-jwt","__idx":6},"children":["Sign a payload with a JWT"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"\"payload\": {\n    \"id\": \"b4446c6b-448c-48c6-b0c5-27fb2af441cd\",\n    \"accountId\": \"777067ee-741b-4536-bbd0-4a11c04bcbd1\",\n    \"content\": {\n        \"header\": {\n            \"type\": \"at+jwt\",\n            \"algorithm\": \"RS256\",\n            \"additionalParameters\": {\n                \"custom_field\": \"custom value\"\n            }\n        },\n        \"payload\": {\n            \"issuer\": \"https://oauth-harmonize-qa-v4-1-7.m3t4c0.tech\",\n            \"subject\": \"MFkwEwYHKoZAQcDQgAE0h3vZHgWEw3JPK2J/a+ffK4cRwgGdHwzU2jfAC6X+LnDOEFeVA==\",\n            \"audience\": \"metaco\",\n            \"expiration\": 1668604952,\n            \"notBefore\": 1668590552,\n            \"issuedAt\": 1668590552,\n            \"jwtId\": \"Bkgw2n4gLO4SNMbbceY9e\",\n            \"additionalClaims\": {\n                \"custom_field\": \"custom value\"\n            }\n        },\n        \"type\": \"JWT\"\n    },\n    \"customProperties\": {\n        \"custom_property\": \"0x57656c636f6d6520746f204f70656e536561210a0a436c69636b20746f207369676e20696e20616e642061636365707420746865204f70656e536561205465726d73206f6620536572766963653a2068747470733a2f2f6f70656e7365612e696f2f746f730a0a5468697320726571756573742077696c6c206e6f742074726967676572206120626c6f636b636861696e207472616e73616374696f6e206f7220636f737420616e792067617320666565732e0a0a596f75722061757468656e7469636174696f6e207374617475732077696c6c20726573657420616674657220323420686f7572732e0a0a57616c6c657420616464726573733a0a3078333662353163666135303637356661636332393038336362326330393361363237346230346639330a0a4e6f6e63653a0a63336561316363662d653032302d343430652d613935302d623462326139383862653433\"\n       },\n       \"type\": \"v0_SignManifest\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fields of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payload"]}," block to note are as follows:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of intent, in this case ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v0_SignManifest"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of signature"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.header"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Header details of the payload to sign"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.payload"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Content details of the payload to sign"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"sign-an-unsafe-payload","__idx":7},"children":["Sign an unsafe payload"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"\n{\n    \"id\": \"a50f8c73-26b6-4198-9cda-a557ae3a3040\",\n    \"accountId\": \"54f87389-71f2-4e11-8dd4-427f876c96a1\",\n    \"description\": \"An unsafe type of signature\",\n    \"customProperties\": {},\n    \"content\": {\n        \"type\": \"Unsafe\",\n        \"value\": \"dGhpcyBpcyBmaW5lIQ==\"\n    },\n    \"type\": \"v0_SignManifest\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fields of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payload"]}," block to note are as follows:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of intent, in this case ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v0_SignManifest"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type of signature"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content.value"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Base64-encoded payload to sign. For a transaction object, this is the unsigned raw transaction."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"retrieve-the-manifest-signature","__idx":8},"children":["Retrieve the manifest signature"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To retrieve the signature generated for the manifest, call the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/v1.38/reference/api/openapi/accounts/getmanifest"},"children":["Get manifest details"]}," API operation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"store-a-payload","__idx":9},"children":["Store a payload"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v0_NotarizeData"]}," intent type is a generic intent that you can use to securely store a data payload. Once validated, it does not trigger any specific action other than to save the data contained in the payload in a secure state."," ","You can use this intent to trigger external effects to extend the capabilities of the system, such as to initiate fiat payment orders or trading orders."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To securely store a payload, follow the steps in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/v1.38/governance/intents/manage-intents-and-approvals#submit-an-intent-with-the-api"},"children":["Submit an intent with the API"]},", with a payload similar to the following example."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payload-example","__idx":10},"children":["Payload example"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"payload\": {\n        \"data\": \" ... \",\n        \"type\": \"v0_NotarizeData\"\n    }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no specific constraint on how to format the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]}," field."]}]},"headings":[{"value":"Sign and store arbitrary payloads","id":"sign-and-store-arbitrary-payloads","depth":1},{"value":"Sign a manifest","id":"sign-a-manifest","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":3},{"value":"Sign the manifest","id":"sign-the-manifest","depth":3},{"value":"Payload examples","id":"payload-examples","depth":4},{"value":"Sign a payload with a EIP-191 signature","id":"sign-a-payload-with-a-eip-191-signature","depth":5},{"value":"Sign a payload with a JWT","id":"sign-a-payload-with-a-jwt","depth":5},{"value":"Sign an unsafe payload","id":"sign-an-unsafe-payload","depth":5},{"value":"Retrieve the manifest signature","id":"retrieve-the-manifest-signature","depth":3},{"value":"Store a payload","id":"store-a-payload","depth":2},{"value":"Payload example","id":"payload-example","depth":3}],"frontmatter":{"seo":{"title":"Sign and store arbitrary payloads"}},"lastModified":"2026-07-27T10:10:43.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/custody/v1.38/governance/intents/sign-and-store-payloads","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}