{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Manage webhooks via 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":"manage-webhooks-via-the-api","__idx":0},"children":["Manage webhooks via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the Ripple Custody (Wallet) API to create, list, inspect, and delete webhooks and their subscriptions. A webhook defines the HTTPS endpoint that receives event data. Each subscription attaches a domain — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSACTION"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WALLET"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVAL"]}," — to that webhook. For signature verification, retry behavior, and endpoint requirements, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/receive-webhook-deliveries"},"children":["Receive webhook deliveries"]},". For payload formats, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/webhook-event-reference"},"children":["Webhook event reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhook-actions","__idx":1},"children":["Webhook actions"]},{"$$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":"Action"},"children":["Action"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Console role"},"children":["Console role"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Console procedure"},"children":["Console procedure"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API procedure"},"children":["API procedure"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create a webhook"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#create-a-webhook-via-the-console"},"children":["Create a webhook"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#create-a-webhook-via-the-api"},"children":["Create a webhook"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Add subscriptions to a webhook"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#add-subscriptions-via-the-api"},"children":["Add subscriptions"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List webhooks"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator, Auditor"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#view-webhooks-via-the-console"},"children":["View webhooks"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#list-webhooks-via-the-api"},"children":["List webhooks"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["View a webhook"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator, Auditor"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#view-webhooks-via-the-console"},"children":["View webhooks"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#get-a-webhook-via-the-api"},"children":["Get a webhook"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List subscriptions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator, Auditor"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#view-webhooks-via-the-console"},"children":["View webhooks"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#list-subscriptions-via-the-api"},"children":["List subscriptions"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete a subscription"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#delete-a-subscription-via-the-api"},"children":["Delete a subscription"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete a webhook"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#delete-a-webhook-via-the-console"},"children":["Delete a webhook"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#delete-a-webhook-via-the-api"},"children":["Delete a webhook"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Permissions:"]}," In the console, owners and administrators can create, update, and delete webhooks, and owners, administrators, and auditors can view them. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/organization-and-access/users-and-roles#webhooks"},"children":["User roles and permissions"]},". The API procedures need an API credential of type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONITORING"]},". See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#prerequisites"},"children":["Prerequisites"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An API credential of type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONITORING"]},"."]}," It grants access to webhooks and webhook subscriptions. API responses return this type's category as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AUDIT"]},". Grant the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhook"]}," permission with the actions you need — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["read"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delete"]}," — at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["org"]}," scope. Create credentials in the console — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/organization-and-access/api-credentials/manage-api-credentials"},"children":["Manage API credentials"]}," and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/organization-and-access/api-credentials#credential-types"},"children":["Credential types"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An access token."]}," Exchange your credential's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clientId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clientSecret"]}," for an access token — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/get-started/use-the-api#step-2-authenticate"},"children":["Authenticate"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An HTTPS endpoint"]}," on your server that returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," response, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 OK"]},", for each delivery. Ripple Custody (Wallet) rejects webhook endpoints that don't use HTTPS. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/receive-webhook-deliveries#endpoint-requirements"},"children":["Endpoint requirements"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the base URLs, token lifetime, pagination, filtering, and error format that every endpoint shares, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-and-developer-experience/api-conventions"},"children":["API conventions"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-webhook-via-the-api","__idx":3},"children":["Create a webhook via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_createwebhook"},"children":["Create webhooks"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/webhooks"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endpoint"]}," are required; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}," is optional. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," must be unique in your organization: a second webhook with the same name returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409"]}," with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAL015.001"]},". Several webhooks can share an endpoint. An endpoint that doesn't use HTTPS returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAL000.020"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X POST \"https://api.sandbox.palisade.co/v2/webhooks\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Transaction monitor\",\n    \"description\": \"Notifies the ledger service of transaction status changes\",\n    \"endpoint\": \"https://hooks.example.com/wallet-events\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response is the new webhook. Store its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},", and store ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["publicKey"]}," to verify the signature on each delivery (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/receive-webhook-deliveries#verify-the-signature"},"children":["Verify the signature"]},"):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"ce4918bf-a199-4ce2-85a3-d0d296855384\",\n  \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n  \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n  \"createdAt\": \"2026-07-23T10:22:22.420Z\",\n  \"updatedBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n  \"updatedAt\": \"2026-07-23T10:22:22.420Z\",\n  \"name\": \"Transaction monitor\",\n  \"description\": \"Notifies the ledger service of transaction status changes\",\n  \"endpoint\": \"https://hooks.example.com/wallet-events\",\n  \"subscriptionCount\": 0,\n  \"publicKey\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpHiEkdd/ba5dU4sNCgsWrMOE6fLakHywl0OgF5aVfxkiqNh22oybRAREev7jvnwH4jqitHx79KGi6CMwiJjmaw==\",\n  \"lastSuccess\": null,\n  \"lastFailure\": null,\n  \"successCount\": 0,\n  \"failureCount\": 0\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A new webhook has no subscriptions, so it receives no events until you add one."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"add-subscriptions-via-the-api","__idx":4},"children":["Add subscriptions via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_createsubscriptions"},"children":["Create webhook subscriptions"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/webhooks/{webhookId}/subscriptions"]}," with a JSON array of subscription configurations, even if you add only one. Each entry needs a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["domain"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSACTION"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WALLET"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVAL"]},") and a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scope"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ORG"]},", the only supported scope). A webhook can have one subscription for each domain: adding a domain it already has returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409"]}," with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAL015.010"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X POST \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384/subscriptions\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '[\n    { \"domain\": \"TRANSACTION\", \"scope\": \"ORG\" },\n    { \"domain\": \"WALLET\", \"scope\": \"ORG\" }\n  ]'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response is an array of all the webhook's subscriptions, including any it had before the request:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n  {\n    \"id\": \"7b2f4c1e-9a3d-4e8b-b6c5-1d2e3f4a5b6c\",\n    \"webhookId\": \"ce4918bf-a199-4ce2-85a3-d0d296855384\",\n    \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n    \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n    \"createdAt\": \"2026-07-23T10:23:05.110Z\",\n    \"updatedBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n    \"updatedAt\": \"2026-07-23T10:23:05.110Z\",\n    \"config\": { \"domain\": \"TRANSACTION\", \"scope\": \"ORG\" }\n  },\n  {\n    \"id\": \"8c3a5d2f-0b4e-4f9c-a7d6-2e3f4a5b6c7d\",\n    \"webhookId\": \"ce4918bf-a199-4ce2-85a3-d0d296855384\",\n    \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n    \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n    \"createdAt\": \"2026-07-23T10:23:05.110Z\",\n    \"updatedBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n    \"updatedAt\": \"2026-07-23T10:23:05.110Z\",\n    \"config\": { \"domain\": \"WALLET\", \"scope\": \"ORG\" }\n  }\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"list-webhooks-via-the-api","__idx":5},"children":["List webhooks via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_listwebhooks"},"children":["List webhooks"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_listwebhooks2"},"children":["List webhooks with a request body"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/webhooks"]}," to retrieve your organization's webhooks. You can:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Search"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["search"]}," runs a case-insensitive search over webhook ID, name, description, and endpoint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Filter"]}," — use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.<field>.<operator>"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endpoint"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createdAt"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updatedAt"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastSuccess"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastFailure"]},". For example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.lastFailure.relativeDays=-1"]}," finds webhooks with a failed delivery in the last day."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sort"]}," — set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.orderBy"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endpoint"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created_at"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updated_at"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["last_success"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["last_failure"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.order"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SORT_ORDER_ASC"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SORT_ORDER_DESC"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Page"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.pageSize"]}," sets the page size. To get the next page, pass the previous response's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.nextPageToken"]}," as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.pageToken"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For complex filters, send ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["search"]}," as a JSON body to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/webhooks:list"]}," instead."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X GET \"https://api.sandbox.palisade.co/v2/webhooks?search=transaction&pagination.pageSize=10\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response contains a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks"]}," array and a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter"]}," object with pagination metadata:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"filter\": { \"total\": 1 },\n  \"webhooks\": [\n    {\n      \"id\": \"ce4918bf-a199-4ce2-85a3-d0d296855384\",\n      \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n      \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n      \"createdAt\": \"2026-07-23T10:22:22.420Z\",\n      \"updatedBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n      \"updatedAt\": \"2026-07-23T10:22:22.420Z\",\n      \"name\": \"Transaction monitor\",\n      \"description\": \"Notifies the ledger service of transaction status changes\",\n      \"endpoint\": \"https://hooks.example.com/wallet-events\",\n      \"subscriptionCount\": 2,\n      \"publicKey\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpHiEkdd/ba5dU4sNCgsWrMOE6fLakHywl0OgF5aVfxkiqNh22oybRAREev7jvnwH4jqitHx79KGi6CMwiJjmaw==\",\n      \"lastSuccess\": \"2026-07-24T08:15:02.391Z\",\n      \"lastFailure\": null,\n      \"successCount\": 42,\n      \"failureCount\": 0\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"get-a-webhook-via-the-api","__idx":6},"children":["Get a webhook via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_getwebhook"},"children":["Get webhooks"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/webhooks/{id}"]}," to inspect a single webhook, including its delivery health:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["successCount"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failureCount"]}," — the number of successful and failed deliveries in the last hour."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastSuccess"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastFailure"]}," — the times of the most recent successful and failed deliveries. Each is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," until a delivery of that kind occurs."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["publicKey"]}," — the public key that verifies the signature on each delivery."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X GET \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response is a single webhook object with the same fields as an entry in the list response."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"list-subscriptions-via-the-api","__idx":7},"children":["List subscriptions via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_listsubscriptions"},"children":["List subscriptions"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_listsubscriptions2"},"children":["List subscriptions with a request body"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/webhooks/{webhookId}/subscriptions"]}," to see what a webhook is subscribed to. Filter by domain with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.domain"]}," (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.domain=TRANSACTION"]},") or by scope with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter.scope"]},". You can also filter on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhookId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createdAt"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updatedAt"]},", sort by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["domain"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scope"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created_at"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updated_at"]},", and page with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.pageSize"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pagination.pageToken"]},". For complex filters, use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/webhooks/{webhookId}/subscriptions:list"]}," with a JSON body."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X GET \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384/subscriptions?filter.domain=TRANSACTION\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"filter\": { \"total\": 1 },\n  \"subscriptions\": [\n    {\n      \"id\": \"7b2f4c1e-9a3d-4e8b-b6c5-1d2e3f4a5b6c\",\n      \"webhookId\": \"ce4918bf-a199-4ce2-85a3-d0d296855384\",\n      \"organizationId\": \"21c81319-5b83-45f9-b648-42055084af15\",\n      \"createdBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n      \"createdAt\": \"2026-07-23T10:23:05.110Z\",\n      \"updatedBy\": \"a55df9e0-e14a-4410-a983-12afae46662f\",\n      \"updatedAt\": \"2026-07-23T10:23:05.110Z\",\n      \"config\": { \"domain\": \"TRANSACTION\", \"scope\": \"ORG\" }\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"get-a-subscription-via-the-api","__idx":8},"children":["Get a subscription via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_getsubscription"},"children":["Get subscriptions"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/webhooks/{webhookId}/subscriptions/{subscriptionId}"]}," to inspect a single subscription. The response is a single subscription object with the same fields as an entry in the list response."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X GET \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384/subscriptions/7b2f4c1e-9a3d-4e8b-b6c5-1d2e3f4a5b6c\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"delete-a-subscription-via-the-api","__idx":9},"children":["Delete a subscription via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_deletesubscription"},"children":["Delete subscriptions"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE /v2/webhooks/{webhookId}/subscriptions/{subscriptionId}"]}," to stop the webhook from receiving events for that subscription's domain. A successful response returns an empty JSON object."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X DELETE \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384/subscriptions/7b2f4c1e-9a3d-4e8b-b6c5-1d2e3f4a5b6c\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"delete-a-webhook-via-the-api","__idx":10},"children":["Delete a webhook via the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API reference:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api/webhooks/webhookservice_deletewebhook"},"children":["Delete webhooks"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE /v2/webhooks/{id}"]}," to remove a webhook. A successful response returns an empty JSON object."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Deletion is permanent"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Deleting a webhook stops all deliveries to its endpoint. To resume deliveries, create a new webhook and add its subscriptions again. The new webhook has a new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["publicKey"]},", so update your signature verification."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X DELETE \"https://api.sandbox.palisade.co/v2/webhooks/ce4918bf-a199-4ce2-85a3-d0d296855384\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Updating a webhook"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Neither the API nor the console can update a webhook's name, description, or endpoint. The API has no update operation: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/webhooks/{id}"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["501"]}," with the message ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Method Not Allowed"]},". To change them, delete the webhook and create a new one. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks#update-a-webhook"},"children":["Update a webhook"]},". To change which events a webhook receives, add or delete subscriptions."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-topics","__idx":11},"children":["Related topics"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks"},"children":["Manage webhooks via the console"]}," — Create, view, and delete webhooks in the console"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/receive-webhook-deliveries"},"children":["Receive webhook deliveries"]}," — Verify signatures, handle retries, and process events safely"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks/webhook-event-reference"},"children":["Webhook event reference"]}," — The envelope and the payload for each domain"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/integrations-and-monitoring/webhooks"},"children":["Webhooks"]}," — What webhooks are, how delivery works, and subscription domains"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api"},"children":["Ripple Custody (Wallet) API reference"]}," — Full request and response schemas"]}]}]},"headings":[{"value":"Manage webhooks via the API","id":"manage-webhooks-via-the-api","depth":1},{"value":"Webhook actions","id":"webhook-actions","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Create a webhook via the API","id":"create-a-webhook-via-the-api","depth":2},{"value":"Add subscriptions via the API","id":"add-subscriptions-via-the-api","depth":2},{"value":"List webhooks via the API","id":"list-webhooks-via-the-api","depth":2},{"value":"Get a webhook via the API","id":"get-a-webhook-via-the-api","depth":2},{"value":"List subscriptions via the API","id":"list-subscriptions-via-the-api","depth":2},{"value":"Get a subscription via the API","id":"get-a-subscription-via-the-api","depth":2},{"value":"Delete a subscription via the API","id":"delete-a-subscription-via-the-api","depth":2},{"value":"Delete a webhook via the API","id":"delete-a-webhook-via-the-api","depth":2},{"value":"Related topics","id":"related-topics","depth":2}],"frontmatter":{"title":"Manage webhooks via the API","seo":{"title":"Manage webhooks via the API"}},"lastModified":"2026-10-09T11:58:31.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/integrations-and-monitoring/webhooks/manage-webhooks-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}