{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Webhooks overview","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":"webhooks-overview","__idx":0},"children":["Webhooks overview"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-are-webhooks","__idx":1},"children":["What are webhooks?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wallet-as-a-Service (Palisade) sends automated messages called webhooks to your back-end systems whenever specific events occur on the platform. The system sends the message, or payload, to a unique URL on your server that you designate to receive webhook events."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"why-are-webhooks-beneficial","__idx":2},"children":["Why are webhooks beneficial?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The automated nature of webhooks allows organizations to receive guaranteed, real-time updates about any interactions with their wallets (including creation of new wallets, deposits and withdrawals). This push-based approach eliminates the need for API/UI polling and ensures customers are immediately notified of important updates."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhook-payload-format","__idx":3},"children":["Webhook payload format"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wallet-as-a-Service (Palisade) delivers webhook messages as POST requests containing JSON objects with a base64-encoded payload. For example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"domain\": \"WALLET\",\n    \"timestamp\": \"2025-05-08T14:15:37Z\",\n    \"payload\": \"eyJpZCI6IjAxOTYxNTNiLTY3YmMtN2NkMy1iNTExLTM1NDM3M2QyODEzMCIsICJ2YXVsdElkIjoiMDE5NjE1MmQtNTI5NC03MzlkLTk5NDUtMmE0OTlmOWUzOTg5IiwgIm9yZ2FuaXphdGlvbklkIjoiMjFjODEzMTktNWI4My00NWY5LWI2NDgtNDIwNTUwODRhZjE1IiwgInF1b3J1bUlkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwgImNyZWF0ZWRCeSI6ImE1NWRmOWUwLWUxNGEtNDQxMC1hOTgzLTEyYWZhZTQ2NjYyZiIsICJjcmVhdGVkQXQiOiIyMDI1LTA0LTA4VDExOjQ4OjU2Ljg5OTA4NloiLCAidXBkYXRlZEF0IjoiMjAyNS0wNC0wOFQxMTo0ODo1Ni45MDA0OTBaIiwgIm5hbWUiOiJld3FmZXciLCAiZGVzY3JpcHRpb24iOiIiLCAiYWRkcmVzcyI6IjB4NDY0NDMyMGYzMUQ2OTU4RWQ4NjAzRWI2NjYwNDQ5NTBBYTY5NzAyZSIsICJwdWJsaWNLZXkiOiIwNDgxY2IwMmU4MjFlNTVhMmM2MTk2ZmZkZTM4MGJhM2I0OTgxN2JkYmYwMmYzMTVkYzI4YjU2ZjcwNzkyZDU2ZTZhZGFjOTE3ZTdhZGFmODdmMTBjMDg4NDA4YThjNmEwZTZkMTgwNzkzYzA1MGMzZDBjODc3MWNiOWRkZjgyNThkIiwgImtleXN0b3JlIjoiSFNNIiwgImJsb2NrY2hhaW4iOiJBUkJJVFJVTSIsICJzZXR0aW5ncyI6e30sICJzdGF0dXMiOiJQUk9WSVNJT05FRCJ9\",\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When decoded, the payload contains detailed information about the blockchain event. For example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"0196153b-67bc-7cd3-b511-354373d28130\",\n  \"vaultId\": \"0196152d-5294-739d-9945-2a499f9e3989\",\n  \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n  \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n  \"createdAt\": \"2025-04-08T11:48:56.899086Z\",\n  \"updatedAt\": \"2025-04-08T11:48:56.900490Z\",\n  \"name\": \"My Wallet\",\n  \"address\": \"0x4644320f31D6958Ed8603Eb666044950Aa69702e\",\n  \"publicKey\": \"0481cb02e821e55a2c6196ffde380ba3b49817bdbf02f315dc28b56f70792d56e6adac917e7adaf87f10c088408a8c6a0e6d180793c050c3d0c8771cb9ddf8258d\",\n  \"keystore\": \"HSM\",\n  \"blockchain\": \"ARBITRUM\",\n  \"settings\": {},\n  \"status\": \"PROVISIONED\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The webhook contains a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["signature"]}," header you can use to verify that the payload is authentic. For example: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MEQCIGjBwNKzzfqK9/Rb3Q2OQCyCuUiOOQz7vZwQ9iqInz76AiB/bvRn5iNUAkeVT80/pwhQ2LUajE6Mb2JtGt2mRmJMpg=="]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"retry-behaviour","__idx":4},"children":["Retry Behaviour"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your server must return an HTTP-200 (OK) response to confirm successful receipt of a webhook notification."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your server does not respond, Wallet-as-a-Service (Palisade) automatically retries the request several times based on the following schedule (in seconds): 0, 60, 120, 180, 320, 480, 840, 1500, 2820, 5400."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The system does not retry for client-side errors (HTTP 4xx) except for the following cases:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["429 - Too Many Requests: Indicates rate limits have been exceeded."," ","408 - Request Timeout: Indicates the server took too long to respond."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After 10 failed attempts, the system marks the notification as failed and stops retrying."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"event-ordering","__idx":5},"children":["Event Ordering"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wallet-as-a-Service (Palisade) strives to send notifications in order (per resource), but we cannot guarantee delivery sequence. Design your endpoint to process events independently without relying on their delivery order."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"subscription-domains","__idx":6},"children":["Subscription Domains"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you create a webhook, you subscribe to one or more domains. Each domain sends notifications when the corresponding resource changes state."]},{"$$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":"Domain"},"children":["Domain"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Payload"},"children":["Payload"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TRANSACTION"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Transaction status changes (transfers, deposits, withdrawals)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/transactions/transactionsservice_gettransaction#transactions/transactionsservice_gettransaction/response&c=200/body"},"children":["Transaction object"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["WALLET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet status changes (creation, provisioning)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/wallets/vaultservice_getwallet#wallets/vaultservice_getwallet/response&c=200/body"},"children":["Wallet object"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["APPROVAL"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approval request updates"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/approvals/approvalservice_getapprovalsummary#approvals/approvalservice_getapprovalsummary/t=response&c=200&path=approval"},"children":["Approval object"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"transaction-domain","__idx":7},"children":["Transaction Domain"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You receive a webhook notification whenever a transaction transitions to a new status. The payload contains the full transaction object with its current state."]},{"$$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":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Terminal?"},"children":["Terminal?"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REQUESTED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Transaction created"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POLICY_CHECK_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Validating against policies"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POLICY_CHECK_PASSED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Policy checks passed"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVAL_CHECK_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Waiting for approvals"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVAL_CHECK_PASSED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approvals complete"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COMPILATION_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Preparing for blockchain"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COMPILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ready for signing"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGNATURE_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Waiting for signature"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGNED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Signed successfully"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUBLISH_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Submitting to network"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUBLISHED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Submitted to blockchain"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CONFIRMATION_PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Awaiting block confirmation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CONFIRMED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Confirmed on blockchain"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Rejected by policy or approval"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Technical failure"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more details on transaction status flow, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/user-interface/transactions/overview"},"children":["Transactions overview"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"transaction-payload-example","__idx":8},"children":["Transaction Payload Example"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"domain\": \"TRANSACTION\",\n  \"timestamp\": \"2025-05-08T14:30:00Z\",\n  \"payload\": \"base64-encoded-transaction-object\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When decoded, the payload contains the transaction object. Key fields include:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"019c94f1-cc8c-79b4-9c0f-bc7edaabc267\",\n  \"vaultId\": \"0196152d-5294-739d-9945-2a499f9e3989\",\n  \"walletId\": \"0196153b-67bc-7cd3-b511-354373d28130\",\n  \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n  \"status\": \"CONFIRMED\",\n  \"blockchain\": \"ETHEREUM\",\n  \"hash\": \"0x8a4c5e9f2b1d7c3a6e8f0b2d4c6a8e0f2b4d6c8a0e2f4b6d8c0a2e4f6b8d0c2e\",\n  \"destination\": {\n    \"address\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f2E8Ba\"\n  },\n  \"asset\": {\n    \"symbol\": \"ETH\"\n  },\n  \"qty\": \"1.500000000000000000\",\n  \"createdAt\": \"2025-05-08T14:25:00Z\",\n  \"updatedAt\": \"2025-05-08T14:30:00Z\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the complete transaction schema, see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/transactions/transactionsservice_gettransaction#transactions/transactionsservice_gettransaction/response&c=200/body"},"children":["Transaction API reference"]},"."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Inbound transactions and compliance"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For inbound transactions, the payload may include a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["freezeInfo"]}," field indicating whether funds are frozen for compliance review. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/changelogs/transaction-freeze-and-compliance-controls"},"children":["Transaction Freeze and Compliance Controls"]}," for details."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"wallet-domain","__idx":9},"children":["Wallet Domain"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You receive a webhook notification whenever a wallet transitions to a new status."]},{"$$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":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Terminal?"},"children":["Terminal?"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet record created"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROVISIONING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet being set up"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROVISIONED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet ready for use"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROVISIONING_FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Setup failed"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the complete wallet schema, see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/wallets/vaultservice_getwallet#wallets/vaultservice_getwallet/response&c=200/body"},"children":["Wallet API reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"approval-domain","__idx":10},"children":["Approval Domain"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You receive a webhook notification whenever an approval request is created or updated. This includes approvals for transactions, policy changes, and user management actions."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"approval-set-status","__idx":11},"children":["Approval Set Status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The overall approval request status:"]},{"$$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":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Terminal?"},"children":["Terminal?"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Waiting for approvers to respond"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Required approvals received"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NOT_MET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approval rejected"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EXPIRED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Timed out before requirements met"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Technical failure during processing"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["✅ Yes"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"individual-approval-status","__idx":12},"children":["Individual Approval Status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each approver's response within an approval set:"]},{"$$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":"Status"},"children":["Status"]},{"$$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":["PROCESSING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approver is reviewing the request"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approver approved the request"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approver rejected the request"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the complete approval schema, see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ripple.com/products/wallet/api-docs/palisade-api/palisade-api/approvals/approvalservice_getapprovalsummary#approvals/approvalservice_getapprovalsummary/t=response&c=200&path=approval"},"children":["Approval API reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":13},"children":["Best Practices"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"idempotent-processing","__idx":14},"children":["Idempotent Processing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Design your webhook handler to be idempotent. Use the resource ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updatedAt"]}," timestamp to detect and safely handle duplicate deliveries."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"quick-acknowledgment","__idx":15},"children":["Quick Acknowledgment"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We recommend returning a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 OK"]}," response within 5 seconds. Perform any heavy processing asynchronously after acknowledging receipt to avoid timeouts."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"signature-verification","__idx":16},"children":["Signature Verification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always verify the webhook signature before processing to ensure the payload is authentic. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/user-interface/integrations/manage-webhooks"},"children":["Manage webhooks"]}," for verification details."]}]},"headings":[{"value":"Webhooks overview","id":"webhooks-overview","depth":1},{"value":"What are webhooks?","id":"what-are-webhooks","depth":2},{"value":"Why are webhooks beneficial?","id":"why-are-webhooks-beneficial","depth":2},{"value":"Webhook payload format","id":"webhook-payload-format","depth":2},{"value":"Retry Behaviour","id":"retry-behaviour","depth":2},{"value":"Event Ordering","id":"event-ordering","depth":2},{"value":"Subscription Domains","id":"subscription-domains","depth":2},{"value":"Transaction Domain","id":"transaction-domain","depth":3},{"value":"Transaction Payload Example","id":"transaction-payload-example","depth":4},{"value":"Wallet Domain","id":"wallet-domain","depth":3},{"value":"Approval Domain","id":"approval-domain","depth":3},{"value":"Approval Set Status","id":"approval-set-status","depth":4},{"value":"Individual Approval Status","id":"individual-approval-status","depth":4},{"value":"Best Practices","id":"best-practices","depth":2},{"value":"Idempotent Processing","id":"idempotent-processing","depth":3},{"value":"Quick Acknowledgment","id":"quick-acknowledgment","depth":3},{"value":"Signature Verification","id":"signature-verification","depth":3}],"frontmatter":{"title":"Webhooks overview","seo":{"title":"Webhooks overview"}},"lastModified":"2026-02-27T16:34:32.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/user-interface/integrations/overview","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}