{"templateId":"markdown","versions":[{"version":"v1.39","label":"v1.39 STS","link":"/products/custody/identity-and-access/vault-management/cold-vault-setup-api","default":true,"active":true,"folderId":"c15a2701"},{"version":"v1.38","label":"v1.38 STS","link":"/products/custody/v1.38/identity-and-access/vault-management/cold-vault-setup-api","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.34","label":"v1.34 LTS","link":"/products/custody/v1.34/identity-and-access/vault-management/cold-vault-setup-api","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.26","label":"v1.26 LTS","link":"/products/custody/v1.26/identity-and-access/vault-management/cold-vault-setup-api","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.19","label":"v1.19 LTS","link":"/products/custody/v1.19/identity-and-access/vault-management/cold-vault-setup-api","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.15","label":"v1.15 LTS","link":"/products/custody/v1.15/identity-and-access/vault-management/cold-vault-setup-api","default":false,"active":false,"folderId":"c15a2701"}],"sharedDataIds":{"sidebar":"sidebar-products/custody/@v1.15/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Process cold vault operations with the API","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":"process-cold-vault-operations-with-the-api","__idx":0},"children":["Process cold vault operations with the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this page for programmatic cold vault operations. For the conceptual model, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/vault-management/cold-vaults"},"children":["Cold vaults"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cold vault workflows involve two systems:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The online ","Ripple Custody"," API, which requires JWT authentication."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The cold bridge API, which runs on the air-gapped workstation and provides local endpoints for upload, status, download, and payload inspection."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"api-endpoints","__idx":1},"children":["API endpoints"]},{"$$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":"Operation"},"children":["Operation"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"System"},"children":["System"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Export pending operations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Online API"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/paths/~1v1~1vaults~1{vaultid}~1operations~1prepared/get"},"children":["Export prepared operations"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Import signed operations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Online API"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/paths/~1v1~1vaults~1operations~1signed/post"},"children":["Import signed operations"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get vault details"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Online API"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/getvault"},"children":["Get vault details"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Upload operations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cold bridge"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST {ColdBridgeURL}/v1/feed/upload"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check signing status"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cold bridge"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET {ColdBridgeURL}/v1/feed/status"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Download signed operations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cold bridge"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET {ColdBridgeURL}/v1/feed/download"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Decode payload"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cold bridge"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST {ColdBridgeURL}/v1/feed/decode"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"complete-the-first-time-vault-handshake","__idx":2},"children":["Complete the first-time vault handshake"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you register a new cold vault, it can be created in a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Pending"]}," state because the cold vault cannot automatically connect to the online deployment. Complete the handshake by downloading the vault payload from the cold bridge and importing it into ","Ripple Custody","."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the air-gapped workstation, download the vault payload from the cold bridge:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X GET \"{ColdBridgeURL}/v1/feed/download?clean=false\" \\\n  --output cold-vault-handshake.dat\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clean=false"]}," until the payload is successfully imported. After confirming successful import, you can use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clean=true"]}," to clear the cold bridge cache."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transfer ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cold-vault-handshake.dat"]}," to the online environment using your approved transfer process."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Import the payload into ","Ripple Custody"," with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/paths/~1v1~1vaults~1operations~1signed/post"},"children":["Import signed operations"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X POST \"${CUSTODY_API_URL}/v1/vaults/operations/signed\" \\\n  -H \"Authorization: Bearer ${JWT_TOKEN}\" \\\n  -F \"files=@cold-vault-handshake.dat\"\n","lang":"sh"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Verify that the vault status is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Completed"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X GET \"${CUSTODY_API_URL}/v1/vaults/${VAULT_ID}\" \\\n  -H \"Authorization: Bearer ${JWT_TOKEN}\"\n","lang":"sh"},"children":[]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After the vault status is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Completed"]},", you can use the vault for account creation, transactions, and manifests."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"process-accounts-transactions-or-manifests","__idx":3},"children":["Process accounts, transactions, or manifests"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any accounts, transactions, or manifests created for a cold vault remain ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Pending"]}," until the cold vault signs the prepared operations. You can batch multiple pending operations into the same export."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-export-pending-operations","__idx":4},"children":["Step 1: Export pending operations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/paths/~1v1~1vaults~1{vaultid}~1operations~1prepared/get"},"children":["Export prepared operations"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X GET \"${CUSTODY_API_URL}/v1/vaults/${VAULT_ID}/operations/prepared\" \\\n  -H \"Authorization: Bearer ${JWT_TOKEN}\" \\\n  --output cold-vault-operations.dat\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transfer ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cold-vault-operations.dat"]}," to the air-gapped workstation using your approved transfer process."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-decode-and-verify-the-payload","__idx":5},"children":["Step 2: Decode and verify the payload"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the cold bridge decode endpoint to inspect the exported payload before signing:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X POST \"{ColdBridgeURL}/v1/feed/decode\" \\\n  -F \"files=@cold-vault-operations.dat\"\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For transactions, verify the destination address, amount, network, and fees before allowing the cold vault to sign."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"danger","name":"Verify before signing"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cold vault signing is a high-control operation. Decode and review the payload before signing, especially for transactions. Once a signed transaction is broadcast to the blockchain network, it cannot be recalled by ","Ripple Custody","."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-upload-operations-to-the-cold-bridge","__idx":6},"children":["Step 3: Upload operations to the cold bridge"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Upload the exported file to the cold bridge:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X POST \"{ColdBridgeURL}/v1/feed/upload\" \\\n  -F \"files=@cold-vault-operations.dat\"\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After upload, the vault processes the data from the cold bridge and signs the pending operations."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4-check-signing-status","__idx":7},"children":["Step 4: Check signing status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call the cold bridge status endpoint:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X GET \"{ColdBridgeURL}/v1/feed/status\"\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response includes counters for unsigned and signed operations:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"accountToSign\": 0,\n  \"accountSigned\": 0,\n  \"transactionToSign\": 0,\n  \"transactionSigned\": 0,\n  \"manifestToSign\": 0,\n  \"manifestSigned\": 0\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ToSign"]}," counters are zero, all pending operations in the uploaded payload have been signed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-5-download-signed-operations","__idx":8},"children":["Step 5: Download signed operations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Download the signed payload from the cold bridge:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X GET \"{ColdBridgeURL}/v1/feed/download?clean=false\" \\\n  --output signed-cold-vault-operations.dat\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transfer ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["signed-cold-vault-operations.dat"]}," back to the online environment."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-6-import-signed-operations","__idx":9},"children":["Step 6: Import signed operations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Import the signed payload into ","Ripple Custody"," with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/reference/api/openapi/vaults/paths/~1v1~1vaults~1operations~1signed/post"},"children":["Import signed operations"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X POST \"${CUSTODY_API_URL}/v1/vaults/operations/signed\" \\\n  -H \"Authorization: Bearer ${JWT_TOKEN}\" \\\n  -F \"files=@signed-cold-vault-operations.dat\"\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After import, ","Ripple Custody"," continues processing the account, transaction, or manifest."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-topics","__idx":10},"children":["Related topics"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/vault-management/cold-vault-setup-ui"},"children":["Process cold vault operations in the UI"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/vault-management/cold-vaults"},"children":["Cold vaults"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/install/cold-bridge-deployment"},"children":["Deploy a cold bridge"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/vault-management/cold-vault-recovery"},"children":["Recover a cold vault"]}]}]}]},"headings":[{"value":"Process cold vault operations with the API","id":"process-cold-vault-operations-with-the-api","depth":1},{"value":"API endpoints","id":"api-endpoints","depth":2},{"value":"Complete the first-time vault handshake","id":"complete-the-first-time-vault-handshake","depth":2},{"value":"Process accounts, transactions, or manifests","id":"process-accounts-transactions-or-manifests","depth":2},{"value":"Step 1: Export pending operations","id":"step-1-export-pending-operations","depth":3},{"value":"Step 2: Decode and verify the payload","id":"step-2-decode-and-verify-the-payload","depth":3},{"value":"Step 3: Upload operations to the cold bridge","id":"step-3-upload-operations-to-the-cold-bridge","depth":3},{"value":"Step 4: Check signing status","id":"step-4-check-signing-status","depth":3},{"value":"Step 5: Download signed operations","id":"step-5-download-signed-operations","depth":3},{"value":"Step 6: Import signed operations","id":"step-6-import-signed-operations","depth":3},{"value":"Related topics","id":"related-topics","depth":2}],"frontmatter":{"seo":{"title":"Process cold vault operations with the API"}},"lastModified":"2026-08-04T20:25:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/custody/identity-and-access/vault-management/cold-vault-setup-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}