{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"External ID support to simplify transaction tracking","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com/products/custody","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":"external-id-support-to-simplify-transaction-tracking","__idx":0},"children":["External ID support to simplify transaction tracking"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Beta"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This feature is in BETA. Please reach out if you would like to use it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"why","__idx":1},"children":["Why"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wallet-as-a-Service (Palisade) Transfers API makes it easy to specify an intent to move an asset and have the platform translate and securely execute a transaction in order to fulfil that intent. This API reduces errors and risks related to executing raw transactions by abstracting the underlying blockchain transaction away."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["However, every call to the Transfers API creates a new intent. There is no way for the platform to differentiate between an existing request and a new request as there is no relatability between the two."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The final product of a Transfer call is a Transaction that is registered on Wallet-as-a-Service (Palisade) and is executed in accordance with controls and execution instructions. While every transaction is uniquely identifiable with a transaction ID, it is up to the caller to map it to their internal ID for tracking purposes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Similarly, when creating vaults and wallets through their respective APIs, customers need to manually map the system-generated IDs to their internal systems for tracking and reconciliation purposes, creating unnecessary overhead and potential for errors."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"feature","__idx":2},"children":["Feature"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Today, we are releasing support for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," across Transfers, Vaults and Wallets."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"transfers","__idx":3},"children":["Transfers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is an optional field and may be used in the Create Transfer request body as follows (see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api"},"children":["Wallet-as-a-Service (Palisade) API"]}," for details):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"destinationAddress\": \"rMhieePimPBNQZByxQxX1HXY6VyxEep2JE\",\n    \"qty\": \"0.000003\",\n    \"symbol\": \"XRP\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This will result in a response similar to the following (containing the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"0195b3dd-5b95-7d89-8528-f22af192af39\",\n    ...\n    \"status\": \"REQUESTED\",\n    \"action\": \"PALISADE_TRANSFER\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\",\n    ...\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," in the response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subsequent calls to the Create Transfer API using the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," value will return the same Transaction object."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"vaults","__idx":4},"children":["Vaults"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is an optional field and may be used in the Create Vault request body as follows (see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api"},"children":["Wallet-as-a-Service (Palisade) API"]}," for details):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"name\": \"Treasury\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This will result in a response similar to the following (containing the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"0195b3dd-5b95-7d89-8528-f22af192af39\",\n    ...\n    \"name\": \"Treasury\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\",\n    ...\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," in the response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subsequent calls to the Create Vault API using the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," value will return the same Vault object."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"wallets","__idx":5},"children":["Wallets"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is an optional field and may be used in the Create Wallet request body as follows (see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api"},"children":["Wallet-as-a-Service (Palisade) API"]}," for details):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"name\": \"USD Issuance\",\n    \"blockchain\": \"AVALANCHE\",\n    \"keystore\": \"HSM\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This will result in a response similar to the following (containing the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"0195b3dd-5b95-7d89-8528-f22af192af39\",\n    ...\n    \"name\": \"USD Issuance\",\n    \"blockchain\": \"AVALANCHE\",\n    \"keystore\": \"HSM\",\n    \"externalId\": \"95a770cd-8766-4dd5-938c-3c10ead1c4b1\",\n    ...\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," in the response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subsequent calls to the Create Wallet API using the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," value will return the same Wallet object."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"properties-of-externalid-field","__idx":6},"children":["Properties of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field is optional and nullable. Empty string value is treated as a null value."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," field if specified must be minimum of 1 character and a maximum of 64 characters in length."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," must be unique org-wide. This means that two wallets cannot have transactions containing the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The API will create a new object for every request that has ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," set to null."]}]}]},"headings":[{"value":"External ID support to simplify transaction tracking","id":"external-id-support-to-simplify-transaction-tracking","depth":1},{"value":"Why","id":"why","depth":2},{"value":"Feature","id":"feature","depth":2},{"value":"Transfers","id":"transfers","depth":3},{"value":"Vaults","id":"vaults","depth":3},{"value":"Wallets","id":"wallets","depth":3},{"value":"Properties of externalId field","id":"properties-of-externalid-field","depth":2}],"frontmatter":{"title":"External ID support to simplify transaction tracking","seo":{"title":"External ID support to simplify transaction tracking"}},"lastModified":"2026-01-29T15:53:00.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/changelogs/external-id-support","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}