{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","tabs","tab","code-snippet"]},"type":"markdown"},"seo":{"title":"User webhooks","description":"Welcome to the Upvest API documentation. Here you will find all the information you need to integrate with our API.","siteUrl":"https://docs.upvest.co/","image":"/assets/upvest-logo-card.ee25ccc59849324b0b73151a5c972c87639419556344db0b6dcf518151cb4c3c.925ff8b2.png","keywords":"documentation, api","lang":"en-US","meta":[{"name":"description","content":"Welcome to the Upvest API documentation. Here you will find all the information you need to integrate with our API."},{"name":"image","content":"/assets/upvest-logo-card.ee25ccc59849324b0b73151a5c972c87639419556344db0b6dcf518151cb4c3c.925ff8b2.png"},{"name":"twitter:card","content":"summary_large_image"},{"name":"twitter:title","content":"Welcome to the Upvest API Documentation"},{"name":"twitter:image","content":"/assets/upvest-logo-card.ee25ccc59849324b0b73151a5c972c87639419556344db0b6dcf518151cb4c3c.925ff8b2.png"},{"name":"twitter:description","content":"Welcome to the Upvest API documentation. Here you will find all the information you need to integrate with our API."},{"name":"og:url","content":"https://docs.upvest.co/"},{"name":"og:title","content":"Welcome to the Upvest API Documentation"},{"name":"og:description","content":"Welcome to the Upvest API documentation. Here you will find all the information you need to integrate with our API."},{"name":"og:image","content":"/assets/upvest-logo-card.ee25ccc59849324b0b73151a5c972c87639419556344db0b6dcf518151cb4c3c.925ff8b2.png"}]},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"user-webhooks","__idx":0},"children":["User webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks are a mechanism for your software to automatically receive information about user lifecycle events, roles, and onboarding progress. By leveraging webhooks, you remove the need to poll the API for user status changes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For general information about webhooks, refer to the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/byol/getting_started/implementing_webhooks"},"children":["Implementing webhooks"]}," guide."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Clients can subscribe to webhooks to track user onboarding, KYC verification, roles, data changes, and offboarding events across their entire user base."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When users are created, verified, modified, or offboarded, the following events are sent via webhook:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"user-events","__idx":1},"children":["User events"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Users transition through states as they are onboarded and managed. The following events reflect these state changes:"]},{"$$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":"Event Type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event Type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When Triggered"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["When Triggered"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.CREATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user has been created."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Immediately after user creation via API."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.ACTIVATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user has been activated and is ready to use the platform."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["After all onboarding steps complete (KYC/checks pass)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.DEACTIVATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user has been deactivated (account suspended or disabled)."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When user is deactivated manually or by system."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.DATA_CHANGED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user's data has been successfully changed (e.g., name, address)."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When a data change request completes."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.DATA_CHANGE_FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user's data change request has been rejected."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When a data change request fails validation."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.OFFBOARDING_INITIATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user's offboarding process has started."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When offboarding request is submitted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.OFFBOARDED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user has been fully offboarded and account is closed."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When offboarding process completes."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"user-webhook-example","__idx":2},"children":["User webhook example"]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.CREATED","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"file":"/_partials/schemas/users/byol/webhook_event_users.v1.example.json","language":"json","header":{"controls":{"copy":{}}},"lang":"json","source":"{\n  \"id\": \"2df83681-6a42-4837-a554-a8197335bcfa\",\n  \"created_at\": \"2021-11-19T13:06:51.980159529Z\",\n  \"type\": \"USER.CREATED\",\n  \"object\": {\n      \"created_at\": \"2021-11-22T09:04:42Z\",\n      \"updated_at\": \"2021-11-22T09:04:42Z\",\n      \"first_name\": \"Jane\",\n      \"last_name\": \"Doe\",\n      \"email\": \"jane.doe@example.com\",\n      \"salutation\": \"SALUTATION_FEMALE\",\n      \"title\": \"PROF\",\n      \"birth_date\": \"1990-01-01\",\n      \"birth_city\": \"Berlin\",\n      \"birth_country\": \"DE\",\n      \"birth_name\": \"Smith\",\n      \"nationalities\": [\n        \"DE\",\n        \"CH\"\n    ],\n      \"address\": {\n          \"address_line1\": \"Torstrasse\",\n          \"address_line2\": \"12a\",\n          \"city\": \"Berlin\",\n          \"country\": \"DE\",\n          \"postcode\": \"10115\",\n          \"state\": \"BE\"\n      },\n      \"id\": \"a1752f00-93d5-4b77-a148-959cd315581b\",\n      \"postal_address\": {\n          \"address_line1\": \"Thorstrasse\",\n          \"address_line2\": \"123\",\n          \"city\": \"Berlin\",\n          \"country\": \"DE\",\n          \"postcode\": \"10115\",\n          \"state\": \"BE\"\n      },\n      \"status\": \"ACTIVE\",\n      \"branch_id\": \"e6373bfa-ff12-4004-8de9-747ac96764da\",\n      \"tags\": [\n        \"CLIENT_EMPLOYEE\"\n      ]\n  },\n  \"webhook_id\": \"1b097e06-8a14-4181-b72a-de0972a3c57b\"\n}"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.ACTIVATED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User activation complete. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field in the user object will be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTIVE"]},". All onboarding requirements (KYC verification, checks) have passed."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.DEACTIVATED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User has been deactivated. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field in the user object will be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INACTIVE"]},". The user cannot access the platform until reactivated."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.OFFBOARDING_INITIATED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User offboarding has been initiated. Outstanding obligations (such as account closure) are being processed."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.OFFBOARDED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User offboarding is complete. The user account is closed and the user object will reflect ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OFFBOARDED"]},"."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"user-data-change-webhook-example","__idx":3},"children":["User data change webhook example"]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.DATA_CHANGED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User data change request succeeded. The user object reflects the updated information (e.g., name, address, nationality changed)."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER.DATA_CHANGE_FAILED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User data change request failed. Check the failure reason in the webhook object for validation details."]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"role-events","__idx":4},"children":["Role events"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your operating model uses role-based onboarding flows, such as business representatives or child account guardians, roles transition through states as they are created and activated for account groups and businesses. The following events reflect those state changes:"]},{"$$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":"Event Type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event Type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When Triggered"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["When Triggered"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ROLE.CREATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A role has been created and is pending activation."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Immediately after role creation."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ROLE.ACTIVATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A role has been activated and is now in effect."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When all role requirements are fulfilled and the role becomes active."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ROLE.DEACTIVATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A role has been deactivated."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the role is disabled or no longer applies."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"role-webhook-example","__idx":5},"children":["Role webhook example"]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"ROLE.CREATED","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"file":"/_partials/schemas/roles/account_group/webhook_event_roles.v1.example.json","language":"json","header":{"controls":{"copy":{}}},"lang":"json","source":"{\n  \"id\": \"2df83681-6a42-4837-a554-a8197335bcfa\",\n  \"created_at\": \"2021-11-22T09:04:42Z\",\n  \"type\": \"ROLE.CREATED\",\n  \"object\": {\n    \"id\": \"baf05386-0459-4e8c-9ac9-cd6442f194dd\",\n    \"created_at\": \"2025-04-01T10:11:40Z\",\n    \"updated_at\": \"2025-04-01T10:11:40Z\",\n    \"user_id\": \"9c36af78-91a0-4174-a515-fc81214e3dab\",\n    \"entity_type\": \"ACCOUNT_GROUP\",\n    \"entity_id\": \"413715f2-5401-4b97-8055-034a6b879f8c\",\n    \"role_type\": \"GUARDIAN\",\n    \"custody_type\": \"JOINT_CUSTODY\",\n    \"status\": \"PENDING\"\n  },\n  \"webhook_id\": \"1b097e06-8a14-4181-b72a-de0972a3c57b\"\n}"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"ROLE.ACTIVATED","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"file":"/_partials/schemas/roles/business/webhook_event_roles.v1.example.json","language":"json","header":{"controls":{"copy":{}}},"lang":"json","source":"{\n  \"id\": \"2df83681-6a42-4837-a554-a8197335bcfa\",\n  \"created_at\": \"2021-11-22T09:04:42Z\",\n  \"type\": \"ROLE.ACTIVATED\",\n  \"object\": {\n    \"id\": \"e8b5a51d-8baf-4d0b-8a3b-8f8f8f8f8f8f\",\n    \"created_at\": \"2025-04-01T10:11:40Z\",\n    \"updated_at\": \"2025-04-01T10:11:40Z\",\n    \"user_id\": \"0d10c51f-33f2-4399-b8ab-92ec84e6b2f0\",\n    \"entity_type\": \"BUSINESS\",\n    \"entity_id\": \"6deb17c8-950e-4377-b500-5522af5ef712\",\n    \"role_type\": \"LEGAL_REPRESENTATIVE\",\n    \"status\": \"ACTIVE\"\n  },\n  \"webhook_id\": \"1b097e06-8a14-4181-b72a-de0972a3c57b\"\n}"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"ROLE.DEACTIVATED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Role deactivation means the role is no longer effective. For example, a guardian role can be deactivated when the underlying eligibility conditions no longer apply."]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"user-check-events","__idx":6},"children":["User check events"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["User checks (KYC verification, compliance checks) transition through states as they are processed. Each check generates events:"]},{"$$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":"Event Type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event Type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When Triggered"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["When Triggered"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER_CHECK.CREATED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user check (KYC, compliance, etc.) has been created and is pending processing."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Immediately after check submission."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER_CHECK.PASSED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user check has passed and the user meets the requirement."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When check verification completes successfully."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER_CHECK.FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A user check has failed and requirements are not met."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When check fails verification."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"user-check-webhook-example","__idx":7},"children":["User check webhook example"]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER_CHECK.CREATED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Check has been created and is pending. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field in the check object will be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATED"]},"."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER_CHECK.PASSED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following example shows a TOL webhook payload for a passed user check."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"file":"/_partials/schemas/users/tol/checks/event_user_checks.v1.example.json","language":"json","header":{"controls":{"copy":{}}},"lang":"json","source":"{\n  \"id\": \"38fc59d0-fc42-46ef-9512-824773219b2e\",\n  \"created_at\": \"2021-11-19T13:06:57.820371265Z\",\n  \"type\": \"USER_CHECK.PASSED\",\n  \"object\": {\n      \"check_confirmed_at\": \"2021-08-02T15:04:05Z\",\n      \"data_download_link\": \"https://storage.cloud.google.com/upvest-mock-documents/Test_KYC_documents.zip\",\n      \"document_expiration_date\": \"2028-01-02\",\n      \"document_type\": \"PASSPORT\",\n      \"id\": \"32cbb9a2-dd3b-4e60-a5af-9b41460049dc\",\n      \"user_id\": \"7b39529a-e68c-4688-8242-7549d10d6084\",\n      \"method\": \"VIDEO_ID\",\n      \"nationality\": \"RU\",\n      \"provider\": \"IDNOW\",\n      \"status\": \"PASSED\",\n      \"type\": \"KYC\"\n  },\n  \"webhook_id\": \"1b097e06-8a14-4181-b72a-de0972a3c57b\"\n}"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"USER_CHECK.FAILED","disable":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Check verification failed. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field in the check object will be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED"]},". Reasons for failure are provided in the check object details."]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"recommended-workflow","__idx":8},"children":["Recommended workflow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To implement user onboarding and role lifecycle tracking with webhooks:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Subscribe to user events"]}," — Listen for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.*"]}," events to track user creation and activation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Subscribe to check events where applicable"]}," — Listen for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER_CHECK.*"]}," events to monitor KYC and compliance verification when checks are submitted through the API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Subscribe to role events"]}," — Listen for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ROLE.*"]}," events to track role creation, activation, and deactivation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Track user state in your system"]}," — Update your database when webhooks arrive."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Track activation"]}," — Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.ACTIVATED"]}," to confirm that the user has become active after the required onboarding flow completes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Monitor data changes"]}," — Listen for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.DATA_CHANGED"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER.DATA_CHANGE_FAILED"]}," events when users update their information."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Handle offboarding"]}," — When user offboarding initiates, prepare to close related accounts and resources."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Set up error handling"]}," — Implement retry logic for webhook delivery failures."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/byol/getting_started/implementing_webhooks"},"children":["implementing webhooks"]}," for setup instructions."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]}]},"headings":[{"value":"User webhooks","id":"user-webhooks","depth":1},{"value":"User events","id":"user-events","depth":2},{"value":"User webhook example","id":"user-webhook-example","depth":3},{"value":"User data change webhook example","id":"user-data-change-webhook-example","depth":3},{"value":"Role events","id":"role-events","depth":2},{"value":"Role webhook example","id":"role-webhook-example","depth":3},{"value":"User check events","id":"user-check-events","depth":2},{"value":"User check webhook example","id":"user-check-webhook-example","depth":3},{"value":"Recommended workflow","id":"recommended-workflow","depth":2}],"frontmatter":{"operating_model":"byol","seo":{"title":"User webhooks"}},"lastModified":"2026-07-16T03:58:27.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/byol/guides/users/users_webhooks","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}